16.01.2015 Views

CS2013-final-report

CS2013-final-report

CS2013-final-report

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

How are students assessed<br />

There are typically six major programming projects, most of which attempt to combine experience with a particular<br />

programming paradigm or mechanism (e.g., concurrency, templates, first-class functions, or glue-style scripting)<br />

with a language implementation issue (e.g., syntax error handling, semantic analysis, interpretation, or symbol table<br />

management).<br />

The first project of the semester asks students to solve a simple combinatorial problem in 5 or 6 different (often<br />

unfamiliar to them) languages—e.g., Ada, C#, Haskell, Prolog, and Python.<br />

Each project is expected to take perhaps 10 hours of time, spread over a two-week period. To encourage students to<br />

begin thinking about projects as soon as they are assigned, most require a set of simple familiarization questions to<br />

be answered (in writing) within the first three days. For the programming itself, students can elect to work alone or<br />

in pairs (with no difference in grading).<br />

There is typically a midterm and a <strong>final</strong> exam. Projects count for approximately half of the course grade, exams for<br />

the other half. In some semesters, students have been asked to turn in written answers to the routine review<br />

questions in the text, to encourage them to keep up with the reading.<br />

Course textbooks and materials<br />

As text, the course uses the instructor’s Programming Language Pragmatics (third edition, Morgan Kaufmann,<br />

2009). Reading assignments cover most of chapters 1–4 and 6–10, and about half each of chapters 12–15. Major<br />

assignments are typically given in C++ (for templates); Java (for concurrency); Scheme or Haskell; and Perl,<br />

Python, or Ruby. Students are provided with access to Linux machines, though many opt to do most of the work on<br />

personal Windows or Macintosh machines, and then port it to the Linux environment (where grading occurs).<br />

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

Like many schools, Rochester once had a “survey of programming languages” course and a separate compiler<br />

course. The current course reflects the conviction that language design and language implementation must be<br />

studied together, because neither can be fully understood without the other. We have separate, follow-on courses in<br />

static and dynamic program analysis, and in language-level tools and software development. The goal is to not to<br />

train students to be experts in the use of any particular language, but rather to give them the ability to pick up new<br />

languages quickly, to choose wisely among them in various circumstances, and to appreciate what may be going on<br />

“under the hood.”<br />

Body of Knowledge coverage<br />

KA Knowledge Unit Topics Covered Hours<br />

PL Object-Oriented Programming All 2<br />

PL Functional Programming All 2.5<br />

PL Basic Type Systems All 2.5<br />

PL Program Representation All 2.5<br />

PL Language Translation and Execution All 5<br />

PL Syntax Analysis Regular expressions and scanning; contextfree<br />

grammars; top-down vs. bottom-up<br />

parsing; recursive descent & table-driven<br />

top-down parsing; syntax error recovery<br />

3.5<br />

PL Compiler Semantic Analysis All 4<br />

- 370 -

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

Saved successfully!

Ooh no, something went wrong!