terça-feira, 29 de maio de 2012

Programador Profissional #1: Domínio do inglês

Edsger Wybe Dijkstra (1930-2002)
Este post é o primeiro (#1) da série de definições sobre o que considero um programador profissional. Pensei em utilizar o título "Profissional Competente", mas acabei por concluir que seria um pleonasmo. Afinal, se é profissional, é competente. Os outros não competentes usualmente classifico como amadores.

Costumo utilizar uma imagem para representar cada post. Como falamos em profissionalismo, resolvi utilizar a foto de Edsger Wybe Dijkstra, considerado por muitos como o primeiro programador competente. É dele uma de minhas citações favoritas, apresentada quando um pesquisador lhe perguntou sobre qual tópico estudar:
"Only do what only you can do".
Traduzindo literalmente:
"Faça somente o que somente você pode fazer." 
A ordem das postagens é aleatória, ditada pela inspiração do momento. Isto não faz desta definição a mais, nem a menos importante.

Sempre disse aos meus alunos e a quem trabalhou comigo que saber inglês em nossa profissão é fundamental. Dominar a língua inglesa não é precondição para estar empregado na área de tecnologia. Afinal, a suposta carência por mão-de-obra é tão grande que até os amadores têm seu lugar. Mas é precondição sim para ser um programador profissional.

Gosto muito de uma frase que o +Bruno Souza (o JavaMan) utilizou em uma de suas palestras aqui em Maringá: "Pra você que trabalha na área de tecnologia, português é sua segunda língua (inglês é a primeira)". Recado dado na medida exata de importância.

Os bons livros são todos escritos em inglês. Depois de muito tempo, apenas alguns destes livros são traduzidos (e normalmente a tradução deixa a desejar). Não conseguir ler os bons livros disponíveis já alija qualquer programador de informações importantes e necessárias para tornar-se profissional. O mesmo se aplica a quaisquer artigos, sites e revistas. Alguns teimosos vão contra-argumentar: "mas para estes casos há o Google Translator". Acreditem: não é a mesma coisa.

Ao participar de fóruns de discussão e eventos você possui a oportunidade de dialogar e trocar idéias e informações com pessoas fantásticas. Estas pessoas advém de diversos lugares do mundo, mas certamente todas falam inglês. Entendam uma coisa: inglês é a lingua franca do mundo da tecnologia. É no mínimo "chato" participar de grandes eventos e ficar "de lado" porque "não sabe inglês".

Ler documentação de projetos? Participar de projetos open-source? Trabalhar em equipes geograficamente distribuídas? Conseguir os melhores projetos? Obter os melhores empregos? Para todas estas situações vocês precisarão do inglês.

Para ser um programador profissional é preciso muito estudo e acesso à muita informação. Esta informação está em inglês. Nunca é tarde para aprender. Aliás, antes agora do que mais tarde. Novamente: quem quer acha um meio; quem não quer, acha uma desculpa. Bons estudos.

terça-feira, 22 de maio de 2012

Nós NÃO precisamos de mais programadores


Não, nós não precisamos de mais programadores.

Parece contraditório, no mínimo. Afinal, é bastante comum ouvirmos autoridades apregoando em discursos e reportagens que o déficit de programadores, no Brasil, é de 70 mil programadores/ano. Nos EUA, em torno de 200 mil programadores/ano. Mas nunca recebi uma explicação de como este número foi calculado.

O "déficit" de programadores no Brasil e no mundo é utilizado como motivação para se investir mais na formação de mais programadores. O investimento é correto. O foco é que está errado.

Novamente, nós não precisamos de mais programadores. Precisamos de programadores melhores. Precisamos de profissionais competentes.

Citarei um trecho de uma entrevista com David Lorge Parns, ACM Fellow:
What is the most often-overlooked risk in software engineering?
Incompetent programmers. There are estimates that the number of programmers needed in the U.S. exceeds 200,000. This is entirely misleading. It is not a quantity problem; we have a quality problem. One bad programmer can easily create two new jobs a year. Hiring more bad programmers will just increase our perceived need for them. If we had more good programmers, and could easily identify them, we would need fewer, not more.
Traduzindo literalmente:
 Qual é o mais desapercebido dos riscos em engenharia de software?
Programadores incompetentes. Existem estimativas de que o número de programadores necessários nos EUA ultrapassa os 200.000. Estas estimativas são enganosas. Não é um problema de quantidade; nós temos um problema de qualidade. Um mau programador pode facilmente criar dois novos empregos por ano. Contratar mais maus programadores só vai aumentar a percepção de necessidade deles. Se tivéssemos mais bons programadores, e pudéssemos facilmente identificá-los, precisaríamos de menos, não de mais.
Infelizmente encontrar programadores que sejam profissionais competentes é algo raro. Programar não é somente "fazer funcionar". É fazer bem feito. É produzir código testado. É utilizar técnicas e ferramentas adequadas para resolver o problema.

É fácil perceber porque um mau programador cria dois novos empregos por ano. Um mau programador (que é a regra generalizada) produz código mal feito. Um código mal feito precisa de outros dois maus programadores para ser mantido. E assim continuamos numa progressão geométrica.

Vamos atacar o problema correto. Nossa meta deve ser transformar as pessoas com potencial em profissionais competentes e retirar o restante do mercado. E você? De que lado está? De que lado quer ficar?