Skip to main content


Welcome to CSC 321.01! The official course description for this course is:

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.

In other words, we help you learn the basics of software design and software engineering.

Course format

This course is being offered in a non-traditional format. We will be relying on a MOOC and some online materials as part of the core “textbooks” for the course. We can then spend class time more on discussion and problem-solving based on the readings and videos from the MOOC. (Some people would call this a “flipped classroom.”)

This is also a course in which you should be developing professional skills and habits. Hence, some of the work in the class will require you to do exploration on your own. The College would probably call this an opportunity to “learn how to learn”. When you are stuck, I recommend that you follow the strategy of you must try, and then you must ask.

Historical evidence suggests that what you get out of the course depends on what you put into it.

The course meets three days per week for the first seven weeks of the semester. Note that we have tried four or five different models for CSC 321 and CSC 322 and this works the best. Since Grinnell requires about twelve hours of work per course, you are expected to do about nine hours of work outside of class each week. You may timebox the programming part of that work.

Learning goals

By the end of this course, you should be able to

  • apply agile software development methodology, tools, and practices in real-world team projects;
  • contrast agile software development methodology with plan-and-document methodologies;
  • build SaaS applications with the Ruby on Rails framework; and
  • apply techniques for understanding and modifying legacy code.

Accommodations and adjustments

Please read my policy on accommodations and adjustments and my statement on accessibility.

Important warnings

Warning! The Berkeley CS 169 course that forms the underpinnings of this course keeps changing.

Warning! I continue to use Web tools that with which I am not completely familiar (e.g., edX, Jekyll). When things look wrong on this site or the edX site, please notify me ASAP. I may not always be able to fix things, but I will try.

Warning! Some students prefer readings. Some prefer videos. You should try both.

Warning! We continue to try new structures for the course. It feels a bit compressed to me, but I think we can fit everything in.


These policies are likely to change.

  • Class participation: 20%. Much of class time is in discussion. I will evaluate you on the quality of your contributions.
  • Journal: 40%. Following the lead of Davis and Weinman, I ask you to do a journal assignment after each reading, video, and/or tutorial. Journals are generally due at 8:00 p.m. on the night before class to give me time to reflect on them before class.
  • Homework: 40%. These are timeboxed. If you spend the required time and document your efforts, you will get a minimum of 90% on a homework assignment. Homeworks will be due every few days.

The grading scale for this course will be:


You may note that there are some gaps between ranges. I reserve the right to make decisions about which direction to “round” values in those gaps. I also reserve the right to adjust this scale during the semester. You will be notified of any changes, and the scale will not change in the final two weeks of the course. You may ask me for your current grade in the class at any point; I will happily give you my best estimate based on the current scale and graded work so far, but these estimates are not guarantees of a specific final grade.


Your classmates and partners depend on your contributions to learn new material and complete the required work for this course. Don’t let them down! You are expected to arrive on time and actively participate in every class.

Because your participation is so important, I will not grant excused absences except in particular and exceptional circumstances. I will deduct 2% from your final grade for each absence and 1% for each time you are late to class. These deductions are doubled if you do not send me a short note on the day of the absence or late attendance, preferably in advance (e.g., “I will be unable to make it to class today” or “I apologize for missing class today” or “Another instructor has asked that I meet with them immediately after class; I expect that I’ll be about ten minutes late.”) I allot each student a 2% “penalty buffer,” so you may miss one class or arrive late twice (if you send a note). This policy is intended to give you the flexibility to deal with or personal or other issues (including job interviews) that require you to miss class.

I realize that there are a number of reasonable and expected absences. These include athletic events, academic conferences, course trips, and religious observations. Such absences do not count as unexecused absences provided you notify me of them at least one week in advance.

I understand that some disabilities may require you to miss class. Ideally, these requirements are documented in your accommodations form. But I will do my best to make adjustments and accommodations in all cases.

If your are sick, please do not come to class. I would prefer that you reset and get better. Please seek medical care as needed. Student Health and Counseling Services (SHACS) offers health and mental health services to students. I excuse illness provided you notify me the day of class, preferably in advance of class. I do not require a note from SHACS or your doctor. Note, however, if you are ill more than a few times, I may discuss the issue with student affairs and may stop excusing illness-based absences.

If you need to miss more than two class periods for an exceptional reason (e.g. to attend an academic conference, deal with a family emergency, or due to long-term illness) please talk to me as soon as possible and we will make an alternate arrangement.


Because much of our work in this course involves collaboration and discussion, you will be evaluated on your participation. Participating in class involves:

  • being present in class (physically and mentally)
  • coming to class on time
  • coming to class prepared
  • asking questions when appropriate
  • making positive contributions to class discussion by volunteering and when called upon
  • staying on task during lab exercises, and
  • working effectively with your partner(s)

Students who regularly meet these criteria can expect to earn an A- for their participation grade. I will reward students who regularly provide significant insights or guide discussion in productive ways with a higher participation score. Students who fail to participate regularly (e.g., demonstrating a lack of preparation or involvement during lab exercises) or who participate in counterproductive ways (e.g., by dominating the conversation, making inappropriate comments, or getting off-task) can expect to earn a lower score.


Here’s an approximate breakdown of how you will likely spend your time each week.

  • Class time (3 hours)
  • Readings/videos/journaling (4 hours)
  • Programming and writing assignments (5 hours)

The first week may be a bit busier as you get set up. However, I’ve made the workload a bit lighter in the first week of CSC 322 to accommodate for the potential extra workload in CSC 321.


Dr. Davis created a Slack team for general discussion of CSC 321/2. Join it here: There is a #homework channel for discussion of homework assignments. Please consider using Slack.


I recommend that you do your development in Cloud 9. Cloud 9 provides you with access to cloud-based Linux boxes on which you can install software. By working on Cloud 9, rather than your own laptop, you risk information leaks. You also have a more realistic development experience.

Instructions for setting up Cloud 9 can be found in the first Rails assignment.

Books and other readings

The CSC 321 Course Web

The hypertext that you are currently reading. Right now, it looks like it will primarily contain the syllabus and my notes for each class (i.e., the eboards), but we’ll see if it evolves in other directions.

Fox, Armando and Patterson, David (2016). Engineering Software as a Service: An Agile Approach Using Cloud Computing, latest edition.

Our core textbook. Fox and Patterson synthesized a lot of ideas to produce a textbook that grounds software engineering principles in a new model of computing. This textbook is rapidly evolving. I would recommend that you purchase the Kindle edition through Amazon, particularly since they are updating the textbook again this semester. (With the Kindle Cloud Reader, available at or an appropriate app, you should be able to read the book on any electronic device.)

Fox, Armando and Patterson, David (2017). BerkeleyX: CS169.1x Agile Development Using Ruby on Rails - The Basics. Available online.

The underlying MOOC. You can use this MOOC for videos that correspond to the various readings. There are also many other resources available on the MOOC.

Hartl, Michael (2016). Ruby on Rails Tutorial (4th Edition). Addison-Wesley.

The book we’ll be using to learn Rails. Available online at <https://www.rail>.

Academic honesty

Please read my policies on academic honesty and the CS department’s academic honesty policy. I expect you to sign and return the latter.

Extra credit

Although I regularly offer extra credit in my four-credit courses, I do not offer extra credit in two-credit courses. Nonetheless, I will still recommend academic, artistic, cultural, and peer events on campus.


Many parts of this overview, as well as the overall design of the course, are due to Janet Davis. I have reused materials with her permission.

I’ve followed Charlie Curtsinger’s lead in using Jekyll and Bootstrap to organize my course webs. Hence, much mf the original design of this site comes from him. I’ve since made a variety of changes.