O ensino da primeira disciplina de programação corresponde a uma tarefa de grande responsabilidade pelo seu carácter marcante nos alunos em relação à atitude futura face ao desenvolvimento de programas. Ao longo da evolução da jovem área científica de Informática, o ensino da primeira disciplina de programação tem sido alvo de múltiplos debates e discussões acesas. Não existe consenso na comunidade científica sobre a melhor forma de abordar o ensino da primeira disciplina de programação, existindo várias linhas, defendidas, por vezes, por argumentos que tocam mais o "religioso" do que o científico. Num mundo em rápida evolução tecnológica, adoptámos por abordar a introdução à programação através da apresentação rigorosa dos principais conceitos subjacentes à programação, conceitos esses que tendem a ser estáveis, ilustrando-os recorrendo a uma linguagem com uma sintaxe mínima, e preparando assim os alunos para lidar com a evolução tecnológica que estará omnipresente na sua vida profissional. Consideramos que o domínio da programação transcende o conhecimento de linguagens específicas, necessitando de uma compreensão profunda de conceitos e da natureza da computação. Neste livro apresentamos uma abordagem à programação baseada em abstracções, tanto de abstracções de procedimentos, como de abstracções de dados, fornecemos uma abordagem disciplinada à actividade de programação e, simultaneamente, transmitimos conceitos genéricos relacionados com linguagens de programação. Apresentamos e discutimos comparativamente diversos paradigmas de programação, incluindo a programação funcional, a programação imperativa e a programação por objectos.