Course Overview

The goal of COMPSCI220 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 not teach you anything language-specific. Everything that you will learn in the class will be applicable to other modern languages, including (for example) Swift, Rust, C#, Java, D, Python, Go, and C++.

Although JavaScript is important to known, it has several poorly-designed features that make it a particularly bad programming language for teaching. to alleviate this problem, we use a language-level for JavaScript that uses both static and dynamic checks to make JavaScript more well-behaved.


To succeed in COMPSCI 220, students should already understand:

  1. Loops
  2. Variables (declaration and scope)
  3. First-order functions
  4. Recursive functions with integer arguments
  5. A few algorithms and data structures including lists, trees, and recursion


Students who complete COMPSCI 220 understand the following topics:

  1. Modern JavaScript programming practices
  2. Programming with abstraction (higher-order functions, and object-oriented programming)
  3. Programming with recursively-defined data structures (e.g., trees and lists)
  4. An accurate mental model of programming languages that support mutable state, assignable variables, objects, higher-order functions, and garbage collection. For example, given a small program, students can draw a “box and pointer” diagram of the heap and stack at any point in the program’s execution
  5. 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
  6. 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
  7. Special topics (depending on the instructor):
    • Representing programs as abstract-syntax trees. Writing a small interpreter by recursion
    • Designing and implementing a randomized robot path planner

No Electronics

You cannot use electronics of any kind in class. (i.e., no laptops, cell phones, tablets, Google Glasses, Apple Watches, Microsoft HoloLenses, etc.)


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.

Diversity and Professionalism

The lack of sufficient diversity is an important problem in computer science. In this course, we want to help improve the situation, not make it worse. The responsibility to do that lies both with instructor, the TAs, the UCAs, and the students. All course-related activities, including online interactions, are to be treated as professional activities exclusively. If anything in the course prevents you from learning or makes you uncomfortable, you’re encouraged to bring it up with the instructor. Alternatively, the university has several resources that can help.

Honesty Policy

All projects in this course are to be done by you and you alone. Violation will result in an immediate F grade for the course and possible initiation of the formal procedures of the University. We use an automated program and manual checks to correlate projects with each other and with prior solutions.

At the same time, we encourage students to help each other learn the course material. As in most courses, there is a boundary separating these two situations. You may give or receive help on any of the concepts covered in lecture or discussion and on the specifics of programming language syntax. You are allowed to consult with other students in the current class to help you understand the project specification (i.e., the problem definition). However, you may not collaborate in any way when constructing your solution: the solution to the project must be generated by you working alone. You are not allowed to work out the programming details of the problems with anyone or to collaborate to the extent that your programs are identifiably similar. You are not allowed to look at or in any way derive advantage from the existence of project specifications or solutions prepared elsewhere.

If you have any questions as to what constitutes unacceptable collaboration, talk to the instructor right away. You are expected to exercise reasonable precautions in protecting your own work. Don’t let other students borrow your account or computer, don’t leave your program in a publicly accessible directory, and take care when discarding printouts.

In addition, you are subject to the university’s academic honesty policy and guidelines for classroom civility. You must read both of these.

To ensure that you do not run afoul of the academic honesty policy, follow these rules:

  1. Do not discuss project solutions with other students, (past or present) other than course staff. This includes all verbal, electronic, or handwritten discussions.
  2. Do not attempt to search for code on the internet to assist you in your projects.
  3. Do not leave your computer unattended, or accessible to other students in the class. If someone copies your work because your computer was not secured, you have still violated the honesty policy.

Submitting Homework

You need to login to Gradescope( using your email address to submit homework and check your grades. We will enroll you during the first week of class. If you are not enrolled, ask on Pizza.


Several factors determine your grade in this course. They are weighted approximately as follows:

Component Weight
Projects: programming component 30%
Projects: written component 30%
Mid-Term 1 20%
Mid-Term 2 20%

The exact grading scheme may be adjusted during the course. However, a typical breakdown of percentages and final grades for this course are A (93-100), A- (90-92), B+ (87-89), B (83-86), B- (80-82), C+ (77-79), C (73-76), C- (70-72), D+ (67-69), D (60-66), F (0-59).

Late Policy

You have eight late days to use for any sort of emergency or party. You do not need to tell us you’re submitting late. We have written a program to track late days.

Note that we often have two assignments with the same release and due dates. E.g., we usually release Programming 1 and Written 1 on the same day and have them due on the same date. For the purpose of late day calculation, they are independent assignments. So, if you submit both Programming 1 and Written 1 one day late, then you have used two late days.

After the eight late days, the following policy applies: you lose 10% of your grade on an assignment for every 24 hours that an assignment is late.

This has two consequences:

  • After 10 late days, you get zero points

  • There is no point staying up late at night after the assignment is due. If you realize you’re going to be late, go to sleep, and work on the assignment after you’re refreshed.

In addition, once an assignment is late, you lose certain privileges:

  • You will not receive help from the course staff online or in person. We will be too busy focusing on the next assignment.

  • In certain exceptional situations, we will correct trivial mistakes in your code (e.g., fixing names of required functions). We will be less generous if you submit late.

So, we strongly recommend not submitting homework late.