Programming Methology, Spring 2021
Instructors:
Joe
Chiu and Marius Minea
TAs: Shreyas Kulkarni, Chetan Manjesh, Hieu Huy Phan, Edward Schneeweiss, Shiv Shiv Shankar
UCAs: Nicolas Asnes, Eli Bildman, Arya Chaughule, Seth Franklin, George Jiang, RiuLong Jiang, Elisavet Phillipakis, Advait Sharma, Shruti Shelke, Thomas Williams
Textbook:
This course will not make use of a textbook. Materials will be provided electronically.
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.
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, students should already understand:
- Loops
- Variables (declaration and scope)
- First-order functions
- Recursive functions with integer arguments
- A few algorithms and data structures including lists, trees, and recursion
Course objectives
Students who complete COMPSCI 220 understand the following topics:
- Programming with abstraction (higher-order functions, and object-oriented
programming)
- Programming with recursively-defined data structures (e.g., trees and
lists)
- An accurate mental model of programming languages that support mutable
state, assignable variables, objects, higher-order functions, and garbage
collection.
- Testing
- Given a problem statement and a solution in code, students can write 1)
test cases that catch bugs in the solution; and 2) test cases that pass
despite the presence of bugs.
- Property-based testing: given a problem statement in prose, students can
write predicates in code to validate the inputs and outputs of a potential
solution
- Design patterns
- Higher-order list processing functions. For example, map, filter, and reduce.
- Handling errors without throwing exceptions. For example, the JavaScript
Promise API
- The Publish-subscribe pattern
- Builders and fluent APIs
- The Observer pattern
Honesty Policy
All assignments in this course are individual assignments. You should not work with any other students. As a guideline, to distinguish discussion from plagiarism, feel free to discuss problems verbally or via temporary written means (e.g., whiteboard) but do not share written matter. If you have questions about this matter, please ask.
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 university's academic honesty policy. This means we will report instances of dishonesty, which may lead to formal sanction and/or failing the course.
Grade calculation
Several factors determine your grade in this course. They are weighted as follows:
Component |
Weight |
Homework: programming component |
40% |
Quizzes |
12% |
Participation in Discussion Sessions |
6% |
Lesson questions (associated to videos) |
2% |
Midterm 1 |
12% |
Midterm 2 |
12% |
Final exam |
16% |
Late Homework Policy
Turning homework in late helps no one. When students turn homework in late, they fall behind, and then cannot receive feedback on time. TAs and UCAs then cannot grade things in a timely way, because they have started to move into 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.
Topics (subject to change)
Week |
Topics |
1 |
Higher order functions, Introduction to JavaScript |
2 |
Unit testing |
3 |
First class functions, more higher order functions |
4 |
Higher order functions with data structures |
5 |
A mental model of JavaScript |
6 |
Property based testing, garbage collection |
7 |
A mental model of JavaScript part 2, object oriented programming |
8 |
Design patterns: Builders; Streams |
9 |
Error handling; Publish-subscribe design pattern |
10 |
Programming programming languages |
11 |
Programming programming languages part 2, Design patterns: States |
12 |
Objects vs. functions; Design patterns: Memento |
13 |
Proving program correctness; Design patterns: Visitor |
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. There's no need to be mean or rude. 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.
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.