segunda-feira, 22 de agosto de 2011

Meu Começo: Linguagem C


Acabaram de me pedir "orientações", e eu comecei a me lembrar do que eu estudei quando estava começando a programar.

Resolvi colocar nesse post um resumo do meu início, e fazer algumas recomendações.

Eu comecei a me interessar por computadores logo que ganhei o meu primeiro, quando eu tinha 10 anos, e o que eu mais gostava de fazer era ficar no mIRC nos fins-de-semana e madrugada. Até que um dia, o irmão de um amigo meu resolveu falar pra eu começar a aprender a programar, e me passou uma apostila de C da UFMG.


Primeira apostila: Apostila de C da UFMG

Eu nem sabia o que era linguagem, e já fui estudando umas apostilas de lógica que eu achava na internet, e logo em seguida comecei a estudar a tal apostila de C da UFMG que o Vitor Padilha havia me recomendado. Eu tinha uns 12 anos, e não entendia muita coisa, aí brinquei uma ou duas semanas e desisti. Me senti um merda. Fiquei brincando com mIRC scripting até que com uns 13 pra 14 eu resolvi voltar a aprender a programar.

Eu sempre usei IRC, e na época eu usava a BrasNet. Muitas pessoas do #C me ajudaram na época, inclusive pessoas de comunidades do Orkut, como o professor Paulo Motta, que me ajudou muito no meu início, via MSN/Gtalk.

Eu fiquei nessa de aprender por mais de um ano, e nesse meio tempo muita coisa, tudo pelas dicas da galera da BrasNet.

A apostila de C da UFMG sempre foi uma lenda, e muitas pessoas a recomendam até hoje! Depois de estudar muito C, vi que ela é legal para dar uma passada superficial pela linguagem, mas não é tão legal pra ter como referência.

Eu não a recomendaria hoje em dia.


Primeiro livro: C Completo e Total

O Paulo falava muito sobre esse livro, e eu decidi baixar e começar a lê-lo no computador. O livro é uma bíblia, tem umas 800 páginas!
Tem muita coisa interessante no livro que não está totalmente ligado a linguagem C - no início eu me lembro de explicações sobre stack, heap e etc, que achei muito legal, pois eu não havia lido isso em lugar nenhum. Acho que foi fundamental eu ter gasto meses nesse livro, e com certeza aprendi muito com ele.

Um ponto fraco do livro é que tem muitos exemplos de coisas que só funcionam com bibliotecas da Borland no sistema, e algumas péssimas práticas.

É um livro razoável pra ter como referência.


O melhor: The C Programming Language, 2nd edition

O livro é muito foda. É o melhor material sobre C (c89/k&r) que eu já li até hoje. O livro é bem pequeno, mas é fantástico. Os autores são: Dennis Ritchie e Brian Kernighan, duas lendas, e ambos autores do UNIX.
É uma ótima leitura, recomendo a todos que querem aprender C, lê-lo. Ele é conhecido como K&R2.

Há poucos dias o Zed Shaw fez umas críticas a esse livro no twitter, falando sobre algumas má praticas usadas em exemplos do livro.
Eu concordo com o Shaw em alguns pontos, mas os exemplos são muito sucintos e adequados, e isso facilita muito pra quem está aprendendo.

É claro que há muita coisa de C que só é possível aprender lendo código e conversando com pessoas. Por isso eu recomendo frequentar o canal ##c na Freenode, pra quem está aprendendo C. Já obtive muita ajuda lá também (depois que eu parei de usar a BrasNet).


Muitas Man Pages

Essa semana eu estava conversando no almoço com alguns amigos da Globo.com sobre documentação de linguagens, e eu falei sobre o meu início, em que eu tinha um Slackware numa máquina virtual,
e usava internet discada, e logo, tudo o que eu tinha pra estudar C eram as man pages.

São documentações EXCELENTES. Segundo o Everton Carpes, o motivo disso é a maturidade, já que a GLIBC tem uns 30 anos.

Recomendo muito que todos aprendam a fazer consultas pelas man pages, antes de ir ao Google.

Antes que eu me esqueça: leiam a man page do scanf, ele é muito mais poderoso do que os livros mostram.


Lendo código dos outros

Como eu não poderia deixar de falar, ler código dos outros é uma das melhores maneiras de aprender uma linguagem nova.

Um que me marcou foi o código do MINIX. Eu, obviamente não entendia nada de sistema operacionais, mas eu queria ver como programadores C de verdade escreviam código, e lá aprendi alguns padrões que eram usados na época, alguns truques com pré-processador e etc.

Na época o host de projetos opensource mais famoso era o SourceForge, e de lá eu já baixei muito código pra ler, e me lembro de um ircbot que o Isaque Dutra estava escrevendo em C, eu comecei a hackear pra aprender como funcionava a comunicação pela rede, e era tão newbie que nem sabia usar o CVS (que era o SCM usado no SourceForge naquela época).


Conclusão

Acho que é fundamental que todo programador aprenda alguma linguagem que seja de mais baixo nível, como experiência de vida mesmo, porque é necessário aprender a escovar bits e se virar com os poucos recursos existentes.

Apesar de ter estudado muito C, nunca escrevi nenhuma biblioteca/framework interessante em C,
mas sinto que criei uma base bem sólida pra evoluir desde então.