AntonRich

AntonRich

Started reading SICP on a whim

I don’t know what happened today. But I just started reading SICP which I meant to do for a long time.

The book itself:

I’m not even sure whether I’ll finish the book. Yet, I see that it is written in an interesting way. Which at least makes a good past time reading : )

Is there anybody who finished it?

P.S. I’m doing it with Racket and the package called sicp.
It’s nice that Racket has a repl.

Most Liked

gfqdjb

gfqdjb

For those who might not know, there’s a full course taught by the authors of SICP (Harold Abelson and Gerald Jay Sussman) that you can use to complement the book:

There’s also a JavaScript adaptation of SICP, published by MIT Press in 2022. You can read it for free here:

Just a heads-up: some people criticize the JavaScript version for using questionable coding practices, like overusing the ternary operator instead of standard if...else blocks. So the examples might not always reflect what you’d call “good code”.

If you’re looking for other solid introductions to computer science and programming, these books are often highly recommended:

Some folks even argue that DCIC is the best foundational CS book out there. I haven’t read any of them myself, so I can’t say for sure, but they’re worth looking into.

gfqdjb

gfqdjb

I think shifting between Pyret and Python was also a good move.

Just to expand on what I said earlier, SICP was the textbook for MIT’s former introductory programming course, 6.001. That course was taught at MIT for over 20 years until it was replaced in 2008. Since then, the introductory programming courses have been taught in Python.

Here’s what Gerald Jay Sussman, one of the authors of SICP and a former 6.001 instructor, said about the book/course being replaced and the switch from Scheme to Python:

Costanza asked Sussman why MIT had switched away from Scheme for their introductory programming course, 6.001. This was a gem. He said that the reason that happened was because engineering in 1980 was not what it was in the mid-90s or in 2000. In 1980, good programmers spent a lot of time thinking, and then produced spare code that they thought should work. Code ran close to the metal, even Scheme — it was understandable all the way down. Like a resistor, where you could read the bands and know the power rating and the tolerance and the resistance and V=IR and that’s all there was to know. 6.001 had been conceived to teach engineers how to take small parts that they understood entirely and use simple techniques to compose them into larger things that do what you want.

But programming now isn’t so much like that, said Sussman. Nowadays you muck around with incomprehensible or nonexistent man pages for software you don’t know who wrote. You have to do basic science on your libraries to see how they work, trying out different inputs and seeing how the code reacts. This is a fundamentally different job, and it needed a different course.

So the good thing about the new 6.001 was that it was robot-centered — you had to program a little robot to move around. And robots are not like resistors, behaving according to ideal functions. Wheels slip, the environment changes, etc — you have to build in robustness to the system, in a different way than the one SICP discusses.

And why Python, then? Well, said Sussman, it probably just had a library already implemented for the robotics interface, that was all.

Source: international lisp conference -- day two — wingolog

If you want to follow MIT’s current introductory programming path, these are the courses available on MIT OpenCourseWare:

There is also a full-semester version of 6.0001 with the same content but a slower pace:

All of these courses use the same textbook:

So there you have it, another solid book to add to your reading list.

AntonRich

AntonRich


Some interesting caveats I discovered as I ran this code.

-x here should be - x (with a space).

I couldn’t figure this out.

If I write -1 in racket it’s okay.
If I write (-1) it gives me an error:
application: not a procedure;
expected a procedure that can be applied to arguments

The cond is similar to cond in Elixir.

Where Next?

Popular General Dev topics Top

AstonJ
If you had the ear of a language creator, what would you say - what could they do to make a language that you would use? :upside_down_face:
New
AstonJ
Which apps do you think are killing it right now? Either from a technical perspective or ones that you like personally or feel have been...
New
chasekaylee
Hi everyone! I have been in the professional industry for ~2 years now coming from a boot camp. I started a base foundation by programmin...
New
AstonJ
It’s great to see how popular some of these channels have become - do you have any favourite YouTuber devs? Ben Awad Code...
New
Exadra37
I am a Linux user since 2012, more or less, and I always use Ubuntu on my computers, and my last 2 laptops have been used Thinkpads, wher...
New
AstonJ
Do the test and post your score :nerd_face: :keyboard: If possible, please add info such as the keyboard you’re using, the layout (Qw...
New
AstonJ
The dev world doesn’t sit still, in fact it is probably one of the fastest paced industries around - meaning to stay current we are conti...
New
AstonJ
Hi everyone… I’m so sorry about the delay in getting this thread up, I’ve just been so busy :see_no_evil: Are there any book clubs you’d...
New
TwistingTwists
Hello Fellow developers, I have been trying to wrap my head around How difficult would it have been to be a dev 20-30 years ago? I have...
New
AstonJ
00:00 The Year 2022 00:38 Web3 03:28 Metaverse 05:05 AI 06:22 Databases 07:31 JavaScript 09:58 Other Trends to Know WDYT - what wi...
New

Other popular topics Top

AstonJ
What chair do you have while working… and why? Is there a ‘best’ type of chair or working position for developers?
New
New
Rainer
My first contact with Erlang was about 2 years ago when I used RabbitMQ, which is written in Erlang, for my job. This made me curious and...
New
AstonJ
This looks like a stunning keycap set :orange_heart: A LEGENDARY KEYBOARD LIVES ON When you bought an Apple Macintosh computer in the e...
New
PragmaticBookshelf
Use WebRTC to build web applications that stream media and data in real time directly from one user to another, all in the browser. ...
New
PragmaticBookshelf
Build efficient applications that exploit the unique benefits of a pure functional language, learning from an engineer who uses Haskell t...
New
First poster: joeb
The File System Access API with Origin Private File System. WebKit supports new API that makes it possible for web apps to create, open,...
New
PragmaticBookshelf
Author Spotlight Jamis Buck @jamis This month, we have the pleasure of spotlighting author Jamis Buck, who has written Mazes for Prog...
New
DevotionGeo
I have always used antique keyboards like Cherry MX 1800 or Cherry MX 8100 and almost always have modified the switches in some way, like...
New
Fl4m3Ph03n1x
Background Lately I am in a quest to find a good quality TTS ai generation tool to run locally in order to create audio for some videos I...
New