Programming languages are arguably a software developer's most important tools. Different languages embody different ways of viewing problems and computation in general. Understanding what languages can do helps programmers choose and use languages effectively. Understanding how languages work helps programmers devise their own linguistic tools for specialized applications.
This course exposes students to some different styles of programming and goes "under the hood" to see how various styles and language features are implemented. We will program in a couple of languages with different perspectives on computation, then implement their salient features. We will implement garbage collectors and a type system to explore how these features really work. By the end of the course, students will have a greater appreciation for the range of programming models available and their tradeoffs.
The course assumes that students have non-trivial programming experience (equivalent to that from a programming-based 3000-level course, such as software engineering or operating systems). The assignments will be programming intensive. Experience in a particular language is not required, though prior experience in a functional language (such as Scheme) will be useful.
The course is being offered at the graduate and undergraduate levels simultaneously. Those enrolled in the graduate version will be asked to complete additional questions on certain assignments (these will be clearly marked); the graduate version will also involve an additional assignment after the lecture portion ends in mid-October.
Students seeking BS/MS credit for the course may enroll under either course number. Both the graduate and undergraduate versions count towards the 4000-level requirements for the BS degree. However, if you enroll for the graduate version you will be required to complete the graduate-level assignments. If you enroll for the undergraduate version, you may opt into the graduate-level assignments if you decide you want BS/MS credit. Enrolling in the graduate version offers the benefit of a full-fledged graduate course on your transcript. Furthermore, if you are BS/MS and do not need this course towards your BS requirements (CS or electives), taking this course as CS536 would count as one of your MS courses without counting against your 4-course double-count limit.
Contact Professor Fisler with any questions.