8 ms·
Solving SICP
- loevborg 2y agoWonderful report! So now we know how long it takes to solve all of the problems: 729 hrs. SICP is hard to work through even if you're just reading but wow, the exercises are on another level! I wonder how it compares to, say, a physics or biology textbook
- somethingsome 2y agoYou can try it yourself with the beautiful 'Structure and Interpretation of Classic Mechanics' from Sussman. I don't remember exercises, but I expect they are as long as SICP, while maybe there is more emphasis on learning theory more than practicing coding
- AndrewOMartin 2y agoIs it worth it though? You could build a half-decent base in Factorio in that time.
- wk_end 2y agoThis is an interesting post in its way, but I hate how it's presented. The subject doesn't really call for this impersonation of academic rigor, since it's fundamentally an unscientific, subjective exercise - "How long did I, one particular computer scientist, take to work through this massive and occasionally open-ended task?" That's asking for an introspective essay, not a battery of tables and graphs. But I think this is a useful critique of SICP, for those trying to teach from it or in particular for those trying to self-study it: it wasn't really designed to be done front-to-back (contrary to the nonsensical justifications given here); it's not a realistic demand of any student, or even necessarily a particularly productive use of their time unless they intended to move into compiler development. Its problem sets occasionally give the illusion that SICP itself will teach you what you need to solve these incredibly difficult problems and perform these incredible accomplishments, which is partially what's responsible for its legendary status. Not recognizing that - and it'd be hard to blame a solo learner for that - can be incredibly discouraging when one finds that they can't do things with the tools SICP has given and blame themselves for not appreciating those tools rather than SICP for asking too much and giving too little.
- veqq 2y agohttps://lockywolf.net/2020-10-29_scheme-story.html https://lockywolf.net/2020-10-29_scheme-story.html Here he shows 2 reviews he gave up on, that he resorted to data because he didn't know how to put it in words.
- deleted 2y ago[deleted]
- 0cf8612b2e1e 2y agoIs there a modern SICP book? I tried to go through it once, but immediately got stuck because my math/physics was so rusty that I would have to spend more time researching the background than actually solving the CS puzzle
- noelwelsh 2y agohttps://cs.brown.edu/people/sk/ https://cs.brown.edu/people/sk/ and search for books. Maybe reading this will help: https://cseducators.stackexchange.com/questions/7478/which-book-should-i-choose-to-get-into-the-lisp-world/7481#7481 https://cseducators.stackexchange.com/questions/7478/which-b...
- hinkley 2y agoI'm still trying to decide of Fowler porting Refactoring to Javascript from Java is a good thing or a bad thing, but I'd kind of like to see someone port SICP to Python or maybe Elixir and see how it goes.
- ljlolel 2y agoHate to do this but https://chatgpt.com/share/67c78ef6-2418-8000-a40a-59d5b708bacb https://chatgpt.com/share/67c78ef6-2418-8000-a40a-59d5b708ba...
- -__---____-ZXyw 2y agoYes, I'm sure given 729 hours it'd come up with something useful.
- ForOldHack 2y agoThink of 1 1/2 hour commute. That is almost 2 years. It's a graduate level text. Way advanced. I would mention Knuth, but many problems in his books are still yealding PhDs. Way above my grade. There is a lot of problems I would like to look at hints. Kudos to your achievement.
- noelwelsh 2y agoSICP is a sprawling book. It's been rightly criticised; it is inaccessible without a strong maths and (electronic) engineering background, it's somewhat unfocused, and its code is archaic. But it blew my mind some 20 years ago when I worked through it over many train journeys. A more focused, more accessible book would be objectively better, but I think it would lose something. SICP, with its wild rambling through so many disparate topics, really did leave me feeling that I could make the computer do anything.
- deleted 2y ago[deleted]
- agumonkey 2y agothe expression / circuit bridge in chapter 5 is timeless imo
- closeparen 2y agoSome of the SICP exercises use math and circuits as the "business domain" you are programming about, but you don't need independent knowledge of those topics to write the programs. The requirements are pretty well specified. I barely survived Calc 3 and have never taken an engineering course. I was fine.
- Marazan 2y agoI found some of the exercises in building abstractions with procedures pretty inaccessible with implicit maths knowledge necessary. From building abstractions with data onwards they become well spec'd and straightforward.
- fsdkfdsf 2y ago[dead]
- mk12 2y agoKudos for finishing it. I’ve gone on a similar quest with https://mk12.github.io/sicp https://mk12.github.io/sicp, but I’m still on chapter 3. I keep getting distracted by new ways of improving the website rather than making progress in the book.
- masijo 2y agoGreat website! Hope you continue with it, love the layout
- zeckalpha 2y agoThere's probably more nuance with 2.29 than is led onto here. The problem appears straightforward and there seems to be simpler solutions out there than the one described in the article. Did the author overthink it or are the simple solutions not correct?
- deleted 2y ago[deleted]
- Jtsummers 2y agoI think the author may have overthought it, but it kind of depends on comfort with recursion and how focused he was when working on the problem. If you aren't comfortable with recursion, I can see it taking a while. It's basically a walk down a binary tree with some extra logic. You have to write two recursive functions, one each for (b) and (c) but they have basically the same structure with different return values. The function for (b) can be used for (c) (not the most efficient, but it does work). (d) requires minor modifications to the functions created in (a)-(c) so you can start with copies of the originals and make the change, I think it's a one symbol change in each function, or maybe two.
- housecarpenter 2y agoI think the author made a typo, and they actually meant to refer to 2.92, not 2.29. The table preceding the part mentioning 2.29 only includes 2.92. And 2.29 doesn't include the text "This is not easy!”, whereas 2.92 does.
- Jtsummers 2y agoThat makes a lot more sense. It also matches the times they record for the exercise. For context, 2.92 is: > Exercise 2.92. By imposing an ordering on variables, extend the polynomial package so that addition and multiplication of polynomials works for polynomials in different variables. (This is not easy!) 2.29 is what I described in my other comment, it's a pair of functions walking a binary tree with conditional logic based on if it's an interior or exterior node, returning either a sum or a true/false value. Which is not hard at all and their time was only 83 minutes. Versus their claimed time of 2400 minutes for 2.92.
- cess11 2y agoI think there are better ways to use SICP. In an institutionally educational setting you'd have peers and mentors to help figuring things out, for example. Going at it alone is a thing for people that are already alienated by waged labour or whatever, and likely not the most efficient way to learn its lessons, thought it might be the only obviously available. Personally I prefer to dip in for a short while once or thrice a year or when I have something I'd like to get better at that I know it teaches. Still, neat presentation.
- hadjian 2y agoThis post is a treasure. I have too many itches to scratch and would want to know at least a ballpark figure for the time investment. One suggestion for the already complete and detailed post: what is the personal/professional gain you get for your time investment? In this case maybe: „program design became clearer after having worked through SICO.“ or „I can discuss design more formally now“ or just „It was interesting and everyone talked about it, so I needed to know“
- criddell 2y agoI would think some parts of the book are more valuable than others. That goes for every book including classics like TAOCP and the compiler dragon book. It would be interesting to know what parts are pure gold and worth deep study and which parts can be skimmed or consulted as a reference.
- somethingsome 2y agoI was lucky enough to read it during my studies and to have a teacher that made very good Slides focusing on the most interesting parts. I think finding someone that guide you through the book allows to go way faster than alone. Now, while the concepts were extremely illuminating, I think following the book but doing the exercises in haskell is also a nice path. Haskell was another lecture following the one on SICP by the same teacher, and it uses most of the same ideas, sometimes formulated a little differently, but on a more modern language. I still remember my exam where we received ~6 pages double column of printed lisp, no comments. The code was a compiler, and we needed to change it so that it can jump back in time using call with cc. Difficult to do in 3h and on paper but very fun.
- nemoniac 2y agoThat's quite a time investment; about 3 months on a full-time basis. One detail intrigued me. The author has a PhD in Informatics but "had never used any programmers’ editor other than Notepad++". He credits being able to touch-type for some of his efficiency and went about learning a swathe of tools including Emacs and several diagramming languages. These diagram files and the OrgMode file are a valuable reference in themselves.
- tambarskjelve 2y agoI Have seriously read about 1/3 of SICP. Seing this level of dedication and actual time required is very reassuring. I found many of the exercises to be be deep, deep rabbit holes where you eventually had to set a time limit for moving on if you have any ambition actually completing the book. The depth seems to increase for every chapter! You could probably spend a lot more time than 729 hours and it would still be both a productive use of time and well worth the investment knowledge-wise.