Skip to main content


Welcome to CSC 321.01! The official course description for this class 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 engineering.

Class Format

This course is being offered in a non-traditional format. We will be relying on a MOOC and SPOC 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/SPOC. (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.

The course meets three days per week for the first seven weeks of the semester. You are expected to do about twelve hours of work outside of class each week (and you may timebox 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 accessiblity.

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.

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


At the beginning of the semester, I wrote “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 Dr. Davis and Prof. 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: 30%. 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.
  • Project: 10%. Toward the end of the period, I will ask you to develop a small project.

We replaced the project with a design pattern assignment.

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 exceptional circumstances. I will deduct 2% from your final grade for each absence and 1% for each time you are late to class. However, each student is allotted a 2% “penalty buffer,” so you may miss one class or arrive late twice with no impact on your final grade. This policy is intended to give you the flexibility to deal with brief illnesses or personal issues that require you to miss class.

If you need to miss more than one class period 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.

If your are sick, please do not come to class. Stay in your room, rest, and seek medical care as needed. Student Health and Counciling Services (SHACS) offers health and mental health services to students.


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 what I expect you’ll be spending your time on each week

  • Class time (3 hours)
  • Readings/videos (4 hours)
  • Journaling (2 hours)
  • Programming and writing assignments (4 hours)

The first week may be a bit busier as you get set up.


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!


The course designers recommend that we do development on Cloud 9. Instructions are at

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 my notes for each class (outlines) and my record of each class (eboards), but we’ll see.

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.)

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

The book we’ll be using to learn Rails. Available online at

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

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. I’ve reorganized the material for our SPOC, which is available online at


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.

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.