Masks are required in Prof. Linderman’s office hours and are encouraged, but not required, in class and other spaces.
We in the Computer Science department want to do everything we can to create a safe learning and working environment for all. I will be wearing a mask in class and I encourage you to do the same.
Week | Date | Topics and Links | Practicals | Assignments |
---|---|---|---|---|
1 | 2/14 |
Introduction (slides) SaaS, agile processes, learning a new language |
Attendance, Getting Started then submit your GitHub username | |
2/16 |
Javascript (pre-class videos, slides) Event loop, closures, functional programming |
Javascript | Attendance | |
2 | 2/21 |
Testing, TDD, Static Analysis (slides) Unit, integration, end-to-end tests, Jest, linting with ESLint |
Testing | |
2/23 |
Introduction to React (slides) React, props and callbacks, color picker examples (JS+html, React), JS for React |
React page | Assignment 1 due | |
3 | 2/28 |
React components (slides) Presentation/container components, hooks, inheritance vs. composition, Film Explorer example |
||
3/2 |
React testing (slides), NextJS (after-class video, slides) Front-end testing, Testing library, Promises, async/await |
React testing | Assignment 2 due | |
4 | 3/7 |
Consuming REST APIs (slides) HTTP, REST APIs, AJAX, Promises, useEffect Hook |
Fetch | |
3/9 |
Behavioral testing, User stories, Lo-fi Mockups (slides) BDD, INVEST user stories, Cucumber-like behavioral testing, UI design strategies |
Assignment 3 due | ||
5 | 3/14 |
Version control, CI/CD, deployment and DevOps (slides) Git workflows, CI/CD, introduction to DevOps |
Deployment | Project proposals (optional) due at 4:15PM |
3/16 |
Agile development processes (slides) Scrum, point estimation, pair programming, workflows |
Assignment 4 due, Project preferences | ||
Spring Break | ||||
6 | 3/28 | Sprint 0 planning | Project Guide | |
3/30 |
Servers, Creating REST APIs, Models (M in MVC) (slides) NextJS API routes, Middleware and AOP, OO modeling with CRC cards |
Server | ||
3/31 | Sprint 0 deliverables, Assignments 1-3 due at 4:15PM | |||
7 | 4/4 | Sprint 1 planning | ||
4/6 |
Databases, Models, Associations, RDBMS (slides) SQL vs. NoSQL, Schema, Migrations, ORM |
|||
4/7 | Assignment 4 and practicals 1-6 due at 4:15PM | |||
8 | 4/11 | RDBMS, ORM (cont.) | RDBMS | |
4/13 |
Deployment, Monitoring, Performance (slides) DevOps, *aaS, Performance metrics, Indexes, caching and other optimizations |
CSS frameworks | ||
9 | 4/18 | Sprint 1 Demo, Sprint 1 Retrospective, Sprint 2 planning | Sprint 1 deliverables | |
4/20 |
Authentication (authn) and Authorization (authz) (slides) 3rd party authn/z, Google single-sign on, basic security practices |
Login | ||
4/19-21 | Take-home midterm (sample 1, sample 1 solution, sample 2, sample 2 solution) | |||
10 | 4/25 |
Code hygiene, Refactoring, Legacy code (slides) SOFA, Code metrics, Exploring legacy codebases, Characterization testing, Zune example |
||
4/27 |
Design patterns, SOLID (slides) Design patterns, "Gang of Four" patterns, SOLID principles for OOP |
|||
11 | 5/2 | Sprint 2 Demo, Sprint 2 Retrospective, Sprint 3 planning | Sprint 2 deliverables due | |
5/4 | Project/practical workshop (open work time) | |||
12 | 5/9 | Responsible developer? (slides) | ||
5/11 | Wrap-up (slides) | |||
EX | 5/18 | Project final deliverables | ||
5/18 | Final demos 2:00-4:00PM | |||
5/19-22 | Optional take-home retest: 5/18 7:00AM - 5/22 4:15PM |
At the completion of the course you should be able to:
There is no official course textbook, although you may find the following books helpful:
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 ASIs if you need a computer (in any way) for this course.
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 a new 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.
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 and often implement more functionality.
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. Note that this deadline is different for different assignments but is tied to the sequence of the course. For example, the programing assignments are designed to prepare you for the project. That only works if you complete them before the project is really underway (e.g., the 6-7 week of the semester).
When you are ready for a resubmission to be evaluated, please send the instructors an e-mail to that effect. 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 final rubric will be developed as part of class, but will include the overall success of project, but more significantly your 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 summarizing your contributions 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 Make multiple meaningful technical contributions (or equivalent) and non-technical contributions to the final project |
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 Make a meaningful technical contribution (meeting expectations) and non-technical contributions to the final project |
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 Make technical and non-technical contributions to the final 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 final 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.
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.
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 ASIs 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 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.
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!
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 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. Large language models (e.g., ChatGPT, GitHub Copilot), and 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, 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, etc. or permissible resources please ask!
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 and Peter Ploegman of the DRC at ada@middlebury.edu for more information. All discussions will remain confidential.
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.