CS312 Course Page and Syllabus: Spring 2019

When and Where
312A: TR 1:30 PM – 2:45 PM in MBH 303
Faculty and Office Hours
Christopher Andrews
MBH 642
M: 1:30-2:30PM
W: 1:30-2:30PM
R: 3:00-5:00PM
F: 1:45-3:45PM
Or by appointment
Michael Linderman
MBH 633
T: 9:00-10:30AM
W: 9:00-11:00AM
R: 2:45-4:45PM
Or by appointment
Frequent Links
Course information
Class GitHub site
Gradescope (and submission instructions)
Socrative (go/cs312-socrative)
Project Guide

Schedule: (subject to change)

Week Date Topic and Links Assignments
1 2/12 Introduction (slides) and JavaScript (slides)
Getting Started
2/14 Node, npm, Unit testing, Linting (slides)
npm practical
2 2/19 JavaScript and the DOM
DOM practical
2/21 React, Design patterns (MVC) (slides), React Color Picker example (API)
2/22 Assignment 1 due at 4:15PM
3 2/26 CRA, JSX, CSS, Deployment (slides), React Color Picker example (CRA)
CI and DevOps practical
2/28 React components, Immutability, Composition vs. inheritance (slides) Film Explorer
3/1 Assignment 2 due at 4:15PM
4 3/5 AJAX, Promises, Consuming REST APIs (slides)
Fetch practical
3/7 React TDD practical
3/8 Assignment 3 due at 4:15PM
5 3/12 Behavioral testing, User stories, Lo-fi Mockups (slides)
React BDD practical
Project proposals due at 4:15PM
3/14 Agile development processes (slides)
Feature practical
3/15 Project preferences due at 4:15PM
6 3/19 Sprint 0 planning Project Guide
3/21 Servers, Creating REST APIs, Models (M in MVC) (slides)
Server practical
3/22 Assignment 4 due at 4:15PM
Sprint 0 deliverables due
Spring Break
7 4/2 Sprint 1 planning
4/4 Databases, Models, Associations, RDBMS (slides)
RDBMS practical
8 4/9 RDBMS, ORM (cont.)
RDBMS practical (cont.)
4/11 NoSQL (and MongoDB) (slides)
MongoDB practical
9 4/16 Sprint 1 Demo, Spring 1 Retrospective Sprint 1 deliverables due
4/16-4/18 Take-home midterm (sample questions and logistics notes)
4/18 Sprint 2 planning
10 4/23 Deployment, Monitoring, Performance (slides)
CSS frameworks practical
4/25 Login practical
11 4/30 Sprint 2 Demo, Sprint 2 Retrospective Sprint 2 deliverables due
5/2 Sprint 3 planning
12 5/7 Refactoring, Legacy code, Code hygiene (slides)
Zune refactoring example
5/9 Wrap-up
13 5/13 Project final deliverables due at 4:15PM
5/20 Final demos 7:00-10:00PM (in official exam slot, with snacks!)


Thoughts about Tools
A collection of thoughts about tools and techniques
Eloquent JavaScript
An e-book introduction to JavaScript
W3 Schools
A basic introduction to HTML and CSS (especially helpful if those are new technologies for you)
JavaScript MDN Reference
Extensive JavaScript documentation. If you search for particular aspects of the language, you will likely find yourself here
Git Refcard
A single page cheat sheets with many of the important Git commands
Git Documentation
Git documentation, including detailed command reference, e-book and other resources
React documentation (starting with Hello World tutorial).
Node.js home (with links to documentation).
npm home with links to documentation and package search tool.
Express web framework home.
MongoDB home.
SQLite home

Course Information

Course Objectives

At the completion of the course you should be able to:

  1. Describe and employ modern methodologies for managing SW development, specifically Agile and Scrum
  2. Use tools and services that support those processes, such as version control, GitHub, continuous integration, etc.
  3. Describe and employ SW development principles, patterns and best-practices, such as design patterns, SOLID, test-driven development (TDD), etc.
  4. Describe, evaluate and employ technologies for full stack web development and single page web applications (SPAs)
  5. Complete a large software development project as part of a team


Your semester grade will be calculated thusly:

5%Practical Exercises

Assignments: In the first half the semester you will complete (approximately) weekly programming assignments. You may take up to two (2) 24-hour extensions on these assignments at your discretion (no explanation required or desired). Only one extension per assignment is permitted. To take an automatic extension e-mail the instructor(s) anytime prior to when the assignment is due with a note to that effect. Other than the two extensions described above, we will not accept late assignments except under extenuating circumstances or when otherwise specified (extenuating circumstances do not count against your allotment of extensions). If you are unable to complete an assignment (with or without the extension) contact the instructor(s) as soon as possible and before the deadline.

Practical exercises: Throughout the semester, there will be a collection of graded in-class exercises where you will work through examples yourselves. These will typically be completed in class, but occasionally you may be required to complete them outside of class. You will typically have 1-2 days to complete these exercises. Your automatic extensions cannot be used for these exercises.

Midterm: There will be one take-home midterm (approximately ¾ through the semester). The midterm will be on paper and will cover both the specific technologies we use in class (e.g. JavaScript) and general SW development principles, patterns and best practices.

Project: The focus of this class is the final project. In the second half the semester you will undertake a large software development project as part of team of 6-9 students. You will need to be in frequent contact with your group and actively contributing as a software developer each week. Your grade for the final project will be determined in part by the overall success of your project, but will mostly be determined by your participation and contributions to the project in both coding and non-coding activities. You will submit regular status reports summarizing your contributions and may also be evaluated by your peers.

Getting Help

We are going to be using Piazza for our class discussions outside of class. Rather than emailing questions to us, please post the questions on Piazza. This will allow other students to answer questions and to benefit from the answers you receive. This system will only work if you use it, so please do so.

Honor Code

You are encouraged to discuss material from the lectures and online resources with your classmates. However, the work that you turn in must be completed independently, unless an assignment is explicitly designated as one in which collaboration is permitted.

You should never copy another students code or solutions, or exchange computer files, until after an assignment is due. You are welcome to provide advice and help a classmate hunt for bugs, but if you see substantial portions of someone else’s code in the process of helping or being helped, you should not copy it. Step away from your solution for an hour and then complete the assignment independently later. Alongside manual inspection, we may use automated tools for detecting software similarity.

You are permitted (and encouraged) to search online for documentation about the tools and technologies we are using, and consult the various online and offline resources for hints, techniques, and code snippets. You may and are encouraged to use any code that we provide to you. Any code that you didn’t write, or we didn’t provide you, must be cited (e.g. by providing the URL in a comment) in accordance with its licensing terms. You are not permitted, however, to search for solutions to the assignments themselves, e.g. if the assignment is to implement Tic-Tac-Toe in JavaScript, searching for “tic-tac-toe javascript” is not permitted. Assignments and solutions from previous semesters are not allowed resources (even if available freely online) and consulting such materials constitutes a violation of the Honor Code.

If you are ever unsure about what constitutes acceptable collaboration, acceptable use of Google, StackOverflow, etc, or permissible resources please ask!


Students who have Letters of Accommodation in this class are encouraged to contact the instructors as early in the semester as possible to ensure that such accommodations are implemented in a timely fashion. For those without Letters of Accommodation, assistance is available to eligible students through Student Accessibility Services. Please contact Jodi Litchfield or Michelle Audette, the ADA Coordinators, for more information: Michelle Audette can be reached at maudette@middlebury.edu or 802-443-2169 and Jodi Litchfield can be reached at litchfie@middlebury.edu or 802-443-5936. All discussions will remain confidential.