Grande produtividade do programador - respondendo por 10.000 vezes a diferença? [fechadas]

19

Um grande operador de torno comanda várias vezes o salário de um operador de torno médio, mas um grande gravador de código de software vale 10.000 vezes o preço de um gravador de software comum. - Bill Gates

Digamos que haja um "ótimo" engenheiro de software e um "médio" engenheiro de software na mesma equipe. Como você pode explicar que um engenheiro é 10.000 vezes mais produtivo? Não consigo entender isso, já que os dois assumem sua parte de recursos, bugs e investigações, e entregam consistentemente com qualidade. Minha descrição justificaria que eles estivessem acima da "média"? "ótimo"?

O impacto
fonte
2
Não tenho certeza se esta pergunta é adequada para o stackoverflow, mas também estou interessado nas respostas.
Austin Henley
18
A citação diz que uma ótima vale 10k vezes o preço de uma média, nada sobre "produtividade" lá.
Oded
4
De fato, um grande programador pode ser muito menos produtivo do que o médio. Em vez de fazer seu "trabalho", ele fez algo melhor que estava fora do radar e talvez até tenha criado uma nova linha de produtos que obsoleta o trabalho do programador produtivo.
hotpaw2
2
A única coisa de que tenho certeza é que você precisará de ambos, se quiser inovar e terminar! @ # $.
Erik Reppen
6
Abe Lincoln disse uma vez: "Se eu tivesse oito horas para cortar uma árvore, passaria seis horas afiando meu machado", isso nunca é mais verdadeiro na programação, onde fazer um "bom" trabalho supera em muito o trabalho rápido. O bom programador pode parecer menos produtivo, mas está se preparando para todos os problemas que estão pela frente.
precisa saber é o seguinte

Respostas:

57

O ponto da citação não é que um seja 10K vezes mais produtivo, é que um é 10K vezes o valor do outro. O software tem a condição única de que um projeto ou implementação defeituoso possa ficar inativo por anos (uma peça usinada incorretamente geralmente "simplesmente não funciona" e não entra em campo), bem como no ciclo de vida do produto até que um dia ele levanta a cabeça em uma situação intratável.

Todos devem estar familiarizados com o custo exponencial de corrigir um defeito à medida que ele passa do design, para a implementação, para o teste, para a produção e para a manutenção.

Quando você considera a possível responsabilidade e a reputação corporativa, é fácil concluir que o desenvolvedor que sabia o suficiente para evitar o problema vale 10.000 vezes o que implementou uma solução ruim por ignorância ou ingenuidade.

Editar (primavera de 2014): "Heartbleed"

Dave Nay
fonte
1
Sutil que seria a falta de responsabilidade que faz um programador valer 10.000 vezes mais que outro. Não pensei nisso originalmente, obrigado. Parece uma coisa incrivelmente difícil de medir.
TheImpact
2
@ TheImpact: É difícil "medir", pois geralmente só se torna aparente após a codificação e o projeto estar no mundo. Desempenho e Confiabilidade e geralmente após pensamentos de um programador "médio"; enquanto eles são incorporados ao próprio tecido do design que vem de um grande programador.
NotMe 26/09
10
+1. Se o valor de um bom desenvolvedor de software é 100, quantas vezes mais é que -10?
Nicole
3
Há também a questão da oferta e demanda. Raymond Chen: "Confio em apenas cinco pessoas no mundo para escrever um código avançado, e não sou uma delas. - blogs.msdn.com/b/oldnewthing/archive/2011/04/15/10154245 .aspx . " Isso é particularmente verdadeiro na codificação relacionada à segurança, pois os problemas podem passar despercebidos (ou pelo menos despercebidos pelos chapéus brancos) por anos. Schneier comenta que a maioria dos programadores pode escrever um algoritmo de criptografia que o próprio programador não pode quebrar. Observo que isso não implica que alguém melhor não possa fazê-lo ... a menos que o escritor seja o melhor.
18712 Brian
1
Considere o primeiro lançamento do foguete Ariane V. Houve uma divisão não capturada por zero que causou a destruição do foguete. Não apenas isso, mas o código em questão deixou de ter qualquer valor no instante em que o foguete foi aceso. Pense nos milhões que eles teriam economizado com um programador melhor.
Loren Pechtel 26/09
44

O nadador olímpico médio pode nadar cerca de 4 km por hora à distância.

A pessoa média (quem sabe nadar) pode nadar cerca de 2,4 quilômetros por hora a uma distância.

Isso significa que o nadador olímpico médio pode nadar no Canal da Mancha em cerca de 8 horas.

Seria lógico então que o nadador olímico é 60% mais rápido que a média e que o nadador médio levaria cerca de 13 horas para completar a corrida ...

Exceto que, se eu, um nadador comum, tentasse nadar no Canal da Mancha, a única maneira de atravessar é na praia uma semana depois.

Muitos aspectos da programação são como nadar no canal inglês. É afundar ou nadar. Eu nem sei se 10.000 vezes melhor é realmente uma maneira exata de descrever a distinção entre software concluído que funciona e software incompleto que não funciona.

Morgan Herlocker
fonte
31

Digamos que haja um "ótimo" engenheiro de software e um "médio" engenheiro de software na mesma equipe. Como você pode explicar que um engenheiro é 10.000 vezes mais produtivo? Não consigo entender isso, já que os dois assumem sua parte de recursos, bugs e investigações, e entregam consistentemente com qualidade. Minha descrição justificaria que eles estivessem acima da "média"? "ótimo"?

São muitas "sugestões" para um engenheiro de software "médio". Na realidade, o grande engenheiro de software resolve problemas em horas que o engenheiro médio nunca resolverá corretamente. O grande engenheiro de software resolve problemas comuns em um terço do tempo, com um quinto do código e um décimo do número de bugs. O código do grande engenheiro de software é executado em O (n) enquanto o código médio do engenheiro de software é executado em O (n ^ 3). O grande engenheiro de software pode adaptar sua solução enquanto você espera, enquanto o engenheiro de software médio reclama das alterações tardias nas especificações e diz que levará semanas para atender aos novos requisitos agora. Todas essas são diferenças reais que vi quando um grande engenheiro refaz o trabalho do engenheiro comum.

Kevin Cline
fonte
6
+1: infelizmente, é bastante comum que os problemas não obtenham soluções corretas. É insano a frequência com que existem soluções alternativas e embreagens que apenas "corrigem" o problema imediato, mas é quase certo que produzem ainda mais problemas em poucas semanas. "Mas daqui a algumas semanas, vamos deixar o nosso futuro lidar com esses problemas!"
Joachim Sauer
A diferença entre uma solução funcional e uma não funcional para um problema quase impossível se aproxima do infinito, por exemplo, a organização sobrevive, fica falida ou algo explode no laboratório e mata todos os engenheiros (história clássica de drama de TV ...), etc. .
hotpaw2
@ hotpaw2: É verdade, eu não estava pensando em nada tão dramático. Eu estava pensando em problemas com um pouco de complexidade matemática, por exemplo, cálculos de gráficos como classificação topológica. Os engenheiros comuns podem passar semanas escrevendo uma solução lenta e com erros. Um grande engenheiro mapeará os requisitos de negócios para um problema conhecido e procurará uma biblioteca ou algoritmo publicado.
Kevin cline #
9

Vou tentar resolver isso em termos das diferenças:

Um grande engenheiro fará o seguinte melhor que o médio:

  • Design - produza designs que precisarão de menos modificações e serão mais flexíveis. Isso se traduz em economia ao longo da vida útil do software.
  • Recursos - estes serão implementados em jejum e serão implementações mais limpas.
  • Bugs - serão encontrados mais rapidamente, serão bem corrigidos e não apresentarão menos bugs futuros.
  • Investigações - serão concluídas mais rapidamente com melhores resoluções e resultados.

Tomados em conjunto, estes seriam salvar os lotes da empresa de dinheiro em tempo de desenvolvimento e fazer os lotes da empresa de dinheiro em oportunidades extras.

Oded
fonte
4

Um grande programador muitas vezes não apenas "assume sua parte de recursos, bugs e investigações" para ganhar um salário. Às vezes, eles saem e iniciam sua própria empresa, ou ingressam em uma startup, ou iniciam um novo projeto de skunkworks, ou, nos velhos tempos, talvez, ingressaram em um laboratório de pesquisa e desenvolvimento de renome nacional e inovam em algum produto que ninguém acha que precisava. , ou era possível pensar em software antes da percepção, habilidade e suor desse grande programador.

Grande parte desse "valor" do programador é sobre recompensa proporcional pelo risco. O programador pode até ter sido demitido por pensar em produtos de software malucos, em vez de receber 2X mais ou menos.

O que acontece com uma ocasional inicialização de software: tornar-se público por milhões / bilhões ou ser adquirido pelo Google ou Facebook, et.al. por quantias semelhantes, raramente acontece com operadores de torno (embora pelo menos um dos fundadores bem-sucedidos da empresa de tecnologia do Vale do Silício tenha um torno em sua oficina).

hotpaw2
fonte
4
"... tornando-se público por milhões / bilhões, ....." Apesar da retórica da mídia, isso raramente acontece também para os engenheiros de software. Para todo mundo que "faz isso", milhares caem na obscuridade e / ou passam por muitas rodadas de VC e voltam para um trabalho de 9 a 5 dias com nada mais que gosto amargo na boca ...
mattnz
1
@mattnz: Provavelmente um pouco melhor do que as chances de 10.000 para 1 correspondentes ao valor alegado de 10.000 vezes do programador.
hotpaw2
3

Existem algumas soluções que apenas os melhores programadores serão capazes de resolver. Jogar milhares de medíocres não funcionará. Também é mais difícil coordenar seus esforços, mesmo que eles possam combinar coletivamente as partes de seu conhecimento.

Responder a perguntas sobre SO não é diferente. Existem muitos problemas em que, dentre um grupo de desenvolvedores comuns, é possível encontrar a resposta. Esses sites provavelmente coordenam esforços muito melhor do que a maioria das equipes de desenvolvimento, o que é triste.

JeffO
fonte
3

Eu acho que há alguma evidência empírica que apóia a citação de Gates. Lembro-me de ler (embora não me lembre da fonte) que, nos pools de digitação, a diferença na saída (facilmente mensurável para um pool de digitação) entre aqueles no percentil 5 e aqueles no percentil 95% era algo como 3 a 1. Mas depois que o software de processamento de texto ficou disponível, a proporção subiu para algo entre 10 ou 20 para 1, porque aqueles que podiam usar os recursos avançados do software ganharam ainda mais vantagens relativas.

Presumivelmente, para o desenvolvimento de software, a proporção seria ainda maior, pois há ainda mais liberdade para tirar proveito de todos os tipos de ferramentas, técnicas, etc. É mais difícil medir as diferenças, mas a maioria das tentativas ocorre com pelo menos 10 para 1 e presumivelmente isso está subestimando a diferença, porque está apenas medindo o que é fácil de medir.

Em algo como digitar ou operar um torno, as pessoas no top 1% provavelmente estão muito perto de atingir os limites fisiológicos do que é possível. No caso da programação, eles claramente não são (a proporção de quanto tempo leva para escrever o código versus quanto tempo leva para digitar o código é enorme), portanto, deve haver espaço para muito mais variações.

psr
fonte
1
Uau. Fale sobre perder o objetivo. Qualquer medida da produtividade do programador que comece com a "velocidade de digitação" como ponto de ancoragem é obrigada a obter uma resposta asinina.
riwalk