CS 320 Concepts of Programming Languages
Wayne Snyder
Associate Professor of Computer Science
MCS 290
Office Hours: M 7:30 - 9pm, TW 4-6pm
Cell: 617 966 (2^10+41) Email: waysnyder@gmail.com
www.cs.bu.edu/fac/snyder/cs320/
Prerequisites
CS 131, CS 112, & CS 210
Description
(Official) Concepts involved in the design of programming languages. Bindings, argument transmission, and control structures. Environments: compile-time, load-time, and run-time. Interpreters.
(Actual) This course explores how programming languages are designed and implemented, focussing on syntactic
issues such as specifying correct syntax, bound variables, types, and scope; and on semantic issues such as execution by interpretation vs compilation, environments and storage, closures, type checking, and efficiency. Our strategy in the course is to spend half the semester studying a new (for most of you) paradigm, functional programming, represented by the language Haskell. After seeing how the various
design and implementation issues are handled in a particularly clear manner in Haskell, we shall apply what we have learned to implement an interpreter for a mini version of Python and a compiler for a mini version of C.
Course Materials and Handouts
Our textbook for the first half of the course will be Functional Programming in Haskell, by Graham Hutton ($40.89 to buy or $15.59 to rent on Amazon):
Other Resources on Haskell (all but the Hutton book are available in full online):
- Download and Resources: HTML
- Book: Learn you a Haskell for Great Good: HTML
- Book: Real World Haskell: HTML
- Hutton's PPT Slides based on book are on this site: HTML
- PDF Slides by Ralf Lammel based on slides by Hutton: PDF
- Many other YT videos, course notes, etc., find on Google.
In general: Although we will not proceed in order through the material in Hutton, I will refer to it regularly, and you may also want to refer to the PDFs of Hutton's slides. I also think the first 100 pages (chapters 1 - 4) of Real World Haskell are very pithy and useful, as typical with O'Reilly books--but it is very old and will not cover recent versions of the language: it presents version 6.8 of the ghci, but we are up to version 8.2 currently.
For the latter parts of the class, we will use lecture notes and handouts, as there is no one text that covers the material in a suitable way.
Homeworks and Labs and the Project
- Computer Science is NOT a spectactor sport, and just like you can not become proficient at the violin by listening to someone else play it, you can not understand how to implement programming languages without doing a lot of programming (and reading!).
- Instructions for how to submit and test your code will be explained at the first lab. We will be using Github and Gradescope for all
our submissions.
- You will do a final project for the last programming assignment, which will involve approximately 5% of your final grade.
- I will drop the lowest 1 homework score (homework & lab score for that week) at the end of term. You may NOT drop the final project--it is mandatory.
Homework Policies
Homeworks will be due Tuesday night at 11:59pm, with some "grace period" of an hour or two; we are thinking about various options for handing in work late, or regrading, and will clarify this very soon!
Please do not ask for individual extensions if you get backed up (or have a hackathon, or get a cold, or your laptop breaks, or ....) and can't get an assignment in on time; it would be completely unfair to me to agree to this, and
the only fair policy is to hold everyone to the same standard; we drop the lowest homework and add a little bit of deadline flexibility to projects (which you can't drop); if there are any other issues you need to tell me about you can do that at the end of the term (I'll invite you to do so at that time) and I'll consider it before I set the curve for the class.
Tests and Quizzes
- There will be two midterms approximately 1/3 and 2/3's of the way through the term. There is no final exam, but instead a final project, due at the end of the last week of classes.
Grades
- 35% Homeworks and Labs: There will be about 7-8 homework/lab assignments (you hand in the lab as part of the homework); I will drop the lowest assignment+lab grade at the end of the term.
- 5% Final Programming Project
- 30% Midterm 1
- 30% Midterm 2
These percentages are tentative and may be changed at my discretion at any
time. Class participation, coming to office hours and saying something intelligent, emails with interesting comments on the course material, etc. will be considered at the end of the term when I decide on the curve for the final grades. I, like all professors, am a sucker for students who show a genuine interest and enthusiasm for the course material, and this may bump you up to the next highest grade if you are close to the borderline! However,"genuine" is the important word here, and I have been teaching for three decades and I'm hard to fool.....
Miscellaneous
- There will be no incompletes in this class except for reasons of dire
illness near the end of a semester in which all previous work has been
completed satisfactorily.
- You can not redo any exam, or do extra work after the semester is
over to improve your grade, as this arrangement would then by fairness have to
be extended to the rest of the class (an impossible situation).
- I have zero tolerance for any kind of academic misconduct (e.g., cheating
on exams), and be assured that I will instantly report violations of the Academic
Code to the Academic Conduct Committee. I am a past member and chairman of
this committee. Please read the following section carefully. Also note that
we intend make use of sophisticated plagiarism-checking programs for submitted
code.
BU Hub Learning Outcomes
This course satisfies Hub learning outcomes for Quantitative Reasoning II and the toolkit Critical Thinking.
- Quantitative Reasoning II: Students will frame, analyze, and solve complex problems using probabilistic, computational, and statistical methods. They will employ these tools to solve critical problems in computer science and related disciplines, and to formulate, test, and proof assertions using evidence and mathematical reasoning; they will communicate this information numerically and visually in the form of charts and graphs. Finally, they will realize the limitations of these computational approaches to important problems, and the risks of using them inappropriately.
- Toolkit: Critical Thinking: Students will be able to identify and use a variety of modes of inference in probability and statistics, and to recognize key areas of difficulty in accessing probabilistic evidence, and the significant role of cognitive bias. A key method throughout is translating English or other non-mathematical language into the language of probability and statistics, and testing solutions using programming. A key component is to be critical in examining one's own prejudices and preconceptions, and to subject all evidence to rigorous examination using appropriate algorithms.
Policy on Academic
Conduct
Collaboration Policy
Collaboration policy for this class is as follows.
- You are strongly encouraged to
consult with one another in working on the assignments, as you will learn just as much (if not more) by teaching another student something you think you know, as by being taught something by another student;
- HOWEVER, the work you hand in must be YOUR OWN, and you are forbidden from copying solutions from another student or from another source such as web pages, GitHub repos, etc. ;
- Any violations of this policy will be subject to the CAS Academic Conduct Code. Please do not test me on this matter, as I have been involved in the Academic Conduct Committee as professor and dean for many years, and I have no patience for
student who effectively lie to me by submitting work that is not their own.