This course enables a student with little previous knowledge about programming to write programs in a productive environment using the Java programming language. This involves developing two sets of skills: A programmer must understand the programming language itself, its underlying paradigms, its utilities, syntax, and how to translate the specification of a task into program code. Since software is often developed in a team, a programmer also needs to know the basic tools predominantly used in the ecosystem centered around the programming language. She must not only know how to structure her code for maximum reuse and minimum maintenance requirements, but also how to use and create libraries, as well as how debug and document code. Our course tries to address both requirements in an integrated fashion.

This course has been designed by Prof. Weise from scratch. It does not just try to teach programming in a practical way, using many fully functional examples. It also introduces the tools that are needed to become an effective software engineer (and which usually are entirely ignored in academic courses) at didactically suitable points.

Prerequisites: None


  1. Attain basic programming skills, including
    1. assignments, expressions, conditionals, loops, functions
    2. object-oriented programming, class hierarchies, inheritance, interfaces, encapsulation
    3. exception handling
    4. basic Java utilities such as collections and streams
  2. Learn how to use the most important tools for productive software development, including
    1. using an IDE (Eclipse)
    2. using a debugger
    3. documentation with Javadoc
    4. creating and using libraries (JAR)
    5. unit testing using JUnit
    6. build processes using Maven

Teacher: Prof. Dr. Thomas Weise