Our course on edX: [part 1] [part 2]
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.
Some advice on watching the lecture videos: As Armando and David advise, do not multitask while watching the lecture videos. Multitasking is no better than not watching the video at all; it goes in one ear and out the other. If you find yourself getting bored, you can increase the playback rate, or you can print out the slides to follow along and take your own notes. If you don't have enough time to watch the videos, increase the playback rate or at least skim the corresponding book sections.
Your assessment will be based on your participation (online and in
the classroom), nine short pair programming assignments which you will start
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:
James Shore and Shane Warden (2007), The Art of Agile Development, 1st edition. There will be occasional supplementary readings from this thoughtful and readable book. If you are interested in learning more about agile development, you may consider reading this book during fall break or when you take CSC 322. You may also read sections on particular agile practices (such as the Stand-Up Meetings and Test-Driven Development) to augment what you learn from video lectures and/or our primary textbook.
Michael Hartl (2011), Ruby on Rails 3 Tutorial: Learn Rails by Example. While I've learned through experience that this tutorial does not work well in a classroom setting, it is generally agreed to be the best guide for self-study. If you want to see a different approach to Rails and deepen your understanding, consider working through this tutorial over Fall Break. As well as the print edition, this book is available online at railstutorial.org. Beware of the Rails 4 edition as there are some significant differences between Rails 3, which we will be using in this class, and Rails 4.
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.
As students, you are members of a global academic community. Both the
College and I expect the highest standards of academic honesty. (See
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:
When you explicitly work with a partner, you need not identify the work of each individual (unless I specify otherwise).
You may discuss with anyone, without attribution, concepts that were presented in the readings/lectures, discussed in class, explored through lab exercises, or explained in the homework assignment.
Any individuals outside your group who make conceptual contributions to your solutions must be acknowledged and attributed with a comment in your code. That is, you must give specific attribution for any assistance you receive. The suggested acknowledgment format is "[Person X] helped me to [do thing Y] by [explaining Z]."
You may copy code from an external
source only as permitted by explicit or implicit license. If you are
not sure whether the author permits their code to be copied, consult with
Any code copied from an external source, whether a snippet or a whole module, must be cited with a comment. When
you copy the code and adapt it, you must still credit the
source. In your comment, provide a title, author, year, and page
number (for print sources) or a URL (for Web sources). If the code has an explicit license, that license and the copyright must be copied along with the code.
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.
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
you should support your classmates' learning.
We must all strive to make class
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
"vacation day" and two "sick days."
You must ask permission to take your vacation day, by email, at least one week in advance of the class day you plan to miss. You must also communicate your plans in a clear and timely fashion to any classmates with whom you are working closely.
If you need to take a sick day, please email me as soon as possible to notify me of your illness. You must also communicate in a clear and timely fashion to any classmates with whom you are working closely. If a serious illness means you must miss more than two class days, please provide me with documentation of your illness so I can work with you on appropriate accomodations.
With appropriate notice, I am willing to negotiate with
individuals for additional absences related to professional development
or family obligations.
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
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.
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
|Type of work
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.
||Best 8 out of 9 will count
towards your grade (7.5% each *).
|Reflection on ethics
||A single assignment right after fall break.
||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
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)
|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
|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
|Thursday||Sept 25||4.2||Rails intro, cont.
||4.6 - 4.10
|| Continue Homework 2 (Rails)
||Continue Homework 2
|Thursday||Oct 2||5.2||JEDI & UML
|| Design exercise
|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
||Discussion; Midterm retrospective||Homework 3|
|Thursday||Oct 16||7.2||TDD w/ RSpec||8.2 - 8.6||Start Homework 4 (BDD + TDD)||Quiz
|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)
|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
|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
|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
|Thursday|| Dec 11
||Final reflections and course evaluations
|Finals Week - No final exam|
Janet Davis (firstname.lastname@example.org)Created August 21, 2014