O que diferencia os programadores excepcionais dos realmente bons? [fechadas]

59

Você sabe quem eles são. Eles são as estrelas do rock da programação:

  • Eles codificam 10X mais rápido.

  • O código deles simplesmente funciona.

  • Eles não apenas conhecem o idioma principal por dentro e por fora, mas também sabem como funciona sob o capô.

  • Eles sabem a resposta para quase todas as perguntas antes que você faça.

  • Alguns deles inventaram os princípios de programação que todos usamos.

  • E eles tendem a ser estranhamente humildes também.

O que há com essas pessoas? Existe algo no processo de pensamento que é fundamentalmente diferente do programador acima da média? Ou eles são simplesmente pessoas muito talentosas que trabalham duro?

Em outras palavras: como posso ser como eles? Sei o que acho que preciso aprender para ser tão bom, mas parece que levarei os próximos dez anos para aprendê-lo, e então meu conhecimento ficará obsoleto.

Robert Harvey
fonte
49
Os programadores excepcionais não têm um bloco try-catch em torno de seu código. zing
11
@ John: Eu discordo totalmente, eu já vi a coisa de 10x tocar repetidas vezes e parece verdadeira, infelizmente o suficiente. Acho que grande parte do problema é que a maioria dos programadores profissionais não pode realmente programar, e alguns nem sequer conseguem programar coisas simples. Não é que um codificador divino esteja 10x acima de um bom codificador, mas um codificador divino esteja 10x acima do pior outro codificador de sua organização ou equipe.
Pax Noctis
10
@ennec: Faça ou não. Não existe try.
mmyers
29
A experiência de 18 anos para uma língua inventada há 15 anos é bastante impressionante!
Ricky Clarkson
15
@Tjaart - Não, é um número sólido e estudos desde a década de 1960 demonstraram isso. O estudo original foi realizado no final da década de 1960 por Sackman, Erikson e Grant. Eles estudaram programadores profissionais com uma média de 7 anos de experiência e descobriram que a proporção do tempo inicial de codificação entre os melhores e os piores programadores era de cerca de 20 para 1; a proporção de tempos de depuração acima de 25 para 1; do tamanho do programa 5 para 1; e a velocidade de execução do programa é de 10 para 1. Eles não encontraram relação entre a quantidade de experiência de um programador e a qualidade ou produtividade do código. (Obrigado a Steve McConnell).
Jon Hopkins

Respostas:

88
  • Humilde: Um programador excepcional nunca afirma que seu código é o melhor, na verdade ele estará sempre procurando um caminho melhor (todas as chances que tiverem) .

  • Paciente: Um programador excepcional terá paciência ilimitada (Isso não significa que eles perderão dias com um problema. Consulte: Solução de problemas) .

  • Solucionador de problemas: Um programador excepcional poderá resolver um problema em minutos que podem levar dias para o programador médio.

  • Curioso: Um programador excepcional não conseguirá resistir a tentar descobrir por que algo ocorre.

  • Engenheiro: Um programador excepcional projetará sistemas em vez de manchar uma mistura de estruturas (isso não significa que elas não usarão estruturas) .

ChaosPandion
fonte
5
Eu gosto do seu ponto de "engenheiro"!
Cedric H.
1
@Chaos - O programador mais rápido que conheço construiu seu próprio framework web. Penso que coisas assim tornam alguém melhor e mais rápido. Obrigado pela sua resposta. Isso me faz sentir menos impotente por sempre querer re-projetar as coisas.
precisa saber é o seguinte
11
"Engenheiro" é um ponto crucial. Cada linha de código criará uma base sólida, em vez de adicionar a uma criação precária do tipo Jenga.
Alex Feinman
5
Não vou -1, mas como contraponto, me qualifico para todos esses; e eu ainda sou péssima. (A menos que a média de programadores para o meu excepcional que me comparar com são realmente terrível)
Steven Evers
1
@ Caos, "Curioso", mas apenas até certo ponto.
28

Você acertou muito no seu último ponto:

"E eles tendem a ser estranhamente humildes também."

Eu acho que é uma combinação de humildade - não apenas externamente, mas também dentro de suas mentes. Eles aceitam estar errados, cometer um erro e se virar rapidamente de frustração. Muitos programadores tentam alguma coisa, falham e, em seguida, desenvolvem-se muito emocionalmente rapidamente, um estado que é anátema para escrever um bom código. Você precisa aceitar que não é perfeito e que vai estragar (com frequência!), E que a melhor coisa a fazer é aprender a se recuperar rapidamente quando estragar. É uma confiança humilde , como "Eu sei que vou estragar tudo, mas também sei que, se continuar tentando, chegarei lá eventualmente".

Há um ditado na PNL: "Não há falha, apenas feedback". Para ser um programador de estrelas do rock, acho que você precisa abraçar isso. Não há nada que você não possa codificar. Você pode ser lento no começo, mas se você continuar tentando e se recusar a parar quando você falhar ou estragar alguma coisa, você cumprirá. E nesse processo, você aprenderá todos os truques mentais que precisa para se tornar um dos melhores.

É claro que o conselho é tão bom quanto a sua fonte, então ... tudo é apenas a minha opinião.

Pax Noctis
fonte
“Não falhei, encontrei 10000 maneiras que não funcionam” - Thomas Edison
ninjalj 27/09/10
1
A única maneira de aprender rápido é aceitar que você pode melhorar e querer.
25

Eles se preocupam profundamente com seu código.

JaredPar
fonte
2
Sem dúvida verdade.
Robert Harvey
3
Um programador ruim não pode se importar profundamente com o código? Mesmo que não seja tão bom?
Walter Walter
2
@Walter eles poderiam, mas eu nunca vi isso. O mais próximo que eu vi são os programadores iniciantes que se preocupam profundamente com seu código, mas ainda cometem erros de iniciantes (ninguém está imune). Quando esses erros foram apontados, foram corrigidos rapidamente e raramente repetidos.
precisa saber é o seguinte
15

Pessoalmente, os melhores programadores que conheço / conheciam entenderam o básico e NÃO eram os especialistas em qualquer idioma. Eles simplesmente tinham experiência suficiente em quase tudo. O canônico "Valete de Todos os Negócios".

É mais do que ciência fundamental, existe um valor significativo na experiência em operações reais. Exemplos, aqueles que entendem a filosofia do Unix e, portanto, podem resolver problemas desconhecidos com várias ferramentas fornecidas (IOW, eles sabiam onde procurar) valorizam muito mais o especialista em Java que codificou uma solução encadeada e paralela.

Os programadores de destaque também respeitam aqueles que vieram antes deles. Eles não odeiam modelos de dados relacionais ou se encolhem quando veem o SQL como uma API formal, nem se opõem ao FORTRAN em matemática. Eles sabem que o OO não é o fim de tudo e, acima de tudo, entendem que a programação é uma ART, não uma ciência.

Jé Queue
fonte
2
Para os ficheiros de texto grep, awk, sort, e uniqpode responder um monte de perguntas. Se você tiver perltambém, ainda mais!
2
Eu acho que é um artesanato, não ciência nem arte.
precisa
11

Quando comecei, estava trabalhando com esse cara que achei absolutamente brilhante em tudo o que ele fez em termos de programação. Ele provavelmente ainda é, mas mudou-se para ser o diretor de uma empresa no sudeste da Ásia agora.

De qualquer forma, ele manteve as coisas simples, e as coisas simples funcionam. Nunca querendo escrever mais linhas de código do que o necessário, tudo o que ele fez funcionou. Eu estava brincando durante um ano só para chegar perto do nível dele. A outra coisa, porém, é o tempo. Ele estava fazendo as coisas há muito mais tempo do que eu fazia na época, e ele teve a chance de fazer essas perguntas exatas várias vezes, até que ele soube (aparentemente) todas as respostas.

Ele também não tinha medo de fazer perguntas. Eu acho que é a maior coisa.

user2358
fonte
Parece que eu sou tudo pronto (ver a minha pergunta contar com SO)
2
@ acidzombie24 - Ou ... você acabou de começar.
precisa saber é o seguinte
haha orokusaki. 1
"Manter as coisas simples" é uma das belezas do desenvolvimento orientado a testes. Eu não posso recomendar o suficiente.
10

Matriz de Competências para Programadores

Muitos tópicos para ajudar a identificar qual é o seu nível em tópicos de programação.

Maniero
fonte
Conhecimento do stackoverflow: 2 ^ n: nunca ouvi falar dele O (n ^ 2): coloca regularmente algumas perguntas fáceis sobre SO O (n): coloca questões interessantes e conhece os programadores.E O (log (n)): Início usuário em um site SE relacionado ao CS. ;-)
shuhalo
Muito obrigado por este link! Isso me deu confiança em relação ao que sei e me indicou quais áreas devo melhorar.
oksayt
7

Aprendi a resposta a essa pergunta em um livro sobre o poker do Texas Hold'em, mas isso se aplica a todos os esforços frustrantes. Os melhores codificadores nunca ficam inclinados. Continuar no Tilt é o momento em que algo não funciona como o esperado e você responde de uma maneira que cria erros exponenciais no aplicativo em geral. No torneio de poker, você faz apostas ruins e é eliminado.

Na programação, a inclinação faz com que você arranque os cabelos e escreva patches ridículos de código que só funcionam em determinadas instâncias do seu aplicativo. O Tilt faz com que os programadores ignorem as necessidades do projeto como um todo, buscando gratificação instantânea para resolver o problema imediato agora. Muitas vezes, o problema é resolvido hoje, mas o aplicativo sofre amanhã.

Os melhores codificadores adotam o conceito de inclinação e o gerenciam de uma maneira que lhes permita analisar sempre os problemas de uma perspectiva externa. Se isso falhar, beba um pouco de cafeína.

JMC
fonte
o que você sugere fazer como atividade para superar a "inclinação" durante a programação? Eu entendo o tempo todo e acabo recodificando coisas o tempo todo.
precisa saber é o seguinte
@orokusaki - A atividade mais fácil para evitar a inclinação é mudar uma questão fundamental que os programadores se perguntam todos os dias. Quando encarregado de um problema, em vez de pensar: "Por que devo resolver o problema dessa maneira?" pergunte: "Por que devo evitar resolvê-lo dessa maneira?" Freqüentemente, a resposta para o motivo de você não resolver um problema com uma solução específica fornecerá um conjunto de indicadores para encontrar uma solução melhor.
JMC 21/09
6

Programadores excepcionais:

  • Preocupe-se com o código
  • Preocupe-se com os usuários que usam seu código
  • Preocupe-se com as pessoas que manterão seu código
  • Preocupe-se com a produtividade
  • Preocupe-se com o processo, não apenas com o produto

Duas coisas sobre o fator "10x":

  1. Ele deve ser aplicado de ponta a ponta. Não é bom escrever código 10 vezes mais rápido se demorar 10 vezes mais para testar, retrabalhar e manter.
  2. Eu acredito que o fator "10x" é um reflexo de quão baixo é o número de programadores, e não o quão bom é o número de programadores.
darreljnz
fonte
3

a maioria deles parece reservada e nada de especial. alguns deles são super-inteligentes. eles preferem verificar / depurar as coisas duas vezes de todos os pontos de vista possíveis; o software deles é o mais sem erros do mundo: p IMO alguns programadores podem ser mais lentos, mas a qualidade é melhor, mesmo as pessoas comuns podem entender como o software funciona!

Eu tenho um amigo que escreveu seu primeiro programa ASM aos 10 anos, agora ele tem 24 anos, não terminou a universidade, mas isso não o impediu de criar sua própria empresa, ganhar milhões :), mas pelo que eu vejo ele é hábil em tudo :)

programadores excepcionais provavelmente diriam que esse código pode ser codificado de outra maneira - melhor do que dizer que é totalmente errado e menor a reputação de outros programadores :)

"O que há com essas pessoas? Existe algo no processo de pensamento que é fundamentalmente diferente do programador acima da média? Ou eles são simplesmente pessoas muito talentosas que trabalham duro?"

acho que nascem assim, está dentro do DNA: pi não sabe sobre o processo de pensamento, mas o melhor programador que já conheci teve epilepsia

shegy
fonte
3

Poucas coisas diferenciam um excepcional de um típico.

Excepcional:

  1. Altamente apaixonado por seu trabalho e se esforça para entregar uma obra-prima.

  2. Desempenho e qualidade são a imagem geral em sua mente, mesmo antes do início da codificação.

  3. Eles pensam em melhoria contínua após cada lançamento.

  4. Eles mantêm vigilância rigorosa sobre as alternativas e são os primeiros a adotar.

  5. Seu tema na vida profissional é: "Escreva menos, transmita mais".

  6. Eles continuam pensando em perspectivas lógicas, mesmo quando não estão codificando.

Típica

  1. Às vezes, um pouco apaixonada, mas se esforça para entregar porque, afinal, é um trabalho. Se não for uma obra-prima, tudo bem. Pelo menos entregue no prazo.

  2. Pensará no desempenho mais tarde, de qualquer maneira, os PCs são rápidos o suficiente nos dias de hoje.

  3. Melhorar apenas quando não houver opção para salvar um trabalho.

  4. Não há tempo para explorar outras tecnologias. Atenha-se ao que seu trabalho exige agora. Aprenderá outras coisas quando surgir a necessidade.

  5. Seu tema é: "Faça o que é pedido e chegue a casa a tempo".

RPK
fonte
2

Programadores excepcionais aplicam os princípios espartanos .

Imagem que chama a atenção:

insira a descrição da imagem aqui

Este artigo: http://willcode4beer.com/design.jsp?set=codeReduction

E esta citação:

Qualquer tolo pode tornar as coisas maiores, mais complexas e mais violentas. É preciso um toque de gênio - e muita coragem - para se mover na direção oposta. - Albert Einstein

Ates Goral
fonte
5
imagem é ilustração da notação Big-O.
0

Auto-promoção , e quero dizer isso da melhor maneira possível. Ter um trabalho como programação, especialmente em equipe, significa que não é imediatamente óbvio onde sua contribuição pessoal se encaixa no cenário geral ou quem foi responsável por qual parte. As pessoas de quem ouvimos falar e aprendemos como "grandes programadores" são da OMI aquelas que dominaram a arte de divulgar suas contribuições sem parecer egoístas ou egocêntricas. Em muitos casos, isso ocorre ao criar as ferramentas, bibliotecas e software nos quais confiamos para ganhar nosso pão diário.

Gaurav
fonte
3
Talvez, mas acredito que John Resig é bem conhecido por suas notáveis ​​realizações com Javascript e jQuery. O material dele é amplamente usado porque é ótimo, não porque John tem ótimas habilidades de marketing.
Robert Harvey
@Robert Harvey - Ou é? Ele é sem dúvida um grande programador, mas talvez o que o tenha tornado realmente bom de "excepcional" tenha sido o fato de que suas coisas ganharam popularidade e ele foi vítima de seu próprio sucesso, tendo que acompanhar a crescente demanda? Quando você realmente gosta de uma camisa, mas é muito grande, não tente crescer antes de comprá-la. Já se foi então. Compre-o e tente o seu melhor para crescer nele.
orokusaki
Robert: Definitivamente. Mas se ele tivesse compartilhado o jQuery com alguns amigos e no trabalho, poderíamos nunca saber sobre ele. Nós o conhecemos como um grande programador precisamente porque ele teve a coragem, não apenas para compartilhar o jQuery com o mundo, mas também para promovê-lo ativamente como uma maneira melhor de fazer o Javascript. Eu gostaria de ver mais programadores (inclusive eu) aprendendo como fazer isso de forma eficaz.
Gaurav
1
-1 Embora isso possa ser verdade aos olhos dos gerentes quando se trata de autopromoção, nunca o vi funcionar entre outros desenvolvedores. Entre os desenvolvedores, não demora muito para descobrir quem é bom, quem é mediano e quem é péssimo. A autopromoção nem faz parte da equação.
Dunk
1
@ Gauruv - Eu acho que os programadores "rockstar" são os que conseguem enfrentar problemas difíceis e torná-los realmente simples. Portanto, eu não acho que um pedaço de código seja incrível se eu olhasse para ele e dissesse "Woah - quem escreveu isso"? Enquanto eu pensava fora da escola, a experiência do mundo real me ensinou que a inteligência no código não é uma virtude. Estou mais impressionado com as pessoas que não preciso me preocupar se as coisas funcionam ou não, porque eu já sei que funciona sem precisar olhar para elas. Essas pessoas são poucas e distantes entre si e são os verdadeiros programadores do rock star.
Dunk
0

1º - Eles sabem o que é cortado quando enfrentam o prazo final.

Gedean Dias
fonte
0

Artigo muito bom: The Free Electron (de randsinrepose.com)

Peço desculpas por não resumir o artigo aqui, mas os pontos não são facilmente separados da prosa.

Nicole
fonte
Não diz muito sobre o porquê. Mas sim, essas são as pessoas de quem estou falando.
Robert Harvey
Citando o artigo: "Um elétron livre pode fazer qualquer coisa quando se trata de código. Eles podem escrever um aplicativo completo do zero, aprender um idioma em um fim de semana e, o mais importante, podem mergulhar em uma pilha enorme de código de espaguete, faça sentido e realmente faça funcionar. Você pode construir um negócio inteiro em torno de um elétron livre. Eles são bons. "
Robert Harvey
0

Eles programam puramente por intuição. Não há necessidade de pensar que apenas flui .

John Shaft
fonte
Sem dúvida, verdadeiro para pessoas com experiência em qualquer profissão, não apenas programação. O que diferencia especificamente os programadores excepcionais ?
Robert Harvey
Bem, eu não sou um deles, então definitivamente não posso responder a essa pergunta com 100% de certeza, mas não acho que não seja sobre conhecimento, mas sobre o processo de pensamento (subconscientemente). Eu acho que as pessoas que são excepcionais em qualquer coisa têm a capacidade de eliminar qualquer interferência em seus pensamentos e ver algo de uma forma muito simples. Quanto mais simples algo é, mais fácil é processar.
John
3
-1 Isso é tão errado em todos os aspectos possíveis. Eu gostaria de poder -100. Eu diria exatamente o oposto. Eles pensam completamente e resolvem o problema antes que eles comecem.
Dunk
@ Dunk - eu discordo. Com o que você escreveu, eu diria que é o que um programador normal faz. Não há nada de excepcional nisso. Comparo programadores excepcionais a guitarristas excepcionais. Eles não estão pensando nas notas que estão tocando, apenas sentem.
John
@ Pablo - Acho que nossas experiências são diferentes. Na minha experiência, desenvolvedores normais passam pela intuição e pensam erroneamente que isso simplesmente flui. Assim, eles criam muito lixo. Desenvolvedores excepcionais dedicam um tempo para entender para onde estão indo. Só porque alguém pode mostrar rapidamente como você deve projetar seu componente não significa que ele está fazendo isso por intuição. Aposto que eles já fizeram isso antes ou têm a visão geral do sistema já criada em sua mente, se não na documentação. Assim, o que você chama de intuição é realmente seguir um plano pensado.
Húmido
0

Codificadores excepcionais influenciam um projeto além do escopo de seu próprio código e identificam problemas antes que eles ocorram devido à sua experiência. Eles melhoram todos os membros da equipe e salvam seus projetos de mau design e gerenciamento.

Eles realmente criaram algo que é excepcional.

JeffO
fonte
0

mas parece que levarei os próximos dez anos para aprendê-lo, e então meu conhecimento ficará obsoleto.

Será. Você já estabeleceu que esses caras são 10 vezes mais rápidos, e é por isso que eles aprendem em 1 ano e isso leva 10. Para a parte mais séria da resposta, eu acho que eles já são super inteligentes qualquer coisa), eles adoram codificação e, por algum motivo, têm (ou encontram) uma abundância de tempo livre para praticar a codificação ou trabalhar em projetos pessoais.

Se você está fazendo essa pergunta aqui, provavelmente não tem o que é preciso (não se preocupe, estou respondendo aqui, então provavelmente também não). Não se preocupe, você ainda pode ficar louco, se você gosta de codificação.

Kevin
fonte
0

Há muitos posts bem-intencionados aqui sobre Humildade, Engenharia, Paixão, Paciente, Resolução de problemas. OMI são todos necessários. No entanto, eles descrevem os 30% principais dos programadores.

Acho que você está perguntando sobre os programadores verdadeiramente excepcionais, o 1% superior.

Uma das coisas que invejo sobre os talentos muito raros ocasionais com os quais trabalho é a capacidade deles de manter uma quantidade muito grande de detalhes sobre um sistema complexo em mente por vez e de poder recuperá-lo rapidamente. Acho que posso fazer isso ocasionalmente, talvez uma vez por mês, quando estou realmente na zona. Esse sentimento é maravilhoso. O desenvolvedor que estou pensando parece poder estar nessa zona a maior parte do tempo .

É essa característica, IMO, além das habilidades de humildade, curiosidade, engenharia, paixão, paciência e solução de problemas que as tornam verdadeiramente excepcionais.

Kyle Hodgson
fonte
0

Ter a qualidade da auto-motivação e da autodeterminação, além de ter a disposição de entrar em um abismo do desconhecido e de se sentir confortável em estar absolutamente confuso como parte do processo, é enorme. Não se trata tanto de inteligência inicial como você pensaria, porque o cérebro se torna muito melhor nas coisas que está sempre fazendo e pensando. Eu vim do nada na faculdade e depois fiquei muito bem apenas por pura persistência, nunca desistindo, sendo aquele cara que mantinha um problema quando todos os outros se cansavam de tentar descobrir. Após esse tipo de persistência, os problemas se tornaram cada vez mais fáceis e passaram de ser o noob na faculdade e colocar a maioria deles envergonhados neste momento. Puro talento não é suficiente e às vezes pode levar a descansar nos louros.

Além disso, para Robert Harvey, você continua revisando minhas postagens quando menciono qualquer coisa relacionada ao meu CMS que escrevi do zero. Você vê vários outros listando links que eles podem ou não ter escrito. Você está empurrando pessoas que são motivadas por si mesmas, o que é irônico porque você postou isso. Você é "o homem" neste pequeno universo e não está lendo as coisas por mérito delas, apenas cochilando e apagando ao seu capricho. Você também gosta muito de Star Wars e provavelmente acena com a mão nas portas de abertura automática do supermercado, acreditando que você tem a força.

Joonha
fonte