Scope and Topics Covered
The course will teach essential aspects of the design and
implementation of programming languages. One goal of the
course is to demonstrate both the advantages and disadvantages,
depending on the application, of different programming paradigms
(functional, imperative, declarative). Some general topics to be
covered in the course (not necessarily in this order):
- Abstraction, encapsulation, information
hiding, modularity.
- Evaluation strategies, parameter-passing
mechanisms, and parsing.
- Functional vs. imperative vs. declarative,
side-effects, state.
- Notions of formal specifications,
semantics, typing.
- Programming techniques: continuation, memoization.
- Algebraic/inductive proofs with automated verification.
The course will be a brief introduction to
each, rather than an in-depth study. Several of these topics are encountered
or examined in more depth in several later courses in the CS curriculum.
Programming:
The course requires a substantial amount of programming,
mostly in Python and Haskell. Some of the assignments will include exercises that
involve assembling programs in a declarative style (e.g. mathematical
proofs). If your earlier programming experience is entirely within the
imperative paradigm (C, C++, Java, etc.), you may find it unnatural or
counter-intuitive at the beginning to program in a functional or
declarative style. If you complete your programming assignments by
their deadlines, you should be able to make the transition from
imperative to functional and/or declarative programming rather
smoothly.
Lectures
Tue, Thu 12:30 pm - 2:00 pm, in Room SCI 113
(Metcalf Science Building).
Laboratory Sections
-
Wed 10:00 am - 11:00 am, in Room SOC B57
(Sociology Building).
-
Wed 11:00 am - 12:00 noon, in Room SOC B63
(Sociology Building).
-
Wed 12:00 noon - 1:00 pm, in Room MCS B23
(Math and Computer Science).
-
Wed 3:00 pm - 4:00 pm, in Room CAS 315
(College of Arts and Sciences).
Prerequisites
According to the BU catalog and
the BU CS course map (click here),
CS 112 and CS 131 (or equivalent) are prerequisite courses and CS 210 (or
equivalent) is a corequisite course. CS 112 gives you the necessary programming
background and CS 131 the necessary theoretical background. Although these
two courses are the formal requirement, students are normally expected to have
completed 200-level courses in the BU CS curriculum successfully.
If you think you miss some of this background, please consult with the
teaching staff.
Exams
Midterm Exam: Tuesday, October 25,
12:30 pm - 2:00 pm.
Solutions
Final Exam: Saturday, December 17,
12:30 pm - 2:30 pm.
Solutions
The exams are closed book. You may, however,
bring one 8.5 by 11 sheet of paper (i.e. one regular-size sheet of paper)
as a crib sheet. Preparing a crib sheet can be a useful study aid, so take
time in selecting material for it. You may use both sides of the paper
and write as small as you like, but in any case, you are allowed only
one sheet. No mechanical or electronic reproductions are allowed; the crib
sheet must be hand written. If you hand in your crib sheet with your
exam, you will get credit for it in your total grade for the exam.
Teaching Staff
Instructor --
Assaf Kfoury
Office Hours:
Tue 2:00 - 3:00 pm, Thu 3:00 - 5:00 pm
Location:
MCS 201 C, e-mail: kfoury@bu.edu
Teaching Assistant --
Hanwen Wu
Office Hours: Tue 3:00 - 4:00 , Wed 2:00 - 3:00, Thu 2:00 - 3:00
Location:
MCS204 (Masters’ Lounge), e-mail:
steinwaywhw@bu.edu
Discussion Beyond Lectures
For online discussions, we will use Piazza.
Click here to sign up
(or to login, if you already have a Piazza account).
Use Piazza for queries, from enrolled students to instructors, as well
as for queries between enrolled students.
Reading Material
All Reading Assignments Will Be From:
-
Andrei Lapets,
Lecture Notes for "Concepts of Programming Languages"
(available on-line,
click here to download).
Recommended Reading for Python:
-
Various tutorials available on the WWW, my preferred
are listed
in the navigation bar (left-hand column) of the course homepage.
Recommended Reading for Haskell:
-
Simon Thompson,
Haskell, The Craft of Functional Programming.
Third Edition, Addison Wesley, 2011.
Some useful supporting materials for this book are available from
the WWW
(click here for 2nd edition and
here for 3rd edition).
-
Various tutorials available on the WWW, my preferred
are listed
in the navigation bar (left-hand column) of the course homepage.
Maintained by Assaf Kfoury
Created: 2016.08.01 Last modified:
2016.09.06