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"?
productivity
Benturan
sumber
sumber
Jawaban:
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"
sumber
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.
sumber
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.
sumber
Saya akan mencoba mengatasi ini dalam hal perbedaan:
Seorang insinyur hebat akan melakukan yang berikut ini lebih baik daripada yang rata-rata:
Secara bersama-sama, ini akan menghemat banyak uang perusahaan dalam waktu pengembangan dan membuat perusahaan banyak uang dalam peluang tambahan.
sumber
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).
sumber
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.
sumber
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.
sumber