Computer science is more than programming, but programming is at its heart. Therefore, it is absolutely critical, mandatory, and self-evident that computer scientists and computer engineers have an in-depth understanding of how a computer works and how they can make a computer do what they want. Such knowledge helps to understand a computer's limitations and bypass them, develop efficient and elegant programs, understand security vulnerabilites and avoid them, etc.
Course Objectives
This course introduces the concept of procedural programming by an in-depth study of the C programming language, hence building a solid foundation for more complex and special-purpose programming languages. Students obtain a general understanding of the function of a computer from a programming and program execution perspective. They get an impressions on the steps of the compilation of procedural source code to machine code, they learn all essential language constructs and data types of a procedural programming language, and they acquire knowledge about the software design concepts for the implementation of procedural programs. Moreover, we apply professional, well-established development tools such as Git.
Lab
The lecture is accompanied by a lab, in which the students apply the concepts from the lecture to write programs of increasing complexity throughout the course. Students work together in teams using industry-standard software collaboration tools such as Git. The lab is wrapped up with a project, in which a larger and more complex software is developed.