CS 312 - Course Information
Professor Christopher Andrews
Office 215 75 Shannon Street
Email candrews@middlebury.edu
Course Website go/course/cs312
Lectures TTh 1:30-2:45, 75 SHS 202
Discussion forum Piazza
Office Hours
Tu 11a-12p
Th 3p-5p
F 1:30p-2:30p
or by appointment
Course Objectives
At the completion of the course you should be able to:
- Describe and employ modern methodologies for managing SW development, specifically Agile and Scrum
- Use tools and services that support those processes, such as version control, GitHub, continuous integration, etc.
- Describe and employ SW development principles, patterns and best-practices, such as design patterns, SOLID, test-driven development (TDD), etc.
- Describe, evaluate and employ technologies for full stack web development and single page web applications (SPAs)
- Complete a large software development project as part of a team
Grading
Assignments | 30% |
Practicals | 10% |
Midterm | 10% |
Project | 50% |
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 anytime prior to when the assignment is due with a note to that effect. Other than the two extensions described above, I 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 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-7 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 me, 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 and collaboration
Short version Help each other, but do not share solutions.
Long version In computer science, we build on the work of developers before us. Most of us learned to code by copying code and finding ways to tweak it to do what we want. Almost no computer programs are built without building on the work of others, either in the form of algorithms, libraries, or even just short snippets of code. In the computer science department, we recognize the value of forming study groups, helping each other debug code, and working together.
On the other hand, there are questions of intellectual property and academic integrity. These are considerably murkier waters than you may face, for example, writing a history paper, or doing a problem set in math. With code, you can "accomplish" spectacular things by copying the right chunks of code without ever knowing how it works.
For the most part, navigating these waters is on your head. I encourage you to help classmates to debug misbehaving code. I encourage you to post questions (and answers!) on Piazza. But you need to do so in a way that respects other people's work and in a way that contributes to your intellectual development rather than hindering it (or trying to mask your lack of it). This is not a race to get a good grade. The grade is at best a carrot to "trick" you into doing the work required to become better educated. As such, don't just go looking for code that you can turn in to satisfy an assignment. You can probably find some, but it won't help you much, and I'll probably be able to tell.
Policies: Do not work collaboratively unless indicated by the assignment. You can help one another, and work together, but you cannot work jointly on the same assignment. I do not want to see identical assignments that differ only in the name at the top. If someone does show you code (as an explanation or asking for debugging help), do not copy it. Retain ideas, and go away and write your own version later. Attribute any ideas, etc, that you pick up (this goes for classmates, books, online resources, etc). Be explicit. Tell me where you got the idea, approach, technique, etc. Explain what your contribution was. Make sure that your contribution demonstrates that you understand what was not your work alone. Finally, if you have any doubts, ask me first.
Accommodations for disabilities
Students who need test or classroom accommodations due to a disability must have a Letter of Accommodation from the Disability Resource Center. Please contact one Jodi Litchfield (litchfie@middlebury.edu or 802.443.5936) for more information. Students with Letters of Accommodation are encouraged to make an appointment with me as soon as possible. All discussions will remain confidential.