A disciplina Introdução aos Algoritmos (IAlg) pretende criar nos discentes a habilidade de resolver problemas usando lógica de programação. Essa é uma visão diferente de muitos outros cursos relacionados à programação porque foca naquilo que é científico e reaproveitável em oposição a focar naquilo que é tecnológico e passageiro. Ou seja, o objetivo não é ensinar a usar uma linguagem de programação e suas bibliotecas, nem ensinar a usar um ambiente de desenvolvimento ou um compilador. O objetivo é ensinar a construir uma solução a partir de módulos, que são criados a partir de módulos mais simples. O mercado de trabalho tem interesse em formação de pessoal que domina uma determinada tecnologia para um determinado produto ou projeto e não em pessoas com conhecimento científico sólido que pode ser aproveitado em uma grande variedade de situações. Os professores do curso estão cientes disso e ainda assim, entendem que a estratégia adotada aqui é a correta para uma universidade.
Essas duas estratégias não são completamente antagônicas. Acreditamos que a estratégia usada é melhor para a formação do discente porque:
A linguagem adotada em IAlg é o C++. Existe muita confusão entre a linguagem C e a linguagem C++ em materiais diversos e especialmente na internet, inclusive em material da UFLA. Isso se deve ao fato de que C++ é "retrocompátivel" com C, ou seja, praticamente tudo que é válido em C é válido também em C++ e por isso a confusão é pouco importante. Porém, para quem está aprendendo, eu acho importante dar preferência à forma como as coisas são feitas em C++, porque apresentam melhorias em relação à forma de C.
A escolha desta linguagem é frequentemente criticada por alunos, especialmente aqueles focados no mercado de trabalho de programação, porque as vagas de emprego para programadores dificilmente mencionam C++. Para esses alunos, lembramos que cursos como Bacharelado em Ciência da Computação e Bacharelado em Sistemas de Informação pretendem ir além de formar alguém para trabalhar de programador.
A linguagem C++ permite trabalhar com foco em eficiência (baixo nível) ou com foco em tempo de desenvolvimento (alto nível). Ela permite acesso uma quantidade gigantesca de bibliotecas de programação (principalmente por sua compatibilidade com C), permitindo desenvolvimento relativamente rápido em áreas como interface gráfica, banco de dados, visão computacional, inteligência artificial, desenvolvimento de jogos, sistemas de processamento geográfico, etc. Na minha opinião, nenhuma outra linguagem tem tanta versatilidade, tornando-se uma boa escolha para quem está aprendendo a programar. Certamente, por causa de sua versatilidade, C++ perde em tempo de desenvolvimento em qualquer área para uma linguagem projetada especificamente para aquela área.
A linguagem C++ possui quase todos os recursos já inventados para linguagens de programação, possibilitando aprendizagem de conceitos teóricos importantes para programação como ponteiros, tipagem forte, processamento paralelo, tipos diversos de polimorfismo, inferência de tipos, orientação a objetos, manipulação de exceções, tipos de passagem de parâmetros, etc. Como aprender ponteiros usando uma linguagem em que os ponteiros ficam escondidos do programador? Como aprender os tipos de passagem de parâmetros numa linguagem que só possui um tipo? Além disso, a linguagem C++ segue uma filosofia de permitir a checagem da maior quantidade possível de erros em tempo de compilação, o que é bom para quem está aprendendo pois não é necessário fazer o teste certo para encontrar muitos dos erros do programa.
Obviamente, existem desvantagens em escolher C++ como uma primeira linguagem no ensino de programação, porém esteja ciente que os professores estão atentos e constantemente discutindo decisões como essa.
Considerando que estamos focados no ensino de pensamento algorítmico em oposição ao ensino de uma linguagem de programação, muito pouca atenção será dada a comandos e bibliotecas da linguagem. Em geral, as atividades da disciplina envolvem tarefas pequenas e simples para as quais já podem existem soluções prontas na própria linguagem utilizada. Usar essas soluções prontas não ajuda no treinamento desejado e portanto são frequentemente consideradas respostas "erradas" para as questões vistas na disciplina. Em caso de dúvidas sobre o que pode ou não pode ser usado, pergunte aos professores antes de produzir uma resposta que vai ser avaliada.
Esta página é mantida por Bruno Schneider para a disciplina de IAlg