Você está na página 1de 4

APRENDA A PROGRAMAR EM DEZ ANOS

Traduo do texto Teach Yourself Programming in Ten Years de Peter Norvig, diretor de pesquisas do Google.

Por que todo mundo tem tanta pressa? Entre em qualquer livraria, e voc vai ver Aprenda Java em 7 dias juntamente com infinitas variaes oferecendo ensinar Visual Basic, Window, Internet, e assim por diante, em poucos dias ou horas. Eu fiz a seguinte pesquisa no Amazon.com:
pubdate: after 1992 and title: days and (title: learn or title: teach yourself)

e foi retornado 248 resultados. Os primeiros 78 livros eram sobre computadores (o nmero 79 foi Aprenda bengali em 30 dias). Eu substitu dias por horas e obtive resultado muito semelhante: mais 253 livros, 77 de computadores seguido por Aprenda Gramtica em 24 horas, nmero 78. De 200 livros, 96% eram livros de computadores. A concluso de que as pessoas esto com muita pressa de aprender sobre computadores, ou que aprender sobre computadores fabulosamente mais fcil do do qualquer outra coisa. No h livros de como aprender Beethoven, ou fsica quntica, ou at mesmo sobre adestramento de ces em poucos dias. Vamos analisar o que um ttulo como Aprenda Pascal em 3 dias pode significar: Aprenda: Em 3 dias voc no vai ter tempo para escrever muitos programas importantes, e aprender com o sucesso ou fracasso. Voc no vai ter tempo para trabalhar com um programador experiente e entender o que viver nesse ambiente. Em suma, voc no vai ter muito tempo para aprender. Ento, eles apenas podem falar superficialmente, e no de uma profunda compreenso. Tal como disse o Papa Alexandre, um pouco de conhecimento uma coisa perigosa. Pascal: Em 3 dias voc no ser capaz de aprender a sintaxe do Pascal (isso se voc j conhece

uma linguagem similar), mas no vai aprender muito como utilizar essa sintaxe. Resumindo, se fosse, digamos, um programador Basic, pode aprender a escrever programas no estilo de Basic usando a sintaxe do Pascal mas no vai saber o que um Pascal bom (ou ruim). Onde queremos chegar? Alan Perlis disse uma vez: Uma linguagem que afeta a maneira de voc pensar sobre a programao no vale a pena ser aprendida. diferente se voc precisa 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 voc no vai estar aprendendo como programar; Vai estar aprendendo como completar a tarefa. Em 3 dias: Infelizmente, no o bastante, a prxima seo mostra por qu.

Aprenda a Programar em Dez Anos


Pesquisadores (Bloom 1985, Bryan e Harter 1899, Hayes 1989, Simmon e Chase 1973) tm demonstrado que leva cera de dez anos para desenvolver competncias especializadas em qualquer variedade de reas, incluindo jogar xadrez, compor msicas, operar telgrafo, pintar, tocar piano, nadar, jogar tnis e pesquisar neuropsicologia e topologia. Aparentemente no existe atalhos reais: mesmo Mozart, que foi um prodgio musical com 4 anos, teve mais 13 anos at comear a compor msicas de primeira classe. De

outra forma, os Beatles pareceram ter disparado nas paradas em primeiros lugar com a apario no show do Ed Sullivan em 1964. Mas eles estavam tocando em pequenos clubes em Liverpol e Hamburgo desde 1957, e mesmo que tenham conseguido aparecer em massa, o primeiro grande sucesso, Sgt. Peppers, foi lanado em 1967. Samuel Johnson (1709-1784) 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 (1340-1400) reclamou: vida to curta, leva tanto pra aprender. Hipcrates (400 a.C.) conhecido pelo trecho A vida curta, a Arte longa, a ocasio fugidia, a experincia enganadora, o julgamento difcil. preciso fazermos no somente o que conveniente, mas, fazermos com que o doente, os assistentes e as coisas exteriores concorram para isto. Aqui vai minha receita para o sucesso na programao: Se interesse por programao, e faa porque legal. Faa manter legal para assim voc poder se Converse com outros programadores, leia outros programas. Isso mais importante do que dedicar por dez anos.

qualquer livro ou curso. Programe. A melhor maneira de aprender aprender fazendo. De uma forma mais tcnica, O nvel mximo de performance individual em um domnio no alcanado automaticamente em funo de uma experincia estendida, mas sim aumentado mesmo por indivduos extremamente 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 vai

te dar acesso a alguns empregos que requerem formao acadmica e um grande entendimento do campo de trabalho, mas se voc no gosta muito de ir para escolha, voc pode (com alguma dedicao) conseguir experincia similar sobre esse tipo de trabalho. Em qualquer caso, apenas ler um livro no ser o 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 e tinha apenas o segundo grau; Ele produziu vrios software incrveis, e ele tem se prprio grupo de discusso, e fez dinheiro suficiente para comprar seu prprio clube noturno. Trabalhe em projetos com outros programadores. Seja o melhor programador em alguns projetos,

seja o pior em outros. Quando voc o melhor voc testas suas habilidades em liderar o projeto e inspirar os 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 necessrio para entender e corrigi-lo quando o programador original no esta por perto. Pense em como desenvolver seus programas para que seja fcil para quem for mant-lo depois de voc.

Aprenda pelo menos meia dzia de linguagens de programao. Inclua na lista uma linguagem

orientada a objetos (como Java ou C++), uma que seja abstrao funcional (como Lisp ou ML), uma que de suporte a abstrao sinttica (como Lisp), uma que de suporte a co-rotinas (como Icon ou Scheme), e outra que suporte paralelismo (como Sisal). Lembre-se que h um computador em cincia da computao. Saiba quanto tempo leva para

seu computador executar uma instruo, buscar uma palavra da memria (com e sem cache), ler palavras consecutivas do disco, procurar por uma posio no disco. (As respostas esto aqui) Se envolva no esforo de padronizao de uma linguagem. Pode ser o comit ANSI C++, ou na padronizao de programao na sua empresa, se utilizam a identao com 2 ou 4 espaos. De qualquer maneira, voc aprende o que outras pessoas gosta em uma linguagem, ou quanto eles gostam e talvez um pouco sobre a razo pela qual elas se sentem assim. Tenha o bom senso de cair fora desse processo de padronizao o quanto antes. Com tudo isso em mente, questionvel o quo longe voc pode ir apenas lendo livros. Antes do meu primeiro filho nascer eu li todos os livros de Como Fazer e ainda me sentia como um novato. Trinta meses depois, quando meu segundo filho nasceu, voltei aos livros para relembrar? 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. 2. 3. outros. Isto pressupe que algumas pessoas j possuem as qualidades necessrias para ser um grande desenvolvedor de software; o grande trabalho apenas coloca-los no caminho correto. Alan Perlis isso mais sucitamente: Todos podem ser ensinados a esculpir: Michelangelo teria de ser ensinado a no esculpir. o mesmo com grandes programadores. Ento, v em frente e compre aquele livro de 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 at meses. ________________________________________ 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 10 nseg 200 nseg 8 000 000 nseg = 8 mseg Extrair uma palavra da memria L1 2 nseg Extrair uma palavra da memria RAM Extrair uma palavra consecutivamente do disco rgido ________________________________________ Sistematicamente identifique os melhores projetistas o quanto antes. Atribua a um orientador de carreira responsvel pelo desenvolvimento cuidadosamente de um Promova oportunidades para desenvolvedores em aprendizado interagir e estimular uns aos

plano de carreira.

Extrair uma palavra de uma nova posio do disco (busca)

Apndice: Escolha de uma 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 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 diferena entre sistemas operacionais ou linguagens. Considere tambm seus futuros amigos: a comunidade de programadores que voc far parte se continuar. A sua escolha possua uma grande comunidade de usurios ou apenas uma comunidade morta? Existem livros, websites 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 automatizado em que voc escuta cada nota quando a msica termina de tocar? Claramente, o modo interativo muito mais fcil para aprender piano, 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 e 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 Python: Python Programming: An Intro to CS (Zelle) e tambm a linguagem Python. Python: Vrios tutoriais online disponveis em Python.org. Oz: Concepts, Techniques, and Models of Computer Programming (Van Roy e Haridi) parece ser programas de forma elegante e funcional.

um sucessor moderno para Abelson e Sussman. um tour pelas grandes idias da programao, muito mais amplo que Abelson e Sussman mas mantendo uma certa facilidade de leitura. Ele utiliza uma linguagem, Oz, que no muito reconhecida mas serve como base para outras linguagens.
<acessado 08/08/2011> http://www.alejandromoraga.com.br/aprenda-a-programar-em-dez-anos

Você também pode gostar