Introduction to Java Programming

For a few years around ~2008 I was the course lecturer for The University of Edinburgh's Introduction to Java Programming (IJP): a Masters-level, intensive 12-week crash-course in object-oriented programming with about 70 students per year.

IJP had a focus on code design and a diverse cohort of international students. It was mostly intended for MSc students from other subjects (e.g. Bioinformatics) who hadn't learned programming in their undergraduate degrees, but would need it as a skill in their postgraduate careers.

During my time as lecturer I converted the course from a traditional lecture-hall experience to one based on pre-recorded screencasts. Students watched the screencasts online in their own time and could refer back to them as needed, and all of their contact-time with myself and the other teaching staff was spent in computer labs working on actual programming exercises, instead of sleeping through long lectures.

This was a new idea at the time: it was the first time it had been done for any course at The University of Edinburgh and I wasn't aware of it being done anywhere else either. It later became popular and was called a "flipped classroom".

IJP used the Java IDE BlueJ and the screencasts were based on chapters from Objects First with Java - A Practical Introduction using BlueJ ("the BlueJ book").

The University continued to use my screencasts to teach the course for several years after I left. No one should use these screencasts to learn Java or object-oriented programming today: they're really old. I'm just publishing them here for archival purposes.

Chapter One: Objects and Classes

Chapter Two: Understanding Class Definitions

Chapter Three: Object Interaction

Chapter Four: Grouping Objects

Chapter Five: More Sophisticated Behaviour

Chapter Six: Well-Behaved Objects

Chapter Seven: Designing Classes

Chapter Eight: Improving Structure with Inheritance

Chapter Nine: More About Inheritance

Chapter Ten: Further Abstraction

Chapter Eleven: Building Graphical User Interfaces