CS312 Course Page and Syllabus: Spring 2025 Last updated on 2025-05-08 14:16:24 -0400

When and Where
312A: TR 9:45 AM – 11:00 AM in 75SHS 202
Faculty
Michael Linderman
75SHS 216
802-443-5737
mlinderman@middlebury.edu
Office Hours
T: 2:30-4:30PM
W: 2:30-4:00PM
Th: 2:30-4:30PM
Or by appointment
Getting Help
Ed discussion board
CS peer drop-in help sessions
Frequent Links
Class GitHub site
Gradescope (and submission instructions)
In-class tool (go/cs312-inclass)
PrairieLearn (only accessible on campus or via the VPN)
Project Guide

Schedule: (subject to change)

ESaaS: Engineering Software as a Service, 2nd edition
EJ: Eloquent JavaScript, 4th edition

Week Date Topics and Preparation Pre-class Practicals Assignments
1 2/11 Introduction (slides, read more), Javascript (slides)
SW development, SaaS, "agile" processes, learning a new language
Attendance, Getting Started then submit your GitHub username
2/13 Javascript, cont. (slides, read more)
Event loop, closures, functional programming, common syntactic sugar
Prep: Read EJ 5&11, Javascript to know for React
PC1 Javascript Attendance
2 2/18 Testing, TDD, Static Analysis (slides, read more)
Unit, integration, end-to-end tests, Jest, linting with ESLint
Prep: Read ESaaS 8
PC2 Testing
2/20 Introduction to React (slides, read more)
React, props and callbacks, color picker examples (JS+html, React), unit converter example
Prep: Read Thinking in React
PC3 React page Assignment 1 due
3 2/25 React components (slides, read more)
Presentation/container components, hooks, inheritance vs. composition
Prep: Read Conditional rendering, Rendering lists
PC4
2/27 React testing (slides, read more), NextJS (slides)
Front-end testing, Testing library, Promises, async/await
Prep: Read React Testing Library introduction and tutorial
PC5 React testing Assignment 2 due
4 3/4 Consuming REST APIs (slides, read more)
HTTP, REST APIs, AJAX, promises, useEffect Hook
Prep: Read ESaaS 3
PC6 Fetch
3/6 Behavioral testing, User stories, Lo-fi Mockups (slides)
BDD, INVEST user stories, behavioral tests (Cucumber), UI design strategies, design exercise
Prep: Read ESaaS 7
PC7 Assignment 3 due
5 3/11 Version control, CI/CD, deployment and DevOps (slides, read more)
Git workflows, CI/CD, introduction to DevOps
Prep: Read ESaaS 10.2-10.4, 12.1-12.2
PC8 Deployment Project proposals (optional) due at 4:15PM
3/13 Agile development processes (slides)
Scrum, point estimation, pair programming, workflows, code review exercise
Prep: Read ESaaS 10
PC9 Assignment 4 due, Project preferences
Spring Break
6 3/25 Sprint 0 planning Project Guide
3/27 Servers, Creating REST APIs, Models (M in MVC) (slides)
NextJS API routes, Middleware and AOP, OO modeling with CRC cards
Prep: Read ESaaS 4.1
PC10 Server
3/29 Sprint 0 deliverables due
7 4/1 Sprint 1 planning
4/3 Databases, Models, Associations, RDBMS (slides)
SQL vs. NoSQL, Schema, Migrations, ORM
Prep: Read ESaaS 4.2, 5.4-5.6
PC11 RDBMS
8 4/8 RDBMS, ORM (cont.) (slides)
4/10 Deployment, Monitoring, Performance (slides)
DevOps, *aaS, Performance metrics, Indexes, caching and other optimizations
Prep: Read ESaaS 12
PC12 CSS frameworks
9 4/15 Sprint 1 Demo, Sprint 1 Retrospective, Sprint 2 planning Sprint 1 deliverables due
4/17 Authentication (authn) and Authorization (authz) (slides)
3rd party authn/z, Google single-sign on, basic security practices
Prep: Read ESaaS 5.2
PC13 Authentication
4/16-19 Self-scheduled midterm (solution)
PrairieLearn practice problems
F24 midterm 1 (solution)
S24 midterm 1 (solution)
F23 midterm 1 (solution)
S23 midterm 1 (solution)
S23 midterm 2 (solution)
S20 midterm (solution) (less representative for this semester)
S19 midterm (solution) (less representative for this semester)
10 4/22 Code hygiene, Refactoring, Legacy code (slides)
SOFA, Code metrics, Exploring legacy codebases, Characterization testing, Zune example
Prep: Read ESaaS 9
4/24 Design patterns, SOLID (slides)
Design patterns, "Gang of Four" patterns, SOLID principles for OOP
Prep: Read ESaaS 11
11 4/29 Sprint 2 Demo, Sprint 2 Retrospective, Sprint 3 planning Sprint 2 deliverables due
5/1 Usability testing (slides)
Usability testing exercise
12 5/6 SW development case study? healthcare.gov (read more)
5/8 Responsible developer? (slides), Wrap-up (slides)
EX 5/17 Final demos 10:00AM-Noon (in assigned exam slot)
TBD Optional self-scheduled retest
5/19 Project final deliverables due 4:15PM

Resources

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
  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 test-driven development (TDD), DevOps, 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

Textbook

We will use the following free e-books:

Software and Computing

Please review the Getting Started page for a guide to obtaining and installing the necessary online accounts and software.

If you find yourself in need of a working computer (even if for just a single class period), please contact the instructor about the availability of the department’s loaner laptops. The CS Department maintains a set of loaner laptops, preinstalled with relevant course tools, for both short-term and longer-term use. Given the small number of machines available (approximately 10), if you anticipate needing a laptop for a longer period (e.g., multiple weeks), I encourage you to also inquire with the library about loaner equipment and/or Student Financial Services about need-based resources for purchasing a laptop. Our department commits to meeting the needs of every student, so please don’t hesitate to contact me or the department ASI(s) if you need a computer (in any way) for this course.

Coursework

This semester we will be using a form of “specification” grading. Instead of using points to assess work, all assignments and exams will be evaluated as Satisfactory/Not Yet Satisfactory or with an EMRN rubric (Exemplary, Meets expectations, Revision needed, Not assessable). “Satisfactory” (S) or “Meets expectations” (M) is not synonymous with “minimally competent”, but instead an indication of a fully working program or having achieved the learning goals for that course element. There is no partial credit, instead you will receive feedback on your submission and, where possible, have one or more opportunities to resubmit an assignment or retake a similar exam problem based on that feedback. The only grade you will receive will be the final grade and it will be determined according to the bundles of specifications (listed below) you have satisfactorily achieved.

Why? A grade should reflect your demonstrated understanding of the material at the end of the course (and only that). Assessing your work is a necessary but imperfect proxy for assessing understanding. My goal and responsibility is to create the best structures possible for you to demonstrate your true understanding. And your corresponding responsibility is to do everything you can to make your work accurately reflect your true understanding.

Note that this is an evolving system for me and this course. I am committed to do whatever is needed to ensure you understand the expectations and processes and are equipped to achieve your desired definition of success. I welcome your feedback and am ready to change any aspects that are not working. My goal is for you to achieve a Satisfactory understanding of all material you choose to tackle.

Some language adapted from Jason Mittell, Robert Talbert and Brett Wortzman.

Pre-class Warmup Questions: Before most classes you will complete a short set of online “warmup” problems on PrairieLearn based on the preparatory reading. The problems are a combination of multiple choice, short answer and coding questions intended to help you get ready for class. These questions do not require fully correct answers, but are instead assessed as “Complete”, i.e. you made a meaningful effort on the problems that demonstrates some understanding of the material, or “Incomplete/Missing”. Because these questions are intended to prepare for class, there are no extensions, but you can miss multiple sets of questions without impacting your final grade. Many of the questions are “evergreen”, i.e., you can generate new versions. I encourage to keep attempting new question variants to you feel you full understand the material. Note that our instance of PrairieLearn is only available on campus or via the VPN. When you first connect to PairieLearn, sign in with your Middlebury Google account.

Programming Assignments: In the first half the semester you will complete (approximately) weekly programming assignments that help prepare you for the course project. Programming assignments are generally submitted via Gradescope and GitHub classroom. Programming assignments are evaluated on correctness and execution (see below, but generally “good style”). Each assignment will specify the criteria for “Meets expectations” and “Exemplary”, but the former will generally require a submission that passes most or all correctness tests. An exemplary submission will need to be well executed.

Well executed code works, but is also:

If your program does not successfully pass all of the automated tests or meet the execution goals prior to the due date, you can still obtain full credit. To do so, you must submit a meaningful attempt prior to the due date (or extended due date, see below). You can then resubmit your assignment (multiple times) prior to the late deadline (generally 2 weeks later). Note that this deadline is different for each assignments but is tied to the sequence of the course. For example, the programming assignments are designed to prepare you for the project. That only works if you complete them before the project is really underway (e.g., weeks 6-7 of the semester).

When you are ready for a resubmission to be evaluated, respond to this Google survey. Resubmissions will not be evaluated until you notify me (since I won’t know if your code is ready). A meaningful attempt is generally characterized by passing some but not all of the automated tests. The ability to resubmit recognizes that learning is an iterative process that doesn’t always happen exactly on schedule. However, making an attempt by the due date ensures you are regularly practicing and solidifying what you are learning (especially while it is fresh!).

You may take up to two (2) 24-hour extensions on the initial (not final) due date 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 in-class programming exercises where you will work through step-by-step examples. These will typically be completed in class, but occasionally you may be required to complete them outside of class. Similar to your programming assignments, the practicals will have a suggested due date and final due date by which any revisions must be completed. The practicals will be evaluated as Satisfactory/Not yet satisfactory, generally using automated testing. There is no requirement for a meaningful attempt by the suggested due date and your automatic extensions cannot be used for the final deadline for these assignments.

Exam (and optional retest): There will be an exam (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. The specific questions will be tied to our class learning targets. Later in the semester here will be an optional retest with new problems for each of the learning targets (i.e., no new material). You are encouraged to solve any of the problems for which you have not already earned a Satisfactory mark.

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 5-9 students. You will need to be in frequent contact with your group and actively contributing as a software developer each week. Your team will receive regular feedback throughout the project. The evaluation rubric is described in more detail in the project guide, but in short you are evaluated on the overall success of the project, but more significantly your individual participation and contributions to the project in both programming and non-programming activities. Our goal is to grow as software developers. To do so requires focusing on the practice of software development itself (as opposed to just number of features implemented or other similar metrics). You will submit regular status reports, a final “portfolio” that describes your key contributions to the project, and will also be evaluated by your peers.

Final grades: Final grades will be determined by the following bundles (subject to change):

Final Grade Bundle
A Earn M+ (>= 3) on all programming assignments with >M (>3) on at least 2 assignments, and
Earn S on 9/10 practical exercises, and
Earn an S on 7/8 of learning targets (exam problems), and
Project technical contributions exceed expectations and all other categories of contributions meet expectations
B Earn M+ (>= 3) on all programming assignments, and
Earn S on 8/10 practical exercises, and
Earn an S on 6/8 of learning targets (exam problems), and
All categories of project contributions meet expectations.
C Earn M+ (>= 3) on 3/4 programming assignments, and
Earn S on 7/10 practical exercises, and
Earn an S on 5/8 of learning targets (exam problems), and
Meet expectations for some but not all categories of contributions to the project.
D Earn M+ (>= 3) on 2/4 programming assignments, and
Earn S on 6/10 practical exercises, and
Earn an S on 4/8 of learning targets (exam problems), and
Make some but minimal technical and non-technical contributions to the project

The “+” and “-“ modifiers will be applied by the instructor to the base grade above when the work completed falls in between bundles, e.g., an “A-“ would be assigned for work that is close to but not does meet all the requirements for the “A” bundle and “B+” would be assigned for work that meaningfully exceeds the “B” bundle requirements but is not close to the “A” bundle.

Getting Help

We are going to be using the Ed discussion board for our class discussions outside of class. Rather than emailing questions to the instructor(s), please post the questions on Ed. 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.

Expectations of You as a Student

You are expected to keep up with the material by completing any reading, watching any videos, etc. You are expected to bring a laptop to class every day to participate in online in-class questions, work on practicals, etc. If you forget your device or it is temporarily out-of-service, please obtain a loaner laptop from the departmental ASI(s) or another source (see above). Be curious! Come prepared to our class meetings with any questions you have about the current material and assignments.

Outside of class, proactively attend peer drop-in hours and office hours, and use the Ed discussion board to ask and answer questions about the material. Rather than emailing questions to the instructor, please post the questions on Ed as described above. This will allow other students to answer questions and to benefit from the answers you receive. I will regularly post FAQs and other material to the Ed discussion board.

Learning Community

I encourage an open exchange of ideas and questions in all interactions throughout the course. My goal is to help each of you develop your own understanding of the material, and I recognize that each of you has your own journey. So I encourage you to ask lots of questions and to be supportive of your classmates on their unique journeys.

As part of the Middlebury community and the Computer Science department, I support an inclusive learning environment where diversity and individual differences are understood, respected, appreciated, and recognized as a source of strength. Creating and maintaining an inclusive and positive learning environment where all have a sense of belonging is an important priority and a shared responsibility.

Our shared expectation is that everyone in this class will respect differences and demonstrate diligence in understanding how other people’s perspectives, behaviors, and world views may be different from their own. Should you experience or witness any behavior that opposes this idea, I hope you will let me know so that it can be addressed. If you feel comfortable doing so, you can report any incidents or concerns by:

You belong in this class and in Computer Science. I am glad you are here!

Honor Code

You are encouraged to discuss material from the lectures and online resources with your classmates, to post questions (and answers) to Ed, and are welcome to provide advice and help a classmate hunt for bugs. But you need to do so in a way that respects others’ work and contributes to your and your classmates’ learning (rather than hindering learning).

The work that you turn in must be completed independently, unless an assignment is explicitly designated as a “team” or “pair” assignment. Helping a classmate or working together does not mean working jointly on the same solution (on the same or different computers). You should never copy another students code or solutions, or exchange computer files, until after the final due date for assignment. If you see substantial portions of someone else’s solution 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, I 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 permitted to use large language models (LLMs), e.g., ChatGPT, GitHub Copilot (we will discuss them in class and I use them when preparing course materials), but you must cite their use in a comment and simply providing the assignment directly as a prompt (e.g., copying the assignment as the prompt) to an LLM is not permitted. You are not permitted 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 or other similar courses are not allowed resources (even if available freely online); consulting such materials constitutes a violation of the Honor Code.

As described above, attribute any ideas, code, etc, that you incorporate directly or indirectly into your work (this goes for classmates, books, online resources, LLMs, etc). Be explicit. Tell me (e.g. in a comment) where you got the idea, approach, technique, code snippet, etc. and explain what your contribution was.

If you are ever unsure about what constitutes acceptable collaboration, acceptable use of Google, StackOverflow, ChatGPT, etc. or permissible resources please ask! If you ever find yourself feeling stuck and it seems like the only way forward may conflict with the Honor Code, or even just seems a little borderline, please contact me right away. We can always come up with an appropriate path forward.

ADA

Students who have Letters of Accommodation in this class are encouraged to contact me 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 the Disability Resource Center (DRC). Please contact ADA Coordinators Jodi Litchfield, Peter Ploegman, and Deirdre Kelly of the DRC at ada@middlebury.edu for more information. All discussions will remain confidential.

A Final Note

This course is a “living being” that is continually evolving. I want you to have the best possible learning experience, and I welcome your feedback (whether in person, via e-mail or via an anonymous note) at any time on how to make any and all aspects of the course (e.g. class time, materials, assignments, office hours) work better for you.