Este livro apresenta os principais conceitos das linguagens de programação imperativas e centradas em objectos, para além das estruturas de dados e algoritmos mais usados no dia a dia de um programador, através da linguagem Java. Numa primeira parte são vistos conceitos fundamentais como memória, algoritmo, recursão, classes, objectos, ficheiros e excepções através de vários exemplos. Na segunda parte são introduzidas algumas técnicas de engenharia de software que permitem controlar a inevitável complexidade inerente ao desenvolvimento de programas mais complexos, nomeadamente a programação por contrato e o processo de especificação. Finalmente, numa terceira parte, são descritos algoritmos comuns (por exemplo, como ordenar um conjunto de valores, quando se utiliza a programação dinâmica) e estruturas de dados (listas, pilhas, filas, conjuntos, árvores, tabelas, heaps).