Programming Fundamentals 2


Programming is a craft rather than an exact science. Similarly to the craftsman in his workshop, we need a set of programming tools and guiding principles to develop reliable applications. The main purpose of Programming Fundamentals 2 is to learn how to design and implement programs above 500 lines of code. We give emphasis on clean and beautiful code, well-thought architectures, and a disciplined programming workflow. To achieve our goals, we will rely on the object-oriented paradigm and the Java programming language, as well as various programming tools (e.g., an editor, the shell, git and Github, Maven).

Further, this class provides a number of innovative features such as:
  1. Automated and personalized feedback on your projects (quick grading, code analysis session).
  2. Standard and competitive tracks.
  3. An A.I. competition.


The Small Programming Handbook
Password for all recording: Programm1ng

PF2 in one PDF (all the slides)

  • Chapter 0: Getting Started
    Installation tutorials: Linux Ubuntu, Windows, OS X
  • Chapter 1: Basics of Java syntax
  • Chapter 2: Imperative Programming
  • Chapter 3: Object-Oriented Programming
  • Chapter 4: Ad-hoc Polymorphism
  • Chapter 5: Subtype Polymorphism
  • Chapter 6: Casting Polymorphism
  • Chapter 7: (Almost) Everything is Object
  • Chapter 8: Error Management
  • Chapter 9: Parametric polymorphism
  • Chapter 10: Design pattern
  • Chapter 11: Modern Java Concepts
  • Chapter 12: Network Programming in Java
  • Chapter 13: Graphical User Interface with JavaFX
  • Chapter 14: Wrapping up


  • Crafting 1: Git
  • Crafting 2: Maven

Live Coding

  • Live coding 1: Shell, Git, Laboratory 1, Checkers (part 1)
  • Live coding 2: Checkers (part 2), readPositiveInteger, find the report from the automatic feedback system.
  • Live coding 3: What to say in FlipGrid video, HashCode advices, Q&A.
  • Live coding 4: Calculator (imperative style vs OO style)


Those interested in the competitive track must register here (you can join anytime).

  • Lab 1: Connect Four (deadline 1st March 08:00AM)
    • Code review of Lab 1
  • Lab 2: Pokedeck (deadline 15th March 08:00AM)
    • Code review of Lab 2
  • Lab 3: Free project (deadline 29th March 08:00AM)
    • Code review of Lab 3
  • Lab 4: Master of Ceremonies (deadline Saturday 10th April 08:00AM)
    • Code review of Lab 4
  • Code review of the exam
  • Lab 5: Game Design-LOL 2D (deadline Monday 31th May 08:00AM)
  • Lab 6: A Simple Artificial Intelligence for a MOBA game (deadline Monday 31th May 08:00AM)

In-class Laboratory (not graded)
  • Lab A: Draw me the memory!
  • Lab B: Object methods

Readings of the week