This course provides the students with fundamental concepts concerning programming. In particular, the students will have the opportunity to develop and implement algorithms, experience programming as the construction of abstractions, and contact different programming paradigms.