ICS 314 is a fast-paced immersion into significant software engineering concepts and technologies. It incorporates the following themes:
Software engineering concepts. Classical concepts include requirements, design, implementation, testing, configuration management, development environments, quality assurance, deployment, and project management.
Software engineering technologies. You will explore with a variety of technologies including: the IntelliJ Idea integrated development environment, the Jasmine testing framework, the git configuration management system, GitHub project hosting, the Semantic UI user interface framework, and the Meteor web application framework.
Design. You will gain experience with a variety of design domains, including user interface design, application design, data design, security design, and requirements design.
Quality Assurance. The course presents quality assurance concepts from coding standards to testing to automated tools such as ESLint to software review.
Professional development. The course will help you establish and/or improve your “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 set of well-written technical essays; and (d) participation in professional networking sites such as LinkedIn and TechHui.
Technical writing/WI Focus. The course will help you 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.
Open source software engineering. You will learn some of the fundamental issues involved in successfully developing open source software, as well as the many professional benefits of developing open source software as a student.
Athletic software engineering. ICS 314 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.
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 ICS projects benefit from a web-based user interface, and this class will help you to create a nice one regardless of your “design” background.
This course is intended for undergraduates in computer science or electrical 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.
ICS 314 is structured as a sequential series of modules, most taking approximately a week to complete. Each module has the following structure:
While ICS software engineering requires discipline and effort, the results appear to be worth the investment. Here are some recent course evaluation comments:
Take this course if you have the time and want to learn some useful skills. Don’t underestimate the amount of time you’ll need to put in, but it is definitely rewarding if you want to pursue software engineering. (Fall, 2015)
While this class does contain a lot of work compared to other classes, the assignments we do in class are actually practical. We work with problems and tools that are used in the real world. In addition, since the class is structured using the Athletic software engineering principle, we go through material extremely quickly. This real world scenario of doing things fast and doing things correct is the best skill that this class teaches. (Spring, 2015)
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)
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).