Software Development Principles and Practices

CSC 321, Fall 2014
TTh 10:00 - 10:50, Science 3819
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 fall in CSC 321, we will be conducting 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.

Your assessment will be based on your participation (online and in the classroom), nine short pair programming assignments which you will start in class and finish as homework, one short reflection paper, and ten short online quizzes.


Our primary textbook:

This textbook was written for the Berkeley CS169 course. Because mass orders of the textbook were not available until very recently, I did not ask the Grinnell College Bookstore to stock this textbook. You may purchase either the Kindle edition ($9.99) or the Print+Kindle edition ($27.98) through Amazon. At least one print copy will be available in the CS Library located in the CS Learning Center (SCI 3814).

Note that 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.

Note that the print edition has several errata which will be corrected in the Kindle edition. Thanks to the miracle of the Cloud, the Kindle edition will receive periodic updates - including version 1.1 of the textbook very soon.

I asked the Grinnell College Bookstore to stock two optional textbooks for our class:

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.


If you have a disability that requires accommodations, please let me know early in the semester so that we can work together to find accommodations that meet your learning needs. You will also need to provide documentation of your disability to the Academic Advising Office, located on the third floor of the Rosenfield Center (x3701). See the Student Affairs page on disability resources for more information.


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 two "sick days."

I will deduct 1.5% from your overall grade for each absence not accounted for by the above policies.

I plan to be absent for the Grace Hopper Celebration of Women in Computing on Thursday, October 9. I will 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 is assigned on Tuesday or Thursday and due no sooner than the following Monday, typically at 5 p.m. CDT/CST.

Class preparation assignments are brief and will be due at 8 a.m. CDT/CST the day of class [TENTATIVE] to allow me to prepare for our class at 10 a.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, consider this policy: You Must Try, and Then You Must Ask.

To obtain timely help outside of class hours, I encourage you to work in SCI 3819 or use edX's chat tool to obtain help from your classmates. 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
Class participation
If you are a good citizen, you will earn full credit.
I will inform you privately if you need to change your behavior.
Preparation for class
Watch for assignments on edX after videos/readings/tutorials.
For full credit, do at least 12/15 before fall break and 5/7 after fall break.
Doing them all may bump up a borderline final grade.
Homework assignments
Best 8 out of 9 will count towards your grade (7.5% each *).
Reflection on ethics
A single assignment right after fall break.
Online quizzes
Best 8 out of 10 will count towards your grade (2.5% each).

* Because the homework assignments are not yet tested by Grinnell students, I reserve the right to abridge or cancel any homework assignment. In the event that I do cancel an assignment, I will allocate the corresponding 7.5% of your final grade to your best homework assignment score; I may offer extra credit for work already completed.

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. I expect you to spend about 5-6 hours each week on this class, including time spent in the classroom.

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)
Thursday Aug 28 0 Orientation
Icebreaker; overview
Tuesday Sept 2 1.1 Intro to software engineering & SaaS
1.1; 1.4 - 1.9

Thursday Sept 4 1.2 Plan & document vs Agile
1.2/10.7, 1.3, 1.12 - 1.13, 10.1 - 10.2
Tuesday Sept 9 2.1 Working with the customer
7.1 - 7.5; V2MOM
Role play exercise
Ruby & Git tutorials
Thursday Sept 11 2.2 Three pillars of Ruby
3.1 - 3.6
Start Homework 0 (Ruby)
Tuesday Sept 16 3.1 Software as a service
2.1 - 2.10
Homework 0
Thursday Sept 18 3.2 Ruby wrapup; TDD & RSpec
3.7 - 3.8; 8.1 - 8.2
Start Homework 1 (Ruby)
Tuesday Sept 23 4.1 Rails intro
4.1 - 4.5
Start Homework 2
Homework 1
Thursday Sept 25 4.2 Rails intro, cont.
4.6 - 4.10
Continue Homework 2 (Rails)
Tuesday Sept 30 5.1

Continue Homework 2

Thursday Oct 2 5.2 JEDI & UML
Design exercise
Homework 2
Tuesday Oct 7 6.1 BDD w/ Cucumber; Requirements wrapup 7.6 - 7.12; Guests: Kia Williams and Adam Kircher of SIRUM;
Start Homework 3 (BDD)

Thursday Oct 9 6.2

Continue Homework 3
Tuesday Oct 14 7.1 Code smells; Iteration demo and retrospective
9.5; Online/handout
Discussion; Midterm retrospective Homework 3
Thursday Oct 16 7.2 TDD w/ RSpec 8.2 - 8.6 Start Homework 4 (BDD + TDD) Quiz
Fall Break

Tuesday Oct 28 8.1 Testing Wrap-up
8.7 - 8.9
Continue Homework 4

Thursday Oct 30 8.2 Project Management: Version control; Bugs
10.4 - 10.9
Continue HW 4; Practice with GitHub!
Tuesday Nov 4 9.1 Advanced Rails, part 1
5.1 - 5.3
Start Homework 5 (Advanced Rails Walkthrough)
Homework 4
Thursday Nov 6 9.2 Advanced Rails, part 2
5.4 - 5.9
Continue Homework 5
Tuesday Nov 11 10.1 Software engineering ethics
Code of Ethics; CACM articles
Homework 5
Thursday Nov 13 10.2 Legacy Code 9.1 - 9.7 Discussion; Start OPTIONAL legacy code assignment
(Bring laptop if you are interested)
Nov 18 11.1 Design patterns for SaaS, part 1 11.1 - 11.5 Discussion/Activity
Thursday Nov 28 11.2 Design patterns for SaaS, part 2 11.6 - 11.10 Discussion/Activity Quiz
Tuesday Nov 25 12.1 Software engineering ethics, revisited

Ethics reflection
Thursday Nov 27 Thanksgiving
Tuesday Dec 2
13.1 Practical DevOps, part 1 12.1 - 12.7 Start Homework 6 (Performance)
Thursday Dec 4
13.2 Practical DevOps, part 2 12.8 - 12.2 Continue Homework 6
Tuesday Dec 9
14.1 Slip day

Homework 6
Thursday Dec 11
14.2 Course wrap-up

Final reflections and course evaluations
Finals Week - No final exam

Janet Davis (

Created August 21, 2014
Last revised October 26, 2014