Vậy trở thành software engineer giỏi (Google/Facebook engineer level) thì cần những gì?
Đây là 1 biểu đồ các kiến thức nền tảng (fundamentals) mà mình tổng quát ra được, nhằm giúp các bạn định vị tốt hơn những điều các bạn đang có/cần bổ sung.
Nửa trên là những kiến thức thực tế cần thiết khi đi làm, bao gồm hiểu công nghệ, hiểu quy trình phát triển phần mềm, và kĩ thuật lập trình (clean coding, code refactoring, vv)
Nửa dưới là những kiến thức gốc/computer science mà các bạn cần nắm. Cần lưu ý là mình muốn nhấn mạnh tầm quan trọng của "Technical Framework of Thinking", hay 1 cách khác là tư duy problem solving, tư duy system design. Tư duy này là khả năng kết nối những kiến thức lẻ độc lập (lego blocks) mà các bạn học được bên dưới với nhau để đưa ra hướng giải quyết vấn đề.
Để ý thấy là thường các bạn Application Developer sẽ tập trung và nửa trên, và các bạn nghiên cứu sẽ tập trung vào nửa dưới.
Một cái nữa mình có cảm giác là ở VN các bạn nghĩ system architect, system design là 1 vị trí độc lập, lên level 1 hồi mới tới được. Quan điểm của mình là đây là tư duy mà một software engineer nào đề cần phải có, nếu chưa có thì bạn chỉ ở mức thợ thôi chứ không phải là kĩ sư.
Nếu bạn phỏng vấn vào các vị trí software engineer của Facebook/Google, bạn sẽ thấy những câu hỏi phỏng vấn đều sẽ test tổng quát hết những kiến thức nêu trên (trừ khi bạn là sinh viên mới ra trường, lúc đó câu hỏi pv sẽ xoay quanh lập trình thuật toán & cấu trúc dữ liệu).
Bạn có và chưa có gì trong những components của diagram trên?
Nguồn: Huy Nguyen CTO Holistics, Co-founder Grokking Vietnam