Para aprendizagem sugiro linguagens que foram desenhadas como linguagens de aprendizagem. Pascal, por exemplo, é muito bom porque:
- Ao contrário de C (e do resto da família), é bastante "legível" para humanos;
- É bastante declarativa e fortemente tipada, ou seja, todas as variáveis, funções, e procedimentos têm que ter um tipo declarado;
- Tem uso simples de arrays, strings, parâmetros por referência e outras cenas que involvem apontadores e endereços em C (tentem explicar uma função swap em C a um principiante. Agora tentem em Pascal );
- Usam-se coisas agradáveis a quem não percebe como and, or, not ao invés de coisas indecifráveis tipo &&, ||, &, |...
No fundo (apesar de eu ser um total C-addict) não recomendo C, nem nada da família de C (C# é um caso à parte), a principiantes. É uma linguagem demasiado "maquinizada". Recomendo linguagens mais "humanizadas".
O BASIC (o antigo) também é bom no aspecto da simplicidade, mas peca pelo sistema de tipos INEXISTENTE.
Uma linguagem em que se é obrigado a declarar tudo e mais alguma coisa, pode parecer intimidante, sendo tentadora a que não requer nada disso, mas assim forma obriga a que se perceba o que se está a fazer e incute boas práticas.
Quanto a OOP (Object-Oriented Programming), refiro novamente que C++ é uma má escolha, pelas mesmas razões de C, mas com a agravante da gestão de memória manual. Talvez Java, (apesar do meu total repúdio, mas isso é outro assunto) ou, as melhores de todas VB .NET e C# (ou qualquer linguagem orientada a .NET).
Linguagens como Perl, são más por razões semelhantes a C. Saber que $a representa um escalar mas @a é um array é pouco ameno para principiantes. E a não necessidade de declarar variáveis e os seus tipos, ou os cabeçalhos de funções, cria maus hábitos, para além da tendência a provocar
bugs.
Quanto às linguagens funcionais... Não há volta a dar: Haskell. Ponto final.
Este post já está a ficar muito longo, mas como notas finais:
- Não se fiquem pelos tutoriais. Apesar de existirem bons tutoriais (eu aprendi Assembly assim) muitos dos tutoriais que se encontram na Web são MAUS tutoriais. São tutoriais que ensinam más técnicas, ou que são demasiado breves para cobrir tudo o que é importante. Documentação a sério (como livros) pode parecer intimidante, mas nunca deve ser posta de parte;
- Não basta saber "bater código". Aprendam algoritmos e estruturas de dados. Encontrei um post de uma pessoa que "sabia programar em C mas não sabia o que eram pilhas" e estava a usar listas ligadas... Podes saber muito sobre uma linguagem ou outra, mas nunca podes dizer que sabes programar se não sabes nada sobre estruturas de dados e algoritmos básicos.
- Ao estudar um algoritmo ou estrutura de dados nova, leiam a descrição da coisa e tentem escrever código para ela antes de ver código que já existe. Desta forma assimilam melhor os conceitos e o método de funcionamento.
P.S.: Notem que quando digo que a linguagem X é má, refiro-me apenas à sua qualidade para iniciação à programação, não no sentido geral.
Eu sou mesmo chato....
Não escrevam código no bloco de notas. Usem um verdadeiro editor de texto, ou um IDE.
Eu uso o Vim, um editor poderoso, programável e orientado para passar menos tempo a teclar o código e mais tempo a pensá-lo. Mas não o recomendo, aliás, PROIBO a principiantes. É necessário aprender a usá-lo previamente, e neste momento estão a aprender a programar, não a usar o Vim.
Usem algo mais simples como o Notepad++.
Consultem a outra thread sticky para mais informações sobre editores e IDEs.