Description: This course
introduces students to programming and some core
concepts of computer science, using a modern, object
oriented programming language. Students learn
concepts of variables, functions, selection,
repetition/loops, basic data structures (arrays,
lists, hashtables), and basic object oriented
We are looking at a society increasingly
dependent on machines, yet decreasingly capable of
making or even using them effectively. ― Douglas
Rushkoff, Program or Be Programmed: Ten Commands
for a Digital Age
Most weeks there will be a programming lab due.
Labs will consist of a single exercise that focuses
on using the computer programming concepts we’re
learning to solve a problem. Each lab will be worth
0-5 points. Roughly:
0 points: for not turning in any
1-2 points: for a basic attempt, but
code isn’t working or has fundamental flaws
3-4 points (mostly) solution
demonstrates mastery of relevant concepts
5 points: solution works, demonstrates
mastery of concepts, and is well formatted and
Everyone’s lowest grade will be thrown out (so
your lab score will be the average of your 9 highest
The midterm will consist of 5 “short answer”
styled problems where you write a function for each
prompt to solve a specific problem. The short answer
prompts will be very similar to the textbook
exercises from Think JS. This section is
worth 10 points.
Part 2 of the exam will require writing a longer
program that consists of several functions. Students
will choose to answer 1 of 3 possible problems. The
program should demonstrate the student’s ability to
break down a problem and write a working computer
program that provides a solution.
Final project (25%)
For the final project you will work in a team of
2-3 people to create your own data analysis and
visualization using a data set that is available for
download or as a live open data set such as the NYC Open
Of course, you may incorporate other data sets as
you see fit.
The final solution will be scored using
the following guide:
Solution (7 points)
How well does the program written solve the
problem? Does the project seriously engage with the
data? Does it use compute analysis to provide
interesting insights? Is the data presented in a
meaningful and usable way?
Your team’s ability to design a solution to the
problem is evaluated by this measure.
Elegance & Robustness (8
This area evaluates the quality of the computer
code produced by the team. An elegant
program provides a parsimonious solution that is
both efficient and clear. A robust program
is flexible and able to change. In the case of data
analysis, it would be easy to modify if the input
data changed or the output requirements are updated.
It wouldn’t “break” if it encountered unexpected
data, and would continue to operate even if the
amount of data were increased dramatically. Often,
both elegance and robustness are achieved through
refactoring: the process of reflecting on
code and revising it after an initial working
solution is achieved.
Risk Taking (5 points)
Learning should be an adventure. One of the most
exciting things about writing software is the sense
of new possibilities and discovery. The “risk
taking” aspect of your team’s grade will reflect the
chances that you take with your project. Even if
your solution isn’t quite what you hoped for, or
your code isn’t as elegant as you’d like, it’s
important that you take chances and try new things.
To do well in this section, you might want to shoot
for an ambitious, or complex analysis; or integrate
been explicitly covered in the course.
Code Style (5 points)
Your code should be well formatted and easy to
read. Your functions and variables (aka
“identifiers”) should have clear, meaningful names.
Comments should be used sparingly, but appropriately
to guide the human reader through your code.