#210 - Kĩ năng giải quyết vấn đề
Trong số này, chúng ta cùng tìm hiểu về:
Trí tuệ cảm xúc và hướng dẫn cho kỹ sư phần mềm;
Quá trình hợp nhất các key-value storage tại Pinterest;
Góc lập trình và bài toán Sliding Window Maximum;
Xem lại Grokking Techtalk #44 qua Youtube;
Cách quản lý các model ML tại Intuit;
Những bài viết hay
Emotional Intelligence. A simple guide for Software Engineers — laffra.medium.com
IQ là chỉ số được thiết kế để đánh giá trí thông minh của con người. Người có IQ cao thường được cho là sẽ học giỏi, thông minh, đạt nhiều thành công trong sự nghiệp, đặc biệt là các loại công việc cần đòi hỏi tư duy tính toán nhiều.
Trong khối ngành kỹ thuật cũng vậy, thường có suy nghĩ cho rằng các bạn kỹ sư có IQ cao sẽ dễ thành công hơn, vì IQ cao thường được cho là sẽ làm tốt những công việc như giải quyết vấn đề, lập trình, phân tích, suy luận, ...
Tuy nhiên, đối với tác giả bài viết thì IQ cao là chưa đủ để làm nên thành công của một kỹ sư. Một kỹ sư phần mềm giỏi thì bên cạnh giỏi chuyên môn cần phải biết cách tạo ra ảnh hưởng của mình lên những người xung quanh. Ví dụ như khi bạn thiết kế được hệ thống thì phải biết cách thuyết phục mọi người tin vào thiết kế của mình. Hoặc khi bạn cần xử lý sự cố thì phải biết cách phối hợp với đội nhóm cùng xử lý thay vì chỉ hành động một cách riêng lẻ, ... Thuyết phục, tự nhận thức, tự tạo động lực, ... đó là những mảnh ghép của một thứ năng lực thường được gọi chung là EQ (Emotional Intelligence - Trí thông minh xúc cảm).
Một cách chi tiết hơn thì EQ thường bao gồm:
Sự tự nhận thức (self awareness), là khả năng bạn nhận ra và phân loại cảm xúc của chính mình.
Sự tự điều chỉnh (self regulation), là khả năng bạn sử dụng thông tin về cảm xúc để điều chỉnh suy nghĩ và hành vi của chính mình.
Động lực (motivation), cho phép bạn quản lý và điều chỉnh cảm xúc của mình để đạt được mục tiêu.
Sự đồng cảm (empathy), cho phép bạn nhận ra và phán đoán cảm xúc của người khác.
Cuối cùng, các kỹ năng xã hội (social skills) cho phép bạn tạo ra những mối quan hệ lâu dài và có ý nghĩa.
Mời các bạn cùng đọc bài báo để hiểu thêm về EQ và những kỹ năng liên quan.
(by ndaadn)
3 Innovations While Unifying Pinterest’s Key-Value Storage
Data migration luôn là một trong những vấn đề nhức nhối với chúng ta, đặc biệt là khi dữ liệu lên tới hàng terabyte. Nếu xử lý không đúng cách có thể gây ra hàng loạt lỗi hệ thống, sập website, thậm chí mất đi những dữ liệu quan trọng.
Vào thời điểm năm 2019, tại Pinterest có 4 Key-Values storage system độc lập, được vận hành bởi các team khác nhau, có các APIs và tính năng khác nhau. Điều đó dẫn tới chi phí phát triển và vận hành tăng cao do nhiều trùng lặp, và gây khó khăn cho các lập trình viên khi sử dụng chúng.
Bốn Key-Values storage system của Pinterest ở thời điểm đó là:
Terrapin: Một key-value storage read-only, batch-load, được phát triển dựa trên HDFS
Rockstore: Một multi-mode (readonly, read-write, streaming-write) key-value storage, dựa trên open-source Rocksplicator framework, được viết bằng C++ và sử dụng RocksDB làm storage engine
UserMetaStore: Một read-write key-value storage sử dụng thrift API trên nền HBase
Rocksandra: Một read-write, key-value storage dựa trên Cassandra, và cũng sử dụng RocksDB.
Một trong những thách thức lớn nhất khi hợp nhất các hệ thống là đánh giá tính khả thi của của việc đạt được “feature parity” và tích hợp các feature này vào một platform duy nhất. Feature parity có nghĩa là trên hệ thống mới vẫn thực hiện các tính năng tương tự hệ thống cũ ("do what the existing system does”).
Một thách thức khác là xác định xem nên hợp nhất hệ thống nào, xem xét những gì đã có và chưa có trên Pinterest.
Và cuối cùng, cũng là quan trọng nhất, chính là thuyết phục ban lãnh đạo và cũng như hàng trăm kỹ sư khác đây là một ý tưởng hay!
Một nhóm đã làm việc suốt hàng tháng trời để đào sâu vào các yêu cầu chi tiết và kỹ thuật, phân tích những điểm cần đánh đổi và lợi ích, từ đó đưa ra một bản kế hoạch và được chấp thuận.
Rockstore được đánh giá là hiệu quả nhất về chi phí và hiệu năng, đơn giản để vận hành và mở rộng với chi phí migration thấp, do đó đã được lựa chọn làm storage system duy nhất để tích hợp các storage system khác.
Với việc hợp nhất toàn bộ các Key-Values system với nhau (500 + key-value use case, 4PB unique data, 100M QPS) vào một interface duy nhất, không chỉ giúp giảm độ phức tạp của hệ thống, giảm chi phí vận hành, đồng thời cũng tăng 40-90% performance bởi việc sử dụng một storage hiệu quả hơn. Qua đó cũng giảm một lượng lớn chi phí cho công ty.
Trong bài viết sau, chúng ta cùng điểm qua ba điểm chính (không phải tất cả) để giúp đạt được kết quả này.
Innovation 1: API abstractions cho phép migrate data một cách liên tục
Sử dụng API mới được gọi là API KVStore. Khi tất cả mọi người đều sử dụng một API thống nhất duy nhất được xây dựng với ý định chung, nhóm platform có thể linh hoạt thực hiện các thay đổi, thậm chí thay đổi công cụ lưu trữ.
Quá trình migrate được chia thành 2 phase như sau:
Phase 1: Read-only data migration (totally seamless)
Phase 2: Read-write data migration (partially seamless)
Innovation 2: Sử dụng wide-column format giúp tiết kiệm chi phí xử lý trên CPU và giảm băng thông network.
Nhóm đã đưa ra một định dạng file mới phù hợp với wide-column access pattern. Điều đó có nghĩa là thay vì lưu trữ dữ liệu theo dạng binary blob, bạn có thể lưu và encode dữ liệu theo một định dạng cho phép truy xuất theo kiểu key-value bằng cách kết hợp cả primary key và local key.
Ví dụ: Bạn có một cấu trúc dữ liệu UserData
gồm 30 field dữ liệu mapping với user id
, thay vì lưu theo pair (key: user id, value: UserData)
, bạn có thể lưu theo kiểu (key: user id, (local key: UserData field 1, local value: Userdata value 1), (local key: UserData field 2, local value: Userdata value 2))
.
Innovation 3: Hệ thống tạo phiên bản cho dữ liệu read-only, batch-loaded giúp tránh việc block data migration giữa các cluster
Mời các bạn cùng đọc bài viết sau để tìm hiểu rõ hơn.
(by lpv)
Có Thể Bạn Chưa Biết
Ngày 22/02/1978, là ngày xuất bản cuốn "The C Programming language" lần đầu tiên. Trong cuốn sách này, lần đầu tiên giới thiệu chương trình in văn bản "hello, world", từ đó cụm từ "Hello, world" đã trở thành 1 quy ước ngầm và được sử dụng khi giới thiệu bất kỳ một ngôn ngữ lập trình mới nào
(by lpv)
Góc Lập Trình
Đề tuần này: Delete Duplicate Folders in System
Lời giải đề bài tuần trước:
Đề bài: Sliding Window Maximum
Lời giải:
Đề bài yêu cầu tìm giá trị lớn nhất của một mảng con có độ rộng nhất định khi mảng con này "trượt" trên một mảng cho trước.
Ý tưởng: tạo một ngăn xếp chứa các phần tử hiện tại của cửa sổ trượt sao cho luôn duy trì phần tử đầu tiên là phần tử lớn nhất và các phần tử sau được sắp xếp giảm dần.
Có thể thấy ngăn xếp này không nhất thiết phải chứa tất cả các phần tử trong cửa sổ trượt hiện tại, các phần tử cần được chứa trong ngăn xếp là các phần tử
- Nằm trong cửa sổ trượt hiện tại.
- Không bé hơn bất kì phần tử nào nằm bên phải nó trong cửa sổ.
Để cài đặt lời giải, ta có thể sử dụng cấu trúc dữ liệu Deque (ngăn xếp 2 đầu).
Thuật toán như sau:
- Khởi tạo Deque với k-1 phần tử đầu tiên. (k là độ rộng của cửa sổ)
- Với bước trượt của cửa sổ:
Xóa khỏi Deque phần tử cuối cùng cho đến khi phần tử cuối có giá trị lớn hơn giá trị của phần tử mới.
Thêm phần tử mới vào đuôi của Deque.
Thêm phần tử đầu tiên của Deque vào mảng đáp án (là phần tử lớn nhất của cửa sổ hiện tại).
Nếu phần tử đầu tiên của Deque nằm ngoài phạm vi của cửa sổ trượt ở bước tiếp theo, xóa nó khỏi Deque.
Vì mỗi phần tử chỉ được thêm/bớt đúng 1 lần duy nhất, nên độ phức tạp của lời giải là O(N).
Mở rộng: thực tế cách cài đặt tổng quát của Deque như trên còn gọi là Monotonic Queue. Một cách cài đặt tổng quát hơn cho lời giải trên như sau
Một số đề bài có liên quan đến Monotonic Queue:
- https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/
(by ndaadn & phucnh)
Tech Talks
Grokking Techtalk #44: Problem Solving Skills for Software Engineers (Tư duy giải quyết vấn đề) — www.youtube.com
Tuần vừa qua, Grokking đã tổ chức Techtalk #44 với chủ đề Problem Solving.
Đây là một trong những kỹ năng hàng đầu mà bất kỳ kĩ sư nào cũng cần, và hầu như nhà tuyển dụng nào cũng ghi trong JD của họ. Tuy nhiên khi đi sâu vào, thì ta có thể thấy có những câu hỏi mà ít có câu trả lời hơn: Làm sao đánh giá problem solving skills? Đâu là những phương pháp quy củ để tiếp cận vấn đề?
Nội dung bài talk:
Problem là gì? Một cái nhìn/định nghĩa hữu ích hơn về Problem
Problem Space và Solution Space
Cách phân tích vấn đề theo các tầng “abstraction ladder” khác nhau.
Cách suy luận để tìm solutions. Các loại tradeoffs khác nhau.
Các ví dụ thực tiễn về problem solving cho software engineers.
Mời các bạn cùng xem lại nội dung tại đây. Các bạn nào muốn xem lại slide có thể xem ở đây.
Ở Intuit, Machine Learning model bắt nguồn từ các tập dữ liệu lớn, nhạy cảm, liên tục thay đổi nên model cần thường xuyên được huấn luyện lại và tinh chỉnh với yêu cầu cao về tính an toàn và chấp hành pháp luật.
Trong bài talk này, Intuit chia sẻ về cách họ quản lý model trên quy mô lớn bằng một Machine Learning Platform có khả năng quản lý toàn bộ vòng đời của model sử dụng GitOps, SageMaker, Kubernetes và Argo Workflows để từ đó tăng tốc độ phát hành model lên tới 200%.
(by philong)
Code & Tools
Akka Actor model: Mô hình Actor đã được Carl Hewitt đề xuất nhiều thập kỷ trước như một cách cho vấn đề xử lý song song (parallel processing) trong network có hiệu suất cao, một môi trường chưa có vào thời điểm đó. Ngày nay,khả năng phần cứng, cơ sở hạ tầng đã bắt kịp và vượt quá tầm nhìn của Hewitt. Việc xây dựng hệ thống phân tán với các yêu cầu khắt khe gặp phải những thách thức không thể giải quyết triệt để bằng mô hình hướng đối tượng (OOP) truyền thống. Tuy nhiên, những khó khăn đó có thể được giải quyết dễ dàng với mô hình Actor.
App Diagrams: Ứng dụng miễn phí giúp tạo flowcharts, process diagrams, org charts, UML, ER và network diagrams một cách dễ dàng
Góc Sponsors
Fossil Việt Nam, tiền thân là Misfit, giữ vị thế là Trung tâm Nghiên cứu và Phát triển Công nghệ Thiết bị đeo thông minh trực thuộc Fossil Group. Từ những ngày đầu thành lập, đội ngũ kỹ sư Việt đã thiết kế và xây dựng hệ sinh thái thiết bị đeo thông minh phục vụ cuộc sống của hàng triệu người toàn cầu. Chúng tôi tự hào là những nhà đổi mới luôn bứt phá giới hạn của công nghệ và thời trang, tập trung phát triển 3 nhóm sản phẩm chủ lực: thiết bị, ứng dụng, và dữ liệu trên đám mây.
ĐIỀU FOSSIL TỰ TIN MANG ĐẾN CHO BẠN?
Tham gia nghiên cứu và phát triển Thiết bị đeo thông minh hàng triệu người dùng trên toàn thế giới. Với Fossil, mỗi việc bạn làm đều có thể mang lại thay đổi cho cuộc sống của rất nhiều người.
Lộ trình nghề nghiệp đa dạng, bất kể bạn muốn quản lý đội ngũ hay tập trung phát triển chuyên môn kỹ thuật.
Cơ hội làm việc và học hỏi từ các kỹ sư Google, Qualcomm, Citizen, v.v.
Bảo hiểm sức khỏe cao cấp, thu nhập và phúc lợi cạnh tranh mang đến trải nghiệm làm việc toàn diện nhất.
Môi trường làm việc linh hoạt để bạn thỏa sức học hỏi, phát triển và tạo ra tác động tích cực!
Fossil Việt Nam đang mở ra cơ hội với hàng loạt vị trí hấp dẫn (Cloud Engineer, Android Engineer, Software Architect), mời bạn tham khảo chi tiết công việc tại ĐÂY.
Kết nối với Fossil Việt Nam
Email tuyển dụng: people@fossil.com
Linkedin: https://www.linkedin.com/company/fossilvietnamcareers
Quotes
“I think that it’s extraordinarily important that we in computer science keep fun in computing. When it started out it was an awful lot of fun. Of course the paying customers got shafted every now and then and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful error-free perfect use of these machines. I don’t think we are. I think we’re responsible for stretching them setting them off in new directions and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all I hope we don’t become missionaries. Don’t feel as if you’re Bible sales-men. The world has too many of those already. What you know about computing other people will learn. Don’t feel as if the key to successful computing is only in your hands. What’s in your hands I think and hope is intelligence: the ability to see the machine as more than when you were first led up to it that you can make it more.”
― Alan J. Perlis
Bạn đánh giá nội dung số newsletter này thế nào?
(1 = Rất tệ / 5 = Rất tốt)
(Việc đánh giá của các bạn sẽ giúp chúng tôi cải thiện nội dung newsletter tốt hơn)