Department of Computer Science

This course will take you through the software development lifecycle. You'll learn the concepts and practically apply them by building a substantial program in groups.

A sample course outline can be found here.

It's not the destination, it's the journey

Yes, really.

Almost any half-decent coder could sit down by themselves and write a program that seems to work. I've done that lots of times. So have you. But this course is not about that. It's about learning how to approach a project; how to gather requirements, analyze, design, build and test code, and how those activities feed back into each other.

But that's only half the story. The reality of software engineering is that it's a team activity, and a process that never truly ends, thanks to the need to maintain and update code as requirements and technologies progress. A critical component is learning how to work with others in a group: how to communicate, coordinate, criticize and cooperate to achieve a common goal. So students work in groups on a project. Randomized groups. In real life we don't get to choose our work colleagues. It's challenging, often frustrating, but ultimately rewarding; there is no better way to learn how to solve a problem than to tackle it head on. And there's a real sense of achievement when you bring it all together.

Other useful information

All programming on this course will be in Java.

The first individual assignment will require that you create a small program that uses a graphical user interface (GUI).

So students who want to improve their knowledge of Java GUI components should take a Java Swing Tutorial, such as the one found here.

Why aren't I suggesting the JavaFX tutorial?

JavaFX is a more recent alternative to Swing for creating GUIs.

However, if you're a novice at creating GUIs, then Swing is easier and quicker to get to grips with compared to JavaFX, and will provide you with enough tools for all the work on this course.

I would recommend that you move onto JavaFX once you're familiar with the basic techniques for building an application that uses a GUI.