=========================================================================== The following is required background for COMS W4156 Advanced Software Engineering. If there's anything on this list that will not apply to you before the first day of class, then you are not prepared to take this course. Undergraduates at Columbia or Barnard should have already completed COMS W3157 Advanced Programming. Taking AP concurrently is not sufficient. Two or more years experience programming in some modern programming language(s) Read example code (even if not write) in all of Java, C and C++ Write application code fluently in at least one of Java or C++, referred to as xxx below Python, Javascript, C#, Ruby and anything else that is not Java or C++ will not be permitted for the baseline team project Run command line tools (e.g., Mac terminal window, Windows Subsystem for Linux) Package your own applications in xxx to run and interact with user from command line (command line I/O with no GUI) Write code in xxx that reads and writes files Maintain your own application in xxx on git or similar version control repository Search for and read (or watch) documentation and tutorials for tools, frameworks, APIs, libraries, etc. You have read chapter 1 of the "Software Engineering at Google" book and still want to take this course. (The book is available free online.) =========================================================================== In addition to the above list, experience with the following constitutes ideal background but is not required. You will almost certainly have experience with these *after* completing the course, but they are not really "taught" in the course - you are expected to learn them on your own (see above wrt reading documentation). Build tool and/or package manager for xxx Interactive debugger for xxx Code editor or IDE for xxx (recommended: VSCode) Write/run simple shell scripts Shared (team) repository on github, including forking, branching, and merging Stackoverflow or equivalent Programmatic access from xxx to on-disk key-value, nosql, sql, or any other kind of persistent database (not just files and in-memory data) ============================================================================ The following lists some advanced background that is not expected but would be nice to have. Most of these will be taught in the course. If you already have expertise in all of the topics below, plus all of those above, please contact the instructor about serving a special role in the course that will guarantee a good grade if you do it well. kaiser+4156@cs.columbia.edu Unit testing Mocking Logging Branch coverage Integration testing End-to-end system testing Continuous integration (CI) Using a local API/library/framework (beyond I/O, strings, math) from application code REST over HTTP Some modern RPC (remote procedure call) protocol across process and machine boundaries, such as gRPC Client-server-datastore (3-tier) architecture ============================================================================