Vous êtes sur la page 1sur 6

Aprenda a programar em dez anos

Maro 15th, 2007


O texto abaixo foi traduzido pelo meu amigo Augusto Radtke e de autoria de
Peter Norvig. dirigido para todos que fazem cincia da computao, ou estudam
em alguma rea das cincias exatas ou tem interesse ou at mesmo em
necessidade de aprender a programar.
Para quem j fez Inteligncia Artificial na faculdade deve conhecer o Norvig do seu
livro verde, o Artificial Intelligence, a Modern Approach, ou AIMA para os ntimos.
Ele era chefe de desenvolvimento dos robs que foram pra marte da NASA, agora
trabalha no Google. Ou seja, ele sabe do que est falando! O texto longo (uns 10
minutos de leitura).

Aprenda a Programar em Dez Anos
Peter Norvig
Traduo por Augusto Radtke
Porque todo mundo tem tanta pressa?
Entre em qualquer livraria, voc vai ver Aprenda Java em 7 dias assim como
diversas variaes oferecendo lies de Visual Basic, Windows, Internet e por ai vai,
em dias ou horas. Eu fiz a seguinte pesquisa na Amazon.com:
pubdate: after 1992 and title: days and

(title: learn or title: teach yourself)
e encontrei 248 entradas. As primeiras 78 eram livros sobre computadores (nmero
79 era Learn
Bengali in 30 days). Troquei dias por horas e encontrei resultados incrivelmente
similares: 253 livros, 77 de computadores, seguidos de Teach Yourself Grammar
and Style in 24 Hours no nmero 78. Do total de 200, 96% eram livros de
computadores.
A concluso que ou as pessoas esto com muita pressa de aprender sobre
computadores, ou computadores so extremamente fceis de aprender do que
qualquer outra coisa. No h livros de como aprender Beethoven, ou Fsica
Quntica ou at adestramento de ces em alguns dias.




Vamos analisar o que um ttulo como Learn Pascal in Three Days
pode significar:
Aprenda: Em trs dias voc no ter tempo de escrever programas
significantes, e aprender com seu sucesso ou fracasso. Voc no ter tempo
para trabalhar com um programador experiente e entender o que conviver
neste ambiente. Em resumo, voc no ter tempo para aprender muito.
Logo eles s podem estar falando a respeito de entendimento supercial,
como disse Alexander Pope, aprender pouco uma coisa perigosa.
Pascal: Em trs dias voc deve ser capaz de aprender a sintaxe do Pascal
(isso se voc j conhece uma linguagem similar), mas no vai aprender
muito sobre como utilizar essa sintaxe. Em resumo, se voc era, vamos
dizer, um programador Basic, voc pode aprender a escrever programas no
estilo Basic usando a sintaxe do Pascal mas no aprender em que o Pascal
bom (ou ruim). Ento, qual o ponto? Alan Perlis disse certa vez: Uma
linguagem no afeta a maneira que voc pensa sobre programao. Um
ponto se voc precisar aprender um pouco de Pascal (ou algo como Visual
Basic ou Javascript) porque voc precisa interagir com alguma ferramenta
existente para uma tarefa especfica. Mas nesse caso voc no esta
aprendendo a programar, voc est aprendendo a como resolver essa
tarefa.
em trs dias: Infelizmente, no suficiente, como veremos a seguir.
Aprenda a Programar em Dez Anos.
Pesquisadores (Hayes, Bloom) tem demonstrado que leva em torno de dez anos
para desenvolver percia em qualquer de uma variedade de reas, includindo jogar
xadrez, compor msicas, pintar, tocar piano, nadar, jogar tnis e pesquisar
neuropsicologia ou topologia. Aparentemente no h atalhos: at Mozart, que foi
um prodgio musical aos 4 anos levou mais 13 antes de compor msica de primeira
classe. De outra forma, ou Beatles parecem ter disparado nas paradas em primeiro
lugar com a apario 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 apario em masa, o primeiro grande sucesso mesmo, Sgt.
Peppers, foi lanado em 1967. Samuel Johnson pensa que pode levar mais do que
dez anos: Excelncia em qualquer departamento pode ser alcanada apenas com o
trabalho de uma vida toda; no possvel compra-l por menos. E Chaucer
reclamou: vida to curta, leva tantu pra aprender. Sim, tantu, e no tanto,
um dia voc entende.Ento aqui vai minha receita para sucesso na programao:
Aprenda ingls. Leia o original deste texto. Essa traduo s est aqui para
exercitar o meu ingls, no o seu. (Nota do tradutor)
Se interesse por programao, e faa 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 tcnica, o nvel mximo de performace
individual em um domnio no alcanado automaticamente em funo de
uma experincia extendida, mas sim aumentado mesmo por indivduos
extramente experientes por um esforo deliberativo de melhorar. (p. 366) e
o aprendizado mais efetivo requer uma tarefa bem definida com uma
dificuldade apropriada para o indivduo em particular, dado que exista um
retorno sobre a experincia e oportunidades de repetio e correes de
erros. (p. 20-21) do livro
Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, que
uma referncia interessante deste ponto de vista.
Se voc quiser, gaste quatro anos em uma universidade (ou mais em uma
ps-graduao). Isso lhe dar acesso a alguns empregos que requerem
alguma formao e um grande entendimento do campo de trabalho, mas se
voc no gosta muito de ir para escolha, voc pode (com alguma dedicao)
conseguir alguma experincia similiar sobre esse tipo de trabalho. Em
qualquer caso, apenas ler livros no ser suficiente.
Educao em cincias da computao no faz de ningum um gnio em
programao tanto quanto estudar pincis e pigmentos no fazem um bom
pintor. diz Eric Raymond, autor de The New Hackers Dictionary. Um dos
melhores programadores que eu j contratei tinha apenas o segundo grau, e
ele produziu vrios softwares incrveis, tem seu prprio grupo de discusso,
e fez dinheiro suficiente em aes para comprar seu prprio 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 viso. Quando voc o pior aprende o que os mestres
ensinam e o que no gostam de fazer (porque eles fazem voc fazer por
eles).
Trabalhe em projetos aps outros programadores. Esteja envolvido em
entender um programa
escrito por outro. Veja o que preciso para entender e consertar quando o
programador original no esta por perto. Pense em como desenvolver seus
programas para que seja fcil para quem for mante-ls aps voc.
Aprenda pelo menos meia dzia de linguagens de programao. Includa na
lista uma linguagem orientada a objetos (como Java ou C++), uma que seja
de abstrao funcional (como Lisp ou ML), uma que suporte abstrao
sinttica (como Lisp), uma que suporte especificao 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 cincia da computao. Saiba
quanto tempo leva para o seu computador computar uma instruo,
carregar uma palavra ad memria (com e sem cache), ler palavras
consecutivas do disco rgido, procurar por uma nova posio no disco.(As
respostas esto aqui.)
Se envolva no esforo de padronizao de uma linguagem. Pode ser o
comite ANSI C++, ou na padronizao de programao na sua empresa, se
utilizaram identao com 2 ou 4 espaos. 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 padronizao to rpido
quanto possvel.







Com tudo isso em mente, questionvel o quo 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? No, ao invs disso resolvi utilizar
minha experincia pessoal do primeiro filho, que se tornou muito mais til do que
milhares de pginas escritas por especialistas.
Fred Brooks, em seu trabalho No Silver Bullets identificou um plano em trs partes
para encontrar grandes projetistas de software:
1. Sistematicamente identifique os melhores projetistas o quanto antes.
2. Atribua um orientador de carreira responsvel 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 necessrias para ser
um grande desenvolvedor de software; o grande trabalho apenas coloca-los no
caminho correto. AlanPerlis coloca de forma mais sucinta: Qualquer um pode ser
ensinado a esculpir: Michelangelo precisaria ser ensinado a no esculpir. o
mesmo com grandes programadores.
Ento v em frente e compre aquele livrode Java; provavelmente voc ter algum
uso dele. Mas isso no vai mudar a sua vida, ou o seu conhecimento como um
programador em 24 horas, dias, ou meses.

Referncias
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 execuo de vrias operaes num PC tpico de 1Ghz no
vero de 2001:
executar uma instruo simples
1 nseg = (1/1,000,000,000)
seg
extrair uma palavra da memria L1 2 nseg
extrair uma palavra da memria RAM 10 nsec
extrair uma palavra consecutivamente do disco
rgido
200 nseg
extrair uma palavra de uma nova posio o disco
(busca)
8,000,000nseg = 8mseg


Apndice: Escolha de Linguagem
Muitas pessoas tem me perguntado sobre qual linguagem devem aprender
primeiro.
No h resposta, mas considere estes pontos:
Use os seus amigos. Quando me perguntam que sistema operacioal devo
usar, Windows, Unix ou Mac? minha resposta geralmenet : use o que
seus amigos usarem. A vantagem que voc poder aprender com os seus
amigos vence qualquer diferena entre sistemas operacionais ou linguagens.
Considere tambm seus futuros amigos: a comunidade de programadores
que voc far parte se continuar. A sua escolha possuia uma grande
comunidade de usurios ou apenas uma comunidade morta? Existem livros,
sites e frums para encontrar respostas? Voc gosta das pessoas desses
frums?
Mantenha-se simples. Linguagens como C++ ou Java so desenvolvidas
para utilizao profissional por um grande time de desenvolvedores
experientes que esto preocupados com a eficincia de execuo de seus
cdigos. Como resultado, essas linguagens possuem partes complicadas
desenvolvidas para essas circunstncias. Voc esta focado em aprender a
programar, no precisa dessa preocupao. Voc precisa de uma linguagem
que foi desenvolvida para ser fcil 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
automizado em que voc escuta cada nota quando a msica termina de
tocar? Claramente, aprender interativamente muito mais fcil, e assim
com a programao. Insista em uma linguagem com um modo interativo e
use-o.
Baseado nesses critrios, minhas recomendaes para uma primeira linguagem
seria Python ou Scheme. Mas as suas circunstncias podem variar, e existem
outras boas opes. Se a sua idade ainda tiver apenas um dgito, melhor escolher
Alice ou Squeak (aprendizes mais velhos podem gostar tambm). O importante
voc escolher e comear.

Apndice: Livros e outros recursos
Muitas pessoas me perguntam em quais livros e pginas elas devem aprender. Eu
repito que apenas ler livros no suficiente mas eu posso recomendar o
seguinte:
Scheme: Structure and Interpretation of Computer Programs (Abelson &
Sussman) provavelmente a melhor introduo a cincia da computao e
ele faz ensinando a programar enquanto voc aprende computao.
Voc pode ver vdeos 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 introduo a computao (Zelle) e
tambm a linguagem Python.
Python: Vrios tutorials online esto disponveis 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 idias da programao, muito mais amplo que
Abelson & Sussman mas mantendo uma certa facilidade de leitura. Ele
utiliza uma linguagem, Oz, que no muito reconhecida mas serve como
base para outras linguagens.

Vous aimerez peut-être aussi