VẬY TRỞ THÀNH KĨ SƯ PHẦN MỀM 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,
v.v)
Thêm nữa, ở Việt Nam nhiều bạn nghĩ tư duy hệ thống
(system design/system architecture) là 1 vị trí độc lập, nâng
cao kinh nghiệm một hồi mới cần tới. Quan điểm của mình
thì đây là tư duy mà một kĩ sư phần mềm nào đều cần phải
có, nếu chưa có thì bạn chỉ ở mức thợ thôi chứ chưa phải
là kĩ sư. Nếu bạn phỏng vấn vào các vị trí lập trình viên của
Facebook/Google, bạn sẽ thấy những câu hỏi phỏng vấn
đều sẽ kiểm tra 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 phỏng vấn
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 phần nhỏ của biểu
đồ trên?
Nửa dưới là những kiến thức gốc về khoa học máy tính
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 tư duy kĩ thuật có hệ thống (technical
framework of thinking), hay một cách khác là tư duy giải
quyết vấn đề (problem solving), tư duy thiết kế hệ thống
(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 lập trình viên ứng dụng sẽ
tập trung vào nửa trên, và các bạn nghiên cứu sẽ tập trung
vào nửa dưới của biểu đồ trên.
DIJSKTRA
31