This course introduces the main concepts of programming languages and programming techniques. The students not only get a theoretical understanding of the concepts but also gain practical programming skills through the exercises. There are no prerequisites for this course. The conveyed programming skills are required in several other courses such as e.g. software engineering. Moreover, they are needed in the project seminar and (in many cases) for the bachelor thesis. The course covers object oriented programming in Java as well as declarative programming in (e.g.) Haskell. Moreover, the syntax and operational semantics of these languages is formally described. In detail the following topics are explained: overview of programming languages landscape; Java: objects, classes, methods, attributes, variables, class diagrams, visability, types, statements, expressions, method calls, recursion, arrays, inheritance, late binding, interfaces, graphical user interfaces, frameworks (e.g. Swing), inner classes, exception handling, generics, wrapping of basic values, enumeration types, JUnit, file handling, garbage collection, applets, threads, synchronization, general programming principles, stepwise refinement; Haskell: algebraic data types, pattern matching, type inference, higher-order functions, Currying, lazy evaluation; operational semantics: strict vs. non-strict operations, program translation, intermediate code. The goal is that the students learn the main programming concepts and programming techniques.

Learning outcomes

Academic: Students shall master the programming in the small, i.e. the implementation of a specification of a program or module. Soft skills: In the exercises the students cooperate in small groups of students (e.g. 3). This strengthens their ability to work in a team.
Number of credit hours per week 6
Course eligibility Compulsory
Presence of students On-campus