Harika Programcı Verimliliği - 10.000 kat farkın muhasebesi? [kapalı]


19

Büyük bir torna tezgahı operatörü, ortalama bir torna tezgahı operatörünün ücretinin birkaç katı emretmektedir, ancak büyük bir yazılım kodu yazarı, ortalama bir yazılım yazarının fiyatının 10.000 katı değerindedir. - Bill Gates

Aynı ekipte "harika" bir yazılım mühendisi ve "ortalama" bir yazılım mühendisi olduğunu varsayalım. Bir mühendisin 10.000 kat daha verimli olduğunu nasıl hesaplayabilirsiniz? Hem özelliklerinden, hatalardan hem de araştırmalardan paylarını aldıkları ve sürekli olarak kaliteyle sundukları göz önüne alındığında, bunu tam olarak anlayamıyorum. Açıklamam muhtemelen "ortalamanın" üstünde olmalarını haklı çıkarır mı? "harika"?


2
Bu soru stackoverflow için uygun olup olmadığından emin değilim, ama ben de cevapları ile ilgileniyorum.
Austin Henley

18
Alıntı büyük bir ortalama 10k kat değerinde bir fiyat , "verimlilik" orada hiçbir şey olduğunu söylüyor.
Oded

4
Aslında, büyük bir programcı ortalama bir programdan çok daha az üretken olabilir. "İşini" yapmak yerine, radardan daha iyi bir şey yaptı ve hatta üretken programcının işini ortadan kaldıran tamamen yeni bir ürün serisi yarattı.
hotpaw2

2
Emin olduğum tek şey, hem inovasyon yapmak hem de! @ # $ Bitti.
Erik Reppen

6
Abe Lincoln bir keresinde "Bir ağacı kesmek için sekiz saatim olsaydı, baltamımı keskinleştirmek için altı saatimi harcayacağım" dediğinde, bu "iyi" bir iş yapmanın hızlı bir işten çok daha ağır bastığı programlamada asla daha doğru olmaz. İyi programcı daha az üretken görünebilir, ancak önündeki tüm sorunlara hazırlanıyor.
BeardedO

Yanıtlar:


57

Teklifin amacı, birinin 10K kat daha verimli olması değil, birinin diğerinin değerinin 10K katı olmasıdır. Yazılım, arızalı bir tasarımın veya uygulamanın yıllarca hareketsiz kaldığı benzersiz bir koşula sahiptir (yanlış işlenmiş bir parça genellikle sadece "işe yaramaz" ve sahada yapmaz), ürünün bir ömrüne kadar gün başını zor durumda bırakıyor.

Herkes, tasarımdan uygulamaya, testten üretime ve bakıma geçerken bir arızayı düzeltmenin üstel maliyetine aşina olmalıdır.

Kurumsal itibarın yanı sıra olası bir yükümlülüğü de hesaba kattığınızda, sorunu önleyecek kadar iyi bilen geliştiricinin, cahil ya da naif olarak kötü bir çözüm uygulayanın 10.000 katı değerinde olduğu sonucuna varmak kolaydır.

Edit (İlkbahar 2014): "Heartbleed"


1
Bir programcıyı diğerinden 10.000 kat daha fazla yapan sorumluluğun eksik olacağı ince. Aslında bunu düşünmedim, teşekkür ederim. Yine de ölçülmesi inanılmaz zor bir şey gibi görünüyor.
TheImpact

2
@TheImpact: Kodlama yapıldıktan ve proje dünyada çıktıktan sonra genellikle belirginleştiği için "ölçmek" zordur. Performans ve Güvenilirlik ve genellikle "ortalama" bir programcının düşüncelerinden sonra; oysa büyük bir programcıdan gelen tasarımın dokusuna yerleştirilmişlerdir.
NotMe

10
+1. İyi bir yazılım geliştiricisinin değeri 100 ise, -10'dan kaç kat daha fazladır?
Nicole

3
Bir de arz ve talep konusu var. Raymond Chen: "Bu kadar gelişmiş kod yazmak için dünyada sadece beş kişiye güveniyorum ve onlardan biri değilim. - blogs.msdn.com/b/oldnewthing/archive/2011/04/15/10154245 .aspx . " Bu, özellikle güvenlikle ilgili kodlama için geçerlidir, çünkü sorunlar yıllarca fark edilmeyebilir (veya en azından beyaz şapkalar tarafından fark edilmeyebilir). Schneier, çoğu programcının programlayıcının kendisinin kesemeyeceği bir şifreleme algoritması yazabileceğini yorumlar. Bunun en iyisi birisinin bunu yapamayacağı anlamına gelmediğini not ediyorum ... yazar en iyisi değilse.
Brian

1
Ariane V roketinin ilk lansmanını düşünün. Roketin yok edilmesine neden olan, yakalanmamış bir bölünme sıfırdı. Sadece bu değil, söz konusu kod roketin yandığı anda herhangi bir değere sahip olmayı bırakmıştı. Daha iyi bir programcıyla kurtarabilecekleri milyonları düşünün.
Loren Pechtel

44

Ortalama olimpik yüzücü, uzaktan saatte yaklaşık 2,5 mil yüzebilir.

Ortalama bir kişi (yüzebilen) saatte yaklaşık 1,5 mil yüzebilir.

Bu, ortalama bir olimpik yüzücünün yaklaşık 8 saat içinde İngiliz Kanalı'nda yüzebileceği anlamına gelir.

O zaman olymic yüzücünün ortalamadan% 60 daha hızlı olması ve ortalama yüzücünün yarışı tamamlaması yaklaşık 13 saat sürmesi mantıklı olacaktır ...

Ortalama bir yüzücü olsaydım, İngiliz Kanalı'nı yüzmeye teşebbüs edersem, karşılaşacağım tek yol bir hafta sonra kıyıda yıkandı.

Programlamanın birçok yönü İngiliz Kanalı'nı yüzmeye benziyor. Lavabo veya yüzmek. 10.000X'in daha iyi çalışıp çalışmayan ve tamamlanmamış yazılım arasındaki farkı tanımlamanın doğru bir yolu olup olmadığını bile bilmiyorum.


31

Aynı ekipte "harika" bir yazılım mühendisi ve "ortalama" bir yazılım mühendisi olduğunu varsayalım. Bir mühendisin 10.000 kat daha verimli olduğunu nasıl hesaplayabilirsiniz? Hem özelliklerinden, hatalardan hem de araştırmalardan paylarını aldıkları ve sürekli olarak kaliteyle sundukları göz önüne alındığında, bunu tam olarak anlayamıyorum. Açıklamam muhtemelen "ortalamanın" üstünde olmalarını haklı çıkarır mı? "harika"?

Bu "ortalama" bir yazılım mühendisi için bir çok "hediye" dir. Gerçekte, büyük yazılım mühendisi, ortalama bir mühendisin asla doğru bir şekilde çözemeyeceği sorunları saatlerce çözer . Büyük yazılım mühendisi sıradan sorunları üçte bir oranında kodun beşte biri kadar kod ve onda biri kadar hata ile çözüyor. Ortalama yazılım mühendisinin kodu O (n ^ 3) zamanında çalışırken, büyük yazılım mühendisinin kodu O (n) olarak çalışır. Büyük bir yazılım mühendisi çözümünü beklerken adapte edebilirken, ortalama bir yazılım mühendisi spesifikasyondaki geç değişikliklerden şikayet ediyor ve şimdi yeni gereksinimleri karşılamanın haftalar süreceğini söylüyor. Bunların hepsi, büyük bir mühendis ortalama bir mühendisin çalışmasını yeniden yaptığında gördüğüm gerçek farklılıklar.


6
+1: maalesef sorunların doğru çözümleri alamaması oldukça yaygın. Acil sorunu sadece "çözen" geçici çözümlerin ve debriyajların ne kadar sık ​​olduğu deliliktir, ancak birkaç hafta içinde daha da fazla sorun üreteceği neredeyse kesindir . "Ama bu birkaç hafta içinde, gelecekteki benliklerimizin bu sorunlarla başa çıkmasına izin verelim!"
Joachim Sauer

Neredeyse imkansız bir soruna çalışan ve çalışmayan bir çözüm arasındaki fark, sonsuzdur, örneğin organizasyon hayatta kalır, iflas eder veya laboratuarda bir şey patlar ve tüm mühendisleri öldürür (klasik TV dizisi hikaye çizgisi ...), vb. .
hotpaw2

@ hotpaw2: Doğru, çok dramatik bir şey düşünmüyordum. Biraz matematiksel karmaşıklığı olan problemleri düşünüyordum, örneğin topolojik sıralama gibi grafik hesaplamaları. Ortalama bir mühendis haftalarca yavaş ve buggy bir çözüm yazabilir. Büyük bir mühendis, işletme gereksinimlerini bilinen bir soruna eşler, ardından yayınlanmış bir kütüphane veya algoritma arar.
kevin cline

9

Bunu farklılıklar açısından ele almaya çalışacağım:

Büyük bir mühendis aşağıdakileri ortalama birinden daha iyi yapar:

  • Tasarım - daha az modifikasyon gerektiren ve daha esnek tasarımlar üretin. Bu, yazılımın ömrü boyunca tasarruf anlamına gelir.
  • Özellikler - bunlar oruçlu olacak ve daha temiz uygulamalar olacak.
  • Hatalar - daha hızlı bulunacak, iyi sabitlenecek ve gelecekteki hatalara neden olmayacak.
  • Soruşturmalar - daha iyi kararlar ve sonuçlarla daha hızlı sonuçlandırılacak.

Birlikte ele alındığında, bu olur kurtarmak geliştirme zamanında Şirketin parasından ve yapmak ekstra fırsatlar Şirketin parasından.


4

Büyük bir programcı genellikle bir ücret kazanmak için sadece "özellik, hata ve soruşturma paylarını üstlenmez". Bazen kendi şirketlerinden ayrılırlar ve bir şirkete girerler veya yeni bir skunkworks projesine başlarlar veya eski günlerde ulusal olarak tanınan mavi gökyüzü Ar-Ge laboratuvarına katılırlar ve hiç kimsenin bile ihtiyaç duymadıklarını düşünmeyen bir ürünü yenilerler ya da düşünce, büyük programcıya ait içgörü, beceri ve terden önce yazılımla ilgiliydi.

Bu programcı "değer" in çoğu risk için orantılı ödül ile ilgilidir. Programcı, 2X veya daha fazla ödeme yapmak yerine, bu tür çılgın yazılım ürünlerini düşündüğü için kovulmuş olabilir.

Ara sıra bir yazılım başlangıcında ne olur: milyon / milyarlarca halka açılma veya Google veya Facebook tarafından edinme, et.al. benzer miktarlarda, torna operatörlerine nadiren olur (en az bir başarılı Silikon Vadisi teknoloji şirketi kurucusunun atölyesinde bir torna olmasına rağmen).


4
“.... milyonlarca / milyarlarca halka açılıyor, .....” Medya söylemine rağmen bu durum yazılım mühendisleri için de nadiren oluyor. "Bunu yapan" herkes için, binlerce kişi belirsizliğe düşüyor ve / veya çok fazla VC mermisi olsa da ve ağzında acı bir
tattan

1
@mattnz: Bu programcının 10,000X değerinde olduğu iddia edilen 10.000 ile 1 arasında olasılıkla biraz daha iyi oranlarla.
hotpaw2

3

Sadece en iyi programcıların çözebileceği bazı çözümler var. Binlerce vasat atmak işe yaramaz. Bilgilerinin parçalarını toplu olarak birleştirseler bile çabalarını koordine etmek daha zordur.

SO ile ilgili soruları cevaplamak farklı değildir. Bir grup ortalama geliştiriciden, cevap bulabileceği birçok sorun var. Bu web siteleri muhtemelen çabaları koordine etmek için üzücü olan çoğu geliştirme ekibinden daha iyi bir iş çıkarır.


3

Bence Gates'in sözünü destekleyen bazı ampirik kanıtlar var. Yazma havuzlarında, 5. yüzdelik dilim ile% 95 yüzdelik dilimdekiler arasındaki çıktı farkının (bir yazma havuzu için kolayca ölçülebilir) 3 ila 1 gibi bir şey olduğunu okuduğumu hatırlıyorum (kaynağı hatırlamıyorum). kelime işlemci yazılımı kullanıma sunulduktan sonra, oran 10 veya 20'ye 1'e yükseldi, çünkü yazılımın gelişmiş özelliklerini kullananlar daha da göreceli avantaj elde ettiler.

Muhtemelen yazılım geliştirme için bu oran daha da yüksek olacaktır, çünkü her türlü araç, teknik, vb. Avantajlardan yararlanmak için daha da fazla özgürlük vardır. bu muhtemelen farkı hafife alıyor çünkü sadece ölçülmesi kolay olanı ölçüyor.

Bir torna tezgahı yazmak veya çalıştırmak gibi bir şeyde, en üstteki% 1'lik insanlar muhtemelen mümkün olanın fizyolojik sınırlarına çarpmaya oldukça yakındır. Programlama durumunda bunlar açık değildir (kod yazmanın ne kadar sürdüğüne oranla kod yazmanın ne kadar sürdüğü muazzamdır), bu yüzden çok daha fazla varyasyon için yer olmalıdır.


1
Vay. Konuyu kaçırma hakkında konuşun. Bir çapa noktası olarak "yazma hızı" ile başlayan her türlü programcı üretkenliği, bir asinine cevap almak zorundadır.
riwalk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.