This course - aimed at students without prior programming experience - gives an introduction to programming with the Java programming language. It explains fundamental approaches to algorithmic problem solving. Students learn about declarative problem specification and procedural problem solving. The course focuses on procedural programming, but introduces also the basic concepts of object-oriented programming. It covers the software development phases of problem specification, software design, programming, testing, and debugging.