This note is for Fall 2026 COMS W4156 Advanced Software Engineering. The 4156 background checklist follows below and is also posted at https://www.cs.columbia.edu/~kaiser/4156-background-checklist.Fall2026.txt. Please read carefully. 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. To be considered for admission to the course, you must answer one of the two questions at the end of the checklist by email to kaiser+4156@cs.columbia.edu. =========================================================================== REQUIRED At least two years programming experience in any mainstream language. Fluent in Java and at least reading knowledge of C. The individual miniproject at the beginning of the semester requires Java and most examples in lecture will use Java or C. If Python is the only language you know, you should drop the course. Completed COMS W3157 Advanced Programming or equivalent. Taking AP concurrently is not sufficient. A recent 3157 syllabus is posted at https://cs3157.github.io. Comfortable working with both CLI and GUI interfaces. Routinely use a code editor like VSCode or an IDE like IntelliJ. 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 Everything on the REQUIRED list. Build tool / package manager like Maven. Infrastructure framework like Spring. Reading and writing any kind of persistent datastore, such as SQLite. Calling a third-party API (library) within the same process, such as various Apache utilities. Calling a remote API (service) over the network using REST, gRPC, GraphQL, SOAP, WebSockets, etc. =========================================================================== ADVANCED Everything on the REQUIRED and IDEAL lists Shared (team) repository on github or similar Branching and merging Pull requests Code review Issue tracking Project board Unit testing Test oracles and assertions Mocks and test doubles Equivalence partitions and boundary analysis Statement and branch coverage Integration testing API testing End-to-end system testing Fault localization Interactive debugger (not just print statements) Continuous Integration (CI) Fuzzing Mutation score Logging Client/server architecture Microservices Full-stack web and/or mobile apps Cloud deployment Containers like Docker =========================================================================== You must answer one of these two questions by email to kaiser+4156@cs.columbia.edu to be considered for admission to the course: 1. If you are a current or former undergraduate at Columbia or Barnard, or a CS "Bridge" student, tell us when you took COMS W3157 Advanced Programming and what was your grade. If you also took COMS W3107 Clean Object-Oriented Design and/or COMS W4152 Engineering Software-as-a-Service, please mention those too. 2. Read the three checklists above carefully, and assess whether your background can best be described as fulfilling required, ideal or advanced. Also explain how you became fluent in Java, whether through classes and/or work experience. Include your transcript and/or resume as applicable. =========================================================================== Additional notes: 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. Although COMS W3107 Clean Object-Oriented Design (http://www.cs.columbia.edu/~kaiser/COMS-3107-Fall2026-Syllabus-(TENTATIVE).pdf) is not a formal prerequisite, we will assume students already know most of what that course covers and try to minimize overlap. There will necessarily be some overlap with COMS W4152 Engineering Software-as-a-Service (https://www.cs.columbia.edu/~junfeng/25fa-w4152/), since both courses cover the software lifecycle. 4152 is oriented towards "upstream" software engineering (requirements and design) and primarily 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 primarily targets students interested in working for mature software organizations like Google. We recommend that students take both.