De tempos em tempos encontro uma discussão relacionada com os conceitos iniciais de programação que devem ser apresentados em uma disciplina introdutória. Inevitavelmente, o foco acaba destacando uma antiga (agora) discussão: seguir a trilha das linguagens procedimentais ou seguir a trilha das linguagens OO.
Solução de Problemas
Acredito que um ponto importante a ser considerado é aquele que se relaciona com o tema "solução de problemas" no nível abstrato. Esse tema conduz, naturalmente, ao estudo dos algoritmos [Vega, 2008]. Ou seja, quais técnicas auxiliam na descoberta de instruções que resolvem um problema? Quais técnicas auxiliam a organizar tais instruções para que o problema seja resolvido? Como saber se o algoritmo, ao ser executado (em uma máquina abstrata) resolve o problema? O estudo das estruturas de controle (sequencia, decisão e repetição) não pode ser excluído. Como, também, as diferentes maneiras de se organizar as informações manipuladas pelas instruções do algoritmo.
Codificação
Por outro lado, a codificação do algoritmo (e das estruturas de dados), revela um outro tema, de natureza diferente ao de "solução de problemas". Preocupa-se com a geração de um código que resolve um problema ao ser executado em uma máquina concreta (física ou virtual). Quais técnicas são apropriadas para gerar o código? Como coordenar os esforços de vários programadores, quando da geração de trechos de código que devem ser posteriormente integrados?
Seriam as questões relacionadas à solução de problemas e de codificação tratadas em um momento introdutório? Certamente. E como fazer isso? Qual o papel das linguagens de programação?