Muita gente ja se perguntou como se tornar um bom programador. Normalmente estao mais preocupados em qual linguagem aprender, qual curso fazer, quais livros tecnicos ler. Porem, assim como os autores desses dois artigos que vou traduzir, eu diria que existem qualidades mais importantes a se levar em conta.Um pensador analiticoProgramadores precisam ser solucionadores de problemas. O processo de programacao requer que nos sistematicamente quebremos problemas complicados, planejemos e implementemos solucao e encontremos/eliminemos pequenas inconsistencias no codigo (bugs).Pensamento analitico tambem se manifesta na habilidade de seguir e entender logicas complicadas atraves de segmentos disparates de codigo. Isso nos permite alcancar conceitos abstratos como metodologias de Orientacao a Objetos e design patterns e implementemos na pratica.Tem suas prioridades clarasSe eu lhe pedisse para ordenar os itens seguintes por prioridade, como voce os ordenaria?SegurancaMantenabilidadeUsabilidadePerformanceQuantidade de LOC (lines of code linhas de codigo)Pare um momento para pensar a respeito, e entao considere:Se voce pegou quantidade de LOC primeiro, voce falhou completamente pelos meus criterios. De fato, otimizacao de LOC pode normalmente ir diretamente contra as outras metricas (como mantenabilidade). Uma contagem baixa de LOC nunca deve ser o objetivo, somente o resultado da aplicacao cuidadosa de uma boa arquitetura.Se voce pegou performance primeiro, voce provavelmente e o cara que fica escrevendo artigos sobre porque se deveria usar loop while em vez de for ja que ele foi alguns milissegundos mais rapido em seus benchmarks. Voce pode sofrer com casos de otimizacao prematura.Nos devemos esquecer sobre pequenas ineficiencias, digamos, cerca de 97% do tempo: otimizacao prematura e a raiz de todo mal. Donald KnuthPerformance deve ser bom o suficiente para satisfazer os requerimentos da aplicacao. Fora casos de armadilha bem conhecidos (como executar queries em cada interacao de um loop longo), otimizacoes de performance devem ser deixados para o fim e mesmo assim devem ser feitas quando apropriado (medir ... medir ... medir ... otimizar).A unica excecao a isso e se voce esta primariamente desenvolvendo aplicacoes dependentes de performance (como drivers de baixo nivel de sistema).Seguranca esta mais ou menos no meio. Dependendo da aplicacao e modelo distribuido isso pode ser completamente inutil ou de missao critica. Esta na maior parte no meio, e portanto nao pode ser o numero 1.Mantenabilidade e definitivamente um dos mais importantes atributos de uma aplicacao de software. Alta mantenabilidade permite que voce melhore outros atributos (como performance),quando for necessario.Mantenabilidade e o fator mais importante para manter a produtividade em alta e os custos em baixa. Por um longo tempo eu acreditei fortemente que isso era o atributo mais importante de design de software. Entretanto ...O atributo mais importante e usabilidade. No final, o valor de sua aplicacao e o que se entrega ao usuario final.Devemos sempre lembrar software nao e escrito para servir seus desenvolvedores ou os sistemas em que roda. Eles sao escritos para resolver problemas. Se esses problemas nao sao resolvidos, entao o projeto e um fracasso.Eu escrevi usabilidade aqui como um termo mais geral do que somente efetividade de Interface de Usuario/UX. Mesmo uma aplicacao de linha de comando ou um servico que roda em background tem