Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Concepts that surprised you when you read SICP?

Tags:

sicp

SICP - "Structure and Interpretation of Computer Programs"

Explanation for the same would be nice

Can some one explain about Metalinguistic Abstraction

like image 323
yesraaj Avatar asked Dec 10 '08 08:12

yesraaj


People also ask

What does SICP teach you?

SICP is about standing back from the details to learn big-picture ways to think about the programming process. It focused attention on the central idea of abstraction -- finding general patterns from specific problems and building software tools that embody each pattern.

Why should I read SICP?

Structure and Interpretation of Computer Programs (SICP) is considered one of the best books to learn programming. You will find it on different lists. It's the very first book recommended for self-learning (you can see other options here).

Is SICP still relevant?

Not really. There are other books that take different approaches to teaching, such as How to Design Programs, which was specifically created to address certain perceived shortcomings in SICP, or Concrete Abstractions, but SICP is still a timeless classic.

Is SICP a good book?

If you think I'm in favour of SICP, you're absolutely right; it's such an excellent work and I highly recommend it. SICP is one of the most important books in our field. The book is freely available online . You'll even find recorded videos of the lectures here .


1 Answers

SICP really drove home the point that it is possible to look at code and data as the same thing.

I understood this before when thinking about universal Turing machines (the input to a UTM is just a representation of a program) or the von Neumann architecture (where a single storage structure holds both code and data), but SICP made the idea much more clear. Scheme (Lisp) helped here, as the syntax for a program is exactly the same as the syntax for lists in general, namely S-expressions.

Once you have the "equivalence" of code and data, suddenly a lot of things become easy. For example, you can write programs that have different evaluation methods (lazy, nondeterministic, etc). Previously, I might have thought that this would require an extension to the programming language; in reality, I can just add it on to the language myself, thus allowing the core language to be minimal. As another example, you can similarly implement an object-oriented framework; again, this is something I might have naively thought would require modifying the language.

Incidentally, one thing I wish SICP had mentioned more: types. Type checking at compilation time is an amazing thing. The SICP implementation of object-oriented programming did not have this benefit.

like image 139
A. Rex Avatar answered Sep 21 '22 17:09

A. Rex