Course Syllabus

Important: If you register for this course (MW 2:40-3:55pm) you must also attend the lab session on Friday (Section R01, 1:10-2:25pm). This is a graded requirement for the course.

 

Overview

COMS W2132 (Intermediate Computing in Python) is an interdisciplinary course in computing for non-CS majors. The course combines essential data structures and algorithms in Python with practical software development skills. The focus is on applications in a variety of areas, including biology, music/arts, natural language processing, data science, and others. This is a follow-up course to COMS W1002 (Computing in Context) or ENGI E1006 (Introduction to Computing for Engineers and Applied Scientists). The course serves as an alternative to the second-semester data structures class (COMS W3134, currently taught in Java) so that CS non-majors who may only take two CS courses can take this as a terminal second CS course.

Times and Locations

Lectures: Mon & Wed 2:40pm-3:55pm, 451 Computer Science Building
Labs (mandatory):  Fri 1:10pm - 2:25pm, 313 Fayerweather

Instructor

Daniel Bauer <bauer@cs.columbia.edu>
Office hours: Mon 12:00-1:30pm in 704 CEPSR, Tue 10:00-11:00am on Zoom.

Course material on Github: (updated throughout the semester) https://github.com/coms2132-sp25/2132-sp25-material

Course Assistants

Name Email Office Hours (CS TA room, Mudd 1st floor)
Kavika Krishnan kk3526@columbia.edu Mon 1:00-2:30pm
 Julien Remy      jr4404@columbia.edu Tue 5:00-6:30pm
Darien Moment dem2187@columbia.edu Wed 4:00-5:30pm
Sophie Tsanang-Tigoumo sgt2125@columbia.edu Thu 12-1:30pm

2132_profile_collage.jpg

Course Calendar

Prerequisites

Basic working knowledge of Python is required. This course does not teach Python basics. Use this checklist to review the essentials and prepare yourself for this course. You can also review the corresponding lecture notes from ENGI E1006 (introduction to computing in Python) in "Files -> Python Basics: Relevant E1006 Lecture Notes".

Either of the following two courses provides sufficient coverage of Python basics:

  • ENGI E1006 - Introduction to Computing for Engineers and Applied Scientists
  • COMS W1002 - Computing in Context

Textbook

Recommended: (DSAP) M. Goodrich, R. Tamassia, M. Goldwasser, “Data Structures and Algorithms in Python,” Wiley. 2013. ISBN: 978-1118290279.
Available as an ebook in the Columbia library here: https://clio.columbia.edu/catalog/17854614

The textbook is recommended but not required. It should be possible to do well in the course without the textbook using the lecture note.

We will also use various other online guides, blog posts, and other resources (see the topics table below).

Organization

The course consists of lectures, labs, and an individual project.

The lectures will focus on essential data structures (linked lists, trees, graphs) and related algorithms, as well as algorithm analysis.

During the first half of the semester, the labs will cover practical software development skills such as version and revision control (GitHub), and incremental software development techniques. During the second half, the labs will focus on specific contexts and context-specific packages and libraries.

In the second half of the semester, the students primarily work on a project based on their field of interest, with weekly or bi-weekly milestones, while the lectures and labs continue. We will also offer project suggestions. Working on the project will allow the students to apply methods learned in lectures, practice incremental software development, and get familiar with specialized Python libraries used in their field. 

Learning Objectives

  1. Learn essential data structures (linked lists, stacks, queues, trees, graphs) and fundamental algorithm analysis.
  2. Be able to implement the data structures and corresponding algorithms in Python.
  3. Apply the data structures and algorithms while systematically developing a non-trivial project.

Deliverables and Grading

  • 3 individual homework assignments - 24% (8% each)
  • Midterm exam (in class, 65 minutes) - 10%
  • Final exam (time TBD; assigned by the Registrar) - 10%
  • Project - 50%
  • Participation (class & lab attendance, activity on Ed Discussions) - 6%

Final scores will be curved up only to an average of 85%, which will correspond to about a B+. There are no predetermined letter grade cutoffs. The grading policy may be subject to change.

Homework Assignments

All assignments (individual homework and projects) will be submitted through GitHub (we will use GitHub Classroom in this course). There will be an ungraded Homework 0, which explains the process and how to create an account. We will discuss more advanced features of Git in the Friday labs.

There will be 3 graded individual homework assignments consisting of programming problems and occasional theoretical questions. You will have approximately 14 days to complete each assignment. Each homework will focus on one of the major topics: Sequences & Maps, Trees, and Graphs.

Projects will also be submitted via GitHub. Project submissions will consist of a short project proposal, graded weekly or bi-weekly milestones with feedback from the TAs, and a final report or demo.

Late submission policy: You will be given a total of 4 late days that you can use as you see fit. For example, you can submit one assignment 4 days late or 4 assignments 1 day late. A day is counted as a full 24 hours starting from the submission deadline. You are welcome to use the late days for sickness, religious holidays, athletic events, etc.

Serious family or medical emergencies communicated to the instructor via your advisor will not count towards your late days.

There will be no other exceptions, so use your late days wisely. 

Exams

There will be a 65-minute midterm exam (in class) and a 120-minute final exam. Both exams will be administered in person. We will offer a review session before each exam.

We will offer one alternative make-up date for each exam for students with conflicts or medical emergencies. If a student has an excused conflict or emergency and is also unable to take the make-up exam, the midterm exam will be dropped from grading and the final exam will be reweighed accordingly. If the final exam is missed, it may be possible to get an "incomplete" grade (not available for some schools).

Discussions, Getting Help

We will conduct course discussions on Ed Discussions. Please use the Ed Discussions tab in the CourseWorks navigation menu on the left.

It is normal to get stuck with the homework assignments or to feel like you do not understand the course material fully. In order to get the best out of this course, use the class resources (Ed Discussions, office hours, labs) and reach out for help early by speaking to the course assistants or the instructor (during office hours or via e-mail).

For questions about the course content, materials, organizational matters, lectures, and homework assignments, please use Ed Discussions. This allows other students to benefit from your question. For personal questions about homework, grading, or extensions, please email the instructor directly.

Software

We will use Python 3 in this course. You can use the Anaconda / Spyder environment that we used in W1002 and E1006, or any other Python distribution or IDE that you are used to. Many students have a preference for vscode. You can also use a web-based development environment such as repl.it, Google Colab, or similar. We will cover the available alternatives in the second week, and the TAs or the instructor can help you get set up.

Topics and Tentative Schedule

The following table provides an overview of the class content, which will be covered roughly in the specified order. The schedule is tentative and subject to change. Please come back here to check regularly. In particular, the topics of the lab session in the later half of the semester are subject to change.

Week Topics Reading / HW
1

Lecture 1 [Jan 22]

  • Introduction & course overview.
  • Overview of project areas, how to pick a project

Lab 1 [Jan 24]

  • Python basics refresher and OOP (checklist)

DSAP Ch. 1,

DSAP Sections 2.1.2, 2.3, 2.4  

Homework 0 - Ungraded

2

Lectures 2, 3 [Jan 27, Jan 29]

  • Incremental software development. OOP Design Principles.
  • Revision control with Git and GitHub. Using GitHub classroom.

Lab 2

  • More GitHub. Using the command line.

DSAP Ch. 2

Pro Git

Inside .git

3

Lectures 4, 5 [Feb 3, Feb 5]

  • Incremental software development continued.
  • Intro to Algorithm analysis (empirical approach, growth rates)

Lab 3

  • Choosing Python development environment
  • Managing Python dependencies (virtualenv and PyPI)

DSAP Ch. 2

DSAP Ch. 3

4

Lectures 6, 7 [Feb 10, Feb 12] 

  • Multi-dimensional data, arrays, stacks, queue

Lab 4

  • Package management. Publishing Python software.

DSAP Ch. 5

DSAP Ch. 6



HW 1 due
5

Lectures 8, 9 [Feb 17, Feb 19]

  • Linked lists
  • Introduction to trees

Lab 5

  • Debugging Python programs. Proper documentation.

DSAP Ch. 7

DSAP Ch. 8

6

Lectures 10, 11 [Feb 24, Feb 26] 

  • Trees and tree traversals
  • Recursion

Lab 6 

  • Trees traversal and recursion exercises.

DSAP Ch. 8 

DSAP Ch. 4

7

Lectures 12, 13 [Mar 3, Mar 5] 

  • Search trees.
  • Midterm review.

Lab 7 

  • Profiling and tracing Python programs.

DSAP Ch. 11

8

Lectures 15, 16 [Mar 10, Mar 12]

  • Midterm exam (in class, Wed)

No lab

HW 2 due


9 Spring recess (Mar 17-21)
10

Lectures 17, 18 [Mar 24, Mar 26] 

  • Maps / Hash Tables.

Lab

Map and hashing exercises. Creating hash-able objects.

 

DSAP Ch. 10
Project description due

11

Lectures 19, 20 [Mar 31, April 2] 

  • More about hash tables.
  • Priority queues. Heaps.

Lab

  • Databases

DSAP Ch. 10


12

Lectures 21, 22 [Apr 7, April 9]

  • Priority queues. Heaps.
  • Sorting.

Labs

  • Using APIs (openAI? TBA)

DSAP Ch. 9

DSAP Ch. 12

13

Lecture 23, 24 [Apr 14, April 16]

  • Text processing.

Labs

  • Web scraping (TBA)

DSAP Ch. 13

DSAP Appendix A
HW 3 due

Revised project description due (April 16)



14

Lecture 25, 26 [Apr 21, April 23]

  • Graphs: Introduction, graph data structures
    guest lecture?

Labs

    • graph exercises

DSAP Ch. 14

 

Milestone 1 (April 27)

15

Lectures 27, 28 [Apr 28, April 30]

  • Essential graph algorithms
    guest lecture?

Labs

  • final review.
DSAP Ch. 14

16

Project Showcase [May 5]

Milestone 2/Final Project Version (May 5th).

Final Exam (May 14, 2:40pm, regular classroom)

Attendance Policy, Classroom Interaction

You are expected to attend all lectures in person (mostly). If you need to miss a class (life can get in the way), please make sure to review the missed material.

The labs are integral to the course and mandatory. You can attend labs in person (encouraged) or online via Zoom.

You are expected to behave professionally, respectfully, and courteously to all course participants during class. You will use your time in class most effectively if you fully participate by asking questions and engaging in classroom activities.

Academic Honesty Policy

It is important that you read and understand this section. Any form of academic misconduct will result in a homework or exam grade of zero and is likely to be reported to the Center for Student Success and Intervention (CSSI).

Interaction with other students: All homework assignments must be solved individually. You are encouraged to discuss problems with others and work them out on the whiteboard/paper, but when you sit down to write or code up your solution, you must work independently without any further interaction. You are also not allowed to share your solutions (that is, literal code and written theory solutions) with other students.

Online material: Treat coding problems like paper assignments. You are not permitted to copy any part of other people’s work without attribution. This applies to code produced by other students and to material found on the internet. Sometimes, online sources (for instance, StackOverflow) can be useful as a reference. If you have to use code snippets found online, you must attribute your source in a comment (complete link). You are not allowed to copy non-trivial code fragments from these sources.

Non-trivial code is defined as:

  • Any code you do not fully understand;
  • code longer than three lines or complete class or method definitions that directly relate to the homework problem and solve the problem for you.

Any code made available as part of the course material, code from the recommended textbooks, and example code in the Python documentation is excluded from this policy and does not have to be attributed.

Distribution of course materials via third-party websites: The course material is provided for your personal educational use only. You are also not allowed to upload course material to the web or any third-party websites (especially homework and exam prompts or solutions). You may use cloud storage and version control repositories such as Github for your own personal use only.

Exams: There is a no-tolerance policy for misconduct during exams. This includes using materials and resources not permitted during the exam, copying other students' responses, and making responses available to other students.

In addition to this policy, the CS department’s academic honesty policy applies to this course. Please revisit your school's standards for academic integrity:

If any part of this policy is unclear to you, please contact the instructor.

Disability-Related Accommodations

Our goal is to improve accessibility in this course for all students.

In order to receive disability-related academic accommodations for this course, students must first be registered with their school Disability Services (DS) office. Detailed information is available online for both the Columbia and Barnard. registration processes. Refer to the appropriate website for information regarding deadlines, disability documentation requirements, and drop-in hours (Columbia)/intake session. (Barnard).

For this course, students registered with the Columbia DS office can refer to the “Courses that do not require professor signature” section of the DS Testing Accommodations page for more information about accessing their accommodations.

Campus Resources

The instructor is committed to promoting students' well-being and advancing a diverse, inclusive, and welcoming campus culture. He is aware that students may experience personal, social, or financial challenges, whether related or unrelated to their coursework, that may affect their health and academic performance.

If you are in need of support, you are encouraged to reach out to your school's adviser (e.g., CSA advising dean). If you feel comfortable notifying the instructor, he will make every effort to provide support and connect you to available campus resources.

If you or someone you know feels overwhelmed or suffers from depression or anxiety, please contact:

  • Counseling and Psychological Services (CPS, Columbia) - 212-853-2878
  • Furman Counseling Center (Barnard) - 212-854-2092

For additional campus resources, see https://universitylife.columbia.edu/student-resources-directory.

Please note that the instructor is required to make a report of any information relating to gender-based misconduct.

Course Summary:

Date Details Due