Chênh lệch kỹ năng trong lập trình
Tôi chắc chắn không phải là lập trình viên giỏi nhất thế giới. Đầu tiên tôi xin nói với bạn rằng có vô số lập trình viên ngoài kia giỏi hơn tôi. Nhưng có một điều là: trong suốt 10 năm làm việc với tư cách là một lập trình viên chuyên nghiệp, thì tôi có thể liệt kê ra những lập trình ...
Tôi chắc chắn không phải là lập trình viên giỏi nhất thế giới. Đầu tiên tôi xin nói với bạn rằng có vô số lập trình viên ngoài kia giỏi hơn tôi. Nhưng có một điều là: trong suốt 10 năm làm việc với tư cách là một lập trình viên chuyên nghiệp, thì tôi có thể liệt kê ra những lập trình viên thực sự giỏi mà mình đã làm việc cùng trên chỉ một bàn tay. Tôi biết điều này thì khá thất vọng, nhưng tôi xin phép được nói rằng: có một điều gì đó kỳ cục về nghề nghiệp của chúng ta mà dẫn đến một sự chênh lệch sâu sắc khác thường trong các kỹ năng.
Đặc biệt trong lập trình, nhiều nghiên cứu đã chỉ ra rằng có một sự khác biệt rất lớn trong chất lượng và kích cỡ của các chương trình được viết ra, cũng như hiệu suất làm việc của các lập trình viên. Một nghiên cứu khoảng cuối những năm 1960 được tiến hành bởi 3 nhà khoa học Sackman, Erikson, và Grant (1968) cho thấy có một sự khác nhau rất lớn trong hiệu suất lập trình của mỗi cá nhân. Họ đã nghiên cứu các lập trình viên chuyên nghiệp có trung bình khoảng 7 năm kinh nghiệm và nhận ra rằng tỉ lệ thời gian viết code giữa lập trình viên giỏi nhất và tồi nhất là khoảng 20:1; tỉ lệ thời gian debug lỗi là trên 25:1; của kích cỡ chương trình là 5:1; và của tốc độ thực thi chương trình là khoảng 10:1. Họ nhận thấy rằng không có mối liên quan nào giữa số năm kinh nghiệm của một lập trình viên với chất lượng code và hiệu suất của anh ta. (Code Complete, trang 548)
Hay nói cách khác, những lập trình viên giỏi thì thực sự giỏi, và những lập trình viên tồi thì thực sự là rất cùi bắp. Thực ra bạn sẽ chẳng bao giờ biết được mình sẽ gặp điều gì khi bạn nhận một công việc: theo thống kê, thì bạn sẽ có 50/50 cơ hội để làm việc cùng hoặc là một thiên tài hoặc là một thằng ngốc. Liệu điều đó có giúp bạn an lòng?
Liệu bạn có mong chờ một tài xế xe tải với 20 năm kinh nghiệm ngồi sau vô-lăng thì lái tốt hơn một tay “lính mới” vô nghề với ít hơn một năm kinh nghiệm lái xe trên đường? Dĩ nhiên là bạn sẽ như vậy. Và liệu một lập trình viên kỳ cựu với mái tóc hoa râm cùng 10 năm kinh nghiệm làm việc trên hàng tá các dự án phần mềm khác nhau– giống như tôi– làm việc tốt hơn một tay trẻ ranh vừa mới bước chân ra khỏi giảng đường đại học? Vâng, bạn có thể nghĩ vậy, nhưng trong thế giới của phát triển phần mềm, thì logic đó không áp dụng được:
[Trong phân tích các kết quả của Coding War Games, 1977 – 1986, chúng tôi nhận thấy rằng] những lập trình viên có 10 năm kinh nghiệm thì không làm tốt hơn những người có 2 năm kinh nghiệm. Không có mối liên quan nào giữa kinh nghiệm và sự thực thi ngoại trừ có những người có ít hơn 6 tháng kinh nghiệm với ngôn ngữ lập trình được sử dụng trong bài kiểm tra đã không làm tốt như những người tham gia khác. (Peopleware, p. 47)
Trong một nghiên cứu khác của Bill Curtis cũng cho kết quả tương tự, ông đã tiến hành trên một nhóm có 60 lập trình viên chuyên nghiệp làm một tác vụ debugging “đơn giản” (“Substantiating Programmer Variability,” Proceedings of the IEEE, vol. 69, no. 7, 1981). Mặc dù tác vụ rất đơn giản, nhưng có đến 6 lập trình viên chuyên nghiệp không có khả năng hoàn thành tác vụ đó, và dữ liệu về bài thi của họ đã bị loại ra khỏi kết quả của cuộc nghiên cứu. Curtis đã quan sát thấy có một sự khác nhau rất lớn xung quanh những lập trình viên có khả năng hoàn thành tác vụ đó. (Steve McConnell)
Một kết luận chết tiệt được rút ra từ rất nhiều dữ liệu ủng hộ giả thuyết rằng không có mối liên quan nào giữa kinh nghiệm, khả năng thực thi, và kỹ năng? Liệu chúng ta sẽ đi đâu từ kết luận này? Tôi không có bất kỳ câu trả lời nào, nhưng tôi có hai ý kiến sau đây:
- Trừ khi bạn thực sự yêu thích công việc lập trình, còn không thì bạn nên tìm kiếm một nghề khác. Có phải thực ra: bạn đang lập trình chủ yếu để kiếm tiền, hoặc bạn đang lập trình bởi vì bạn chạy theo hội chứng đám đông? Tôi biết điều này nghe có vẻ khó chịu, nhưng nó là một hiện tượng kinh tế có thực– trong một môi trường toàn cầu hóa và công việc đang bị chuyển sang gia công tại nước ngoài, thế giới này đơn giản là không thể ủng hộ chút nào nữa về việc trả lương cao cho mấy tay coder xoàng xĩnh. Có hàng trăm ngàn lập trình viên Ấn Độ có trình độ rất tốt, họ sẽ làm cái mà bạn đang làm nhưng chỉ với số lẻ mức lương của bạn, và có hàng ngàn người khác đang bước vào lĩnh vực này từ những quốc gia thuộc thế giới thứ ba. Hãy đổ lỗi cho Internet nếu bạn muốn, nhưng chỉ “làm việc tàm tạm với mấy cái máy tính” thì không còn là lá bùa hộ mệnh để nhận một công việc công nghệ có mức lương hậu hĩnh nữa.
- Nếu bạn đang đọc blog này (và bởi blog này, ý tôi là bất kỳ blog lập trình nào), điều nói trên hầu như chắc chắn không đúng với bạn. Bạn đã dành thời gian cá nhân của mình vào việc phát triển nghề nghiệp. Tôi không khuyên bạn nên dành mọi phút giây sau khi thức dậy để lại lao vào ôm lấy cái máy tính giống như tôi đang làm– điều đó thì không tốt cho sức khỏe– nhưng đó là cách duy nhất để giữ công việc của chúng ta tiếp tục phát triển. Hãy đối xử với công việc của bạn giống như nó là: một nghề nghiệp kỹ nghệ yêu cầu kỹ năng cao và phải học tập suốt đời.
Techtalk via vinacode