Dijkstra June 2018 | Page 31

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