This message is for Fall 2024 COMS W4156 Advanced Software Engineering. 4156 is taught on zoom, do not go to the classroom. The zoom link will be posted in courseworks. Attendance at the "live" online zoom sessions is required; watching the recordings does not count for attendance or class participation. The 4156 background checklist follows below and is also posted at http://www.cs.columbia.edu/~kaiser/4156-background-checklist.Fall2024.txt. =========================================================================== 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 may be made for MS or PhD "Bridge" 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). Fluent in either Java or C/C++. preferably both. 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 (assertions) 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) ============================================================================