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 eliminate JavaScript’s worst features.

Preconditions

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

Postconditions

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.)

Accommodations

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.

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. If you cheat, we will catch you.

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, please 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

Gradescope sign-up instructions:

  1. Log in to gradescope using your UMass email address.
  2. Click on “Add a course”, and enter code 95J44W.
  3. Once signed up, course access link above will work.

Grades

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

Component Weight
Projects: programming component 30%
Projects: quiz 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).

Your current grades are always available on Gradescope. You must track your own performance throughout the class.

Late Policy

You cannot submit homework late. There are only two exceptions to the policy:

  1. If you have an accommodation Disability Services, then we will arrange exceptions on a case-by-case basis, as needed.

  2. If you cannot complete a homework for a valid and documented reason (e.g., an illness), then you will receive your excused grade, which is the average grade you’ve received of your submitted homework. The excused grade is calculated at the end of the semester.