- Profs: Manuela Fischer, Malte Schwerhoff
- Website: EProg 2024
- Moodle: Moodle
- Admin: Admin
- Video: Videos ETHZ
This introductory programming course, taught by Professors Fischer and Schwerhoff, uses Java to introduce fundamental programming concepts. It also explores computational and programmatic thinking, covering topics like EBNF for understanding syntax trees and Hoare logic for program verification.
The course begins with basics such as data types, control flow, common data structures, and I/O operations before gradually moving on to more advanced topics like object-oriented programming (inheritance, abstraction, encapsulation, polymorphism), interfaces, Java collections, etc…
Having experience in programming with various languages, I must say this was the most well-structured, logical, and rigorous introduction to any language I’ve encountered. Professors Fischer and Schwerhoff explained key details, highlighted common pitfalls, and provided numerous examples, making the learning process thorough and engaging.
This course is excellent for beginners but also valuable for those with prior programming experience who want a deeper understanding. While accessible, it does go beyond the basics, covering concepts such as Hoare logic, interfaces, polymorphism, function overloading, variable shadowing, type casting, and generics. Overall, it provides a solid foundational understanding of programming and Java.
Lecture Notes
- 01 EBNF
- 02 Java (Intro)
- 03 Java (Basics)
- 04 Java (Input, Random, Control Flow)
- 05 Java (Functions, Value vs Reference Semantics, Variable Scope)
- 06 Java (Functions, Loops, Side Effects, Do-While)
- 07 Sequences
- 08 Array Operations, Recursion
- 09 Solution Strategies, Logical Conclusions, Assertions, Hoare Logic
- 10 Hoare Logic
- 11 Loop Invariants, Classes and Objects, Attributes, Reference Semantics
- 12 Null, Class Methods, Constructors
- 13 Visibility Modifiers, Object Invariants, Static Methods, Final and Attributes
- 14 Enums, Code Style, Conventions, Refactoring, Linked Lists
- 15 Linked Lists, Inner Classes, Methods, Recursive Methods, Built-in Lists
- 16 Java Built-in Lists, LinkedList, ArrayList, Wrapper Classes, Inheritance Basics
- 17 Visibility Modifiers, Sub Typing, Typecasts, Dynamic Binding, Polymorphism
- 18 Object Class, Comparing Objects (Override Equals), Shadowing, Inheritance Design Principles, Files, Cursor and Tokens
- 19 Files, File Output, Exceptions, Checked vs Unchecked, Throwing, Exception Handling Best Practices
- 20 Interfaces, Java Collection Framework, Interface Collection, Interface List
- 21 Interface List, Comparing Elements, Interface Set, Hashing and Hashcode
- 22 Java Collection Framework, Interface Set, Interface Map, Comparator Interface
- 23 Java Collections Framework, Comparator Interface, Iterator Interface, Generics, ArrayList Example
- 24 Type Erasure, Advanced Generics (Covariance, Contravariance, Invariance), Type Bounds, Packages
- 25 Chat Application, Client-Server Architecture, GUI, (De)Serialization, Websockets, Dependency Management, Introspection and Reflection
- 26 Memory Management, Stack & Heap, Garbage Collection