CS1102 offers an accelerated and advanced introduction to program design. After a quick overview of basic program design, it covers how to design and implement domain-specific languages for custom software applications. By the end of the course, students are expected to develop skills in identifying, modeling and implementing simple languages, in understanding certain concepts that distinguish programming languages, and in functional programming. On a more general level, students are expected to strengthen their skills at approaching open-ended programming and software-development problems.
The course is primarily targeted at students with prior programming experience (including functions, recursion, and lists or trees, as would be covered in AP). However, it is sufficiently self-contained to be a first course for a novice programmer with strong mathematical skills and a desire for a challenge. No particular prior language is assumed; the course covers functional programming (with Scheme), which is new to most students in the course. Students can start in CS1102 and switch over to the novice course CS1101 up through the midpoint of the term, should they find the pace too fast.
Comic from xkcd; Lisp is a cousin of Scheme