This note is for Fall 2026 COMS W4156 Advanced Software Engineering. We are seeking applicants for "Leader" positions for Fall 2026. Read through everything below, and then contact the instructor at kaiser+4156@cs.columbia.edu if you are interested in serving as a Leader for this course and you think you are qualified. Experience using AI-assisted Software Engineering tools is a plus. This is a graded position, not a paid position. Vetting activities will take place during the summer, but are not a major time sink so should not interfere with summer internships or classes. The time commitment during the course itself may be slightly higher than taking the course normally. =========================================================================== Although COMS W3107 Clean Object-Oriented Design or equivalent is not a formal prerequisite, we will assume students already know most of what that course covers. A 3107 syllabus is posted at http://www.cs.columbia.edu/~kaiser/COMS-3107-Fall2026-Syllabus-(TENTATIVE).pdf We will not cover the same material as COMS W4152 Engineering Software-as-a-Service, but we won't assume it either. 4152 is oriented towards "upstream" software engineering (requirements and design) and targets students interested in launching a startup, whereas 4156 is oriented towards "downstream" software engineering (pull requests and other team coordination, testing and other quality assurance) and targets students interested in working for mature software organizations like Google. Ideally students would take both. This course does not use a conventional textbook, but there may be some readings assigned from the Flamingo Software Engineering at Google book and/or other online materials. The Flamingo book is posted at https://abseil.io/resources/swe-book. The 4156 background checklist follows below and is also posted at http://www.cs.columbia.edu/~kaiser/4156-background-checklist.Fall2026.txt. Please read the checklist carefully. =========================================================================== REQUIRED If there is anything on the required part of this checklist that will not apply to you before the first day of class, then you are not prepared to take this course and should drop the course. Please come back next year when you're ready. Exceptions and special arrangements may be made for CS "Bridge" students and CS doctoral students, contact the instructor if this applies to you at kaiser+4156@cs.columbia.edu. At least two years programming experience in any mainstream language. Fluent in Java with at least a reading knowledge of C. Most examples in lecture will use Java, except C may be used for some security-related material. If Python is the only language you know, then you should drop the course. Completed COMS W3157 Advanced Programming or equivalent. Taking AP or equivalent concurrently is not sufficient. A recent 3157 syllabus is posted at https://cs3157.github.io/www/2025-9/syllabus.html. Comfortable working with both CLI and GUI interfaces. Routinely use a code editor or IDE. Experience creating and maintaining a codebase(s) on github or similar version control repository. Adept at searching for and reading (or watching) documentation and tutorials for software development tools, frameworks, APIs, etc. on your own, without instruction or assistance from the teaching staff. =========================================================================== IDEAL In addition to the above REQUIRED list, experience with the following constitutes ideal background but is not required preparation for the course. You will have experience with all of these *after* completing the course. Build tool / package manager. Reading and writing key-value, nosql, sql, or any other kind of queryable and persistent datastore on disk. Understand the difference between an "app" (application) and an "API" (Application Programming Interface). Using a local API (library) accessed within the same process, beyond just I/O, strings, math. Using a remote API (service) accessed over the Internet, such as the Google Maps APIs. =========================================================================== ADVANCED If you already have expertise in most of the advanced topics below, plus all of the required and ideal topics above, please contact the instructor at kaiser+4156@cs.columbia.edu about serving a special leadership role in the course. Include your resume and describe your relevant background. Accepted "Leaders" will mentor teams of other students rather than joining a team and will help develop the assessments rather than taking them; grading is based on the quality of this work and most past Leaders received A+ in the course. Shared (team) repository on github, including branching, pull requests and merging. Unit testing Equivalence partitions and Boundary analysis Statement and branch coverage Test oracles and assertions Mocks and test doubles Integration testing API testing End-to-end system testing Fault localization and debugging Continuous Integration (CI) Logging Fuzzing Mutation score Implementing your own local API (library) Implementing your own remote API (service) Cloud deployment ===========================================================================