ICS 314: Software Engineering I


The primary goal of ICS 314: Software Engineering is to advance your ability to design and implement high quality software systems using open source software development principles.

We accomplish this by taking a technological approach to the presentation of traditional software engineering concepts like specification, modeling, analysis, and design. By the end of the semester, you will acquire significant new skills with useful tools including: the Java and Scala programming languages, the Eclipse integrated development environment, the JUnit testing framework, the git configuration management system and GitHub cloud-based project hosting, the Play web application framework, and the Checkstyle, PMD, and FindBugs automated quality assurance tools.

A second goal is to help you establish a “professional online persona”. This includes: (a) a professional portfolio web site; (b) a set of publicly available software projects in which you have participated; (c) a technical blog written by you with well-written articles; and (d) participation in professional networking sites such as LinkedIn and TechHui.

A third goal is for you to develop effective strategies for writing, to use and value writing as a tools for learning, and to learn to write in an appropriate manner for software engineering. You will do a substantial amount of writing for this course, well over 16 pages or 4,000 words, and you must adequately complete all writing assignments in order to pass the course with a grade of D or better. For these reasons, ICS 314 is designated as a writing intensive course.


ICS 314 consists of a sequence of modules, each typically taking a week to complete. Most modules have the following structure:

ICS 314 also implements an educational technique called athletic software engineering, which relies heavily on WODs (Workouts of the Day) to help you acquire mastery of the concepts in this course.

Prior results

While ICS software engineering requires discipline and effort, the results appear to be worth the investment. Here are some recent course evaluation comments:

This class, more than any other ICS class I’ve taken, teaches you about the “real world” skills that aren’t taught in other courses - most of which have to do with learning how to collaborate with a team of programmers. The class has a pretty heavy load, but it’s worth it. Everything you do in class is meant to benefit you directly. (Fall, 2013)

It was fun learning all of these software engineering methods, concept, tools, ideas, etc. I was a software engineer in a tech company, and we did use many similar tools that Dr. Johnson went over. For example, I used Ant, Eclipse, JUnit, etc. I definitely feel that I gained very applicable knowledge and skills after completing this class. It’s a definite must for prospective software engineers. (Fall, 2011)

This course teaches you about teamwork, automatic build systems, maintaining impeccable code, and project management, which are all important in the industry. There are no other classes in the ICS department that offers such hands-on and novel assignments. In fact, there are no other classes like ICS 413 and professors like Johnson anywhere in Hawaii. (Fall, 2010)

On the other hand, some students find the workload to be stressful, as shown by this comment:

A very spirited instructor, sometimes too spirited. The constant requirements for the class both with studying materials and programming can be overwhelming to a student of typical course & out of school load (other classes and work/family obligations). (Fall, 2009)

For additional student perspectives on my teaching, please see my unedited course evaluations since 2007, with hundreds of comments (both positive and negative).

Future benefits

The skills you acquire in ICS 314 provide professional advantages:

It has been my experience that learning technologies like Ant, JUnit, Eclipse, and Subversion and practices like Code Reviews, Extreme Programming, and User Testing will separate you from the rest of crowd when applying for entry level Software Engineering positions. While recruiting and evaluating University of Hawaii ICS students one of the first questions I ask is "Did you take Software Engineering?" Followed by, "Do you know what JUnit is?"