Gần đây mình cứ liên tục suy nghĩ về những chủ đề như học tập, trưởng thành và năng suất, nên bỗng thấy tò mò về chủ đề này.
Đi xa hơn một chút, theo bạn thì lập trình viên giỏi và lập trình viên xuất sắc khác nhau ở điểm nào?
Mình cũng rất cảm ơn nếu bạn thay từ “lập trình viên” bằng một vai trò/chức danh khác mà bạn đang làm hoặc hiểu rõ để trả lời. (e.g., tech lead, CTO, CEO, nhà sáng lập, designer, PM, ...)
Cá nhân mình nghĩ rằng các lập trình viên xuất sắc có ba điểm chung lớn sau đây.
-
Nhận diện vấn đề: Họ phát hiện ra những điều mà người khác thậm chí còn chưa nhận ra là vấn đề, và tìm thấy khả năng cải thiện.
-
Định nghĩa vấn đề: Họ nhìn vào tình huống và nguyên nhân của vấn đề ở rất nhiều tầng nấc và góc nhìn khác nhau, rồi biến kinh nghiệm tích lũy thành các mẫu hình để quy về một bài toán dễ hơn nhiều (hoặc hiệu quả hơn, hoặc căn cơ hơn).
-
Giải quyết vấn đề: Họ có thể nghĩ ra nhiều giải pháp khả dĩ, hiểu được trade-off của từng giải pháp, rồi chọn giải pháp phù hợp với bối cảnh hiện tại của tổ chức. Họ cũng biết ở thời điểm nào và dựa trên tín hiệu nào thì cần thay đổi quyết định đó. Và họ áp dụng cách giải quyết theo đơn vị nhỏ, theo cách có thể nhận phản hồi nhanh chóng.
6 bình luận
Gu thời trang: 0 điểm.
Nếu nói về điểm chung thì tôi chỉ nghĩ ra mỗi điều này.
Nửa đùa nửa thật thôi.....haha
Về cơ bản, bản thân tôi cũng nghĩ rằng lập trình viên là những người giải quyết vấn đề.
Có lẽ cũng không nhất thiết phải chỉ giới hạn ở lập trình viên, nhưng tôi sẽ chọn "sự kết nối" là đặc điểm của những người xuất sắc.
Trong đầu họ có rất nhiều thứ như kiến thức, kinh nghiệm, ý tưởng..., và tôi nghĩ điều quan trọng là liệu họ có phải là người biết kết nối những thứ đó thật tốt hay không.
Khi phát hiện ra vấn đề, nghĩ ra giải pháp là một dạng kết nối ở cấp độ đầu tiên,
nhưng kết nối vấn đề này với vấn đề khác để hình dung ra những tình huống phức hợp và tìm ra giải pháp khác cũng là kết nối,
và kết nối nhiều giải pháp với ý tưởng để tạo ra một giải pháp đơn giản hơn, linh hoạt hơn và ưu việt hơn cũng là kết nối.
Không chỉ riêng trong phát triển phần mềm, mà việc kết nối giữa phát triển và các yếu tố kinh doanh, hoặc kết nối những thứ tưởng như hoàn toàn không liên quan, có lẽ là một năng lực rất quan trọng trong thời đại ngày nay.
Tôi cũng đã hỏi trên Facebook, và anh Kim Chang-jun đã để lại bình luận rằng nên tham khảo một bài báo. Nghĩ lại mới thấy không hiểu sao mình không nghĩ ra điều đó.
Tôi định đọc bài báo năm 2015 có tên “What Makes a Great Software Engineer?” vì thấy nó đã được trích dẫn 150 lần.
https://ieeexplore.ieee.org/abstract/document/7194618
spilist2 xin chào! Hình như tôi cũng đã thấy bạn đăng câu hỏi này trên Facebook rồi :) Tôi cũng luôn băn khoăn về điều này, nhưng không biết nội dung các bài luận văn có phải là thứ bạn muốn giới thiệu không?
Có lẽ bài này là luận án tiến sĩ (dissertation), mà tính theo bản PDF thì dài tới 300 trang. https://digital.lib.washington.edu/researchworks/bitstream/…
Vì vậy tôi mới chỉ đọc được đến chương 2 (introduction, related works), nhưng chỉ đến đây thôi cũng đã thấy nội dung rất ưng ý. Câu văn cũng được viết khá dễ hiểu. Rất đáng đọc.
Tôi thử đặt câu hỏi này rồi tìm trên Google thì thấy hiện ra khá nhiều bài viết. Cũng có cả từ khóa 10x engineers nữa.
https://linkedin.com/pulse/great-engineer-vs-good-marissa-fayer-mba/
Một lập trình viên giỏi có những công cụ đặc biệt để giải quyết vấn đề. Lập trình viên giỏi làm việc có hệ thống và hợp lý, nhìn từ mọi góc độ, và phân tích mọi đầu vào/đầu ra có thể xảy ra.
Một lập trình viên xuất sắc, dựa trên tất cả các năng lực đã nêu ở trên, áp dụng chúng vào những giải pháp có thể dùng được ngay lập tức. Họ áp dụng các mẫu đã được biết đến (các nguyên lý khoa học và toán học, nguyên tắc phát triển tinh gọn, v.v.) vào những vấn đề mới trong đời sống thực theo cách sáng tạo.
Những lập trình viên xuất sắc nhất biết cách lắng nghe. Họ lắng nghe vấn đề, lắng nghe các bên liên quan và điều họ coi trọng, lắng nghe thị trường, lắng nghe phản hồi. Và họ lắng nghe cả tiếng nói nội tâm mách bảo những cách tiếp cận sáng tạo.
==
https://www.quora.com/How-do-you-identify-a-good-vs-great-engineer
Có rất nhiều câu trả lời, nhưng nếu chỉ xem vài câu có nhiều vote cao thì:
(Lấy ví dụ về người mang quạt đến chỗ băng chuyền) người lười luôn tìm ra cách để khỏi phải làm việc. Kỹ sư lười mới là kỹ sư giỏi nhất.
Kỹ sư giỏi giải quyết vấn đề được yêu cầu. Thỉnh thoảng họ tham gia các khóa học để nâng cao năng lực kỹ thuật của bản thân. Kỹ sư xuất sắc thì đi xa hơn một bước so với điều được yêu cầu.
Khi mọi người có câu hỏi, họ sẽ tìm đến người đó.
Học hỏi không ngừng.
Liên tục chia sẻ những gì mình biết.
Giữ vững điều mình tin là đúng, nhưng cũng biết khi nào nên buông bỏ.
Không ngại xắn tay vào làm.
Kiểm tra xem các hệ thống khác có bug tương tự hay không (hoặc đã được sửa rồi chưa).
Đề xuất giải pháp hoặc thiết kế dài hạn để tránh bug tương tự tái diễn. (đính kèm cost/benefit analysis giữa các phương án)
Mở rộng tầm nhìn ra ngoài lĩnh vực chuyên môn của mình để xem các nhóm khác có đang gặp vấn đề tương tự không. (hoặc đã chủ động liên hệ thử rồi)