This may be subjective and likely to be closed but I still wanted to know if its really helpfull to read Structure and Interpretation of Computer programs.

Structure and Interpretation of Computer Programs

The book does not use Java. Not that I wanted to learn Java. I am just curious as to know if it be will useful read to be a better programmer and what are the things that I can gain from the book or are their any other alternatives to this book more suited to Java programmers?

  • 34
    For starters, try not to position yourself as a "java programmer". Or as "whatever-language programmer". It's a dead end. Be just a programmer instead. And then, SICP is going to be extremely useful. Probably, the most useful reading out there.
    – SK-logic
    Sep 18 '12 at 8:37
  • 3
    It is very tough, that's why you read it. Sep 18 '12 at 13:25
  • 4
    Start at Chapter one, go page by page, work all examples, do not progress until you understand each page and each example. The answer key is online. Sep 18 '12 at 14:17
  • 2
    @JonathanHenson and when you get to the end, stop
    – jk.
    Sep 18 '12 at 14:20
  • 3
    Yes, you do need to learn Scheme. However, one of the reasons the book uses Scheme is that you can learn the entirety of Scheme in about a day if you have never programmed before or about 10 minutes if you have. After all, SICP is a book for complete beginners, it assumes absolutely no programming knowledge whatsoever. Sep 18 '12 at 15:17

Well, I don't know if this book will help you, but when I worked myself through that book about 20 years ago, it definitely improved my programming skills (independently of any programming language). And I guess especially a Java programmer will get some new insights he/she won't get by sticking only to Java.

Joel Spolsky 2005 wrote a nice article about Java and SICP which may be of interest for you:


  • +1 Best possible answer to what very nearly amounts to a book recommendation question. Sep 18 '12 at 13:29

I think Structure and Interpretation of Computer Programs is a great book to read. However, there are are a couple of problems with it.

The biggest problem in my experience is that, while the book requires absolutely no programming knowledge, and is geared to complete newbies, it is geared to complete newbies who study at MIT. And so, while it does not assume any programming knowledge, it does assume quite a bit of domain knowledge, e.g. in the fields of electrical engineering, physics and math. Note: these have nothing to do with the concepts being taught, they are just needed to understand the exercises and examples.

Greater people than me have explained it much better, in a cleverly titled paper The Structure and Interpretation of the Computer Science Curriculum. Thankfully, they aren't just whiners, they wrote their own book instead: How to Design Programs. If you think about reading SICP, you might want to read HtDP first: it covers much the same ground as SICP, but it only assumes average high-school level domain knowledge. (In fact, it is written to be taught to high school kids.)

After you have finished HtDP, you can still go back and read SICP, since now some missing bit of domain knowledge won't be as harmful anymore because you have seen the concept before.

Note: there is a draft for a second edition of HtDP, which you might want to read instead of the first edition. The material about imperative programming has been removed, and is going to be covered in the as-of-yet unwritten second volume How to Design Components, but you can take those either from the first edition or from SICP or both.

  • Might I suggest an alternative to SICP: Concepts, Techniques, and Models of Computer Programming
    – Eden
    Dec 1 '17 at 15:08
  • @Eden: CTM is very good, I agree. I don't think of it as a book for teaching programming, though, like SICP, HtDP, and Concrete Abstractions. But it definitely belongs on the "books that make you a better programmer" list! Dec 1 '17 at 18:02

From my understanding SICP, it is more focused in areas of functional programming, including recursive programming, and strong introduction to CS - which is a bit hard to grasp to a new programmers. Another point, it is prepared and instructed in for MIT, and some good fundamentals in engineering field, math, physics is also needed to find this book useful.

I would advice a good set of books where each focus on different aspects of software engineering:

  • Code Complete 2 - focuses on the processes of software engineering.
  • Clean Code - focuses on coding in the small. How to write classes and functions.
  • Pragmatic Programmer - focuses on working within a team producing software.

More detailed description of mentioned books above and other once can be found from the following references:

  1. How to be a Programmer with 10 Simple Books
  2. Best books for beginning programmers

Please, feel free adding to the list as it is not ideal one :)

Edit: In choosing above mentioned books, and determining priority of how to read them, it is really comes down to the purpose on what you are primary trying to do or learn.

  • 7
    I agree with the suggestions in the (implied) context - but your answer would be even better if it actually mentioned what you don't like (or do like) about SICP. Sep 18 '12 at 9:27
  • 4
    Apples and oranges comparison - all the books you mention are excellent books about software engineering. SICP is more about computer science - what computer programming is conceptually.
    – Nate
    Sep 18 '12 at 12:22
  • 1
    This answer feels too much like an answer to a recommended reading list question. Which I do not believe fits well with the aim of the Stack Exchange sites: meta.stackexchange.com/questions/113678/… Sep 18 '12 at 13:26
  • @Nate, it is not apples and oranges to compare, it is all about CS. Even-though, each of the books share some common topics.
    – Yusubov
    Sep 18 '12 at 13:40
  • 2
    @MadKeithV, i agree with your comments. I have put my thoughts on SICP in the first line.
    – Yusubov
    Sep 18 '12 at 13:42

I'm going to go out on a limb here and say - probably not a good read for most people - whatever language.

Like Knuth it's a good book to have read. However even assuming you are a hot-shot MIT ugrad it will still take the best part of a year to read properly, and thats with lecturers and TAs helping.

Are there other books on software engineering you could read in that time that would be of more value? Are there other languages you could learn in the time ?

edit Just to expand a little:
Software engineering is engineering, it's all about optimisation. Your task is to maximise your knowledge for a given time+cost budget.
SICP is a high level introduction to programming through a functional language. The reason it uses a functional language is that it's easier to describe a lot of mathematical concepts of programming in functional languages than in procedural ones and a lot easier to read than formal logic.

There is also a certain amount of posturing ie. "You aren't really a programmer unless you read SICP", or Knuth, or can program in Lisp, or C, or x86 assembler. That's normally easy to refute; ie. you can't be a real programmer unless you know Cantor's work on set theory and Maxwell's equations and are familiar with hole mobility in semiconductors.

  • There were other books on my wish list like Code Complete 2, Clean code, Pragamatic programmers, Refactoring etc. But these were more on java or at least OOP centric unlike SICP. Sep 18 '12 at 4:26
  • 5
    That's why I would read them first Sep 18 '12 at 4:27
  • 8
    I debated downvoting this answer, but decided just a comment was better: I agree that SICP is not a good read for most people, especially early on, but I do believe that a great developer should be able to handle this book, and will learn a great deal from it. Great developers aren't "most people". It's a good filter book. Sep 18 '12 at 9:29
  • 4
    I disagree (to a point) - a well-rounded developer who has SICP under her belt can always still learn about the Unix environment etc. I'd rather hire a developer with no platform experience but SICP and retrain them, than someone who doesn't get SICP. Sep 18 '12 at 13:11
  • 1
    @MadKeithV - Yes and for the same reason I hire Maths/physics Phds with no coding experience. But if you are working full time as a programmer, and especially a beginner, there are simpler books that are perhaps better (value/time) than Knuth or SICP or reading Turing's papers. Sep 18 '12 at 13:56

Are you planning on being a "JAVA programmer" for the rest of your life? Then there are probably better books to read. If you want to be a good programmer in general then it is an excellent read. Here is why. There are certain tools every good programmer needs in their toolbox. One is a thorough knowledge of data structures and algorithms (if you don't believe me, go interview at Microsoft, Google, Amazon etc...), accompanying algorithms is complexity analysis, recursion, and a sound understanding of pointers doesn't hurt. When it comes to algorithm analysis, recursive processes, and the functional paradigm in general, I can't think of a better or more challenging book than SICP.

Not the answer you're looking for? Browse other questions tagged or ask your own question.