This message is for Fall 2025 COMS W4156 Advanced Software Engineering. Although officially "in person", and the registrar will post a classroom, in practice 4156 is taught on zoom as part of the instructor's ADA accommodations. The zoom link will be posted in courseworks. Students who hate taking courses on zoom should drop the course. Attendance at the "live" online zoom sessions is required; watching the recordings does not count for attendance for on-campus students. CVN students are welcome and encouraged to attend the zoom sessions "live", but there is an alternative CVN-only assignment in courseworks that counts for "attendance" when they cannot attend. The 4156 background checklist follows below and is also posted at http://www.cs.columbia.edu/~kaiser/4156-background-checklist.Fall2025.txt. Please read the checklist carefully and then answer one of the three questions at the end. After enrollment is full, students who have responded will be admitted in the order of their responses as slots becomes available. Students who never respond will never be admitted. =========================================================================== 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. 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 (please do not omit +4156 or I may never see your message). At least two years programming experience (in any mainstream language). Sufficiently versed in Java to do the required individual miniproject. Other programming languages may be permitted for the team project. 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/2024-1/syllabus.html. Comfortable using both CLI (command line interface) and GUI (graphical user interface). Maintain your own personal 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, libraries, 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. Code editor or IDE. Reading and writing key-value, nosql, sql, or any other kind of queryable and persistent datastore on disk. Understand the difference between an "app" 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. =========================================================================== 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 (please do not omit +4156 or I may never see your message). Include your resume and describe your relevant background. Accepted "Leaders" will mentor teams of other students rather than joining a team and help develop the assessments rather than taking them; grading is based on the quality of this work and most past Leaders have received A+ in the course. Shared (team) repository on github, including forking, branching, pull requests and merging. Unit testing Equivalence partitions Boundary analysis Test oracles Mocking Logging Branch coverage Integration testing End-to-end system testing Continuous integration (CI) Implementing your own local API (library) Implementing your own remote API (service) =========================================================================== If you still want to take the course, please send email responding to one of the three questions below to kaiser+4156@cs.columbia.edu (please do not omit +4156 or I may never see your message). Students who do not respond will languish on the waitlist. Note: Please join the waitlist FIRST, before sending email, since I cannot click "approve" if you are not listed. 1. If you are a current or former Columbia or Barnard undergraduate, please tell me which semester you took 3157 and what was your grade. 2. If you are a current CS doctoral student or a current/former CS "Bridge" student, please send me your resume or CV and tell me why you would like to take this course. 3. If none of the above apply to you, please tell me your "track" (e.g., CS MS in Computer Security, CE MS) and how/when you completed equivalence to COMS W3157 Advanced Programming (e.g., academic coursework, software engineering internship or employment, research project, etc.). A recent 3157 syllabus is posted at https://cs3157.github.io/www/2024-1/syllabus.html.