16.01.2015 Views

CS2013-final-report

CS2013-final-report

CS2013-final-report

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Overall, students learn the following aspects of programming, analyzing, and proving:<br />

o The organization of programming languages by types<br />

o Computing by calculation: how programs are evaluated<br />

o Recursive functions and proofs by induction<br />

o Asymptotic analysis and recurrence relations<br />

o Tree parallelism<br />

o Datatypes, pattern-matching, and structural recursion/induction<br />

o Parametric polymorphism<br />

o Higher-order functions<br />

o Continuation-passing style<br />

o Exceptions<br />

o Cost semantics<br />

o Vector parallelism and map-reduce<br />

o Modules and abstract types<br />

o Imperative programming<br />

o Interaction of parallelism and effects<br />

o Laziness and streams<br />

The course is taught in Standard ML. A variety of examples are used to teach these skills, including sequential and<br />

parallel sorting, map-reduce algorithms, regular expression matching, n-body simulation, and game-tree search. The<br />

assignments integrate parallel programming, analysis, and verification. For example, in one key assignment,<br />

students write and prove correct a regular expression matcher, combining an advanced programming technique<br />

called continuation-passing-style with sophisticated inductive reasoning. In another, students implement an<br />

algorithm for n-body simulation that has good sequential and parallel complexity, using a mix of tree- and vectorparallelism.<br />

What is the format of the course<br />

The course lasts 14 weeks, and has two 80-minute lectures and one 80-minute lab per week (4 hours total). There<br />

are also significant TA tutoring hours, where students may get help from the TAs while working on homework<br />

problems.<br />

How are students assessed<br />

There are 10 homework assignments; 8 are one-week assignments and 2 are longer projects. Most of the<br />

assignments include programming, proving, and asymptotic analysis components. Students <strong>report</strong> spending an<br />

average of 10-15 hours per week on the assignments. Students are allowed to collaborate on assignments, but<br />

ultimately must recreate any collaborative work on their own. There are also 2 in-class exams (midterm and <strong>final</strong>),<br />

and students are assessed on participation in weekly labs.<br />

Course textbooks and materials<br />

The course uses original lecture notes and assignments that were developed for this class. These are available from<br />

the above Web page.<br />

Why do you teach the course this way<br />

The course was designed in Spring 2011, as part of a revision of Carnegie Mellon’s introductory curriculum. It has<br />

been taught 8 times over the course of 7 semesters/summers, in Pittsburgh and at CMU Qatar, by 5 different lead<br />

instructors. Each instructor has his/her own take on the course, and the content varies a bit, but all versions teach the<br />

skills and concepts mentioned above. The course has received excellent reviews, and students find it to be very<br />

challenging but also very worthwhile and fun.<br />

The 2013 ACM curriculum states that courses should prepare graduates to succeed in a rapidly changing field, and<br />

be innovative and track recent developments in the field. This course contains novel foundational material on<br />

parallelism and verification, which is based on current and ongoing research on these topics, and will prepare<br />

students to apply these concepts in different settings throughout their careers.<br />

The ACM curriculum gives parallelism special consideration as a design dimension for introductory classes. This<br />

course teaches students to “think parallel,” with sequential programming as a special case. We accomplish this by<br />

- 385 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!