Software Development Principles and Practices

CSC 321, Spring 2015
T 2:15 - 4:05, SCI 3818
Janet Davis

Our course on edX: [part 1] [part 2]



Catalog description

Provides a foundation for “programming in the large” and developing high-quality software that meets human needs. Introduces the software lifecycle, agile development methods, professional tools, and software design principles. Includes hands-on laboratory work.


This course is an introduction to software development principles and practices, focusing on Web applications or "software as a service" (SaaS), for students with at least three semesters of programming experience including object-oriented design.

This course is a co-requisite to CSC 322, Team Software Development for Community Organizations. A primary goal of  CSC 321 is to prepare you to undertake a significant project in CSC 322. By the end (or middle!) of this course, you should be prepared to:

Topics in CSC 321 will be introduced just in time for their application in CSC 322.

Assignments in this course should be brief but challenging. You will often need to do some research of your own to meet technical challenges; this is preparation for encountering the technical challenges of your project work in CSC 322 and beyond.


This spring in CSC 321, we will be continuing an exciting experiment.  I've chosen to adopt materials from Berkeley's CS169 Engineering Software as a Service as our basis for this course.  We have access to the lectures, exercises, and programming assignments through edX as a small private online course (or SPOC). This will enable me to "flip" the classroom, so that you can spend class time not listening to lectures, but instead discussing the material, doing practice exercises, starting on the homework assignments, and asking questions.

Some comments and advice:

Your assessment will be based on your journal, several pair programming assignments which you will start in class and finish as homework, nine online quizzes, and one short essay.

Time commitment

I expect this class to take about half as much time as a typically rigorous, 4-credit, Grinnell CS class. You can expect to spend your time each week roughly as follows, with some weekly variations depending on the nature of our activities:

New material and assignments will taper off towards the end of the semester.There is no final exam for this class; you will be completely finished before finals week.


Our primary textbook:

You should purchase the Kindle edition ($9.99) through Amazon. You do not need a Kindle to read the Kindle edition. With the Kindle Cloud reader, you can read the Kindle edition in a Web browser.

If you prefer to read a bound paper book, you may purchase a used copy of the print textbook (1st edition). At least one print copy will be available in the CS Library located in the CS Learning Center (SCI 3814). The print edition is fine for reading, but the code examples contain many errata which have been corrected in the most recent Kindle edition.

The CS Library is stocked with a shelf of books on related topics, including Ruby and Ruby on Rails; regular expressions; Web design and usability; HTML, CSS, and XML; version control and other tools; Scrum and XP; and software engineering in general.


Academic honesty

As students, you are members of a global academic community. Both the College and I expect the highest standards of academic honesty. (See the Grinnell College Catalog). Among other things, this means clearly distinguishing between work that is your own, and work that should be attributed to others. This includes ideas and examples that you draw from labs and readings.

It is expected that you will follow the collaboration policies given in this syllabus and on assignments. In particular:

As an instructor, I will meet my obligation to bring any work suspected to be in violation of the College's Academic Honesty Policy to the attention of the Committee on Academic Standing, after which there is no recourse with me.


I encourage students with documented disabilities, including invisible disabilities such as chronic illness, learning disabilities, and psychiatric disabilities, to discuss appropriate accommodations with me. You will also need to have a conversation about and provide documentation of your disability to the Coordinator for Disability Resources, Autumn Wilke, located on the 3rd floor of the Rosenfield Center (x3702).


Professionalism demands that you attend class consistently and contribute to both discussions and technical work. Class is time for learning and practice which you cannnot obtain by reading someone else's notes. Even if you already know the material, you should support your classmates' learning.

We must all strive to make class productive and worthwhile. In the event that we have little or no business to attend to together, I will abridge or cancel our class meeting.

In the spirit of mutual professional responsibility, each student gets one "vacation day" and one "sick day."

Because our class meets only once per week, I will deduct 3% from your overall grade for each absence not accounted for by the above policies.

I currently do not plan any absences myself, but one or two absences may be necessary for my professional development. I will endeavor to plan appropriate activities for my absence, and I expect you to responsibly carry them out. I promise to take a sick day if need be; you will be expected to make the most of class time in my absence.


Deadlines will be posted on edX with the corresponding assignments. Be aware that edX posts all deadlines in UTC. Central Daylight Time is UTC-5, and Central Standard Time is UTC-6. WorldTimeBuddy provides a handy conversion tool.

Homework will be assigned in class and due no sooner than the following Monday, typically at 5 p.m. CDT/CST.

Journal assignments will be due at 10 a.m. CDT/CST the day of class  to allow me to prepare for our class at 2:15 p.m.

Deadlines may be extended for individuals and pairs in accordance with the attendance policies described above or, rarely, by negotiation between the instructor and the entire class.

Getting help

Because of our flipped classroom format, you will have plenty of time to get help from me and your classmates during class. In deciding when and how to seek help outside of class, exercise this policy: You Must Try, and Then You Must Ask.

To provide timely help outside of class hours, I plan to use the Slack communication tool for both CSC 321 and 322, which I learned about from one of last semester's CSC 322 teams and they learned about from their mentor. I encourage you all to use it too!

You are welcome to drop in during my official office hours, posted weekly on my Google calendar, and you may knock any time my door is open. If your need is known at least 12 hours in advance, you are very welcome to schedule an appointment with me.


Because of the goal of professional development, I see my role in this class as more of a guide, mentor, and facilitator than as an instructor. However, it is also part of my duty to assess your learning and assign you a final grade for the course.

Grades on edX do not include all aspects of the course and should not be considered final. I will maintain a gradebook on PioneerWeb to include all aspects of the course.

I will use the following scheme as an initial basis for assigning final grades:

Type of work
Watch for assignments on edX after videos/readings/tutorials.
You will be expected to complete 10 journal assignments for 3% each.
Homework assignments
Six timeboxed homework assignments at 5% each. Your lowest score will be dropped.
If you spend the required time and document your efforts on each assignment, you will earn a minimum grade of 90% (A-).
The goal is learning, rather than mastery; mastery will come in the project (CSC 322).
Online quizzes
In lieu of in-class exams, you will take ten online quizzes at 3% each.
Ethics essay
A single assignment after fall break. You will have the opportunity to review your essay with a peer and make revisions.

I do not believe in grading on a curve; I would be thrilled to give you all As. However, I reserve the right to make adjustments if this weighting scheme produces grades which are lower than I believe are deserved. Any such adjustments will only raise your grade, never lower it.

Remember this is a 2-credit class and will have half of the usual weight in your cumulative GPA.


Lectures should be watched and readings perused before class. Readings are from Engineering Software as a Service unless otherwise stated.

This schedule should be considered provisional; any schedule changes will appear as materials are assigned on edX.

Date Week Topic Videos/reading Class activities Due (evening before)
Jan 20
Icebreaker; overview
Jan 27
2 Intro to software engineering & SaaS;
Working with the customer
Chapter 1;
10.1 - 10.2;  7.1; 7.3 - 7.4
Discussion; Role play exercise;
Start Homework 0 (Ruby warmup + Git tutorial)
Ruby tutorial
Feb 3
3 The Ruby language; RSpec
Chapter 3;  8.1 - 8.2
Start Homework 1 (Ruby )
Homework 0
Feb 10
4 Software as a service;
Introduction to Ruby on Rails
Chapter 2; Chapter 4
Start Homework 2 (Rails intro)
Homework 1
Feb 17

Continue Homework 2 (Rails intro)
Feb 24
6 BDD w/ Cucumber; Requirements wrapup 7.2; 7.5 - 7.12 Start Homework 3 (BDD)
Homework 2
Mar 3
TDD w/ RSpec; Code smells 8.2 - 8.6; 9.5
Start Homework 4 (BDD + TDD) Quiz;
Homework 3
Mar 10
8 Software engineering ethics
Homework 4
Spring Break!

Mar 31
Advanced Rails
Chapter 5
Start Homework 5 (Oracle of Bacon)

Apr 7
10 Agile project management;
Perspectives on SW engineering ethics
10.4 - 10.9;
Code of Ethics; CACM articles
Homework 5
Apr 14
11 Legacy Code
Chapter 9
Peer review
Draft ethics essay
Apr 21
12 Design patterns for SaaS
Chapter 11
Discussion/exercises Quiz;
Final ethics essay
Apr 28
13 Practical DevOps Chapter 12
Start Homework 6 (Performance) Quiz
May 5
14 Course wrap-up

Final reflections and course evaluations
Homework 6
Finals week: No final exam

Janet Davis (

Created August 21, 2014
Last revised January 26, 2015