Eu tenho programado (obsessivamente) desde os 12 anos. Eu tenho bastante conhecimento de todo o espectro de linguagens existentes, desde assembly, C ++, Javascript, Haskell, Lisp e Qi. Mas todos os meus projetos foram por mim.
Eu me formei em engenharia química, não em engenharia de computação ou computação, mas pela primeira vez neste outono estarei trabalhando em um grande projeto de programação com outras pessoas, e não tenho idéia de como me preparar. Eu uso o Windows a vida toda, mas esse projeto será muito unix-y, então comprei um Mac recentemente, na esperança de me familiarizar com o ambiente.
Tive a sorte de participar de um hackathon com alguns amigos no ano passado - os dois maiores do CS - e, de maneira emocionante, vencemos. Mas, ao trabalhar com eles, percebi que o fluxo de trabalho era muito diferente do meu. Eles usaram o Git para controle de versão. Eu nunca tinha usado na época, mas desde então aprendi tudo o que posso sobre isso. Eles também usaram muitas estruturas e bibliotecas. Eu tive que aprender o que o Rails era praticamente da noite para o hackathon (por outro lado, eles não sabiam o que eram escopos ou fechamentos lexicais). Todo o nosso código funcionou bem, mas eles não entenderam o meu e eu não o deles.
Eu ouço referências a coisas que programadores reais fazem diariamente - testes de unidade, revisões de código, mas só tenho a menor noção do que são. Normalmente, não tenho muitos bugs nos meus pequenos projetos, então nunca precisei de um sistema de rastreamento de bugs ou de testes para eles.
E a última coisa é que demoro muito tempo para entender o código de outras pessoas. As convenções de nomenclatura variável (que variam com cada novo idioma) são difíceis (__mzkwpSomRidicAbbrev) e acho difícil o acoplamento flexível. Isso não quer dizer que eu não concordo muito com as coisas - acho que sou muito bom nisso para o meu próprio trabalho, mas quando faço o download de algo como o kernel Linux ou o código-fonte do Chromium para ver isso, passo horas tentando para descobrir como todos esses diretórios e arquivos com nomes estranhos se conectam. É um pecado de programação reinventar a roda, mas geralmente acho que é mais rápido escrever a funcionalidade do que passar horas dissecando alguma biblioteca.
Obviamente, as pessoas que fazem isso para ganhar a vida não têm esses problemas, e eu precisarei chegar a esse ponto.
Pergunta: Quais são algumas das etapas que posso executar para começar a "integrar" a todos os outros?
Obrigado!