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 gives an introduction to the theory of formal languages. The Chomsky hierarchy will serve as a model to classify these languages by their computational complexity. Modern computers are represented by finite state automatons, showing theier principal limits. The students also learn how to apply several proof techniques.
The lecture include the following areas of theoretical computer science: mathematical logic, formal languages, proof techniques, the O-calculus, finite automata, regular languages and expressions, the Chomsky hierarchy, the pumping lemma for regular and context-free languages and the minimization of finite automata by the theorem of Myhill-Nerode. Furthermore, the course covers pushdown automata, the CYK algorithm and closure properties of regular and context-free languages.
This course will take place as a pure lecture. Numerous exercises deepen selected areas and will be discussed in tutorials.