Programming Methology, Spring 2023
Instructors
Marius Minea
Lectures: TuTh 4-5:15pm, ILC N151
Labs: Wednesdays, see SPIRE for section information
Course Staff
TAs: Saurabh Bajaj, Ishita Kumar, Dzung Pham, Kyler
Schulz, Angela Upreti
UCAs: Daniel Melanson, Maximilian Kuechen, Anna Allen, Paul Davis, Vi Doan, Chukwuemeka Ifejiagwa, Daisy LaBonte, Shreyan Mallik, Catherine Qi, Shrushti Soni, John Wordell, Rosaline Zhu
Office hours: see schedule on Campuswire and Moodle
Textbook:
This course does not use a textbook. Materials will be provided on Moodle.
Course Goals
The goal of COMPSCI 220 Programming Methodology is to turn you into an advanced programmer with a deep understanding of modern programming methodology. We will emphasize good software engineering skills, including programming abstractions, testing, and debugging. Although the programming language that we will use is JavaScript, we will emphasize general programming principles. Everything that you will learn in the class will be applicable to other modern languages, including (for example) C++, C#, D, Go, Java, Python, Rust, and Swift.
Learning Outcomes
As a successful student, by the end of this course, you will be able to::
- write programs that use abstractions such as higher-order functions (for example: map, filter, and reduce), and object-oriented programming.
- employ an accurate mental model of programming languages that support mutable state, assignable variables, objects, higher-order functions, and garbage collection, as well as understand fundamentals of their implementation.
- design test cases to detect errors in code by applying systematic criteria, and write code predicates to validate the inputs and outputs of a potential solution to a programming problem.
- select and use appropriate design patterns such as builders, fluent APIs, publish/subscribe, state, memento, and promises for handling errors.
- reason about the correctness of code by establishing pre- and postconditions, and loop invariants.
Prerequisites
To succeed in COMPSCI 220, you should be familiar with the following concepts (from the required prerequisite course, COMPSCI 187):
- Loops
- Variables (declaration and scope)
- Defining and using functions to decompose problems
- Recursive functions with integer arguments
- Algorithms and data structures, including lists, trees, and recursion
It is helpful to review these topics if needed. If you feel insufficiently familar with one of these topics, please speak to course staff immediately. Moodle also has guidelines for writing and testing your code.
Grading, exam schedule and make-up policies
Your grade for this course will be composed of several different aspects weighted according to the tentative breakdown below.
- Homework: Programming Component (40%): There will be programming assignments throughout the semester, usually with weekly deadlines. These projects will be programmed in Ocelot and submitted via Gradescope. The lowest homework grade per student will be dropped.
- Quizzes (10%): Weekly quizzes will be released, typically on Monday, open for 24 hours. Once started you will have a set amount of time to complete each quiz.
- Lab Participation (8%): Each lab (discussion section) may have a short quiz or a small accompanying assignment that will be graded for completion.
- Lesson Questions (2%). In-class questions will count for participation (70%) and correctness (30%).
- Exams (40%): This course will have two midterm exams and one final exam. You must score at least 1/3 of exam points (33.33% exam average) to pass the course.
- Midterm 1 (12%)
- Midterm 2 (12%)
- Final Exam (16%)
This course will have two midterm exams and one final exam.
You must notify the instructor in advance if you are unable to take the exams at the scheduled time (e.g., due to illness). If a severe accident prevents you from communicating (or asking someone else to do it), you must notify the instructors as soon as you are able to. Failure to do this and missing the exam results in a grade of zero.
Letter grade thresholds:
90: A
86: A-
82: B+
78: B
74: B-
70: C+
66: C
62: C-
58: D+
54: D
These thresholds are tentative and may be adjusted based on the overall performance in the course, but will not be more strict.
Attendance and late work submission policy
You are expected to attend lectures -- this is the best way to engage in discussion and understanding of the material. Lecture questions (and attendance) are part of the course grade. If you cannot attend (e.g., for medical reasons), you are expected to watch the lecture recordings.
Lab attendance is mandatory and part of the course grade. If you cannot attend a lab (e.g., for medical reasons), you must notify the TA leading your lab section ahead of time and discuss how to make up the lab activity.
Turning homework in late helps no one. When you turn homework in late, you cannot receive feedback on time and risk falling behind, as the course has moved on to the next topic. Instructors cannot detect what material needs to be re-emphasized, etc. Because of this, the general rule is that late homework will not be accepted. The only exception to this are justified medical or personal situations that fall outside the ordinary. Since we don't want to be the arbiter of what is a good justification and what isn't, if you have a medical or personal reason for turning homework in late you must get appropriate documentation from the Dean of Students Office. If they don't think that you are justified, neither do we.
All homework will be due at 11:59 PM on the day they are due. Please allow time to check and make sure you've submitted everything properly, and avoid any unexpected issues (slow Internet connection, uploading the wrong file in a hurry, leaving extraneous code in, etc.) Also, expect assignments to require several programming and testing sessions to complete. We suggest you begin working on them early, so we can all collaborate and help each other with any questions in a timely way.
Academic Honesty and Collaboration Policy
You are encouraged to form study groups, learn and discuss the course material jointly with others.
You are required to work individually on all items resulting in a grade. In particular, it is forbidden to share homework code or solution ideas.
You are encouraged to ask public questions, in office hours or on Campuswire. Your questions and the answers to them can be useful for others as well (and you are encouraged to help with answers). Public questions about homework should be of a general nature (clarification, applicable course material), and not involve code snippets or specific solution ideas. Use private questions otherwise if needed.
This course assumes that all work submitted by students will be generated by the students themselves, working individually or in groups. Students should not have another person/entity do the writing of any portion of an assignment for them, which includes hiring a person or a company to write assignments and using artificial intelligence tools like ChatGPT.
As members of the College of Information and Computer Sciences at UMass Amherst we expect everyone to behave responsibly and honorably. In particular, we expect each of you not to give, receive, or use aid in examinations, nor to give, receive, or use unpermitted aid in any academic work. Doing your part in observing this code, and ensuring that others do likewise is essential for having a community of respect, integrity, fairness, and trust.
If you cheat in a course, you are taking away from your own opportunity to learn and develop as a professional. You also hurt your colleagues, and this will hurt people you will work with in the future, who expect an honest and responsible professional.
As faculty, we pledge to use academic policies designed for fairness, avoiding situations that are conducive to violating academic honesty, as well as unreasonable or unusual procedures that assume dishonesty.
We will follow the academic honesty policy and procedures established by the university to ensure that the learning environment is both honest and fair. Integrity is essential in all aspects of higher education, academic dishonesty is prohibited in all university programs, including this course. Academic dishonesty as defined by the University's Academic Honest Policy includes but is not limited to:
- Cheating - the intentional use or attempted use of trickery or deception in one's academic work.
- Fabrication - intentional falsification and/or invention of any information or citation
- Plagiarism - knowingly representing the words or ideas of another as one's own work
- Facilitating Dishonesty - knowingly helping or attempting to help another commit an act of academic dishonesty
Any violation of the Academic Honesty Policy could result in a failing grade in COMPSCI 220 and initiation of the formal Academic Honesty Procedures of the University. Students are expected to be familiar with these policies, if you have any questions please email the course instructors for clarification.
The College of Information and Computer Sciences explicitly forbids any redistribution (including publicly available posting on an internet site) of any CICS course materials (including student solutions to course assignments, projects, exams, etc.) without the express written consent of the instructor of the course from which the materials come. Violations of this policy will be deemed instances of “facilitating dishonesty” (since a student making use of such materials would be guilty of plagiarism) and therefore may result in charges under the Academic Honesty Policy.
Accommodations
The University of Massachusetts Amherst is committed to making reasonable,
effective and appropriate accommodations to meet the needs of students with
disabilities and help create a barrier-free campus. If you have a documented
disability on file with Disability
Services, you may be eligible for reasonable
accommodations in this course. If your disability requires an accommodation,
please notify your instructors as early as possible in the course so that we
may make arrangements in a timely manner.
If you require any special services or accommodations during this course, you
must register with Disability Services within the first two weeks of this
course. This will give us time to plan accordingly to ensure that you get the
help you need before it is too late. If you contact us after the two weeks we
may not be able to provide you the help you need.
Communication policy and response frequency
We use Campuswire for communication. We will attempt to answer all
questions within 24 hours and often much sooner. However, you should
not rely on last-minute questions for help on homework.
When needed, use private instructor-only posts rather than e-mail,
this will make them more readily seen, and any of the staff team can
answer them.
For sensitive private matters, email the instructor.
List of books or other equipment or technology required
No textbook is required for this course. The course is coding-intensive and it is expected that you have access to a computer and the internet whenever you plan to work. We use Moodle for course material and quizzes, Campuswire for communication, and Gradescope for homework submission.
Communication policy and response frequency
We use Campuswire for communication. We will attempt to answer all
questions within 24 hours and often much sooner. However, you should
not rely on last-minute questions for help on homework.
When needed, use private instructor-only posts rather than e-mail,
this will make them more readily seen, and any of the staff team can
answer them.
For sensitive private matters, email both instructors.
Equity and Inclusion Statement
We are committed to fostering a culture of diversity and inclusion, where everyone is treated with dignity and respect. This course is for everyone. This course is for you, regardless of your age, background, citizenship, disability, sex, education, ethnicity, family status, gender, gender identity, geographical origin, language, military experience, political views, race, religion, sexual orientation, socioeconomic status, or work experience.
Because of that, one of the things we all need to realize is that we will be bringing different skills to the course, and we will all be learning from and with each other. Some of us are great artists, some of us aren't. Some of us have had previous experience with community organizing, and for some of us that may be something new. Some of us have very definite plans for our professional careers, some of us are still exploring. Each of these skills will help us succeed, both individually and as a group.
Please be kind and courteous. Respect that people have differences of opinion, and work and approach problems differently. There is seldom a single right answer to complicated questions. Please keep unstructured critique to a minimum. Criticism should be constructive.
Disruptive behavior is not welcome, and insulting, demeaning, or harassing anyone is unacceptable.
We follow the university's guidelines for classroom civility.
In particular, we don’t tolerate behavior that excludes people in socially marginalized groups. If you feel you have been or are being harassed or made uncomfortable by someone in this class, please contact a member of the course staff immediately, or if you feel uncomfortable doing so, contact the Dean of Students office.
This course is for all of us. We will all learn from each other. This is our welcome.
Schedule and topics (subject to change)
Week |
Topics |
1 |
Introduction and Higher-order functions |
2 |
Basic JavaScript Features |
3 |
Reasoning about types |
4 |
Unit testing |
5 |
More higher-order functions |
6 |
Closures |
7 |
Mental Models for JavaScript (part 1) |
8 |
Midterm review |
9 |
Property-based testing |
10 |
Mental Models for JavaScript (part 2) |
11 |
Lists |
12 |
Object-Oriented Programming in JavaScript |
13 |
Builders and Fluent Design |
14 |
Streams |
15 |
Streams |
16 |
Error Handling |
17 |
Observer Pattern |
18 |
Midterm 2 Review |
19 |
Building an interpreter (part 1) |
20 |
Building an interpreter (part 2) |
21 |
Program Correctness |
22 |
Program Correctness |
23 |
State and Memento Patterns |
24 |
Visitor Pattern |
25 |
Extending Libraries |
26 |
Final Review |