Lecture 1A: Overview and Introduction to Lisp
MIT OpenCourseWare10 HN recommenders · 2019–2026
420K views · lecture · evergreen · Uploaded 2019-08-22
The first lecture of MIT's 6.001 (SICP) with Abelson and Sussman, giving an overview of the course and an introduction to Lisp. It argues that computer science is about managing complexity and abstraction, not computers.
HN people recommend the SICP lectures as a deeper, livelier route into the book and a formative course even for seasoned programmers.
53:22Ruby Conf 12 - Y Not- Adventures in Functional Programming by Jim Weirich
Confreaks
1:03:43How to Speak
MIT OpenCourseWare
57:151. Introduction to Human Behavioral Biology
Stanford
38:47RailsConf 2014 - All the Little Things by Sandi Metz
Confreaks
42:03The Soul of Erlang and Elixir • Sasa Juric • GOTO 2019
GOTO Conferences
1:01:39"Simple Made Easy" - Rich Hickey (2011)
Strange Loop Conference
1:21:52LEADERSHIP LAB: The Craft of Writing Effectively
UChicago Social Sciences
25:06"Making Impossible States Impossible" by Richard Feldman
elm-conf
20 comments from Hacker News
The original course videos are on youtube too! I found them a bit easier to watch than reading the book: [VIDEO]
I’ve included the halting problem, but omitted the Turing machine, because while ingenious, the latter is simply a hack to make proofs work and not a very good way to think about computation. Similarly, I’ve included distributed representations, but omitted backpropagation since while backprop works very well for a number of problems that are otherwise unsolvable today, it is not a particularly enlightening way to write programs. Also, the first 10 minutes of the introductory SICP lecture contains a livelier presentation of the idea in the quote: [VIDEO]
It’s funny you should ask that as I was just watching a lecture by Harold Abelson in which he addresses this exact question. [VIDEO] In case you don’t have the time or inclination to watch the video it can basically be summarized by saying the following. When the Egyptians first discovered geometry it was considered crop science as it’s primary application was for determining crop yields and when to plant and harvest. In the same way now that computers science is applied to computers today. But just like Geometry is really about farming, computer science is not really about computers. Professor Abelson goes on to explain that computer science provides a means to determine proofs for abstract mathematics a reasoning, so that we can understand with definitive proof things that until now were only theoretical.
Maybe more of the hype comes from the fact that its a Lisp. To get a feeling for the "magic" of lisp, I would suggest either watching SICP video lecs[0] or reading the book. I started learning lisp, almost the same time I've started learning programming with Java (college). Honestly I was thinking why they don't just teach us that, instead of Java at that time. Also Clojure is created by a fairly respected dude (afaik) Rich Hickey. His talks and Clojure design decision articles on the site are really insightful. Also this talk[1] also pretty good overview of different paradigms and `Clojure way`, imo. [0] [VIDEO] [1] [LINK]
Learn LISP/Scheme and lots of fundamental concepts you probably have a feel for, but in a far more profound way: 1. First watch the SICP series ( [VIDEO] ) 2. Then work through the book ( [LINK] ) If you really do the exercises (an hour here and an hour there), you can feel you brain getting wrapped around many core notions in very illuminating ways.
The real beauty is in how few operators you need to achieve maximal expressiveness in a programming language. It makes other programming languages seem extra. Highly recommend the SICP lectures [VIDEO]
Don't know if the "joke" originated with Abelson and Sussman but here's Hal Abelson talking about it: [VIDEO] "It's not about computers in the same sense that physics is not really about particle accelerators." I sort of agree, but I guess it depends on what we mean about computer science being about computers. We can do things now that were downright impossible when A&S recorded their Lisp lectures simply because we can think differently about what's reasonable with regards to time and space complexity. And, of course, Abelson himself jokes about everyone wanting a faster computer in a later lecture. Perhaps we're simply confusing CS with software development, which I suppose could be likened to confusing mathematics with accounting.
The class mentioned in the article was actually made available under Creative Commons by the MIT OpenCourseWare[1], you can see the entirely of the course in Youtube. I watched and cannot recommend it enough, even for seasoned programmers [1]: [VIDEO]
The beginning of this lecture (30 seconds in) by Harold Abelson (author of SICP - Structure and Interpretation of Computer Programs) explains why Computer Science is a terrible name here. [VIDEO] Not sure about the year.
Here is Harold Abelson discussing the topic in ~1986. His introduction to “Computer Science” has stuck with me for years. Interesting to see the lineage of the statement, it must have stuck with him as it has for me, when he first heard it. [VIDEO]
> Turing Machines, on the other hand, were instantly obviously mechanizable. It was clear that one could build a physical machine to run any Turing program without human input. Harold Abelson points out in one of his lectures [0] that computer science isn't about computers any more than biology is about microscopes. From that perspective, it is clear that Turing found an existing discipline of computer science and made major contributions to it. But it doesn't really seem right to say that he invented or founded computer science. [0] [VIDEO]
> Written for freshman at MIT, it is ostensibly an entry-level text. But it requires such a level of competence in math and physics, and the prose itself is so dense and archaic, that I couldn't imagine suggesting it to anyone. It’s also a complement to a course, the implications here being that chapters and examples are to be discussed in class and that a certain amount of lab-work has to be performed as well for the concepts to sink-in. But It’s not for everyone. I couldn’t see a bootcamp based on this book for instance. It does assume a fair bit of math and physics knowledge (or a curiosity for such) because it was written with engineering students in mind who, for some of them, were encountering a computer for the first time of their lives. [0] > One guess is intelligence signalling. That it is human nature for a person to suggest a book in an attempt make herself look smart rather than to best assist the person asking for a suggestion. This is clickbait. SICP has been used for decades and is extremely well regarded as an introductory book. Maybe the OP lacked the fundamentals required for approaching it. If the authos has a CS degree, that reflects poorly on the program he completed. > If you love challenging books, you are neither the norm nor the audience of this post. But the MIT freshman this book was written for definitely are. [0] [VIDEO]
Actual PDF from MIT: (I assume they’re happy to let anyone use it) [LINK] There’s the set of the 1986 lectures on MIT’s Open CourseWare: [VIDEO]
>Maintaining tree on text editors requires careful editing and strict practices, which human brains aren't good at. The "tree" will get broken at some point, but, in this school of thought, the recovery strategy is unclear and inconsistent at best. We've had editors that automatically do that since the 70s. Here's a live demo hot from 1986: [VIDEO] >The real tree, at the end of the day, is formed by line breaks and indents, not parenthesis. It isn't. You're not the type of person who lisp is for, which is fine. There are lots of languages suited for people like you. But I'd be curious to know what language you think uses nothing but line breaks and indents to describe its AST.
> Here's a live demo hot from 1986: [VIDEO] The process in the video still perfectly aligns with my description. Actually, I reached that conclusion by observing people writing Lisp code. That is, when you're writing Lisp code, that's exactly what people next you would see, no matter what you think. Also, trailing ")"s are clearly a burden, as people do spend their brain cycles to properly match them. > It isn't. You're not the type of person who lisp is for You sound like you're right in the middle of Lisp fever, which is fine. Everyone goes through that. > But I'd be curious to know what language you think uses nothing but line breaks and indents to describe its AST. You simply didn't get what I was saying. Even when all the parens were stripped off from a Lisp code, you can easily reinsert parens based on line breaks and indents. So people rely more on indentations for correctly putting parens, rather than being cautions w/ every single editing operation.
It's on-demand on YouTube[1] and an excellent course that is still very much relevant with very high production quality circa 1986. What makes it special is who is teaching it, which is the original authors of SICP. The course thus completely complements their book and is in the same style. The courses from later years are also on YouTube, but they don't feel the same. [1] [VIDEO]
Not even a second of thought: Sussman's & Abelson's SICP [VIDEO] especially the section on streams ( [LINK] ) It changed my outook on programming by pi degrees and I feel it is more needed then ever.
As Hal Abelson said back in 1986 in the original SICP lectures [1] while drawing `(+ 3 (* 5 6) 8 2)` and the corresponding syntax tree on the board: >"We're writing these trees ... and parentheses are just a way to write this two dimensional structure as a linear character string. Of course, when LISP first started and people had teletypes or punchcards or whatever and (the parentheses character structure) was more convinient. But maybe if LISP started today the syntax would look more like (a 2D syntax tree)." [1]: [VIDEO]
That's true. The Harold Ableson GIF of him scratching out the word Science, then the word Computer comes to mind. [VIDEO]
There are a lot of good books here: [LINK] I second the comment ( [LINK] ) recommending How to Design Programs (HTDP) and Structure and Interpretation of Computer Programs (SICP). The former has an edX course ( [LINK] and [LINK] ) and the latter has online lectures ( [VIDEO] ) Head First Architecture ( [LINK] ) is good. Reading about systems thinking would be useful. Learning programming languages that have been well designed is helpful. I suggest Programming Erlang: Software for a Concurrent World and Elixir in Action .