NYUSH: Introduction to Computer Science - Fall 2015

 What    When   Where
 Lecture Tuesdays, 15:15-17:05 Room 504
 Lab Thursdays, 15:15-17:05 Room 603

Classroom commitment: 25h 40m~ of lecture, 25h 40m~ of lab (3h 40m~ per week)
Homework commitment: Varies (assume 4 to 8h~ per week outside of class for readings / problems) 

Total class commitment: Will average to about 10 hours per week (~4 hours class, ~6 hours work)

Office Hours (for all course-related questions)

  • Professor Zheng Zhang; zz@nyu.edu - Tuesdays ~ 17:05 to 18:05, Room 1118
    • You may request extra hours by appointment (via e-mail)
  • Nishant Mohanchandra, GAF; nm1345@nyu.eduMon, Wed, Fri ~ 14:30 to 16:50, ARC
    • You may request extra hours by appointment (via e-mail)

Course Objectives

This course assumes relatively minimal prior CS background and programming experience. It is designed to hit three goals:

  • The mastering of a modern object-oriented programming tool (Python), enough to bootstrap students and enable them to tackle real-world problems.
  • The appreciation of computational thinking, a process that underlies the very foundations of any such solutions to aforementioned problems. 
  • Providing an overview of the very diverse and exciting modern CS landscape. 

To understand why there are these three goals instead of one, think for a moment like a cameraman: there is the camera (the programming tool), the mastermind behind it (computational thinking) and the world we want to take a shot at (the general CS landscape). We want you to understand and appreciate why Computer Science, a relatively young discipline of science by any measure, has so much potential for innovation, and why you, too, should think of taking it seriously as a career.

Required Texts

We will work with three books:

Course Structure

The course is divided into approximately seven segments:



Lecture Topics + References

Concurrent Lab Topics

Lec. Dates

The Computational 


W1: Computer Architecture, Binary Numbers, Why CS?

W2: State Machines, Abstraction, Memory Hierarchy

W3: Memory, Locality, The Analog/Digital Divide, KISS

Lecture References

Gaddis, Chapter 1 (Arch. Intro)

W1: Revision of Python syntax for operators, selection, iteration, functions

W2: Python strings: syntax, inbuilt methods; revision of high-order types: lists

W3: Tips on debugging code, high-order types: dictionaries


Sep 1

Sep 8

Sep 15




W4: Algorithms, Sorting: Bubble Sort & Merge Sort, Runtime Complexity Analysis

W5: Plotting in Python, Powersets, Binary Search, Dynamic Programming

W6: Algorithm Design Workshop

Lecture References

Guttag [MIT text]:
Chapter 9 (Algorithmic Complexity)
Chapter 10 (Alg + Data Structures)
Chapter 11 (Plotting in Python)
Chapter 17 (Knapsack Problems)
Chapter 18 (Dynamic Prog.)

MacCormack [9-alg text]:

Chapter 1 (Introduction)
Chapter 10 (What is Computable?)

W4: File I/O, exception handling, high-order types: sets

W5: Object Oriented Programming topics (OOP)

W6: More OOP 

Sep 22

Oct 6

Oct 13


MIDTERM in-class, during lecture 

W7: More OOP (Inheritance), Unit Project 1 (UP1) begins

Oct 20

Data Science / Machine Learning 1


W8: Data Visualization, Probability - some basic concepts, Data Science basics

W9: Machine Learning basics, Supervised & Unsupervised Learning, Feature Vectors,
KNN Classification,
K-Means Clustering

Lecture References
Guttag [MIT text]:
Chapter 11 (Plotting in Python)
Chapter 12 (Probability & Stats)
Chapter 16 (Advanced Stats)
Chapter 19 (Machine Learning)

W8: Plotting recap, Probability, Random Walks, UP2 begins

W9: ML topics followup, UP3: Part 1


Oct 27

Nov 3

Data Science / Machine Learning 2


W10: Machine Learning: advanced topics, Linear Perceptron

W11: Deep Learning, Artificial Neural Networks

Lecture References

Goodfellow, Courville & Bengio [MIT]: Deep Learning 

Chapter 1 (Introduction)
Chapter 2 (Linear Algebra)
Chapter 5 (ML Concepts)
Chapter 6 (Feedforward Networks)

W10: Sockets, UNIX, UP3: Part 2

W11: Presentation Projects (PP) intro

Nov 10

Nov 17

Artificial Intelligence

W12: Artificial Intelligence - select topics, Reinforcement Learning

W12: PP - more details 
Nov 24

Big Data

W13: Distributed Systems, Metcalfe's Law, Amdahl's Law,
special topics (cyber-security), lecture material review

W13: PPs continue

Dec 1

Presentation Project

W14: Student Presentations (PPs)

W14: ICS wrap up, student showcase, advanced topics, more resources

Dec 8

We move progressively from the basic flow of a program and its supporting building blocks (e.g. hardware/architecture/system software), to the framing and practice of computational thinking, important data science concepts, and finally to the modern and complex world where all things are connected and concurrent. There is also a (very) brief introduction to the field of Artificial Intelligence. 

Unit Projects (UPs)

We will demystify something we use everyday, by actually building one ourselves: a multi-user chat that can, when needed, even read Shakespeare poems back to you. The system will be built incrementally, with two building blocks (group membership and indexing), and finally integrated into a complete whole.

It must be done individually, and there will be time to work on it (on-site) during the lab days (i.e. Thursdays), with the help of the lab instructor. This ensures that every student gets close supervision, and has a working chat system at the end of the term. It is likely that we will ask students to help tutor each other!

Presentation Projects (PPs)

The chat system acts as a communication substrate, on top of which the students are to implement additional functionality. For example:

  • Adding rudimentary encryption to protect against eavesdropping 
  • Adding some form of an anti-corruption system to protect against noise during communication
  • Re-purposing the chat system to act a super-computer, harnessing the computation ability of multiple machines simultaneously
  • Using the chat system as a backbone for implementation of a simple multiplayer game

In addition to the above candidate ideas, students are encouraged to make their own proposals, but they must be approved by the course instructors.

Students are to work in pairs, and present their projects in the final two weeks. The list of presentation projects in fall of 2014 may serve as a referenceNote that the course structure has been significantly altered, so do not expect the exact same proposals.

Class Rules

  • Electronics Policy: We have been experimenting an interactive classroom teaching tool called Zenkr. It allows us to conduct real-time polls and evaluate teaching progress. You will need a connected smartphone with WeChat installed (or a laptop) to participate. Electronics in class are therefore encouraged (though not at the expense of of your attention). Not that lab sessions will often require a laptop (for programming activities and class participation) and optionally a smartphone.

  • Attendance Policy: Attendance is recorded. We encourage students to arrive to all classes on time. If one is late for less than 15 minutes, then entrance is possible. After 15 minutes the doors are shut and entrance is discouraged. The following Python code describes the procedure:

if (arrival_time < class_time):
    if (arrival_time - class_time < 15):

  • Disruptions: If you do not comply with the instructors or are disruptive in class, you will be asked to leave, and that will count adversely towards your attendance.


 Midterm 20%
 Final 25%
 Unit Projects (3) 15% (5x3)
 Quizzes (2) 10% (5x2)
 Presentation Proj 30%
 Bonus (HW, etc.) up to +20%
 Negative Bonus up to -14%

  • The quizzes, midterm and final will be timed programming evaluations. Tasks will include evaluating code blocks, short answer questions and short programming questions.
  • bonus for overall activity can be obtained (up to 20% of the course grade) based on solving assigned homework sets (+12%) and answering bonus questions on timed assessments (+8%). Extra bonuses for outstanding work may be awarded at instructor discretion.
  • Negative bonus: up to -14% for missing classes (stacking -0.5% for each class missed). Class attendance is recorded.

To complete the course, a final grade of at least 50% is required.

Tools Needed

  • Programming Environment
Although the textbook uses IDLE, you are encouraged to use Anaconda/Spyder as the development tool (especially for more complex projects, where they provide better support and tools). Please see detailed instructions here.

  • WeChat
We will use WeChat to facilitate communication inside and outside class, especially while using Presenter. There are both smartphone and desktop versions.
  1. Smart phone: iPhoneAndroid
  2. Desktop: Mac, Windows