Produktivitas Programmer Hebat - Menghitung selisih 10.000 kali lipat? [Tutup]

19

Seorang operator mesin bubut yang hebat memerintahkan beberapa kali lipat upah operator mesin bubut rata-rata, tetapi seorang penulis kode perangkat lunak yang hebat bernilai 10.000 kali lipat dari harga seorang pembuat perangkat lunak biasa. - Bill Gates

Katakanlah ada insinyur perangkat lunak "hebat" dan insinyur perangkat lunak "rata-rata" di tim yang sama. Bagaimana Anda dapat menjelaskan bahwa seorang insinyur 10.000 kali lebih produktif? Saya tidak bisa mengerti ini, mengingat mereka berdua mengambil bagian dari fitur, bug dan investigasi, dan secara konsisten memberikan kualitas. Apakah deskripsi saya mungkin membenarkan mereka berada di atas "rata-rata"? "Bagus"?

Benturan
sumber
2
Saya tidak yakin apakah pertanyaan ini cocok untuk stackoverflow, tetapi saya juga tertarik dengan responsnya.
Austin Henley
18
Kutipan itu mengatakan yang hebat bernilai 10 ribu kali lipat dari harga rata-rata, tidak ada apa pun tentang "produktivitas" di sana.
Oded
4
Bahkan, seorang programmer hebat mungkin jauh lebih tidak produktif daripada yang rata-rata. Alih-alih melakukan "pekerjaan" -nya, ia melakukan sesuatu yang lebih baik yang di luar jangkauan, dan mungkin bahkan menciptakan lini produk baru yang usang pekerjaan programmer yang produktif.
hotpaw2
2
Satu hal yang saya yakini, adalah Anda membutuhkan keduanya jika Anda ingin berinovasi dan sekaligus! @ # $ Selesai.
Erik Reppen
6
Abe Lincoln pernah berkata, "Jika saya memiliki delapan jam untuk menebang pohon, saya akan menghabiskan enam jam mengasah kapak saya", ini tidak pernah lebih benar dalam pemrograman, di mana melakukan pekerjaan "baik" jauh melebihi pekerjaan cepat. Pemrogram yang baik mungkin tampak kurang produktif, tetapi ia sedang mempersiapkan semua masalah yang ada di depan.
BeardedO

Jawaban:

57

Inti dari kutipan bukanlah bahwa yang satu 10K kali lebih produktif, itu yang satu bernilai 10K kali yang lain. Perangkat lunak memiliki kondisi unik di mana desain atau implementasi yang cacat dapat menjadi tidak aktif selama bertahun-tahun (bagian yang dikerjakan dengan mesin yang salah biasanya hanya akan "tidak berfungsi" dan tidak membuatnya masuk ke lapangan), baik ke dalam siklus hidup produk sampai satu hari itu kepalanya dalam situasi yang sulit.

Setiap orang harus terbiasa dengan biaya eksponensial untuk memperbaiki cacat saat bergerak dari desain, ke implementasi ke pengujian ke produksi ke pemeliharaan.

Ketika Anda memperhitungkan kemungkinan pertanggungjawaban serta reputasi perusahaan, mudah untuk menyimpulkan bahwa pengembang yang cukup tahu untuk menghindari masalah bernilai 10.000 kali lipat dari orang yang secara naif atau naif menerapkan solusi yang buruk.

Sunting (Musim Semi 2014): "Heartbleed"

Dave Nay
sumber
1
Halus bahwa itu akan menjadi kurangnya tanggung jawab yang membuat seorang programmer bernilai 10.000 kali lebih banyak daripada yang lain. Awalnya tidak memikirkan itu, terima kasih. Sepertinya ini adalah hal yang sangat sulit untuk diukur.
TheImpact
2
@TheImpact: Sulit untuk "mengukur" karena biasanya hanya menjadi jelas setelah pengkodean dilakukan dan proyek keluar di dunia. Kinerja dan Keandalan dan umumnya setelah memikirkan programmer "rata-rata"; sedangkan mereka dibangun ke dalam struktur desain yang berasal dari seorang programmer yang hebat.
NotMe
10
+1. Jika nilai pengembang perangkat lunak yang baik adalah 100, berapa kali lebih banyak dari -10?
Nicole
3
Ada juga masalah penawaran dan permintaan. Raymond Chen: "Saya hanya memercayai sekitar lima orang di dunia untuk menulis kode yang canggih ini, dan saya bukan salah satu dari mereka. - blogs.msdn.com/b/oldnewthing/archive/2011/04/15/10154245 .aspx . " Hal ini terutama berlaku untuk pengkodean yang berhubungan dengan keamanan, karena masalahnya mungkin tidak diketahui (atau setidaknya, tidak diperhatikan oleh topi putih) selama bertahun-tahun. Schneier berkomentar bahwa kebanyakan programmer dapat menulis algoritma enkripsi yang tidak dapat dipecah oleh programmer sendiri. Saya perhatikan bahwa ini tidak berarti seseorang yang lebih baik tidak dapat melakukannya ... kecuali penulisnya adalah yang terbaik.
Brian
1
Pertimbangkan peluncuran roket Ariane V pertama. Ada kesenjangan yang tidak tertangkap dengan nol yang menyebabkan roket dihancurkan. Bukan hanya itu tetapi kode yang dipermasalahkan tidak lagi memiliki nilai seketika roket dinyalakan. Pikirkan jutaan yang akan mereka tabung dengan programmer yang lebih baik.
Loren Pechtel
44

Perenang Olimpiade rata-rata dapat berenang sekitar 2,5 mil per jam di kejauhan.

Rata-rata orang (yang bisa berenang) dapat berenang sekitar 1,5 mil per jam atau jarak.

Ini berarti bahwa perenang Olimpiade rata-rata dapat berenang Selat Inggris dalam waktu sekitar 8 jam.

Maka dapat dipastikan bahwa perenang olimpiade 60% lebih cepat dari rata-rata dan bahwa perenang rata-rata akan membutuhkan waktu sekitar 13 jam untuk menyelesaikan lomba ...

Kecuali bahwa jika saya, seorang perenang rata-rata, mencoba berenang di Selat Inggris, satu-satunya cara saya akan menyeberang adalah hanyut di pantai seminggu kemudian.

Banyak aspek pemrograman seperti berenang di Selat Inggris. Itu tenggelam atau berenang. Saya bahkan tidak tahu apakah 10.000X lebih baik adalah cara yang benar-benar akurat untuk menggambarkan perbedaan antara perangkat lunak yang selesai dan perangkat lunak tidak lengkap yang tidak berfungsi.

Morgan Herlocker
sumber
31

Katakanlah ada insinyur perangkat lunak "hebat" dan insinyur perangkat lunak "rata-rata" di tim yang sama. Bagaimana Anda dapat menjelaskan bahwa seorang insinyur 10.000 kali lebih produktif? Saya tidak bisa mengerti ini, mengingat mereka berdua mengambil bagian dari fitur, bug dan investigasi, dan secara konsisten memberikan kualitas. Apakah deskripsi saya mungkin membenarkan mereka berada di atas "rata-rata"? "Bagus"?

Itu banyak "memberi" untuk insinyur perangkat lunak "rata-rata". Pada kenyataannya, insinyur perangkat lunak yang hebat memecahkan masalah dalam hitungan jam yang tidak akan pernah diselesaikan oleh insinyur rata-rata dengan benar. Insinyur perangkat lunak hebat memecahkan masalah biasa dalam sepertiga waktu dengan seperlima kode dan sepersepuluh lebih banyak bug. Kode insinyur perangkat lunak hebat berjalan dalam O (n) sedangkan kode insinyur perangkat lunak rata-rata berjalan dalam waktu O (n ^ 3). Insinyur perangkat lunak hebat dapat mengadaptasi solusinya saat Anda menunggu, sementara insinyur perangkat lunak rata-rata mengeluh tentang perubahan yang terlambat pada spesifikasi dan mengatakan akan membutuhkan berminggu-minggu untuk memenuhi persyaratan baru sekarang. Ini semua adalah perbedaan nyata yang saya lihat ketika seorang insinyur hebat mengulang pekerjaan dari insinyur pada umumnya.

kevin cline
sumber
6
+1: sayangnya itu cukup umum bahwa masalah tidak mendapatkan solusi yang benar. Sungguh gila betapa sering ada solusi dan cengkeraman yang hanya "memperbaiki" masalah langsung, tetapi hampir pasti akan menghasilkan lebih banyak masalah dalam beberapa minggu. "Tapi itu dalam beberapa minggu, mari kita biarkan diri kita di masa depan mengatasi masalah itu!"
Joachim Sauer
Perbedaan antara solusi yang bekerja dan yang tidak bekerja untuk masalah yang hampir tidak mungkin mendekati infinite, misalnya organisasi bertahan, vs. bangkrut, atau sesuatu meledak di lab dan membunuh semua insinyur (alur cerita drama TV klasik ...), dll .
hotpaw2
@ hotpaw2: Benar, saya tidak memikirkan hal yang begitu dramatis. Saya sedang memikirkan masalah dengan sedikit kompleksitas matematika, misalnya perhitungan grafik seperti semacam topologi. Seorang insinyur rata-rata dapat menghabiskan waktu berminggu-minggu menulis solusi yang lambat dan bermasalah. Seorang insinyur hebat akan memetakan persyaratan bisnis ke masalah yang terkenal, kemudian mencari perpustakaan atau algoritma yang diterbitkan.
kevin cline
9

Saya akan mencoba mengatasi ini dalam hal perbedaan:

Seorang insinyur hebat akan melakukan yang berikut ini lebih baik daripada yang rata-rata:

  • Desain - menghasilkan desain yang membutuhkan modifikasi lebih sedikit dan lebih fleksibel. Ini berarti penghematan sepanjang masa pakai perangkat lunak.
  • Fitur - ini akan dilaksanakan puasa dan menjadi implementasi yang lebih bersih.
  • Bug - akan ditemukan lebih cepat, diperbaiki dengan baik dan tidak memperkenalkan bug yang lebih sedikit di masa depan.
  • Investigasi - akan disimpulkan lebih cepat dengan resolusi dan hasil yang lebih baik.

Secara bersama-sama, ini akan menghemat banyak uang perusahaan dalam waktu pengembangan dan membuat perusahaan banyak uang dalam peluang tambahan.

Oded
sumber
4

Seorang programmer hebat sangat sering tidak hanya "mengambil bagian mereka dari fitur, bug dan investigasi" untuk mendapatkan upah. Mereka kadang-kadang berhenti dan memulai perusahaan mereka sendiri, atau bergabung dengan startup, atau memulai proyek skunkwork baru, atau, di masa lalu mungkin, bergabung dengan laboratorium R&D langit-biru yang terkenal secara nasional, dan berinovasi beberapa produk yang tidak ada yang berpikir mereka bahkan membutuhkannya , atau pemikiran mungkin dilakukan dengan perangkat lunak, sebelum wawasan, keterampilan, dan keringat programmer yang hebat itu.

Banyak "nilai" programmer ini adalah tentang imbalan proporsional untuk risiko. Pemrogram mungkin bahkan dipecat karena memikirkan produk perangkat lunak yang gila, daripada dibayar 2X atau lebih.

Apa yang terjadi dengan startup perangkat lunak sesekali: go public untuk jutaan / miliar, atau diakuisisi oleh Google atau Facebook, et.al. untuk jumlah yang serupa, jarang terjadi pada operator bubut (walaupun setidaknya satu pendiri perusahaan teknologi Silicon Valley yang sukses memiliki bubut di bengkelnya).

hotpaw2
sumber
4
".... go public untuk jutaan / miliar, ....." Meskipun ada retorika media, hal ini jarang terjadi juga bagi para insinyur perangkat lunak. Untuk setiap orang yang "berhasil", ribuan jatuh ke dalam ketidakjelasan dan / atau pergi melalui satu putaran VC terlalu banyak dan kembali ke pekerjaan 9-5 hari dengan tidak lebih dari rasa pahit di mulut mereka ...
mattnz
1
@ mattnz: Dengan kemungkinan sedikit lebih baik dari 10.000 hingga 1 peluang yang sesuai dengan nilai dugaan 10.000X programmer itu.
hotpaw2
3

Ada beberapa solusi yang hanya dapat dipecahkan oleh programmer terbaik. Melemparkan ribuan yang biasa-biasa saja tidak akan berhasil. Ini juga lebih sulit untuk mengoordinasikan upaya mereka bahkan jika mereka secara kolektif dapat menggabungkan potongan pengetahuan mereka.

Menjawab pertanyaan pada SO tidak berbeda. Ada banyak masalah di mana di luar kelompok pengembang rata-rata, seseorang dapat menemukan jawabannya. Situs web ini mungkin melakukan pekerjaan koordinasi yang jauh lebih baik daripada kebanyakan tim pengembang yang sedih.

JeffO
sumber
3

Saya pikir ada beberapa bukti empiris yang mendukung kutipan Gates. Saya ingat pernah membaca (walaupun saya tidak ingat sumbernya) bahwa dalam mengetik kolam renang perbedaan dalam keluaran (mudah diukur untuk kolam mengetik) antara mereka yang berada di persentil ke-5 dan mereka yang berada di persentil 95% adalah sekitar 3 banding 1. Tapi setelah perangkat lunak pengolah kata tersedia, rasionya naik menjadi sekitar 10 atau 20 banding 1, karena mereka yang dapat menggunakan fitur-fitur canggih dari perangkat lunak tersebut memperoleh keuntungan yang relatif lebih besar.

Agaknya untuk pengembangan perangkat lunak rasio akan lebih tinggi, karena ada lebih banyak kebebasan untuk mengambil keuntungan dari semua jenis alat, teknik, dll itu mungkin meremehkan perbedaan karena hanya mengukur apa yang mudah diukur.

Dalam sesuatu seperti mengetik atau mengoperasikan mesin bubut, orang-orang di 1% teratas mungkin cukup dekat untuk mencapai batas fisiologis dari apa yang mungkin. Dalam kasus pemrograman mereka jelas tidak (rasio berapa lama untuk menulis kode versus berapa lama untuk mengetik kode sangat besar) sehingga harus ada ruang untuk variasi yang lebih banyak.

psr
sumber
1
Wow. Bicara tentang kehilangan intinya. Setiap ukuran produktivitas programmer yang dimulai dengan "kecepatan mengetik" sebagai titik jangkar terikat untuk mendapatkan jawaban yang bodoh.
riwalk