The courses in this module provide fundamental knowledge of programming and theoretical computer science, which are essential skills for every computer scientist.
Students acquire basic concepts of object-oriented programming, such as modeling, selecting and creating data structures, implementation, and quality assurance. They also develop essential problem-solving skills by analyzing problems and solving them using programs.
In theoretical computer science, fundamental concepts such as formal languages, propositional logic, and formal mathematical automaton models are introduced. They are motivated by their relevance to practical applications in computer science.
Students in this course will learn the fundamentals of object-oriented programming using the Java programming language.
They will become familiar with basic programming constructs such as variables, types, expressions, control structures, and arrays, enabling them to solve simple problems.
Additionally, participants will acquire initial knowledge of object-oriented design and will be introduced to fundamental concepts of object-oriented programming, such as methods, classes, objects, and fields, which they will apply in small programs.
Problem-solving paradigms such as divide-and-conquer will be introduced, along with their practical implementation using recursive programs.
Besides arrays, students will also become familiar with fundamental data structures such as lists and their implementation, enabling them to use these structures for problem-solving.
Furthermore, participants will be introduced to more advanced object-oriented programming concepts, including inheritance, interfaces, information hiding, generic programming, and polymorphism.
In weekly exercises, students deepen their understanding of the practical content covered in the lectures.
Initially, they use terminal commands, but later transition to a professional, integrated Java development environment to create, debug, test, and modify programs.
Starting with simple calculations in Java using variables, expressions, and control structures, the assignments gradually become more complex, incorporating basic data modeling tasks. By the end, students will have programmed simple games and implemented solutions of mathematical problems, e.g., using approximation methods.
In addition to ensuring the correctness and functionality of their programs, students also learn to follow good programming practices and adhere to coding conventions — an essential skill for future work in teams.
This course introduces the theory of formal languages. The aim is to convey the Chomsky hierarchy as a level model of differently complex languages. Furthermore, finite automata are introduced as representatives of today's computers and their limitations are pointed out. A further learning objective is the confident application of various proof techniques.
The course covers the following areas of theoretical computer science: Boolean logic, formal languages, proof techniques, the Big-O-notation, finite automata, regular languages and expressions, the Chomsky hierarchy, the pumping lemma for regular and context-free languages and the minimisation of finite automata according to the Myhill-Nerode theorem. Pushdown automata, the CYK-algorithm and closure properties of regular and context-free languages are also discussed.
This course will take place as a pure lecture. Numerous exercises deepen selected areas and will be discussed in tutorials.