The book introduces the reader to computer programming, i.e. algorithms and data structures. It covers many new programming concepts that have emerged in recent years including object-oriented programming and design patterns. The book emphasizes the practical aspects of software construction without neglecting their solid theoretical foundation.