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.





6 comentários:

  1. Olá amigo, comecei na faculdade de sistemas de informação e estou aprendendo C, gostei muito das suas dicas, queria te perguntar 2 coisas tem alguma forma de pegar o jeito da lógica nos exercícios?? Vc tem esse livro The C Programming Language, 2nd edition em portugues???

    Obrigado pelas dicas!!!

    Abraço!!!

    ResponderExcluir
  2. Olá Livio,

    Esse "jeito" de pegar a lógica infelizmente não tem receita, mas eu recomendo fortemente usar rabiscos em papel pra tentar seguir o algoritmo.

    Eu lembro quando eu estudei algoritmos de ordenação, que eu escrevia num papel vários números em sequência, e começava a mudar no papel a ordem, seguindo o passo a passo que o algoritmo fazia. Isso é bem legal, tem uns "a-ha" maneiros.

    O livro tem em português sim! Chama-se "C: A Linguagem de Programação padrão ANSI".

    Abraços e boa sorte!

    ResponderExcluir
  3. Já me desculpo com o autor do blog porque ele indicou os piores livros e cursos sobre linguagem c.

    Aqui vai alguns que são excelentes para mim, não gostei do manual da UFMG e nem do C Completo e Total.

    equipe.nce.ufrj.br/adriano/c/apostila/texfiles/apostilaC.pdf - 207 paginas em portugues
    http://equipe.nce.ufrj.br/adriano/c/paginas.html
    http://equipe.nce.ufrj.br/adriano/c/apostila/indice.htm

    Ainda não lembro o ISBN de dois livros que tenho, muito antigos, porém excelentes. Excelentes porque são práticos e o ensino é baseado em exemplos com macetes diferenciados dos livros tradicionais, um de capa cinza tamanho grande, com mais de 2000 paginas e outro pequeno, cor azul claro desbotado de 500 paginas, voltarei aqui com o ISBN desses livros pouco conhecidos

    flaviomoraesjr@aim.com

    ResponderExcluir
  4. Olá Hugo,
    Estou no primeiro semestre de análise e desenvolvimento de
    sistemas e tenho uma dúvida sobre será que ainda vale a pena
    aprender c/c++ ?


    Claudio

    ResponderExcluir
    Respostas
    1. Claro que vale, Claudio!

      C e C++ são amplamente usados até hoje, e além disso eu acho muito importante aprender alguma linguagem de não tão alto nível, onde você tem que se importar com alguns detalhes que em linguagens de alto nível são meio que mágicos (alocação de memória é um exemplo).

      []s

      Excluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir