
SICP taught by Abelson and Sussman [video] - hardwaresofton
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/1a-overview-and-introduction-to-lisp/
======
craigching
I only watched the first 12 minutes or so (thus far!), but ... just wow! I
originally took a course at the U of Mn where SICP was taught as intro to
programming and intro to OO programming (yep, OO programming with Scheme, I
have a very lucid memory of some dude standing up and complaining about
learning OO programming using Scheme vs. C++ (circa 1992 mind you) because
"who will ever use Scheme in their programming career" and the professor (Dr.
Maria Gini) had to ask the student to "keep an open mind" and all I could
think was "hey, why not?").

This class was the most mind expanding class I've ever taken. I have read SICP
three times since the early 90's and use it as a reference _to this day_ (who
else was re-reading the SICP streams chapter when Java 8 was recently
announced? /raise).

Anyway, I'm _way_ off track here, but whatever. Having watched only the first
12 minutes of this video ... if Dr. Gini had this influence on me and now
seeing this ... it's a huge step up! Listening/seeing Hal Abelson talk about
programming and referencing the Egyptians ... I was just shaking my head, he's
right to cross off computer science, it's not about that, it's _bigger_.

I can't wait to watch the rest. And I'm going to make my team watch this. As
much as I loved SICP as taught by Dr. Gini, this is way beyond her abilities
as much as it pains me to say that.

~~~
projectileboy
Yes! I also was exposed to SICP by Maria Gini! Great class, great professor.

------
hardwaresofton
Thought others might also enjoy watching the series instead of reading it -- I
personally greatly enjoyed the lectures, and they serve very well as an
overview before a deep dive into the book (at the very least).

Always amazes me how slowly computer science moves, despite how fast
technology is moving

~~~
camus2
well why things that were relevant 20+ years ago would not be today?

SICP is still the best introduction to computer science. The problem is the
reliance on scheme/lisp languages to explain stuffs. it could be taught in
almost anything that supports basic FP,it's even taught in JS !

[http://www.comp.nus.edu.sg/~cs1101s/sicp/](http://www.comp.nus.edu.sg/~cs1101s/sicp/)

~~~
exDM69
> SICP is still the best introduction to computer science. The problem is the
> reliance on scheme/lisp languages to explain stuffs. it could be taught in
> almost anything that supports basic FP,it's even taught in JS !

The fact that Scheme uses Lisp is what makes SICP work at all. The course
would be difficult or impossible to complete using most other languages. The
keyword is: homoiconicity, the "code=data" property of Lisp.

Most of the course focuses on writing interpreters and compilers for Lisp and
making variations on it (lazy evaluation, non-deterministic). This would be
very painful if a non-homoiconic language is used.

And indeed, the "JavaScript version" you posted is very painful to read. It's
difficult to understand how the data structures used by the interpreter are
related to JavaScript code. And the code most definitely is not idiomatic
JavaScript. I would not consider this an improvement over the original Scheme
version.

~~~
ilcosrn
> The course would be difficult or impossible to complete using most other
> languages. The keyword is: homoiconicity, the "code=data" property of Lisp.

But if that is the case, wouldn't SICP be less language agnostic since (most
of) the concepts taught cannot be universally applied to non-homoiconic
languages?

~~~
yeahbutbut
The problems can be solved in other languages, the tools are just clunkier.
Lisp lets you solve the hard problems simply, and the solutions (not their
expression) are what matters.

------
exDM69
What is notable about this video series that these lectures were given to an
audience of professional programmers (staff of Hewlett-Packard), not first
year students taking their first baby steps in programming.

It's nice that the video moves at a comfortable pace and doesn't get stuck
explaining some details which most of the audience finds dead obvious.

~~~
jacobolus
My understanding is that their lectures to MIT freshmen were substantially
similar in pace and content, but just spaced out over a longer period of time.

Schools like MIT tend to assume that students are sufficiently mathematically
sophisticated and technically competent, and willing to work hard to keep up.

------
rtpg
[http://www.youtube.com/watch?feature=player_detailpage&v=0m6...](http://www.youtube.com/watch?feature=player_detailpage&v=0m6hoOelZH8#t=2083s)
A great little moment from this class.

~~~
bsaul
Thanks for the link. Last time someone posted about those courses i started
watching them, but i didn't went up to there.

My problem now is that this _really_ made me want to start coding my own Lisp.

~~~
JackMorgan
Thankfully chapter 4 demonstrates how to do just that! Want to make it lazy
like Haskell? Syntax different from Scheme? You are limited only by your
imagination. Round that off with the last chapter from Let Over Lambda and you
can add in "or make it like Forth"!

~~~
bsaul
One thing i wonder though: i first wanted to code that lisp in haskell
(learning two languages in one), but i'm not quite sure it's such a good idea,
now that i've learned about homoiconicity.

Any advice ?

~~~
eru
You are one courageous individual. But you are not the only one.
[https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_...](https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours)
has got you covered.

~~~
bsaul
absolutely fantastic ! Thanks

------
MichaelMoser123
There seems to be some psychological barrier that prevents people from
learning Lisp (or Scheme for that matter).

i think that the problem is that of nesting parenthesis; Multiple nestings of
parenthesis assume that the information hidden in the inner levels of
parenthesis nesting is somehow different/or hidden from the outer levels.

I think that a complicated system must combine multiple level of 'truths'; a
fact that is definitely true on a lower level might end up as being of less
significance on a higher level (or vice versa - the process of debugging turns
designs on to its heads; some philosophers (see Hegel) call that
'dialectics').

Now people who are used to censorship have no problem with that ! A person who
is supposed to hide his stuff - he is a person who must be afraid of external
censorship; this person is used to social hierarchy; he knows that the lower
level (his personal self) knows things that are different from what is
regarded as public truth.

Now assume that society opened up (somehow) since the fifties; people who grow
up during later timers are less accustomed to multiple levels of truths;
therefore this hierarchy of parenthesis will be regarded as
oppressive/disconcerting to subsequent generations.

~~~
eru
So North Koreans make the best Lisp programmers? Colour me doubtful.

~~~
MichaelMoser123
North Koreans might be good Lisp programmers; however they might have other,
more pressing problems - like staying alive under this monstrous regime.

There are other societies that had censorship, maybe to a lesser extent than
North Korea; I guess that once upon a time people in the US did rely on the
Tube for information (that was before the net) the tube is a centralized
source of information, its editors were subject to some control; so I guess
that censorship was quite real during that period.

You might listen to the following song for some more context: "White Houses"
Eric Burdon & The Animals
[https://www.youtube.com/watch?v=mefFJFZydG4](https://www.youtube.com/watch?v=mefFJFZydG4)

------
imslavko
I watched several MOOCs and OCW courses but this one was the first and the
best I've ever came across. Most of the MOOC videos are still boring and I
need to speed them up to 1.25x but SICP was so great, I could spend hours
talking to my peers about every episode! My notes of it are here:
[http://devblog.me/sicp.html](http://devblog.me/sicp.html)

~~~
xmonkee
For me Dan Grossman's course on Programming Languages takes the cake. Best
course I've ever done. Taught SML, Racket and Ruby enough to touch on so many
concepts (FP, recursion, algebraic datatypes, polymorphism,... the list goes
on). For the assignments a small programming langauge was implemented in
almost all of these, showing different ways of solving the expression problem.
It was amazing.

~~~
Nick_C
Completely agree. I've done Scala, Algorithms, and one other and Dan's course
stands out for its interest, enthusiasm and clarity.

Plus it uses functional programming! What's not to like.

~~~
xmonkee
Haha exactly the same 3 courses I did last year. Doing any currently?

~~~
Nick_C
Nah, having a "summer break _+_ " that's extended a bit longer ;). I plan to
do a crypto course at some stage.

    
    
      + Southern hemisphere

------
brudgers
Other MIT Open Courseware:

Recently my memories of the first time I saw linear programming were
triggered- those few pages in an algebra book were the last time for many many
years that I felt "wow this is so cool" about math and I think part of my loss
of interest during high school and pretty much entirely by college was that
the subject was never revisited and instead there was a lot of looking stuff
up in tables and not much with systems.

Anyway, I've been watching Gilbert Strang teach Linear Algebra on OCW. It
makes me wish Abelson and Sussman could remake the SICP videos with another 25
years of in the classroom experience - Strang's presentation is masterful. And
linear algebra after all these years is still awesome

[http://ocw.mit.edu/courses/mathematics/18-06-linear-
algebra-...](http://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-
spring-2010/index.htm)

~~~
RogerL
I've been doing the same.

It really strikes me how amazing the MIT professors are. In contrast, most of
the Coursera courses have me tearing my hair out. Pet theories on how to
structure a course, mumbling, stuttering, essentially reading power point
slides - I am so glad school is a few decades behind me.

But in contrast, Strang, Sussman, et. al make the topic come alive. Despite
having taught the same course over and over they can put themselves into the
mindset of the student. Beyond that, they find the beauty in the topic, and
are able to communicate it to inexperienced freshmen.

~~~
groovy2shoes
I mostly agree, but I want to give props to Dan Grossman's Programming
Languages course on Coursera. It's the only Coursera course I was actually
able to see through (out of 6 or so over the last couple years), and I learned
quite a bit.

~~~
brudgers
I took the second edition of Grossman's course and it was very good.
Kickzales's _Introduction to Program Design_ was also good as was Pascal Van
Hentenryck's _Discrete Optimization_ \- his enthusiasm is infectious.

Odersky himself is teaching _Functional Programming in Scala_ later this
month, and I'm looking forward to that.

------
zenbowman
This is the set of lectures that made me fall back in love with computer
science. The enthusiasm and "clever troll" attitude of Sussman is infectious.

This is our Principia.

------
laichzeit0
I want to start working through SICP again beginning these Easter holidays. I
tried it before using Vim and and ran the REPL in a different terminal. This
really sucked and I gave it up as a bad job. I decided that Emacs is probably
a better "development environment" to try and go through SICP so I did this:

Got Emacs "pimped" [1] enough to behave like Vim but Emacs enough to use
Geiser and connect to Racket with Neil Van Dyke's SICP package. (Emacs
prelude, Eviled, Solarized and installed packages: geiser, quack, sicp (M-x
info-display-manual sicp)).

Gonna see how it goes this time round.

[1]
[https://github.com/humana/dotfiles/blob/master/emacs/persona...](https://github.com/humana/dotfiles/blob/master/emacs/personal/custom.el)

~~~
minikomi
You can always use Dr Racket. I'm a vim user but find DrRacket fine for doing
iterative "practice" with a REPL.

~~~
klibertp
DrRacket is not as easy to customize as Emacs is and it, by default, offers a
different mode of exploratory programming than the one SLIME users expect. In
DrRacket you don't evaluate a single form, you just execute a module and then
are dropped into it's namespace. If you change a definition in your module you
need to re-read all of it or alternatively copy-paste it into the REPL, which
is not convenient. I found that the SLIME/Geiser/Emacs model is better for
really tiny stuff, while DrRacket's is better for longer scripts, where there
are many dependencies.

Anyway, while both ways are ok, they are not exactly equivalent - is what I
wanted to say.

~~~
bbradley406
I'm not sure if this matches your exact needs, but there is a way to achieve
this functionality in DrRacket:

[http://docs.racket-
lang.org/drracket/Keyboard_Shortcuts.html...](http://docs.racket-
lang.org/drracket/Keyboard_Shortcuts.html?q=drracket#%28part._.Sending_.Program_.Fragments_to_the_.R.E.P.L%29)

------
JackMorgan
For anyone interested, Paul Snyder and I are currently running a SICP study
group. We have an online meeting and in person meetings in Philadelphia and
King of Prussia. We are currently doing one minor section every month, which
averages out to roughly one homework question every 3 days. For anyone
interested we will help you get setup and started, no prior programming
needed.

We are running section 1.3 this month, so there is not much to catch up! Also,
anyone who wants to work it their own pace is welcome too!

[http://www.meetup.com/Clojadelphia/events/172933722/](http://www.meetup.com/Clojadelphia/events/172933722/)

Paul hasn't put up the info for the 1.3 online session yet, join the
Clojadelphia group to get updates when he does

~~~
askar_yu
I had to re-read the 'King of Prussia' several times (O_o) before Googling it
up :)

~~~
JackMorgan
Yeah, silly name, we also have a Bala Cynwyd, Conshohocken, and Bryn Mawr all
right next to each other.

------
bridger
I am doing the chapter on register machines now. I love the diagrams that show
the controller and the data path of the machine. See
[http://sarabander.github.io/sicp/html/5_002e1.xhtml#g_t5_002...](http://sarabander.github.io/sicp/html/5_002e1.xhtml#g_t5_002e1_002e1)

Scratch and Quartz composer show code in a graphical way. Are there examples
of languages that show the data path in a similarly graphical way?

I would love to see how variables relate to each other and other functions
(the data path) separated from the order in which these operations actually
happen (the controller). It would be an interesting way to debug. For example,
variables that get assignment but are never read would be glaringly obvious.

~~~
wlesieutre
While it's _very_ purpose specific, you might check out Unreal Engine 4's
visual scripting in Blueprint.

[https://docs.unrealengine.com/latest/INT/Engine/Blueprints/U...](https://docs.unrealengine.com/latest/INT/Engine/Blueprints/UserGuide/index.html)

For a quick primer: white connections represent the flow of execution, and
have a variety of flow control nodes (Switch, Gate, DoOnce, etc) to direct
execution around the graph. The other color coded lines represent the usual
int/float/bool/string types, as well as some specialized things like
rotators/translators/objects.

The debugging is fantastic, and sounds like something you might be interested
in. You can set breakpoints on nodes and step through execution. Hovering the
mouse over any variable will tell you what it's currently set to, or you can
mark a value to be displayed next to its node in the graph. Take a look here
for more:
[https://docs.unrealengine.com/latest/INT/Engine/Blueprints/U...](https://docs.unrealengine.com/latest/INT/Engine/Blueprints/UserGuide/Debugging/index.html)

You'd need a $20/month subscription to get UE, but you can cancel it
immediately if you don't mind not getting updates.

------
d0m
Watched the lectures a couple years ago while reading the book.. I highly
recommend it to everyone looking to Be A Better Programmer. Ironically, people
who would benefit the most from reading the book seem not interested by it.

------
freetonik
Not sure if this could be useful to someone here, but just in case – I've
created a Russian version of the first 1/5th of this course:
[https://hexlet.org/course/sicp/](https://hexlet.org/course/sicp/)

------
ika
This is the best course I've ever seen

------
leoc
Eyebrows for emphasis! :D

