ICS 314: Software Engineering (Fall 2023)

ICS 314 is a fast-paced immersion into significant software engineering concepts and technologies.

Themes

This course includes the following themes:

The course grounds these thematic elements by covering the skills necessary to quickly build two-tier web applications with a modern look-and-feel. Many computer science and computer engineering projects benefit from a web-based user interface, and this class will help you to create a nice one regardless of your “design” background.

For more details, consult the syllabus page within the Introduction Module.

Who should take this course

This course is intended for undergraduates or graduate students in computer science or computer engineering who have a working knowledge of Java or C++ and who want to invest effort into developing their software engineering skill set.

A significant component of the course is a student-selected final project to showcase the techniques learned during the course.

What is the difference between ICS 314, 414, and 613?

There are three software engineering courses in the ICS curriculum.

ICS 314 and ICS 613 are both introductory courses. ICS 613, “Advanced” software engineering, is more accurately an “advanced introduction” to software engineering. This is because we have found that our graduate students vary in their software engineering background, and so it is most helpful to provide them with a software engineering course that does not make any assumptions about their background apart from “computational sophistication”.

ICS 414, on the other hand, has ICS 314 as a prerequisite, and builds directly on the material presented in ICS 314. It is best to take ICS 414 in the semester directly following ICS 314, while the material and tech stack is still fresh.

If you have taken ICS 314 as an undergraduate, and then entered the ICS graduate program, it is not appropriate for you to take ICS 613, as too much of the material will be too similar to what you already learned as an undergraduate.

Pedagogy

ICS 314 is structured as a sequential series of modules, most taking approximately a week to complete. Each module has the following structure:

Prior results

While ICS software engineering requires discipline and effort, the results appear to be worth the investment. For complete student perspectives on Philip Johnson’s teaching style, please see his unedited course evaluations since 2007, with hundreds of comments (both positive and negative). Carleton (Cam) Moore’s unedited Software Engineering course evaluations since 2020 are also available.

Here are a few course evaluation comments from recent semesters:

This course taught me a lot about higher level software engineering principles. I first questioned why Meteor was used instead of other popular frameworks. I came to the conclusion that Meteor is a great starting point to learn a bit of everything that comes into play when building a web application. WODs were also very useful to help us retain the languages and tools that we learned. (Fall 2022)

The class was very well structured. Dr. Moore and Phillip are both extremely knowledgeable professors who clearly have a passion for teaching students. (Spring 2022)

I am not a fan of the “reverse teaching” method but it still worked. Thank you! (Fall, 2021)

Dr. Johnson has, by far, been one of the best professors I have had at the University of Hawaii at Manoa. He took a relatively intimidating field and was able to break it down effectively and efficiently. Dr. Johnson is also very understanding and helpful when needed. His positive (and sometimes quirky) attitude made waking up every morning in the middle of a pandemic a little bit more bearable. I do not think I would have had such a positive experience in this class had it not been with him. (Spring, 2021)

This class makes feel SO excited for my future. 314 really prepared you for real world experiences. I feel more confident for the first time ever and it’s my fourth year at UH. (Fall, 2020)

The work load is a lot but it’s really fun to see the possibilities that can be done because of it. I enjoyed the course and never felt burdened to do any of the coding assignments because it was so engaging. As long as you keep doing the assignments you are supposed to, you can stay on track and learn efficiently. Its broken down concepts that you gradually learn and by the end, you come out with a great amount of knowledge than before. This is probably one of the best courses you’ll take as it will apply far beyond school. (Spring, 2020)

Professor Johnson’s course is the course that breaks open the field for students, in my opinion. He provides us the tools to effectively collaborate as a team when working with code and how to make the modern designs that we see today in sites. This course is definitely something I dreaded while taking, since the work load can be a little much at times, but if you properly try to understand how everything works, the knowledge gained can stay with you for life. It’s honestly insane. (Fall, 2019)

Overall, the course takes a different direction than the typical class would. The course is similar to conditioning yourself for a sport. It takes a lot of time and effort from the student initially, but as time goes on, the results show. At the start of the course, the time pressure of the assignments made me tense and clumsy, but the practices and material provided helped steel me into a LEAN, MEAN, FIERCE COMPUTER ATHLETE, WHO DOESN’T FLINCH AT THE SIGHT OF A WOD. The project period is also a time of revelation. (Spring, 2018)

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)