Course Syllabus

Important: If you register for this course (MW 10:10am - 11:25am) you must also attend one of the lab sessions. 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. 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 non-CS-majors, who may only take two CS courses, can take this as a terminal second CS course. However, the course may also prepares students for more advanced coursework in Computer Science.

Times and Locations

Lectures: Mo We 10:10am - 11:25am, Location TBA
Labs (mandatory, choose one): 

Instructor

Daniel Bauer <bauer@cs.columbia.edu>
Office hours: Monday 1:15-3:00pm, 704 CEPSR.

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

Course Assistants

Name Email Office Hours (CS TA room, Mudd 1st floor)
TBA

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 is possible to do well in the course without the textbook, using just the lecture note.

We will also use various online guides, blog posts, and other resources.

Organization

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

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

The labs will cover practical software development skills such as version and revision control (GitHub), incremental software development techniques, AI-assisted coding, 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 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. Understand 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. Use functional and conceptual abstraction to design and incrementally implement a non-trivial software projects. 
  4. Use version control (Git), debugging (PDB, debugpy) and documentation tools (Pydoc, Sphinx).
  5. Use generative AI productively to aid incremental software development. 

Deliverables and Grading

  • 3 individual homework assignments - 24% (8% each)
  • Midterm exam (in class, 65 minutes) - 15%
  • Final exam (time TBD; assigned by the Registrar) - 15%
  • Project - 40%
  • 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. 

Projects will also be submitted via GitHub. Project submissions will consist of a short project proposal,  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 environment that we used in W1002 and E1006 ("official" python.org setup, and VsCode), or any other Python distribution or IDE that you are used to. You can also use a web-based development environment such as repl.it, Google Colab, or similar, though we strongly recommend using a local work environment. 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 21]

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

Lab 1

  • 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 26, Jan 28]

  • 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 2, Feb 4]

  • 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 9, Feb 11] 

  • Multi-dimensional data, arrays, stacks, queues

Lab 4

  • Package management. Publishing Python software.

DSAP Ch. 5

DSAP Ch. 6



HW 1 due
5

Lectures 8, 9 [Feb 16, Feb 18]

  • Linked lists
  • Introduction to trees

Lab 5

  • Debugging Python programs. Proper documentation.

DSAP Ch. 7

DSAP Ch. 8

6

Lectures 10, 11 [Feb 23, Feb 25] 

  • Trees and tree traversals
  • Recursion

Lab 6 

  • Trees traversal and recursion exercises.

DSAP Ch. 8 

DSAP Ch. 4

7

Lectures 12, 13 [Mar 2, Mar 4] 

  • Search trees.
  • Midterm review.

Lab 7 

  • Profiling and tracing Python programs.

DSAP Ch. 11

8

Lectures 15, 16 [Mar 9, Mar 11]

  • Midterm exam (in class, Wed)

No lab

HW 2 due


9 Spring recess (Mar 16-20)
10

Lectures 17, 18 [Mar 23, Mar 25] 

  • Maps / Hash Tables.

Lab

Map and hashing exercises. Creating hash-able objects.

 

DSAP Ch. 10
Project description due

11

Lectures 19, 20 [Mar 30, April 1] 

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

Lab

  • Databases

DSAP Ch. 10


12

Lectures 21, 22 [Apr 6, April 8]

  • Priority queues. Heaps.
  • Sorting.

Labs

  • Using APIs (openAI, TBA)

DSAP Ch. 9

DSAP Ch. 12

13

Lecture 23, 24 [Apr 13, April 15]

  • Text processing.

Labs

  • Web scraping (TBA)

DSAP Ch. 13

DSAP Appendix A
HW 3 due

Revised project description due 



14

Lecture 25, 26 [Apr 20, April 22]

  • Graphs: Introduction, graph data structures

Labs

    • graph exercises

DSAP Ch. 14

 

Milestone 1 

15

Lectures 27, 28 [Apr 27, April 29]

  • Essential graph algorithms

Labs

  • final review.
DSAP Ch. 14

16

Project Showcase [May 4]

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

Final Exam (TBA - time slot assigned by the registar)

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 and use of LLMs (CHAT, ChatGPT, Gemini, Claude, Copilot, etc.):  AI systems (in particular, Large Language Models, LLMs) can be a powerful resource for programmers and when learning how to program. This course will discuss strategies for using LLMs effectively to develop programs. Responsible and transparent use of such resources is permitted—and in some assignments, encouraged. But we ask that you keep the following in mind:

  • Disclosure/Attribution: Any code generated by LLMs must be identified as such. The best way to do this is to add a comment in your code, identifying the specific AI you used and the full prompt.
    Similarly, any other resources (such as StackOverflow and other web sources) must be diclosed including a complete link, if applicable. You are not permitted to copy any part of other people’s work without attribution. 
  • Homework Assignments: The purpose of the assignments is to prepare you for the exams. The exams will contain exercises on both code reading and writing, so you must be able to perform these activities without LLM assistance. Some exercises may specifically ask you to use LLMs to generate or analyze code, or to provide a testing framework. For all other problems you are required to solve them without the of AI. Disclosed AI use or cited online materials are not classified as academic misconduct, but may result in a 0 score on a particular problem if you didn't do the work. You may use AI to validate, test, or analyze your solution. 
  • Projects:
    • AI use on the projects is permitted, assuming that you follow best practices for using code generation in programming. This is a major topic of the course.  
  • Columbia's AI policy:  Please take a look at the university's policy on using AI here: https://provost.columbia.edu/content/office-senior-vice-provost/ai-policy

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:

Course Summary
Date Details Due