• Handouts
Computer Science 302 deals with programming languages generally, considered as formal, executable notations for expressing algorithms: their syntactic structures, the models of computation that they implicitly rely on, the data values and structures that they support, and the semantics of the various constructions from which programs are built.
The class meets in Noyce 3819 at 10 a.m. on Mondays, Wednesdays, and Fridays.
The textbook for the course is Essentials of programming languages, third edition, by Daniel P. Friedman and Mitchell Wand (Cambridge, Massachusetts: The MIT Press, 2008; ISBN 978-0-262-06279-4).
The authors have kindly made all the code for this book available as a ZIP archive. I have unpacked this archive and placed a copy at /home/stone/courses/languages/eopl on MathLAN.
The authors have also drawn up a list of errata for the third edition.
I'm John David Stone. My office is Noyce 3829. My office hours this semester are Mondays from 2:15 to 4:15 p.m., Tuesdays from 9 to 11 a.m., Thursdays from 2:15 to 4:15 p.m., and by appointment. I can be reached by telephone at extension 3181, or by e-mail to stone@cs.grinnell.edu.
Each student in the course is expected to read the assigned sections of the textbook carefully, to learn the ideas, methods, and techniques that are presented there, to submit solutions to exercises requiring the application of those ideas, methods and techniques, and to prepare for and attend the sessions of the class.
The schedule of topics for the course includes reading passages in the timetable. Please study each specified section before the beginning of the class that follows it in the schedule.
From time to time, I shall provide handouts on topics related to the course. You should study each of these, too, before the class session at which we discuss it.
The authors have supplied many pleasant and ingenious exercises, and I'll also propose some. You may work on any of the exercises that you like, singly or in groups. Submit solutions to me by e-mail -- programs as plain text files, prose answers either as plain text, TEX or LATEX source files, or as Open Document Format text files (.odt). Everyone who works on a solution should sign it.
When I have received at least one promising solution to a given exercise, but not less than two calendar days after the class session in which we discuss the topic of the section in which the exercise is stated, I'll place one of the solutions that I have received in the directory /home/stone/courses/languages/solutions. Others in the class may then read this solution and try to improve on it.
The submitter or submitters of a solution may request that it be published pseudonymously, and I'll respect such requests.
Class attendance is optional. However, if you miss a class session for any reason, you must write up and submit a solution to certain designated exercises for that session, which will be identified in the schedule of topics.
In addition, it is especially helpful if your raise for discussion any questions you may have about the day's topic, the assigned reading, or the exercises. I suggest that you write out such questions as part of your preparation for class sessions.
The final examination will be cumulative and comprehensive. During the exam, you may consult books, notes, and other papers that you bring with you, but you may not confer with anyone else nor use telephones, computers, or any other networked devices.
The examination will comprise about fifteen questions, including some short-answer questions and some essay questions. No programming will be required.
The Committee on Academic Standing has scheduled our examination to run from 9 a.m. to noon on Wednesday, May 13. Please do not make travel plans that conflict with this schedule.
Your performance on exercises will determine seven-tenths of your final grade, class attendance and participation one-tenth, and your performance on the final examination the remaining fifth, with the condition that you must pass the final examination in order to pass the course.
Since you will receive credit for this course on the basis of your individual performance, it would be unethical to submit the work of others as your own. You may, if you like, collaborate on solutions to exercises, but such solutions must be signed and submitted jointly by all the members of the collaboration. You may not collaborate on the final examination or any part of it.
No special license accompanied the code that Friedman and Wand provide, so it appears to be covered by the textbook copyright, which prohibits all reproduction without permission in writing from the publisher. Our uses of it in this course must therefore be restricted to what is permitted by fair use limitations on the rights of copyright holders. In particular, although we sometimes copy that code verbatim and sometimes write programs are derived from it, we will use the copies and derived programs only for non-profit educational purposes and not for commercial purposes, giving due acknowledgement to Friedman and Wand, and distribute them only within the College community.
Source code that I have created for this course and placed either on the Web or in /home/stone/courses/languages is licensed under the GNU General Public License (unless it is derived from someone else's code; see the individual files for further information). Code released under the GPL can be copied, studied, revised, improved, and redistributed freely, subject to the restriction that any copies or derived programs are released under the same license.
Similarly, handouts and other prose course materials that I have created and distributed either on the Web, or in hard copy, or in /home/stone/courses/languages are licensed under the Creative Commons Attribution-ShareAlike 3.0 United States License and can be copied, studied, revised, improved, and redistributed freely, provided that my authorship of the original work is acknowledged and that any copies or derived works are released under the same license.
Under Grinnell College's copyright policy, a student who submits a program or a prose text to satisfy a requirement of this course retains the copyright to it. Similarly, a group that submits such a work has and retains a collective copyright. In either case, however, the College asserts the right to distribute the work within the College community for instructional or administrative purposes without paying any royalty to the student. We shall distribute solutions that appear in /home/stone/courses/languages/solutions only within the College community and only for non-profit educational purposes, giving due acknowledgement to the authors.
You may, of course, choose to publish your work under some more generous license, and I encourage you to use the GNU General Public License (version 3) for software and the Creative Commons Attribution-ShareAlike 3.0 United States License for text.