91.301 Organization of Programming Languages, Fall 2008
Prof. Fred Martin,
⚠ (:html:)<a href="http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=" onclick="window.open('http://mailhide.recaptcha.net/d?k=01COSqrfJ-58cc94fQb2pI1A==&c=iZBP8kCznrjdnfw8QFFKADFtsIimnLdVHk581djoISQ=', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0, menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">click for fred's email</a>(:htmlend:)
Tue & Thu, 11:30 am 12:45 pm, Olsen 403
Quick Links to Student Final Projects!
$cheme $tockby Gary Kanter and Paul Ricker
- Scheme-in-C++-Game-Engine by Dante Kappotis
- C++-in-Scheme-Calculator by Steven Zukowski
- Checkbook Balancer by Eric Krupnik
- Scheme-&-SQL-Database-Interactions by Rohan
- XML Baseball Statistics by Jerron St. Armand
- RSS-Mashups-in-Scheme by Tom Kiley
- iRobot Create Scheme API by John Fertitta
- Scheme-and-GUI-Box_and_Pointer_Diagrams by Dongrui Zhang
- ID3 Tag Editor by Joshua Kraunelis
- GUI Email Client by Steven LeBoeuf
- SimpleRSS by Philip Kovac
- CrawLS by Patrick Lozzi
- SchemeSpider by Chris DiMaio
- XML Manipulation by Brian Mello
- Music Discovery by Chris Corcoran
- Desktop Relief Engraving by Mark Sherman
- User-interactive Webpage Application in PLTScheme by Shruthi Rajegowda
- Drummer-in-Scheme by David Romano
- PCB Drill by Saroun Sek
- Fluxus using Scheme by Josyel Perez
We will be using the following books:
|Structure and Interpretation of Computer Programs (1984) |
Hal Abelson and Jerry Sussman
|Core Python Programming, 2nd Edition (2006) |
Wesley J. Chun
|We will be using the historic Abelson/Sussman book, Structure and Interpretation of Computer Programs. It is available online (for free) here.||We will also be working with Python in the class. Core Python is part of O'Reilly's "Safari" system, and as a UML student you can read it on the web for free. • If browsing on campus, just click on the image of the book, above. • If off-campus, first log into the UML Library proxy server (use right-click to open the log-in screen in a separate browser window), and then read it here.|
Basically all departments that award bachelor's degrees in Computer Science have a course like OPL. Such a class is also required by CSAB, the professional organization that accredits CS degrees. So, everyone's got onewhy?
In my opinion, this course exists to give you a different way of thinking about computing. A way that is really quite apart from the professional programming languages like C, C++, and Java, all of which are based on an edit/compile/debug/deploy model of computation.
There are basically two variants of the OPL-type course at CS departments. One variant is a survey of the ideas in many languages that have been created and implemented. The other variant is a deep-dive into a language favored by language researchers, often Scheme or CAML. Both of these languages are meta-languagesthey are languages for making languages.
At UMass Lowell, we take the 2nd approach (deep dive) in our undergrad course, and the survey approach in our grad class. For many years here, 91.301 has been a close implementation of the famous 6.001 course at MIT, Structure and Interpretation of Computer Programs. This course was created in the 1970s and has been hugely influential.
Now, it so happens that MIT has just implemented a major overhaul of their undergrad EECS curriculum, and as of Fall 2008, the 6.001 course is no longer being offered. Given that, why are we still teaching it, you might ask?
What Is The Big Idea?
There are actually several big ideas in SICP (as it is commonly known) that we will bring out in OPL:
- Program-as-data. In typical programming languages, there is a sharp distinction between what is code and what is data. Data structures are allocated explicitly, and code is written to manipulate them. The two things are of a different nature. (Of course, bits are bits, but you're not going to be placing executable code into an array unless you're implementing a buffer overrun attack.)
- Functions as first-class objects. In Scheme, procedures (also known as functions) can accept procedures as inputs (arguments). But they also can easily create procedures as outputs (return values). This leads to a style of programming known as functional programming, in which functions are composed and applied to lists of data to produce results, instead of the more prevalent approach of sequentially manipulating data structures. Functional programming has some advantages in transparency and simplicity, particularly in language and symbolic processing, and is facilitated by a language like Scheme in which code can easily construct and output code on the fly.
- Data abstraction. This was one of the really big contributions of SICPthe idea of abstracting data structures from the interfaces for manipulating them. It then becomes possible to re-implement an underlying data structure without changing the code that uses it. For example, if there is a
concatenateoperation that appends one string to another, code that uses
concatenatedoesn't need to change even if the underlying representation of a string changes.
- The environment and persistence. In typical programming environments, data and objects are created anew each time the program launches. If you need to return to a previous execution state, then you read in data (e.g., from files on the disk or off the net) and reconstitute the data structures that hold that data. Object-oriented languages typically provide some way to serialize objectsconverting them into a flat-file format (e.g., XML) for saving and loading across execution runs.
- Interpretation and the Listener. Scheme was historically an interpreted language, and provided a Listener console for interactively constructing expressions and evaluating them. (At one time, the fact that it was interpreted was considered a significant performance liability, but compiled versions of Scheme and Lisp now exist, removing this as a concern.)
mainfunctions simply for the purpose of exercising your routineswhy can't you just talk to them directly? Similarly, the environment is a powerful constructyou build up a library of objects that are part of your project, and once created, they are part of your software system.
Course Structure and Grading
The class will have regular weekly assignments, which will be graded and returned. Cumulatively these assignments are worth 25% of your overall grade. Assignments will be accepted up to 1 week late with a 50% reduction in that assignment's value. At least 2/3s of all weekly assignments must be completed satisfactorily or your overall assignment score will be demoted to 0. (Translation: please take the homework seriously; this is where you will do most of your learning.)
There will be two in-class quizzes during the semester. Each is worth 10% of your overall grade.
There will be a cumulative final, worth 20% of your overall grade.
Classroom attendance and participation is worth 10% of your overall grade. In practice, if your other grades put you on a marking boundary, this will push it one way or the other.
You may notice that this leaves 25% remaining. I am introducing a final project into the course, which will be conducted in the last three weeks of the semester. We will start talking about it before then, though, so you can start preparing for it. In the final project, you will apply the ideas developed in the class in an original software implementation. You may thus connect the ideas of the class with your own interestsmusic, robotics, art, databases, the web, networking, gaming, etc. The learning goal of the project is to have you find some real-world relevance of the ideas in the class.
25% Weekly homeworks
20% Two quizzes
10% Classroom participation
Discussion Group / E-Mail List
We will use Google Groups for class conversation and announcements. Please join this group. I'd advise setting your preferences to immediate, individual delivery of messagesclick the Edit my membership tab.
<table style="border:1px solid #aa0033; font-size:small" align=center>
<img src="http://groups.google.com/groups/img/groups_medium.gif" height=58 width=150 alt="Google Groups">
<td colspan=2 align=center><b>Subscribe to 91301-f08</b></td>
<td>Email: <input type=text name=email></td>
style="background-color:#ffcc33;padding:2px;border:2px outset #ffcc33;">
<input type=submit name="sub" value="Request">
<tr><td colspan=2 align=center>
<a href="http://groups.google.com/group/91301-f08">Browse Archives</a> at <a href="http://groups.google.com/">groups.google.com</a>
The group address is firstname.lastname@example.org. You have to be a member to send to the list.
You are welcome to discuss ideas in the class with your peers. However, pair programming or other sharing of code is not allowed. By turning in an assignment, you attest that you have written the code that it includes. Please be familiar with the university's academic integrity policy.
Students who are registered for the honors section of the class are expected to have exemplary work, including classroom participation, written work, and the course project. Additional and more difficult problems will be assigned in most of the weekly problem sets.
I am inheriting this course from UML Prof. Holly Yanco, who has taught it in exemplary form for a number of years. Much of the course materials will be based on her work.