Syllabus Fall 2019


Note that this website covers both 324 and 326. Most of the material will directly apply to students in 324. Students taking 326 should consult with the instructor and refer to the syllabus for CSC 326.

Important Note!!

Since this course includes an experiential learning component that takes place off-campus, F-1 Visa holders must secure Curricular Practical Training authorization through the Office of International Student Affairs before the projects start.

Additionally, depending upon the project to which you are assigned, you may also need to consent to a background check as a volunteer working at that site.

Class Meetings

MWF from 10 to 11:50 am in Noyce 3819.

While we will use class time for team projects, you should also assume that you will need to schedule additional team meeting times – especially after week 3 – in order to work on your project.


Barbara Z. Johnson, Ed.D.  (she/her/hers)
See website for additional details.


2811 Noyce (Science)
Phone number: x4695

Office hours:

Tuesdays 10 am to noon; 1 pm to 2 pm; 4 pm to 5 pm
Thursdays 10 am to noon

Other times are possible by appointment!

If the door is closed, please assume that I am meeting with someone. If none of these times work for you, please check my calendar for an available time and email me to set up an appointment.

Course Description and Overview

This course combines two courses: CSC 321 (Software Design Principles) and CSC 322 (Team Software Development for Community Organizations). Although this combined course was taught in the Spring, substantial changes are being made this fall in order to provide more practice with Ruby on Rails and other technical skills. Expect changes during the term!!

About 1/3 of the course will focus on software engineering and design principles, especially Software as a Service (SaaS) and software development models (especially Agile). These may not be directly applicable to the team project, but they form a theoretical basis for work on large-scale projects.

About another 1/3 of the course will focus on technical skills applicable to the development of web-based solutions using the Ruby on Rails framework.

The rest of the course will move into the application of these ideas and tools as students work in teams to build software projects that support local community organizations while we revisit principles of object-oriented design in context.  Thus, a large component of this course is a practicum in which students will work with each other, with alumni mentors, and with non-profit organizations (who function as clients)  from outside of the Grinnell College.

Learning Goals

  1. Apply Agile software development methodology, tools, and practices in real-world team projects
  2. Contrast Agile software development with plan-and-document methodologies
  3. Build SaaS applications with the Ruby on Rails framework and apply those skills on a large-scale project
  4. Apply object-oriented design principles and design patterns
  5. Apply techniques for understanding and modifying legacy code
  6. Gain experience with the complexities of real-world software development:
    • communicating with clients
    • working as part of a team
    • self-directed technical learning
    • creating a substantial project from scratch, or learning and extending an existing code base
    • making design decisions that may have long-term consequences
    • managing a large code base
    • addressing pragmatic and ethical dilemmas

You will be able to draw upon these experiences in pursuing academic or industry positions. By storing your source code through GitHub, you will make a substantial beginning or addition to your professional portfolio. In addition, you will develop professional skills and perspectives.


Required Texts

  • Fox and Patterson Engineering Software as a Service. Buy the Kindle edition from for about $10.  We will be reading from this text during about the first half of the semester.  (On the schedule, this is referred to as the SaaS Book …. or sometimes, just “SaaS”).
  • Hartl. Ruby on Rails Tutorial. This is available as an e-book for free from We will be reading in this book and doing exercises from it throughout the course.
  • Metz. Practical Object-Oriented Design in Ruby.  This should be available from the bookstore.
  • Russ Olsen’s Design Patterns in Ruby (2009).
  • Additional readings will be assigned during the semester, usually as links to online readings.

Recommended Resources

  • I recommend that you enroll in the free, (possibly archived) online course associated with the SaaS textook  and try watching some of the videos.  This was developed by the SaaS book authors, and some concepts may be easier to grasp if you try different learning media.  The course is available at:
  • Head First Ruby by Jay McGavren
  • James Shore and Shane Warden (2007) The Art of Agile Development.

Also, check out the success tips from the students from prior courses.

Submitting Work

Most assignments will be submitted through our course in Pioneer Web, especially during the first half of the course. In-progress scores can be found in the Pioneer Web course grade center. I will do my best to get assignments graded and feedback returned within a week of submission.

For teamwork, only ONE report per team will be necessary.

This class will be challenging and should take about 10 hours of work per week. Some of the work will be done during class meeting times, but you should plan to spend about 4 hours outside of class in addition to class meeting times. Each week, some time will be spent on learning software design principles and software engineering practices, some time will be focused on learning a variety of languages and related frameworks, and the rest will be available for work on the individual or team project.  Hence, it is very important that you attend class meetings and work with your development team to arrange out of class meetings and work sessions.



  1. Do the reading for the day BEFORE class. This way, you can ask questions and contribute to the discussion.
  2. This term, I am allowing you to submit your reading responses after class so that you can synthesize the reading, lecture, and class activities into your response.  Please do not take this as a reason not to read before class.
  3. Come to class. This will be especially important as we begin to work on the team projects. If you cannot make it to class, email me and your team as soon as possible!
  4. Work with your team, both during class meeting times and outside group project times. If you cannot make it to a group meeting or work session, inform them as soon as possible and negotiate a way to help the group meet its objectives for that sprint.

Dates and Deadlines

Assignments are designed to aid your learning and also to help me gauge how well the class as a whole is understanding the material. Therefore, I want you to do assignments and hand them in, even if they are late. So, you may hand in assignments past the due date & time, but you will receive a lower score. I will subtract 10% per day from the points you would have received if it was on time. In reality, this only will apply to assignments that are done individually.

If you do not appear when your team makes a presentation or you do not contribute to a team report, your team will have the opportunity at the end of the term to rate your performance as a team-mate, and that will affect your final grade.

When turning in group work, please turn it in on time, even if it is not perfect. It is far more important that I see how your team is doing — the good and bad — than it is to try to make it look, or sound, better.

Emergencies and Illnesses

Although dates for homework, reading journals, reports, and the final project submissions are firm, I understand that circumstances arise when you are not able to attend class. If you cannot attend class, you must let me and your team know as soon as possible since this will impact the work your team needs to accomplish during the current sprint.

When circumstances are known ahead of time (e.g., academic activities, athletic events, religious holy days), I expect you to make arrangements with me before the activity occurs. Normally, we will identify an alternative date for the due date.

When circumstances cannot be reasonably anticipated (e.g., illness, family emergencies, serious injury), I expect you to notify me as soon as is reasonably possible. (Email is fine.) In the case of medical problems that require you to miss several classes, I expect a written note from a medical professional or counselor that indicates that your health interfered with the course activity. (I do not need to know any details of the medical problem, but I do need to know that you sought help and that the medical professional believed meeting the deadline would likely interfere with your health.)

Absolute Deadline: All homework must be turned in by the date of your final; submissions received after that time will not be counted in the grading of the course.


Through the course (usually Monday and possibly Wednesday), I will ask you to sit in different places in the classroom for small group discussions and to work on in-class assignments, usually by some random method (I like cat memes). This is to encourage you to meet new people and get different viewpoints on the material during discussions.

You will be assigned to work with a team of 4 other people (teams of 5 total) in order to develop web-based software for a local client that is a non-profit organization. Depending upon the current availability of clients, you may be extending existing code or starting a new project.

In about Week 2 or 3, Susan Sanning from CLS will give an overview of the projects we have available this term, and each student has the opportunity to rank their interest in each project. At the same time, each of you will be asked to complete a survey identifying your technical skills in areas such as HTML and JavaScript as well as comfort with (and interest in) serving in the various possible roles of an Agile development team (leadership, presentations, organization, reporting, etc.). Using this information, I will create teams that are as balanced as possible while assigning people to the projects that seem most interesting to them.

We have alumni mentors who support each team’s development efforts. They come to campus early in the term to meet face-to-face with their assigned team, and then they maintain contact with the team during the remainder of the term, using remote meetings and other digital communication services.

Academic Honesty

Please take a moment to review the Computer Science Department’s Academic Honesty Policy. This course is one important and practical step on your transition to becoming practicing computer scientists, whether you plan to work in the industry or continue on in academic research. Since we will be creating software that will be published and used by clients, you must practice appropriate attribution habits so that they become second nature. Failure to do so may cause embarrassment  and lawsuits in the “real world” (see Sam’s excellent exposition on the subject since I don’t think I can say it better). While we are here in class, forgetting to credit a source or a collaborator may be cause for disciplinary action.

There are two main categories of assignments in this course. Individual assignments are the Reading Journals (RJ), Homework (HW), and and your Ethics Paper. I expect that you will write up your own answers and not copy from anyone else. If you ask anyone else (other than me) for help, proofreading, or comments, you must cite the person. If you go to another online or written source (other than our textbooks or other listed resources), cite it. When in doubt, cite!! You may use any standard citation style you like.

Most of our work this term will be done collaboratively. Be sure to list everyone who works on code, documents, reports, and presentations with you.  You only need to turn in one copy of an assignment for the whole group.  You will “turn in” your portfolio as well, and these documents should cite everyone who worked with you to create each item in your portfolio.  It is also very important to include citations for books or online sources that you used as reference material.  Again, when in doubt, CITE!

Cell Phones

Cell phones, text-messaging devices, and other social-networking connections may not be used in this class. If you bring such equipment to the classroom, it must be turned off before the class starts and stay off throughout the class period. Use of such equipment is distracting to those nearby. If you have some sort of emergency that requires you to “be connected”, keep the device on silent mode and move into the hallway to respond to a call or text message.


Grading will be done on a fixed scale:

Letter Grade down to % cutoff
A 93.0
A- 90.0
B+ 87.0
B 83.0
B- 80.0
C+ 77.0
C 73.0
C- 70.0
D+ 67.0
D 60.0
F anything < 59.0%

Grades in this class will be based on:

  • Individual work on reading journals and homework assignments
  • Team reports, plans, and presentations
  • Progress on the team project through several sprints
  • Feedback from team and self evaluations

I aim to balance grading criteria so that 50% of your grade depends upon your solo efforts and the other 50% will be determined by your team’s success in implementing Agile software development processes to work together and succeed in developing Ruby on Rails features for our community partners.

5% Class Participation
10% Reading Journals and Homework
15% Portfolio
20% Ethics Paper
10% Weekly Reports
10% Weekly Presentations
10% Technical and Public Presentations
20% Project (which includes the self and peer evaluation scores)

Accessibility and Inclusion

My goal is to create a learning environment that supports the learning needs of all students. If you have specific physical, psychiatric, or learning disabilities and require accommodations, please let me know early in the semester so that your learning needs may be appropriately met. You will also need to have a conversation about and provide documentation of your disability to the Coordinator for Disability Resources, John Hirschman, located on the 3rd floor of Goodnow Hall, 641-269-3089.

Religious Observances

Grinnell College offers alternative options to complete academic work for students who observe religious holy days. Please contact me within the first three weeks of the semester if you would like to discuss a specific instance that applies to you. Since this class will incorporate class discussions and working sometimes in pairs or groups, it is important that I know you will be absent ahead of time so that I can adjust the assignments!


Neither teaching nor computer science are solitary pursuits. This syllabus and all course materials have been prepared in conversation with and adapted from the example of many generous colleagues, including but not limited to those who have taught prior iterations:  Dr. Janet Davis, Dr. Sam Rebelsky, and Dr. Anya Vostinar.

The views and opinions expressed on individual web pages are strictly those of their authors and are not official statements of Grinnell College. Copyright Statement.