O que todo programador deve saber?

245

Independentemente da (s) linguagem (s) de programação ou sistema (s) operacional (is) usado (s) ou do ambiente para o qual eles desenvolvem, o que todo programador deve saber?

Alguns antecedentes:

Estou interessado em me tornar o melhor programador possível. Como parte desse processo, estou tentando entender o que não sei e me beneficiaria muito se soubesse. Embora existam muitas listas ao longo das linhas de "n coisas que todo desenvolvedor de [linguagem de programação de inserção] deveria saber", ainda não encontrei nada semelhante que não se limite a uma linguagem específica.

Também espero que essas informações sejam de interesse e benefício para os outros.

Matt Lacey
fonte

Respostas:

636

Como engolir orgulho e admitir erros sem levá-los pessoalmente.

Gilligan
fonte
60
Isso é algo que todo ser humano deve fazer independentemente de seu trabalho (... sexo, religião, cultura, status social ...), você não acha? ;)
3
Ai sim. Mas nós programadores (pelo menos eu) têm uma tendência a ter orgulho mais evidente do que a maioria :-)
17
Eu gostaria de poder votar em você duas vezes.
4
Eu acho que isso é uma coisa que aprendi na universidade. No ensino médio, eu sempre fui uma das crianças inteligentes. Se eu não tivesse ido para a universidade, teria pensado que era muito inteligente e tinha um grande ego. Indo para uni, e interagir com pessoas que eram verdadeiramente mais qualificados então eu estava me ajudou a ver o quão idiota, eu estava
Kibbee
4
Embora isso seja muito verdadeiro, o problema nem sempre é a negação ou um grande ego, mas as possíveis consequências de admitir abertamente que cometer erros, pelo menos não sem algum tipo de autodefesa / controle de danos primeiro. Às vezes é uma coisa cultural. :)
309

Como pensar como um usuário, e não como um programador nerd de tecnologia.

Nick B
fonte
2
Eu sempre acho irônico que o que parece que a maioria de nós não tenha na indústria possa ser uma das habilidades mais importantes a ter: habilidades de comunicação.
Não poderia concordar mais com isso. Este deve ser o número 1.
23
Eu realmente discordo. É para isso que você contrata pessoas. Você nunca será capaz de pensar como um usuário, mas certamente pode fazer com que as pessoas digam o que os usuários pensam e agem de acordo com esse conselho. Só não pergunte aos usuários como eles pensam! Essa é a pior opção de todas.
1
Você pode contratar outras pessoas para fazer isso, mas se sua equipe de desenvolvimento puder entender como o usuário pensa, você terá muito menos argumentos e iterações antes que as coisas estejam certas. Além disso, se um desenvolvedor puder pensar como um usuário, quem sabe quais novos recursos serão criados
3
O usuário pode muito bem ser um programador técnico nerd, mas é menos provável que ele também tenha implementado o código . Se o aplicativo tiver uma semântica / comportamento muito sutil e complexo, a pessoa que escreveu o código pode ser a única pessoa que pode entender como usar o aplicativo ...
Reuben
244

Quando pedir ajuda e quando NÃO pedir ajuda.

Brian Knoblauch
fonte
2
Tão verdade. Ultimamente, a resposta surgiu na minha cabeça enquanto eu perguntava a alguém. :(
kevindaub
assim, que `s a resposta)?
28
Pergunte ao seu patinho de borracha primeiro. Se ele não puder ajudá-lo, então pergunte a outra pessoa ...
Dean Rather
3
votado porque, quando comecei, não percebi o quanto eu estava incomodando outros desenvolvedores, perguntando continuamente a eles coisas simples que eu deveria descobrir até que alguns n00b fizessem isso comigo.
1
Eu sempre me faço uma pergunta como "O que meu colega diria se eu perguntasse a eles". Normalmente, isso me ajuda a aprofundar um pouco o problema antes que eu precise perguntar.
184

Como ler o código de outras pessoas.

Bill the Lizard
fonte
102
Adendo: Como escrever código de outras pessoas pode ler
42
Adenda # 2: Como ler o seu próprio código de 6 meses mais tarde
10
@ Nathan Koop: Deve ser melhor "Como escrever código para que você possa lê-lo sozinho 6 meses depois".
Doc Brown
4
Quando se passaram 6 meses, já se tornou o código de outra pessoa. No sentido de que você evoluiu desde então, melhorou e pode ser outra pessoa que a escreveu em primeiro lugar, então trate-a como tal.
MPelletier
7
Adendo # 3: Como ler seu código 6 minutos depois.
MPEN
152

Familiaridade com os sistemas de controle de versão. Não precisa ser todo mundo, mas os conceitos básicos que podem ser aplicados a todos eles devem ser conhecidos.

Thomas Owens
fonte
e que o controle de revisão não é software
jrhicks
4
Eu acrescentaria que há uma diferença suficientemente significativa entre os SCMs centralizados (por exemplo, subversão, CVS) e os SCMs distribuídos (por exemplo, git, mercurial, bazar) que é importante aprender um de cada.
intuited
128

Aqui estão meus 10 bits:

  • Como ser humilde. Estamos todos aqui para aprender. Você pode ser mais esperto que os outros, mas há muitas pessoas mais espertas que você.
  • Como estudar / consumir informações. Não sei você, mas estou estudando para sempre! Livros, Internet, tanto faz!
  • O que é um dicionário e como usá-lo, e como descobrir acrônimos rapidamente.
  • Quais são as ferramentas básicas do comércio e o que elas fazem (IDE, CVS et al).
  • Conheça terminologia comum e o que eles significam: padrões de design, usabilidade, teste (ha!), Pilha, etc.
  • Compreenda o POO.
  • Seja "capaz" em pelo menos um idioma, nada incrível, apenas saiba como identificar variáveis ​​e métodos, etc. A partir daqui, você pode aprender RÁPIDO.
  • Entenda que, em última análise, as pessoas usam software e desejam fazê-las felizes.
Rob Cooper
fonte
38
Este deve ser um post octal.
Mesmo Mien
10
Em relação à primeira parte .... "Não seja tão humilde, você não é tão bom".
Magnus
@TheOtherScott, prendedor agradável lol, mas eu estava realmente dizendo 2 bits: D;)
3
Em relação ao ponto 3: www.acronymfinder.com
Jasper Bekkers
1
@ jasper / intuited: basta digitar o acrônimo no google e ele abrirá um ou outro ... a resposta geralmente está em um dos 10 primeiros resultados de qualquer maneira. mais informações podem ser obtidas clicando!
MPEN
104

Talvez seja muito sutil, mas penso nisso como "saber qual problema resolver". Muitos programadores (e pessoas normais) perdem um tremendo esforço resolvendo coisas que simplesmente não são muito importantes; ou eles criam uma solução, com muito trabalho extra, que não é exatamente o que é necessário.

comida de gato
fonte
4
Concordando, preocupar-se com os cenários de casos de uso adicionais que apenas alguns usuários encontrarão em vez de mais funcionalidades essenciais é uma armadilha muito comum! Eu ainda aprender este a maneira dura ...
Ian Robinson
Devo colocar um link para sua resposta como a página inicial do meu ex-líder de equipe. Você está tão certo.
4
Eu amo o fato de você ter dito "muitos programadores (e pessoas normais)" :-) #
95

Como relaxar. É o segredo da produtividade.

Eventualmente, força de vontade e cafeína não são suficientes. Essa constante contração que fazemos é muito prejudicial.

Este é um grande negócio.

Brian MacKay
fonte
1
O que você quer dizer com contração?
4
@Egg: Às vezes, quando trabalho, sou completamente relaxado e muito produtivo. Nos meus dias ruins, corro adrenalina e cafeína e sinto uma tremenda tensão no meu corpo. Se eu prestar muita atenção, estou contraindo alguns músculos. Percebo essa tensão nos outros o tempo todo. Infelizmente, isso pode levar a todos os tipos de problemas, como burnout e doenças cardíacas, e provavelmente também leva a uma perda líquida de produtividade, pois só é possível correr por um período finito de tempo. Essa é a contração da qual estou falando.
Brian MacKay
@ Egg, ele significa contração dos músculos não utilizados.
2
falando de café e contração, você sabia que o café encolhe a artéria que fornece sangue ao cérebro. Isso faz com que o cérebro acorde. O café não é uma coisa tão boa, afinal. tl; dr drink water
Reno
83

Tipo básico de dados e teoria de algoritmos. Coisas como notação Big O, matrizes, filas etc.

Glenn Slaven
fonte
Não ajuda em nada se você só criar modelos para sistemas de gerenciamento de conteúdo da web.
3
Bem, algoritmos de hoje padrão são implementadas nas bibliotecas / frameworks mas concordo que algum pensamento-hard-algoritmo como é útil, mas não muito frequentemente
7
Só porque eles já foram implementados não significa que você não precisa entender o que usar quando, a complexidade garante, etc. Esse é o material importante por trás dos algoritmos.
3
Concordo com Greg Rogers. Pode ser necessário implementar os algoritmos, mas você entende melhor suas complexidades e vantagens. Por exemplo. Alguns algoritmos consomem mais memória, mas são mais rápidos.
6
Você não saberá qual usar se não os entender. Algoritmos são muito importantes.
60

Como escolher a ferramenta certa para a tarefa certa e não participar de guerras tolas e inflamadas sobre suas ferramentas de programação favoritas.

Terminus
fonte
+1 para que este não fique em 42 :)
charlesb
54

Bem, aqui está o meu .02 $:

  • O aprendizado nunca para. Não importa o quão bom você pense que é, sempre há alguém melhor que você e sempre há algo que você pode melhorar sobre si mesmo. Se você parar de aprender, inevitavelmente se degradará como programador. Leia livros. Leia blogs. Converse com outros programadores.
  • Tente aprender vários idiomas. Pelo menos um deles é orientado a objetos. Além disso, você deve saber algo sobre várias tecnologias relacionadas à linguagem que você aprende (por exemplo, se você aprender Java, seria bom se você soubesse algo sobre Spring, etc.).
  • Refatoração. Cedo ou tarde, você precisará desse conhecimento.
  • Aprenda a lidar com o código herdado.
  • Escreva testes de unidade. Aprenda sobre o TDD.
  • Aprenda a trabalhar em equipe.
  • Escreva um código elegante e legível. Como diz o velho ditado: "Escreva seu código como se a pessoa que o manteria fosse um serial killer psicótico que sabe onde você mora".
  • Aprenda a ser preguiçoso e disciplinado ao mesmo tempo. Bons programadores possuem essas duas qualidades. Por mais estranho que pareça, eles não são contraditórios entre si, mas complementares.
Sandman
fonte
São esses US $ 0,02 ou US $ 0,02? RI MUITO! :-D
"Escreva seu código como se a pessoa que o manteria fosse um serial killer psicótico que sabe onde você mora." +1
Ben
50

Você não pode testar a qualidade de um produto.

Tall Jeff
fonte
2
Assim, os profissionais de "Garantia da Qualidade" têm o nome errado.
1
Tecnicamente, o controle de qualidade e o teste não são a mesma coisa, embora, no seu ponto de vista, não tenha certeza de que a maioria das organizações pratique a diferença.
22610 Jeff alto
5
Encontrado recentemente - e parado: "O resultado do teste não é a qualidade, mas o conhecimento".
Peterchen
richdiet: O especialista em SQA James Bach acredita que o "A" em SQA / QA deve significar "Assistência". Concordo plenamente com a opinião dele e com a sua declaração.
44

Todo programador deve entender os padrões de design .

fluffels
fonte
13
Eu acrescentaria que eles também precisam entender que nem tudo pode ser adaptado a um determinado padrão de design.
tloach
10
Eu também acrescentaria que nem todo programador deve entender os padrões de design. Existem idiomas por aí em terras distantes, com outras características tão poderosas que o pensamento flui diretamente do programador para os programas de trabalho. Nessas línguas, padrões deliberados são um desvio de direção.
Ali Ali
2
padrões de design são para não desingers "programadores" - um programador precisa saber que quando ele / ela se torna um "designer"
10
Existem dois tipos de pessoas .. pessoas que gostam de codificar e pessoas que preferem falar sobre codificação. Padrões de projeto é uma obrigação para o segundo grupo ..
Bjorn Reppen
1
Tais padrões são uma maneira de superar as limitações de idiomas. Um programador deve entendê-los apenas porque ele deve entender e ser capaz de superar as fraquezas de seus idiomas.
44

Estou um pouco atrasado para este, mas vou com o conhecimento estabelecido por Edsger Dijkstra:

Além de uma inclinação matemática, um domínio excepcionalmente bom da língua nativa é o ativo mais vital de um programador competente.

Se você não consegue escrever um bom parágrafo, é provável que também não consiga escrever um bom código.

KevDog
fonte
8
No entanto, estou impressionado com a terrível ortografia, gramática e pontuação usadas na escrita em linguagem natural por alguns programadores. Você poderia pensar que trabalhar todos os dias com sistemas que têm tolerância zero para erros de ortografia e sintaxe inválida teria um efeito benéfico ...
1
@cheduardo, isso ocorre porque, ao compilar ou executar um programa, na maioria dos idiomas, você será informado sobre quaisquer erros de ortografia, gramática ou pontuação, que podem ser facilmente corrigidos. Não é o caso de erros lógicos.
Inshallah
@ Inshallah: a menos que você faça algo assim if (BlowUpTheSystem = 1). Concedido, dado o teste de unidade adequado, é provável que você economize apenas tempo. Mas então o tempo é muito importante.
intuited
2
Concordo .. hmm ... menos a parte "língua nativa", alguns de nós [infelizmente?] Se comunicam melhor / mais claramente em nossas línguas não-nativas.
39

Não fique muito emocional, apegado ou religioso a qualquer tecnologia, sistema operacional ou idioma - nenhum é perfeito - a longo prazo, é provável que você acabe desejando criar seu próprio ala carte a partir do que você como sobre cada um diferente.

Pense nisso como carros - você pode não ter dirigido um carro em particular antes, mas todos eles têm chaves, volantes, aceleradores e freios - você deve poder entrar em um e sair rapidamente assim que descobrir o que está acontecendo. Trate sistemas operacionais e idiomas da mesma forma e concentre-se em aprender os conceitos essenciais subjacentes a eles, mesmo se você estiver envolvido nas especificidades de qualquer instância.

E, com o tempo, tente entender e apreciar a ancestralidade, a herança e os pontos em comum das várias tecnologias que ajudarão você a manter a perspectiva. Perceba, por exemplo, que, embora a árvore evolutiva esteja se ramificando ativamente e cheia de becos sem saída, com o tempo a tecnologia tende a convergir repetidamente em torno das 'melhores práticas' e 'economias de escala' ( por exemplo, observe que um Mac não é tão diferente de um PC sob o capô nos dias de hoje ...).

Por fim, lembre-se, não importa o quanto você esteja se divertindo com tudo isso, a tecnologia representa essencialmente uma lente imperfeita entre o que sua mente pode imaginar e o que você realmente produz. Faça o seu melhor, aprenda a aprender e permaneça adaptável ...

J Healy
fonte
35

Como programar em C.

David Basarab
fonte
Haha Onde está Jeff quando você precisa dele? ;)
Kevin Fairchild
12
Sem mencionar a linguagem assembly.
Ferruccio
12
Sem mencionar X.
Ali
7
Parafuso ... Binary
Jeff !!!! As pessoas estão falando merda no seu site: P
Andrei Rinea 15/10/10
35

Que o dia em que você para de aprender deve ser o dia em que não é mais um programador.

Nick Sergeant
fonte
Se eu tivesse um desejo, seria que Papai Noel fosse meu pai.
Porque Papai Noel ...?
1
O dia em que você para de aprender deve ser o dia em que morre. :) +1 de qualquer maneira
ShdNx
Então, para viver para sempre, você deve sempre aprender? Agora há uma ideia que eu posso apoiar!
canadiancreed
34

Teste de unidade e depuração.

Jon
fonte
O primeiro remove a necessidade do segundo. ;-)
4
Não, quando o teste de unidade falha, isso precisa de depuração. Os dois vão juntos.
Zan Lynx
Não é possível enfatizar isso o suficiente.
fastcodejava
33

Já foi mencionado antes, mas acho que merece sua própria resposta.

alexp206
fonte
Eu uso cada vez mais as peças, e pego peças aqui e ali, mas ainda não sou amador.
Eu concordo completamente. Parece estranho e difícil quando você não entende, mas quando você entende, é muito mais fácil do que uma tonelada de chamadas de função de substring / indexof que seriam necessárias para fazer a mesma coisa de outra maneira. Eu apenas garantiria que seus padrões sejam bem comentados.
Kibbee
9
Algumas pessoas, quando confrontadas com um problema, pensam "eu sei, vou usar expressões regulares". Agora eles tem dois problemas. - "Jamie Zawinski": jwz.livejournal.com , em comp.lang.emacs
Bjorn Reppen
Usar um editor basicamente construído em torno deles é uma boa maneira de aprender as coisas mais sórdidas. Minha experiência é com o vim - que usa um equivalente quase comparável aos PCREs padrão de fato -, mas tenho a impressão de que as mesmas regras se aplicam no mundo emacs.
intuited
1
Algumas pessoas, quando confrontadas com uma expressão regular, pensam: "Eu sei, vou citar Jamie Zawinski". Agora elas têm dois problemas (um dos quais é que provavelmente não sabem o que estão fazendo). .
Donal Fellows
29

Ninguém quer usar software. Eles querem problemas resolvidos.

Andrew
fonte
7
Exatamente. Quando ouço desenvolvedores tentando explicar o banco de dados para um usuário final como resposta à sua pergunta sobre por que algo não pode ser feito, eu me arrepio. Eles não precisam saber como fazemos as coisas. Eles só querem que funcione. E é assim que deve ser.
22411 Kevin Fairchild
Eu gosto de acreditar que se poderia escrever um software que as pessoas acham um prazer usar.
Não poderia concordar mais. No entanto, isso também se aplica a APIs. Ninguém quer aprender novas APIs porque é muito engraçado. Queremos a funcionalidade da API, não o código que ela representa.
Blub
Kevin, eu gostaria que o nosso "programador de implementação" (palavra chique para o cara do teste) lesse e entendesse isso. Eu também me sento atrás da minha mesa, esperando que o mundo o engula quando ele começa a falar sobre loops e declarações para usuários finais.
27

Coffee e IntelliSense são seus melhores amigos de todos os tempos.

Rulas
fonte
Eu gostaria de poder dar a isso mais de 1 votação!
Dinah
Espero tomar mais café !!!! #
Acho que concordo com isso mais do que qualquer outra coisa no SO.
Unkwntech
Praticamente nunca tomo café, a menos que precise absolutamente terminar um projeto em X horas, quando: Número de horas esgotadas + X> 8 por um dia.
Blub
O café não lhe dá energia. Basta espremer um pouco de suas reservas internas. Isso é ruim / doentio.
Andrei Rinea 15/10/10
18

Como observar um grande objeto complicado e decompô-lo em pequenos objetos simples que ainda realizam a mesma tarefa quando montados novamente.

Manrico Corazzi
fonte
18

Nunca confie em um usuário ( especialmente se o aplicativo for público!), Ele fará tudo o que estiver ao seu alcance para interromper seu aplicativo de uma maneira ou de outra.

Torne-o à prova do futuro e expansível - você nunca sabe quando deseja expandi-lo em alguns anos e percebe quanto esforço seria necessário para re-codificar códigos mal criados.

Robinb
fonte
1
Isso é muito generalizado. Algum pragmatismo também é bom.
Mafu
18

Que o programador não sabe tudo e deve sempre tentar aprender novas linguagens / tecnologias, etc.

Dror Helper
fonte
16

Noções básicas de um bom design de interface do usuário e design de comunicação (também conhecido como gráfico) .

Vejo tantos aplicativos e projetos arruinados por mau design ou pouca usabilidade. Apenas aprender o básico pode fazer um mundo de diferença. Além disso, as técnicas visuais de solução de problemas (como comunicar um conceito visualmente) são um desafio estimulante que deve abrir seus olhos para novas formas de ver, que, por sua vez, devem impactar seu código.

Um livro recomendado é o livro de design de não-desenhista de Robin Williams

Aqui está o que Joel Spolsky diz sobre isso :

Uau! Todo mundo tem que fazer algum design gráfico, e nem toda equipe de software tem o luxo de designers profissionais. Este excelente e fino livro lhe dará uma compreensão dos princípios por trás do layout da página, fontes, etc. A boa notícia é que você pode lê-lo no banho antes que a água esfrie. No dia seguinte, suas caixas de diálogo e powerpoints e as páginas da web começarão a ter uma aparência melhor.

Charles Roper
fonte
1
Vou concordar com um aceno adicional ao "design das coisas cotidianas". amazon.com/Design-Everyday-Things-Donald-Norman/dp/0385267746
Stimul8d
14

Todo programador deve saber aprender rapidamente. Muitas vezes você entra em um emprego e será solicitado a desenvolver uma tecnologia que nunca usou. Eles podem lhe dar uma semana ou mais para se levantar (se você tiver sorte) antes de ser solicitado a escrever um código de qualidade de produção.

Ryan Thames
fonte
Comecei meu primeiro trabalho de programação e em uma semana estava escrevendo um código que acabaria sendo publicado. Felizmente, sou um aprendiz rápido e tinha experiência em programação no passado. Em seis meses, reestruturei a conexão cliente-servidor para melhorar o desempenho em três vezes. Isso estava em um idioma que eu nunca havia usado antes.
14

Controle de versão. E para citar minha namorada: "Eu não quero apenas que você lave a louça, quero que você goste !"

MattW.
fonte
10

Os requisitos mudam, seu código precisará se adaptar e pode ou não ser você quem deve adaptá-lo.

Houve várias perguntas aqui relacionadas a tópicos afetados por isso.

Adam Bellaire
fonte
10

Em cima da minha cabeça:

  1. Muito poucos problemas de programação exigem matemática além de adição, subtração, multiplicação e divisão. Se você estiver pensando em usar o cálculo para resolver um problema, pesquise exaustivamente as alternativas antes de fazê-lo.

  2. Sempre que você adivinhar como algo deve funcionar, você está fazendo errado. Não é seu trabalho ser telepático.

  3. A pessoa que fornece as especificações raramente sabe tudo o que quer até que você as resolva.

  4. Mais da metade de ser um grande programador vem de lidar com seres humanos. Interagir com sua equipe, gerenciar seu gerente e aperfeiçoar o usuário final são metade do trabalho.

  5. Um bom código é escrito para ser lido pelas pessoas tanto quanto pelo seu compilador.

  6. As melhores práticas e a realidade prática estarão em conflito mais do que o programador pensa, mas menos do que o gerente. Quando eles parecem estar em conflito, cabe a você delinear e entender o conflito e ceder à prática. A solução sutil e inteligente só é melhor que a feia e brutal, se for mais rentável a longo prazo.

  7. Ótimas ferramentas não podem criar ótimos programadores, mas ferramentas ruins nos tornam igualmente terríveis.

  8. Nunca menospreze uma tecnologia, mas sempre procure a melhor alternativa.

  9. Quanto mais idiomas você souber, melhor estará no idioma que está usando.

  10. Não seja perturbado pelo lento rastejamento dos pensamentos orientados para a programação em sua vida diária. Mesmo quando não estamos em um computador, todos sofrem limitações de largura de banda, sofrem penalidades de desempenho pela alternância de tarefas e precisam carregar coisas do armazenamento de backup. Os computadores devem imitar o pensamento humano e os análogos estão por toda parte.

Sim - aquele Jake.
fonte
O número 10 me fez rir. Tantas vezes eu estarei trabalhando em um problema no trabalho, mas é apenas na cama às 22h que eu finalmente encontro a resposta!
9

Ler o código de outras pessoas não vai estragar seu cérebro, mas sim descobrir por que você não faria dessa maneira (se melhor ou não, é outra questão).

Isso fornece a você experiência de programação e, ocasionalmente, você encontra alguém implementando algo muito melhor! Como de uma maneira melhor.

Essa resposta naturalmente se expande para a leitura de seu próprio código, e se expande para usar o controle de versão e o DIFF e, portanto, para 42.

Martin
fonte