Programming languages are at the heart of computer science. They are the tools we use to communicate not only with computers but also with people. This book, designed as a textbook for a junior/senior level course at the undergraduate level, starts with the basic concepts (syntax & semantic), to study different programming language paradigm (OOP) and finishes by looking at the factors that force the evolution of programming languages and some of the current trends.