Programming

This course focuses on high-level concepts that are mostly oblivious to choices of programming languages and environments. However, in order to provide concrete realizations of these concepts, we will use Python as the primary programming environment and a POSIX environment as the primary operating system. The only fully supported platform is Debian (stable) GNU/Linux. (In case of a new major release very close to the semester’s start, oldstable will be supported instead of or in addition to stable; details should be clarified in class.) Therefore, everyone should ensure that they have such a machine (real or virtual) that they own and fully control. Most of what we need is likely to work on a variety of other platforms too but support for those will be increasingly limited with increasing difference from the main platform. (For example, Debian derivatives like Ubuntu will almost certainly be fine; Windows, MacOS much less so.) The reason is simple: We wish to spend more time on the core topics and less on debugging arcane systems issues related to quirks of a platform or installation. Submissions will be in the form of packaged, well documented source files. Proper documentation and packaging of source code and other material is a crucial component of assigned work and submissions failing in this regard will receive no credit.

Other Languages: If you prefer to use other programming languages or systems, please contact me by the second class meeting. I am quite open to the idea, and encourage interested students to explore it further. However, please check with me very early in the semester so that we can determine the specifics to make sure your submissions can be tested and graded fairly. You should avail of this option only if you are confident enough of your programming skills to not require any programming help, and are prepared to take on additional work. This option is designed for students who are proficient in Python and wish to use this opportunity to master another language, not for students weak in Python and who wish to avoid them. Anyone granted this option will still be responsible for all the material related to the default languages and systems used in the course.

Literate Programming: All submitted work must use a literate programming style: Your programs must be designed with a human as the intended reader, although they must also compile and run correctly. Programs that do not meet this requirement are likely to receive a zero score with no further consideration. Details will be discussed in class.