
MIT 6.001 Structure and Interpretation (1986) [video] - rsapkf
https://www.youtube.com/playlist?list=PLE18841CABEA24090
======
peter_l_downs
If you want the modern, grad-level version of an MIT scheme class, I highly
recommend Sussman's 6.945. I don't know if there's an open courseware version
but the entire class is centered around psets, each of which starts with a
base environment provided by Sussman and the teaching staff, and which you are
required to work in / extend. The class itself was extremely entertaining: you
watch Sussman walk back and forth between two transparency projectors,
switching the slide on each one as he arrives. Yes, you got very good at
reading scheme code very quickly while listening to him talk at the same time.

I understand why MIT decided to make the introductory CS classes more
accessible -- they wanted to expand the CS department beyond just those who
had already had programming experience by the time they got there, I think? It
makes a lot of sense and frankly I found the "replacement" classes pretty
great, even while I was taking this class at the same time. Instead of going
on at length about how much of a shame it is that MIT "got rid of its scheme
class", consider 6.945.

This was one of the handful of classes that I felt were worth the price of
admission; I've written code differently ever since.

[http://groups.csail.mit.edu/mac/users/gjs/6.945/](http://groups.csail.mit.edu/mac/users/gjs/6.945/)

~~~
kkylin
There's a book that GJS and Chris Hanson are writing, based on the course:

[https://www.penguinrandomhouse.com/books/669475/software-
des...](https://www.penguinrandomhouse.com/books/669475/software-design-for-
flexibility-by-chris-hanson-and-gerald-jay-sussman/)

It should be coming out soon. I'd expect it to be available online as well.

~~~
peter_l_downs
Thank you for this link, I didn't know they were writing a book but I just
pre-ordered it!

------
mrspeaker
I re-watch this course every bunch of years, and every time I get something
different from it. But mostly it just makes me happy - it's infectious and
weird. Especially the "revelation" (spoiler!)
[https://youtu.be/aAlR3cezPJg?t=2088](https://youtu.be/aAlR3cezPJg?t=2088)

------
losvedir
RIP. I think I was one of the last years to take this wonderful class. I guess
it would have been in 2004 or 2005, since I took it as an elective (being an
Econ major) on the strength of its reputation. It was hard but so interesting!

Since then MIT has switched its intro CS class to be python based. I suppose
that makes a little more practical sense but there's something magical about
Scheme that I fear they're missing out on.

~~~
landa
I remember being a freshman and seeing the lecture hall 32-123 being
temporarily hack-renamed to 6.001, and I didn't know what that was all about.
I think it was the last lecture of 6.001, but I didn't know what it was back
then.

------
dayvid
I tried to go through SICP and stopped short at Chapter 2. This time around, I
used Brian Harvey's CS61A lectures and I'm almost done. He does a good job
teaching you the book as well as the content in the book if that makes sense.
It's worth a watch if you feel stuck in SICP:
[https://www.youtube.com/watch?v=4leZ1Ca4f0g&list=PLhMnuBfGeC...](https://www.youtube.com/watch?v=4leZ1Ca4f0g&list=PLhMnuBfGeCDNgVzLPxF9o5UNKG1b-LFY9)

~~~
GeorgeTirebiter
Thank you. Having mentioned this, I wonder if there are similar-in-spirit
lectures for Common Lisp? PG has written two books on CL, and I've heard of
some Industrial Strength apps written in CL. So, if starting today, it seems
like maybe CL is the Right Choice?

~~~
dayvid
I'm not sure about CL lectures in general.

In regards to applying CL to SICP, I would argue that the course is more about
the underlying concepts than the language itself. You could probably read a CL
reference and write your exercise code in CL instead of Scheme, or just learn
CL after the course and it wouldn't be a big leap.

------
markus_zhang
As someone who actually ditched the Scheme version and went for and completed
the Python one (and Python version is way easier), I'm actually disappointed
to see that MIT dropped the Scheme version 15 years ago.

I mean it's MIT, and MIT is supposed to have the sharpest minds and the most
difficult courses. And the Scheme version, albeit that I dropped it due to
difficulty, DOES have a certain "flavor" that I did enjoy. Can't say what it
is though.

~~~
tartoran
Perhaps simplicity? I find that Scheme makes it very easy to see the bare
patterns

~~~
markus_zhang
I think it's the way it teaches you to build things from ground-up and forces
you to understand the principles. I'm reading CSAPP 3rd chapter and it gives
me the same feeling.

~~~
bitwize
That's exactly why 6.001 was dropped. There is no building from the ground up
anymore; virtually all software development is modifying or extending
something that already exists to fit some application.

~~~
markus_zhang
I guess it's reasonable, but as a hobbyist I have the advantage to ignore such
constraints (to seek a job), and such courses/books do seem to be attractive.

------
yagodragon
I'm studying CS but haven't heard any concrete examples of why I should learn
a lisp (scheme, Clojure). Every time I ask i get pseudo-intellectual answers
of how it will expand my mind, make it easier to express complex human
problems/domains into code or even make me re-evaluate things in life on a
philosophical level. What? On the one hand, i'm sooo curious to study all of
this and see for myself, but on the other hand, life's too short and I'm
already spending so much time in front of a PC to get my degree, learn a
couple of more languages, make side projects on github, personal blogs etc to
make myself more employable.

Anyway, i know this is HN i'm asking, but can you give me at least one
compelling reason why I should study lisp,scheme or clojure ?

~~~
nightski
If you need someone online to justify for you learning new things in your
field you have probably already lost. This field is unrelenting, it requires
constant learning. I'm nearing 40 and it hasn't stopped. The one advantage is
the more you learn the more skills transfer from one thing to the next.

So the most compelling reason I have is because learning new things should be
something that you find exciting. What makes Lisp unique is that it is a lot
different than other languages out there. If you know one imperative language,
learning another may expand your horizons but not in the same way something
from a different paradigm would.

If you already know a functional language or two, then it might not be
worthwhile. That is very much up to you. But even though I have never used
Lisp I enjoyed learning it immensely. Although I'd say I enjoyed Haskell more.

I will say back in the day I watched these lectures and found them incredibly
satisfying and thought provoking.

~~~
smcl
I think the point was that many people talk breathlessly about Lisp but are
often quite hand-wavey about specifics. When this concern has come up before
I've seen them dismissed with comments along the lines of "if you have to ask
you won't get it" or "just read SICP".

I've written and read a bunch of lisp and I'm slowly working my way through
SICP at a leisurely pace, but I totally understand what these OP means. Some
talk about lisp as something magical (it appears on xkcd as a sort of "god's
programming language" \- [https://xkcd.com/224](https://xkcd.com/224)) yet
often seem cagey about actually sharing exactly why they think so. A great
example of what I mean is this pretty famous essay by pg:
[http://www.paulgraham.com/avg.html](http://www.paulgraham.com/avg.html).

In fact he says "Lisp is so great not because of some magic quality visible
only to devotees, but because it is simply the most powerful language
available" \- which seems to dispel the "magic" bit ... but then throws out
the tantalising "most powerful language" without (in my opinion) giving a
compelling argument. He mentions how lisp macros are more powerful than those
in C and does say "Lisp code is made out of Lisp data objects" and a few other
bits and pieces about how it was higher-level than other popular languages at
the time (the mid-1990s). It certainly made me curious to explore the
language, but definitely left me with unanswered questions.

My opinion is that this phenomenon is a result of a number of things,
including:

1\. some people went through a transformative experience through learning
lisp, and are deliberately vague to entice others into exploring it without
ruining some of the fun of self-discovery

2\. some people had the same, but think that it's enough to declare these
things and don't care if you believe them or not

3\. some people parrot what they have read some smart folks say and simply
_can 't_ formulate a good explanation even if they wanted to

~~~
sjamaan
I suppose it's a bit of 1 or 2 or 3. But there's also the issue that emergent
properties which fall out of the overall design are quite hard to explain, and
even advanced students of the subject don't fully grok yet.

For example, "code is data" is true in the most trivial sense for machine
code, yet having code as structured data makes it much easier to manipulate.
Having easy to manipulate code gives you the power to manipulate code at
compile-time. Having code run at compile time inside the compiler, which is
also an interpreter _running the same language that you are compiling_ is kind
of magical and mind-bending.

In fact, more recent research into this has gone down the rabbit hole even
deeper, and it turns out you can have an entire tower of meta-levels (see for
example
[http://www.phyast.pitt.edu/~micheles/scheme/scheme22.html](http://www.phyast.pitt.edu/~micheles/scheme/scheme22.html)).
This is all continuing on the same basic ideas which were present in early
Lisps, just crystallized and refined further and further.

Also, as research into macros has gone on over the years, hygienic macros were
discovered, which Rust has adopted as well (and there are other languages
which have them as an add-on, like Sweet.js). Deeply understanding how this
stuff works gives you a better grip on the issues with macros in older
languages (notably C).

And that's just macros (and homoiconicity). There's also lexical versus
dynamic scoping. This is a lot less "magical" now than it was 10 years ago,
when almost no mainstream language even had closures.

~~~
AnimalMuppet
Are Rust macros at all comparable to Lisp macros? Can you re-write the syntax
of Rust with Rust macros? Or are they more like C/C++ macros?

~~~
steveklabnik
> Are Rust macros at all comparable to Lisp macros?

There are two major kinds of macros in Rust. One of them, macro_rules, is
vaguely similar to Lisp macros. It was partially designed and implemented by
some big Racket fans, in my understanding.

> Can you re-write the syntax of Rust with Rust macros?

Within limits.

> Or are they more like C/C++ macros?

Neither kind of Rust macros are like C or C++'s macros.

------
pieterk
Having had formal education at a Java college, where you had to have at least
one Class definition to run your code, discovering this course was a
revelation.

To learn from the people that invented their own programming language AND chip
to go with it. For free, as long as you had internet access, is something I'm
eternally thankful for.

This video series is a national treasure. It changed my life, and so many
others, without a doubt, for the uncountable better.

(THANK YOU)

~~~
DonHopkins
Here's some info (and links to pictures) I posted earlier about Lynn Conway's
groundbreaking 1978 MIT VLSI System Design Course, in which Guy Steele
designed his Lisp Microprocessor:

[https://news.ycombinator.com/item?id=8860722](https://news.ycombinator.com/item?id=8860722)

I believe this is about the Lisp Microprocessor that Guy Steele created in
Lynn Conway's groundbreaking 1978 MIT VLSI System Design Course:

[http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/MIT78.html](http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/MIT78.html)

My friend David Levitt is crouching down in this class photo so his big 1978
hair doesn't block Guy Steele's face:

The class photo is in two parts, left and right:

[http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Class2s.jp...](http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Class2s.jpg)

[http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Class3s.jp...](http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Class3s.jpg)

Here are hires images of the two halves of the chip the class made:

[http://ai.eecs.umich.edu/people/conway/VLSI/InstGuide/MIT78c...](http://ai.eecs.umich.edu/people/conway/VLSI/InstGuide/MIT78chip%20photo-1%20L.jpg)

[http://ai.eecs.umich.edu/people/conway/VLSI/InstGuide/MIT78c...](http://ai.eecs.umich.edu/people/conway/VLSI/InstGuide/MIT78chip%20photo-2%20L.jpg)

The Great Quux's Lisp Microprocessor is the big one on the left of the second
image, and you can see his name "(C) 1978 GUY L STEELE JR" if you zoom in.
David's project is in the lower right corner of the first image, and you can
see his name "LEVITT" if you zoom way in.

Here is a photo of a chalkboard with status of the various projects:

[http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Status%20E...](http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Status%20Em.jpg)

The final sanity check before maskmaking: A wall-sized overall check plot made
at Xerox PARC from Arpanet-transmitted design files, showing the student
design projects merged into multiproject chip set.

[http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Checkplot%...](http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Checkplot%20s.jpg)

One of the wafers just off the HP fab line containing the MIT'78 VLSI design
projects: Wafers were then diced into chips, and the chips packaged and wire
bonded to specific projects, which were then tested back at M.I.T.

[http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Wafer%20s....](http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/Wafer%20s.jpg)

Design of a LISP-based microprocessor

[http://dl.acm.org/citation.cfm?id=359031](http://dl.acm.org/citation.cfm?id=359031)

ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-514.pdf

Page 22 has a map of the processor layout:

[http://i.imgur.com/zwaJMQC.jpg](http://i.imgur.com/zwaJMQC.jpg)

We present a design for a class of computers whose “instruction sets” are
based on LISP. LISP, like traditional stored-program machine languages and
unlike most high-level languages, conceptually stores programs and data in the
same way and explicitly allows programs to be manipulated as data, and so is a
suitable basis for a stored-program computer architecture. LISP differs from
traditional machine languages in that the program/data storage is conceptually
an unordered set of linked record structures of various sizes, rather than an
ordered, indexable vector of integers or bit fields of fixed size. An
instruction set can be designed for programs expressed as trees of record
structures. A processor can interpret these program trees in a recursive
fashion and provide automatic storage management for the record structures. We
discuss a small-scale prototype VLSI microprocessor which has been designed
and fabricated, containing a sufficiently complete instruction interpreter to
execute small programs and a rudimentary storage allocator.

Here's a map of the projects on that chip, and a list of the people who made
them and what they did:

[http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/MPC78map.g...](http://ai.eecs.umich.edu/people/conway/VLSI/MIT78/MPC78map.gif)

1\. Sandra Azoury, N. Lynn Bowen Jorge Rubenstein: Charge flow transistors
(moisture sensors) integrated into digital subsystem for testing.

2\. Andy Boughton, J. Dean Brock, Randy Bryant, Clement Leung: Serial data
manipulator subsystem for searching and sorting data base operations.

3\. Jim Cherry: Graphics memory subsystem for mirroring/rotating image data.

4\. Mike Coln: Switched capacitor, serial quantizing D/A converter.

5\. Steve Frank: Writeable PLA project, based on the 3-transistor ram cell.

6\. Jim Frankel: Data path portion of a bit-slice microprocessor.

7\. Nelson Goldikener, Scott Westbrook: Electrical test patterns for chip set.

8\. Tak Hiratsuka: Subsystem for data base operations.

9\. Siu Ho Lam: Autocorrelator subsystem.

10\. Dave Levitt: Synchronously timed FIFO.

11\. Craig Olson: Bus interface for 7-segment display data.

12\. Dave Otten: Bus interfaceable real time clock/calendar.

13\. Ernesto Perea: 4-Bit slice microprogram sequencer.

14\. Gerald Roylance: LRU virtual memory paging subsystem.

15\. Dave Shaver Multi-function smart memory.

16\. Alan Snyder Associative memory.

17\. Guy Steele: LISP microprocessor (LISP expression evaluator and associated
memory manager; operates directly on LISP expressions stored in memory).

18\. Richard Stern: Finite impulse response digital filter.

19\. Runchan Yang: Armstrong type bubble sorting memory.

The following projects were completed but not quite in time for inclusion in
the project set:

20\. Sandra Azoury, N. Lynn Bowen, Jorge Rubenstein: In addition to project 1
above, this team completed a CRT controller project.

21\. Martin Fraeman: Programmable interval clock.

22\. Bob Baldwin: LCS net nametable project.

23\. Moshe Bain: Programmable word generator.

24\. Rae McLellan: Chaos net address matcher.

25\. Robert Reynolds: Digital Subsystem to be used with project 4.

Also, Jim Clark (SGI, Netscape) was one of Lynn Conway's students, and she
taught him how to make his first prototype "Geometry Engine"!

[http://ai.eecs.umich.edu/people/conway/VLSI/MPCAdv/MPCAdv.ht...](http://ai.eecs.umich.edu/people/conway/VLSI/MPCAdv/MPCAdv.html)

Just 29 days after the design deadline time at the end of the courses,
packaged custom wire-bonded chips were shipped back to all the MPC79
designers. Many of these worked as planned, and the overall activity was a
great success. I'll now project photos of several interesting MPC79 projects.
First is one of the multiproject chips produced by students and faculty
researchers at Stanford University (Fig. 5). Among these is the first
prototype of the "Geometry Engine", a high performance computer graphics
image-generation system, designed by Jim Clark. That project has since evolved
into a very interesting architectural exploration and development project.[9]

Figure 5. Photo of MPC79 Die-Type BK (containing projects from Stanford
University):

[http://ai.eecs.umich.edu/people/conway/VLSI/MPCAdv/SU-
BK1.jp...](http://ai.eecs.umich.edu/people/conway/VLSI/MPCAdv/SU-BK1.jpg)

[...]

The text itself passed through drafts, became a manuscript, went on to become
a published text. Design environments evolved from primitive CIF editors and
CIF plotting software on to include all sorts of advanced symbolic layout
generators and analysis aids. Some new architectural paradigms have begun to
similarly evolve. An example is the series of designs produced by the OM
project here at Caltech. At MIT there has been the work on evolving the LISP
microprocessors [3,10]. At Stanford, Jim Clark's prototype geometry engine,
done as a project for MPC79, has gone on to become the basis of a very
powerful graphics processing system architecture [9], involving a later
iteration of his prototype plus new work by Marc Hannah on an image memory
processor [20].

[...]

For example, the early circuit extractor work done by Clark Baker [16] at MIT
became very widely known because Clark made access to the program available to
a number of people in the network community. From Clark's viewpoint, this
further tested the program and validated the concepts involved. But Clark's
use of the network made many, many people aware of what the concept was about.
The extractor proved so useful that knowledge about it propagated very rapidly
through the community. (Another factor may have been the clever and often
bizarre error-messages that Clark's program generated when it found an error
in a user's design!)

9\. J. Clark, "A VLSI Geometry Processor for Graphics", Computer, Vol. 13, No.
7, July, 1980.

[...]

The above is all from Lynn Conway's fascinating web site, which includes her
great book "VLSI Reminiscence" available for free:

[http://ai.eecs.umich.edu/people/conway/](http://ai.eecs.umich.edu/people/conway/)

These photos look very beautiful to me, and it's interesting to scroll around
the hires image of the Quux's Lisp Microprocessor while looking at the map
from page 22 that I linked to above. There really isn't that much too it, so
even though it's the biggest one, it really isn't all that complicated, so I'd
say that "SIMPLE" graffiti is not totally inappropriate. (It's microcoded, and
you can actually see the rough but semi-regular "texture" of the code!)

This paper has lots more beautiful Vintage VLSI Porn, if you're into that kind
of stuff like I am:

[http://ai.eecs.umich.edu/people/conway/VLSI/MPC79/Photos/PDF...](http://ai.eecs.umich.edu/people/conway/VLSI/MPC79/Photos/PDFs/MPC79ChipPhotos.pdf)

A full color hires image of the chip including James Clark's Geometry Engine
is on page 23, model "MPC79BK", upside down in the upper right corner,
"Geometry Engine (C) 1979 James Clark", with a close-up "centerfold spread" on
page 27.

Is the "document chip" on page 20, model "MPC79AH", a hardware implementation
of Literate Programming?

If somebody catches you looking at page 27, you can quickly flip to page 20,
and tell them that you only look at Vintage VLSI Porn Magazines for the
articles!

There is quite literally a Playboy Bunny logo on page 21, model "MPC79B1", so
who knows what else you might find in there by zooming in and scrolling around
stuff like the "infamous buffalo chip"?

[http://ai.eecs.umich.edu/people/conway/VLSI/VLSIarchive.html](http://ai.eecs.umich.edu/people/conway/VLSI/VLSIarchive.html)

[http://ai.eecs.umich.edu/people/conway/VLSI/VLSI.archive.spr...](http://ai.eecs.umich.edu/people/conway/VLSI/VLSI.archive.spreadsheet.htm)

~~~
bitwize
It's worth noting that the Lisp Microprocessor was something quite different
from Lisp Machines. Lisp Machines like the CADR and the Symbolics 3600 had
conventional CPUs with enhancements like support for parallel tagbit and
bounds checking and hardware acceleration of GC to make Lisp programs run
faster. For the Lisp Microprocessor, a representation of Lisp _was_ the
instruction set.

~~~
DonHopkins
And Lisp Machines were wire wrapped! There was a robotic wire wrapper at the
AI Lab on the 9th floor of 545 Tech Square.

Lynn Conway's VLSI design course was the first time students designed and
fabricated their own integrated circuits!

------
akulkarni
This was a great watch. I took this class as freshman, and watching this video
now I realize how much of the material was wasted on 17-year old me. :-)

It's a testament to the quality of the teaching that it was eye-opening and
inspiring back then at 17, and even more so now when I am 40.

------
jll29
A priceless masterpiece (we used the book in our algorithms and data
structures 1 course in 1993).

------
shswindell42
Had a professor show us the first few minutes of the first lecture here.
Saying "Computer Science" wasn't a science and that it was really about
computers was mind blowing for a freshman CS major.

~~~
xdavidliu
> and that it was really about computers

I think Abelson said in the first SICP lecture that "it was NOT really about
computers"

------
gabssnake
I've seen the videos and went through -most- of the book exercises. This is a
beautiful way to teach and think about programming and it continues to
fascinate me.

------
nanomonkey
Anyone know of similar lectures for the SICM (Structure and Interpretation of
Classical Mechanics) book that Sussman also wrote?

I'm also interested in creating a study group to go through the book in
Clojure, if possible.

------
bigasscoffee
I've watched this before. It would have been so great to be in some of these
classes and a Course 6 student there!

------
blackrock
I was looking for some complete open source Lisp programs to review. I wanted
to experience the “magic” of Lisp, and bathe in its suffusion of blue [1],
while becoming enlightened in the language of the gods.

I found the Hemlock [2] source code, which is an Emacs like clone. I don’t
know how good it is, maybe someone else can comment on it. But the source code
appeared to be rather clean and well organized.

This guy’s comment [3] on Lisp got me interested in it again: “Lisp is
executable XML with a friendlier syntax.“.

And it appears to be like a key-value pair, where the data and code can
interplay, and rewrite itself, and execute itself. Sorta, but if this can be
done, then this would make for an interesting self-generating AI system. Of
course, there are still other ways to skin this cat, like using a database.

I still need to do some more work to reach that enlightened state of Lisp Zen.

Perhaps someone else can share their enlightened states that they’ve reached
with Lisp?

[1] [https://xkcd.com/224/](https://xkcd.com/224/)

[2] [https://github.com/bluelisp/hemlock](https://github.com/bluelisp/hemlock)

[3]
[http://www.defmacro.org/ramblings/lisp.html](http://www.defmacro.org/ramblings/lisp.html)

~~~
blackrock

      Then, I reached a moment of Lisp epiphany.
    
      Where my VR coding system,
      Would build computational blocks of pure logic.
      A graphical metaphor, for the engineer to define, 
      Functions, variables, and conditional branching to the nines.
    
      Their results are returned, and fed into something new,
      Each rigorous, discrete, and unit tested too.
      Like a jigsaw linked together by logical flows and light, 
      Further enclosed, they add to its computational might. 
    
      And Lisp would be the ideal, 
      To achieve such a metaphorical fusion of thought.
      From conception to code,
      Between the virtual and the real.
    
      The key-value pairings, 
      Between the operator and its operands,
      All enclosed by parentheses,
      Bringing closure, and harmony to its lands. 
    
      Less is required, the tedious keyboards of our day, 
      Instead, on the VR you would tinker and play, 
      Like a meticulous craftsman of another age,
      Building until perfect, each module of the sage.
    
      The world’s combined intellectual prowess,
      Would be available at your needs, 
      Collected in a public digital library,
      The modules and code, for you to integrate into your feed.
    
      And then it would run, the great engine of light,
      Bringing forth its magic, and manifesting in twilight. 
      Running on pure thought, and reliable to the nines,
      The Engineer would sit back, and marvel at his find.
    
      And then I awoke from my dream,
      Suffusion complete.

------
nikofeyn
this course is so fun to watch and listen to.

------
danielam
N.b. should read "Structure and Interpretation".

~~~
dang
Fixed now. Thanks!

