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.
language-agnostic
skills
Matt Lacey
fonte
fonte
Como pensar como um usuário, e não como um programador nerd de tecnologia.
fonte
Quando pedir ajuda e quando NÃO pedir ajuda.
fonte
Como ler o código de outras pessoas.
fonte
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.
fonte
Aqui estão meus 10 bits:
fonte
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.
fonte
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.
fonte
Tipo básico de dados e teoria de algoritmos. Coisas como notação Big O, matrizes, filas etc.
fonte
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.
fonte
Bem, aqui está o meu .02 $:
fonte
Você não pode testar a qualidade de um produto.
fonte
Todo programador deve entender os padrões de design .
fonte
Estou um pouco atrasado para este, mas vou com o conhecimento estabelecido por Edsger Dijkstra:
Se você não consegue escrever um bom parágrafo, é provável que também não consiga escrever um bom código.
fonte
if (BlowUpTheSystem = 1)
. Concedido, dado o teste de unidade adequado, é provável que você economize apenas tempo. Mas então o tempo é muito importante.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 ...
fonte
Como programar em C.
fonte
Que o dia em que você para de aprender deve ser o dia em que não é mais um programador.
fonte
Teste de unidade e depuração.
fonte
Já foi mencionado antes, mas acho que merece sua própria resposta.
fonte
Ninguém quer usar software. Eles querem problemas resolvidos.
fonte
Coffee e IntelliSense são seus melhores amigos de todos os tempos.
fonte
Como observar um grande objeto complicado e decompô-lo em pequenos objetos simples que ainda realizam a mesma tarefa quando montados novamente.
fonte
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.
fonte
Que o programador não sabe tudo e deve sempre tentar aprender novas linguagens / tecnologias, etc.
fonte
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 :
fonte
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.
fonte
Controle de versão. E para citar minha namorada: "Eu não quero apenas que você lave a louça, quero que você goste !"
fonte
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.
fonte
Em cima da minha cabeça:
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.
Sempre que você adivinhar como algo deve funcionar, você está fazendo errado. Não é seu trabalho ser telepático.
A pessoa que fornece as especificações raramente sabe tudo o que quer até que você as resolva.
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.
Um bom código é escrito para ser lido pelas pessoas tanto quanto pelo seu compilador.
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.
Ótimas ferramentas não podem criar ótimos programadores, mas ferramentas ruins nos tornam igualmente terríveis.
Nunca menospreze uma tecnologia, mas sempre procure a melhor alternativa.
Quanto mais idiomas você souber, melhor estará no idioma que está usando.
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.
fonte
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.
fonte