Você está na página 1de 3

Aprenda a Programar.

Aparentemente não há atalhos: até Mozart, que foi um prodígio musical aos 4 anos levou mais 13
antes de compor música de primeira classe. De outra forma, ou Beatles parecem ter disparado nas
paradas em primeiro lugar com a aparição no show do Ed Sullivan em 1964. Mas eles estavam
tocando em pequenos clubes em Liverpool e Hamburgo desde 1957, e mesmo que eles conseguiram
uma aparição em masa, o primeiro grande sucesso mesmo, Sgt. Peppers, foi lançado em 1967.
Samuel Johnson pensa que pode levar mais do que dez anos: “Excelência em qualquer
departamento pode ser alcançada apenas com o trabalho de uma vida toda; não é possível comprá-la
por menos.” E Chaucer reclamou: “vida tão curta, leva tantu pra aprender.” Sim, é “tantu”, e não
“tanto”, um dia você entende.
Então aqui vai minha receita para sucesso na programação:
• Aprenda inglês. Leia o original deste texto. Essa tradução só está aqui para exercitar o meu
inglês, não o seu. (Nota do tradutor)
• Se interesse por programação, e faça porque é legal. Tenha certeza que isso continue a ser
legal para você dedicar dez anos nisso.
• Converse com outros programadores; leia outros programas. Isso é mais importante do que
qualquer livro ou curso de treinamento.
• Programe. O melhor tipo de aprendizado é aprender fazendo.
Colocando de uma forma mais técnica, “o nível máximo de performance individual em um
domínio é não é alcançado automaticamente em função de uma experiência estendida, mas
sim aumentado mesmo por indivíduos extramente experientes por um esforço deliberativo
de melhorar.” (p. 366) e “o aprendizado mais efetivo requer uma tarefa bem definida com
uma dificuldade apropriada para o indivíduo em particular, dado que exista um retorno sobre
a experiência e oportunidades de repetição e correções de erros.” (p. 20-21) do livro
Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, que é uma
referência interessante deste ponto de vista.
• Se você quiser, gaste quatro anos em uma universidade (ou mais em uma pós-graduação).
Isso lhe dará acesso a alguns empregos que requerem alguma formação e um grande
entendimento do campo de trabalho, mas se você não gosta muito de ir para escolha, você
pode (com alguma dedicação) conseguir alguma experiência similar sobre esse tipo de
trabalho. Em qualquer caso, apenas ler livros não será suficiente.
“Educação em ciências da computação não faz de ninguém um gênio em programação tanto
quanto estudar pincéis e pigmentos não fazem um bom pintor.” diz Eric Raymond, autor de
The New Hacker’s Dictionary. Um dos melhores programadores que eu já contratei tinha
apenas o segundo grau, e ele produziu vários softwares incríveis, tem seu próprio grupo de
discussão,
e fez dinheiro suficiente em ações para comprar seu próprio clube nortuno.
• Trabalhe em projetos com outros programadores. Seja o melhor programador em alguns
projetos, seja o pior em outros. Quando você é o melhor você testa suas habilidades para
liderar um projeto, e para inspirar outros com a sua visão. Quando você é o pior aprende o
que os mestres ensinam e o que não gostam de fazer (porque eles fazem você fazer por eles).
• Trabalhe em projetos após outros programadores. Esteja envolvido em entender um
programa
escrito por outro. Veja o que é preciso para entender e consertar quando o programador
original não esta por perto. Pense em como desenvolver seus programas para que seja fácil
para quem for mantê-los após você.
• Aprenda pelo menos meia dúzia de linguagens de programação. Includa na lista uma
linguagem orientada a objetos (como Java ou C++), uma que seja de abstração funcional
(como Lisp ou ML), uma que suporte abstração sintática (como Lisp), uma que suporte
especificação declarativa (como Prolog ou C++ com templates), uma que suporte co-rotinas
(como Icon ou Scheme), e uma que suporte paralelismo (como Sisal).
• Lembre-se que há um “computador” em “ciência da computação”. Saiba quanto tempo leva
para o seu computador computar uma instrução, carregar uma palavra ad memória (com e
sem cache), ler palavras consecutivas do disco rígido, procurar por uma nova posição no
disco.(As respostas estão aqui.)
• Se envolva no esforço de padronização de uma linguagem. Pode ser o comite ANSI C++, ou
na padronização de programação na sua empresa, se utilizaram identação com 2 ou 4
espaços. Em qualquer caso, você aprende o que outras pessoas gostam em uma linguagem, o
quanto eles gostam e talvez um pouco do porque eles gostam.
• Tenha o bom senso de cair fora desse processo de padronização tão rápido quanto possível.
Com tudo isso em mente, é questionável o quão longe você pode ir apenas lendo livros. Antes que
do meu primeiro filho nascer eu li todos os livros de Como Fazer e ainda me sentia como um
novato. Trinta meses depois, quando nasceu meu segundo filho, voltei aos livros para relembra?
Não, ao invés disso resolvi utilizar minha experiência pessoal do primeiro filho, que se tornou
muito mais útil do que milhares de páginas escritas por especialistas.
Fred Brooks, em seu trabalho No Silver Bullets identificou um plano em três partes para encontrar
grandes projetistas de software:
1. Sistematicamente identifique os melhores projetistas o quanto antes.
2. Atribua um orientador de carreira responsável pelo desenvolvimento cuidadosamente de um
plano de carreira
3. Promova oportunidades para desenvolvedores em aprendizado interagir e estimular uns aos
outros.
Isto assumo que algumas pessoas já possuem as qualidades necessárias para ser um grande
desenvolvedor de software; o grande trabalho é apenas colocá-los no caminho correto. AlanPerlis
coloca de forma mais sucinta: “Qualquer um pode ser ensinado a esculpir: Michelangelo poderia ser
ensinado a não esculpir. É o mesmo com grandes programadores”.
Então vá em frente e compre aquele livro de Java; provavelmente você terá algum uso dele. Mas
isso não vai mudar a sua vida, ou o seu conhecimento como um programador em 24 horas, dias, ou
meses.

Referências
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge
University Press, 1988.

Respostas
O tempo aproximado de execução de várias operações num PC típico de 1Ghz no verão de 2001:
executar uma instrução simples 1 nseg = (1/1,000,000,000) seg
extrair uma palavra da memória L1 2 nseg
extrair uma palavra da memória RAM 10 nsec
extrair uma palavra consecutivamente do disco rígido 200 nseg
extrair uma palavra de uma nova posição o disco (busca) 8,000,000nseg = 8mseg

Apêndice: Escolha de Linguagem


Muitas pessoas tem me perguntado sobre qual linguagem devem aprender primeiro.
Não há resposta, mas considere estes pontos:
• Use os seus amigos. Quando me perguntam “que sistema operacional devo usar, Windows,
Unix ou Mac?” minha resposta geralmente é: “use o que seus amigos usarem”. A vantagem é
que você poder aprender com os seus amigos vence qualquer diferença entre sistemas
operacionais ou linguagens. Considere também seus futuros amigos: a comunidade de
programadores que você fará parte se continuar. A sua escolha possuía uma grande
comunidade de usuários ou apenas uma comunidade morta? Existem livros, sites e fóruns
para encontrar respostas? Você gosta das pessoas desses fóruns?
• Mantenha-se simples. Linguagens como C++ ou Java são desenvolvidas para utilização
profissional por um grande time de desenvolvedores experientes que estão preocupados com
a eficiência de execução de seus códigos. Como resultado, essas linguagens possuem partes
complicadas desenvolvidas para essas circunstâncias. Você esta focado em aprender a
programar, não precisa dessa preocupação. Você precisa de uma linguagem que foi
desenvolvida para ser fácil de aprender e lembrar.
• Interaja. Como normalmente você aprenderia piano: de modo interativo, no qual você escuta
uma nota logo que pressiona uma tecla ou de um modo automatizado em que você escuta
cada nota quando a música termina de tocar? Claramente, aprender interativamente é muito
mais fácil, e assim é com a programação. Insista em uma linguagem com um modo
interativo e use-o.
Baseado nesses critérios, minhas recomendações para uma primeira linguagem seria Python ou
Scheme. Mas as suas circunstâncias podem variar, e existem
outras boas opções. Se a sua idade ainda tiver apenas um dígito, é melhor escolher Alice ou Squeak
(aprendizes mais velhos podem gostar também). O importante é você escolher e começar.

Apêndice: Livros e outros recursos


Muitas pessoas me perguntam em quais livros e páginas elas devem aprender. Eu repito que “apenas
ler livros não é suficiente” mas eu posso recomendar o seguinte:
• Scheme: Structure and Interpretation of Computer Programs (Abelson & Sussman)é
provavelmente a melhor introdução a ciência da computação e ele faz ensinando a
programar enquanto você aprende computação.
Você pode ver vídeos de aulas desde livro, assim como o texto completo. online O livro é
desafiante e talvez algumas pessoas precisem de outra forma de aprendizado.
• Scheme: How to Design Programs (Felleisen et al.) é um dos melhores livros sobre como
projetar programas de forma elegante e funcional.
• Python:Python Programming: Uma introdução a computação (Zelle) e também a linguagem
Python.
• Python: Vários tutorials online estão disponíveis em Python.org.
• Oz: Concepts, Techniques, and Models of Computer Programming (Van Roy &
Haridi)parece ser um sucessor moderno para Abelson & Sussman. É um tour pelas grandes
idéias da programação, muito mais amplo que
Abelson & Sussman mas mantendo uma certa facilidade de leitura. Ele utiliza uma
linguagem, Oz, que não é muito reconhecida mas serve como base para outras linguagens.

Notas
T. Capey informa que a página de Complete Problem Solver na Amazon agora possui “Teach
Yourself Bengali in 21 days” e “Teach Yourself Grammar and Style” na lista de livros que
“Consumidores que compram esse item também costuma comprar estes”.
Eu imagino que um grande parte das pessoas que visualizam esse livro vem dessa página.