Năng suất lập trình viên tuyệt vời - Chiếm 10.000 lần chênh lệch? [đóng cửa]


19

Một người vận hành máy tiện tuyệt vời ra lệnh nhiều lần lương của một người vận hành máy tiện trung bình, nhưng một người viết mã phần mềm tuyệt vời có giá trị gấp 10.000 lần so với một người viết phần mềm trung bình. - Bill Gates

Giả sử có một kỹ sư phần mềm "tuyệt vời" và một kỹ sư phần mềm "trung bình" trong cùng một nhóm. Làm thế nào bạn có thể giải thích cho một kỹ sư có năng suất gấp 10.000 lần? Tôi không thể hiểu được điều này, vì cả hai đều đảm nhận phần chia sẻ các tính năng, lỗi và điều tra của họ và luôn cung cấp chất lượng. Mô tả của tôi có thể biện minh cho họ là trên "trung bình"? "tuyệt quá"?


2
Tôi không chắc câu hỏi này có phù hợp với stackoverflow không, nhưng tôi cũng quan tâm đến câu trả lời.
Austin Henley

18
Câu trích dẫn nói rằng một cái tuyệt vời có giá trị gấp 10 nghìn lần so với giá trung bình, không có gì về "năng suất" ở đó.
Oded

4
Trong thực tế, một lập trình viên tuyệt vời có thể kém năng suất hơn nhiều so với một người bình thường. Thay vì thực hiện "công việc" của mình, anh ta đã làm một thứ tốt hơn ngoài radar, và thậm chí có thể tạo ra một dòng sản phẩm hoàn toàn mới, làm cho công việc của lập trình viên sản xuất bị lỗi thời.
hotpaw2

2
Một điều tôi chắc chắn, là bạn cần cả hai nếu bạn muốn đổi mới VÀ nhận được! @ # $ Thực hiện.
Erik Reppen

6
Abe Lincoln đã từng nói "Nếu tôi có tám giờ để chặt cây, tôi sẽ dành sáu giờ để mài rìu", điều này không bao giờ đúng hơn trong lập trình, khi làm một công việc "tốt" vượt xa công việc nhanh chóng. Lập trình viên giỏi có vẻ kém năng suất hơn, nhưng anh ta đang chuẩn bị cho tất cả các vấn đề nằm ở phía trước.
BeardedO

Câu trả lời:


57

Điểm của trích dẫn không phải là một lần năng suất gấp 10 nghìn lần, mà là một lần gấp 10 lần giá trị của người kia. Phần mềm có điều kiện duy nhất là thiết kế hoặc triển khai bị lỗi có thể không hoạt động trong nhiều năm (một phần bị gia công sai thường sẽ chỉ "không hoạt động" và không được đưa vào trường), cho đến vòng đời của sản phẩm cho đến khi ngày nó cầm đầu trong một tình huống khó hiểu.

Mọi người nên làm quen với chi phí theo cấp số nhân của việc sửa lỗi khi nó chuyển từ thiết kế, thực hiện sang thử nghiệm sang sản xuất sang bảo trì.

Khi bạn tính đến trách nhiệm pháp lý cũng như danh tiếng của công ty, có thể dễ dàng kết luận rằng nhà phát triển biết đủ để tránh vấn đề này đáng giá gấp 10.000 lần người vô tình hoặc ngây thơ thực hiện một giải pháp kém.

Chỉnh sửa (Mùa xuân 2014): "Heartbleed"


1
Tinh tế rằng chính sự thiếu trách nhiệm sẽ khiến một lập trình viên có giá trị gấp 10.000 lần so với người khác. Không nghĩ về điều đó ban đầu, cảm ơn bạn. Có vẻ như đó là một điều cực kỳ khó đo lường.
TheImpact

2
@TheImpact: Thật khó để "đo lường" vì nó thường chỉ trở nên rõ ràng sau khi mã hóa được thực hiện và dự án đã được đưa ra trên thế giới. Hiệu suất và độ tin cậy và nói chung sau những suy nghĩ của một lập trình viên "trung bình"; trong khi chúng được xây dựng vào chính kết cấu của thiết kế đến từ một lập trình viên tuyệt vời.
NotMe

10
+1. Nếu giá trị của một nhà phát triển phần mềm tốt là 100, thì nó gấp bao nhiêu lần so với -10?
Nicole

3
Ngoài ra còn có vấn đề cung cầu. Raymond Chen: "Tôi chỉ tin tưởng khoảng năm người trên thế giới viết mã tiên tiến này và tôi không phải là một trong số họ. - blog.msdn.com/b/oldnewthing/archive/2011/04/15/10154245 .aspx . " Điều này đặc biệt đúng với mã hóa liên quan đến bảo mật, vì các vấn đề có thể không được chú ý (hoặc ít nhất, không được chú ý bởi những chiếc mũ trắng) trong nhiều năm. Schneier nhận xét rằng hầu hết các lập trình viên có thể viết một thuật toán mã hóa mà bản thân người lập trình không thể phá vỡ. Tôi lưu ý rằng điều này không có nghĩa là ai đó tốt hơn không thể làm như vậy ... trừ khi nhà văn là người giỏi nhất.
Brian

1
Hãy xem xét lần phóng đầu tiên của tên lửa Ariane V. Có một sự phân chia chưa được chia cho số 0 khiến tên lửa bị phá hủy. Không chỉ vậy mà mã trong câu hỏi đã không còn giá trị ngay khi tên lửa được thắp sáng. Hãy nghĩ về hàng triệu người họ sẽ có được với một lập trình viên tốt hơn.
Loren Pechtel

44

Các động viên bơi lội olympic trung bình có thể bơi khoảng 2,5 dặm một giờ tại một khoảng cách.

Một người bình thường (những người có thể bơi) có thể bơi khoảng 1,5 dặm một khoảng cách giờ ata.

Điều này có nghĩa là người bơi olympic trung bình có thể bơi Kênh tiếng Anh trong khoảng 8 giờ.

Lý do sau đó là người bơi olymic nhanh hơn 60% so với mức trung bình và người bơi trung bình sẽ mất khoảng 13 giờ để hoàn thành cuộc đua ...

Ngoại trừ việc nếu tôi, một người bơi trung bình, cố gắng bơi Kênh tiếng Anh, cách duy nhất tôi sẽ vượt qua được dạt vào bờ một tuần sau đó.

Nhiều khía cạnh của lập trình giống như bơi Kênh tiếng Anh. Đó là chìm hoặc bơi. Tôi thậm chí không biết liệu 10.000X tốt hơn có thực sự là cách chính xác để mô tả sự khác biệt giữa phần mềm hoàn thành hoạt động và phần mềm không hoàn chỉnh không hoạt động.


31

Giả sử có một kỹ sư phần mềm "tuyệt vời" và một kỹ sư phần mềm "trung bình" trong cùng một nhóm. Làm thế nào bạn có thể giải thích cho một kỹ sư có năng suất gấp 10.000 lần? Tôi không thể hiểu được điều này, vì cả hai đều đảm nhận phần chia sẻ các tính năng, lỗi và điều tra của họ và luôn cung cấp chất lượng. Mô tả của tôi có thể biện minh cho họ là trên "trung bình"? "tuyệt quá"?

Đó là rất nhiều "quà tặng" cho một kỹ sư phần mềm "trung bình". Trong thực tế, kỹ sư phần mềm tuyệt vời giải quyết các vấn đề trong vài giờ mà kỹ sư trung bình sẽ không bao giờ giải quyết chính xác. Kỹ sư phần mềm tuyệt vời giải quyết các vấn đề thông thường trong một phần ba thời gian với một phần năm mã nhiều và một phần mười như nhiều lỗi. Mã công cụ phần mềm tuyệt vời chạy trong O (n) trong khi mã công cụ phần mềm trung bình chạy trong thời gian O (n ^ 3). Kỹ sư phần mềm tuyệt vời có thể điều chỉnh giải pháp của mình trong khi bạn chờ đợi, trong khi kỹ sư phần mềm trung bình phàn nàn về những thay đổi muộn đối với thông số kỹ thuật và nói rằng sẽ mất vài tuần để đáp ứng các yêu cầu mới ngay bây giờ. Đây là tất cả những khác biệt thực sự tôi đã thấy khi một kỹ sư tuyệt vời làm lại công việc của kỹ sư trung bình.


6
+1: thật không may, vấn đề khá phổ biến là không có giải pháp chính xác. Thật điên rồ khi có những cách giải quyết và ly hợp thường chỉ "khắc phục" vấn đề tức thời, nhưng gần như chắc chắn sẽ tạo ra nhiều vấn đề hơn trong một vài tuần. "Nhưng đó là trong một vài tuần, hãy để bản thân tương lai của chúng ta giải quyết những vấn đề đó!"
Joachim Sauer

Sự khác biệt giữa giải pháp làm việc và không làm việc đối với một vấn đề gần như không thể tiếp cận vô hạn, ví dụ như tổ chức tồn tại, so với phá sản, hoặc một thứ gì đó bùng nổ trong phòng thí nghiệm và giết chết tất cả các kỹ sư (dòng phim truyền hình cổ điển ...), v.v. .
hotpaw2

@ hotpaw2: Đúng vậy, tôi đã không nghĩ về bất cứ điều gì quá ấn tượng. Tôi đã suy nghĩ về các vấn đề với một chút phức tạp toán học, ví dụ tính toán đồ thị như sắp xếp theo cấu trúc liên kết. Một kỹ sư trung bình có thể dành hàng tuần để viết một giải pháp chậm và lỗi. Một kỹ sư tuyệt vời sẽ ánh xạ các yêu cầu kinh doanh đến một vấn đề nổi tiếng, sau đó tìm kiếm một thư viện hoặc thuật toán được xuất bản.
kevin cline

9

Tôi sẽ cố gắng giải quyết vấn đề này về sự khác biệt:

Một kỹ sư tuyệt vời sẽ làm tốt hơn những người sau:

  • Thiết kế - sản xuất các thiết kế sẽ cần ít sửa đổi và linh hoạt hơn. Điều này có nghĩa là tiết kiệm trong suốt vòng đời của phần mềm.
  • Các tính năng - chúng sẽ được thực hiện nhanh và được triển khai sạch hơn.
  • Lỗi - sẽ được tìm thấy nhanh hơn, được sửa chữa tốt và không giới thiệu các lỗi ít hơn trong tương lai.
  • Điều tra - sẽ được kết luận nhanh hơn với độ phân giải và kết quả tốt hơn.

Kết hợp với nhau, những điều này sẽ giúp công ty tiết kiệm rất nhiều tiền trong thời gian phát triển và khiến công ty có rất nhiều tiền trong những cơ hội bổ sung.


4

Một lập trình viên tuyệt vời thường không chỉ "nhận phần của họ về các tính năng, lỗi và điều tra" để kiếm tiền lương. Đôi khi, họ rời khỏi và thành lập công ty riêng, hoặc tham gia vào một công ty khởi nghiệp, hoặc bắt đầu một dự án skunkworks mới, hoặc, vào thời xa xưa, có thể, đã tham gia một phòng thí nghiệm R & D trên bầu trời xanh nổi tiếng toàn quốc, và đổi mới một số sản phẩm mà không ai nghĩ rằng họ cần , hoặc suy nghĩ là có thể làm được với phần mềm, trước cái nhìn sâu sắc, kỹ năng và mồ hôi của lập trình viên tuyệt vời đó.

Rất nhiều "giá trị" lập trình viên này là về phần thưởng tương xứng cho rủi ro. Lập trình viên thậm chí có thể bị sa thải vì nghĩ về các sản phẩm phần mềm điên rồ đó, thay vì được trả tiền gấp 2 lần hoặc hơn thế.

Điều gì xảy ra với một phần mềm khởi động không thường xuyên: công khai hàng triệu / tỷ hoặc được Google hoặc Facebook, et.al mua lại. với số lượng tương tự, hiếm khi xảy ra với các nhà khai thác máy tiện (mặc dù ít nhất một người sáng lập công ty công nghệ tại Thung lũng Silicon đã có một máy tiện trong xưởng của mình).


4
".... công khai hàng triệu / tỷ, ....." Mặc dù những lời hoa mỹ trên truyền thông, điều này hiếm khi xảy ra đối với các kỹ sư phần mềm. Đối với mỗi người "làm được", hàng ngàn người rơi vào tình trạng mơ hồ và / hoặc đi qua một vòng quá nhiều VC và quay trở lại với công việc 9-5 ngày không có gì hơn là vị đắng trong miệng ...
mattnz

1
@mattnz: Có thể tốt hơn một chút so với tỷ lệ cược 10.000 đến 1 đi với giá trị được cho là của 10.000 lập trình viên đó.
hotpaw2

3

Có một số giải pháp mà chỉ những lập trình viên giỏi nhất mới có thể giải quyết. Ném hàng ngàn người tầm thường sẽ không hoạt động. Việc phối hợp các nỗ lực của họ cũng khó khăn hơn ngay cả khi họ có thể kết hợp chung các phần kiến ​​thức của mình.

Trả lời câu hỏi về SO không khác. Có rất nhiều vấn đề trong số một nhóm các nhà phát triển trung bình, một người có thể đưa ra câu trả lời. Các trang web này có thể thực hiện công việc phối hợp các nỗ lực tốt hơn nhiều so với hầu hết các nhóm phát triển đáng buồn.


3

Tôi nghĩ rằng có một số bằng chứng thực nghiệm hỗ trợ trích dẫn của Gates. Tôi nhớ đã đọc (mặc dù tôi không nhớ lại nguồn) rằng trong khi gõ nhóm, sự khác biệt về đầu ra (có thể đo được dễ dàng cho nhóm gõ) giữa những người trong phân vị thứ 5 và những người trong phân vị 95% là khoảng từ 3 đến 1. Nhưng sau khi phần mềm xử lý văn bản trở nên khả dụng, tỷ lệ này tăng lên tương đương 10 hoặc 20 đến 1, bởi vì những người có thể sử dụng các tính năng nâng cao của phần mềm đã đạt được lợi thế tương đối nhiều hơn.

Có lẽ để phát triển phần mềm, tỷ lệ này sẽ còn cao hơn, vì thậm chí còn có nhiều tự do hơn để tận dụng mọi loại công cụ, kỹ thuật, v.v. Khó đo lường sự khác biệt hơn, nhưng hầu hết các nỗ lực đều xuất hiện với ít nhất 10 đến 1, và điều đó có lẽ đánh giá thấp sự khác biệt bởi vì nó chỉ đo lường những gì dễ đo lường.

Trong một cái gì đó như gõ hoặc vận hành máy tiện, những người trong top 1% có lẽ khá gần với việc đạt đến giới hạn sinh lý của những gì có thể. Trong trường hợp lập trình, chúng rõ ràng là không (tỷ lệ thời gian viết mã mất bao lâu so với thời gian để viết mã là rất lớn) vì vậy cần có nhiều biến thể hơn.


1
Ồ Nói về việc thiếu điểm. Bất kỳ thước đo nào về năng suất của lập trình viên bắt đầu bằng "tốc độ gõ" như một điểm neo đều bị ràng buộc để có câu trả lời đúng.
riwalk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.