I'm going to start working through the SICP, as my first true venture into programming...

It's a meme because it's cancer. It teaches you to think like a mathfag rather than an engineer. It has a heavy emphasis on solving problems with recursion as you'd do if you were a 300k starting type, but we avoid recursion (in professional projects) like the plague today as it's either slow and blows up the stack or is a tail recursion timebomb waiting to happen when Pajeet adds a debugging statement that causes the compiler to silently not optimize it as tail recursion due to a chance of aliasing and everything explodes for a subtle reason.

Okay, what should I do instead?

Holla Forums will hate this, but start with Javascript and Python. They're much closer to how one should program today, there's a ton of accessible material to learn them, you can learn by reading other people's code, and you can make useful and relevant things with them. And even if you end up as a C++ erry day guy like me, you'll still use them.

If you say so

It actually tries to teach you orders of growth and the disadvantages in space and time incurred by using recursion. Recursion is just one of the ways it teaches you to solve problems.

Should i read it if i have experience in programming?

You sound like you never made it past the first chapter. Chapter 1 is all about building abstractions with procedures, chapter 2 is about building abstractions with data, and chapter 3 is where state and time come into place.


You should still read it, but was with everything in life there are many different way to solve problems. SICP should not be the only book you read, but it should be one of the books you read.


Sure, it will give you a different look on things than what you might have been used to. All of the principles discussed can still be used in other programming languages. For example, it really helped me understand functional programming, and I can apply this knowledge in languages like Python which support first-class functions.

Don't let user and his appeal to professional programming practices™ (Just consider how awful most professional software is these days) deter you from reading SICP, the book remains one of the best introductory CS texts there is. SICP is different because it really forces you to understand both how programs are evaluated by the computer, and how they can be understood by humans.
You won't get this from simply reading a JS or python tutorial. They'll let you string together some code to do novel things, but you'll be stuck wallowing in the bog of misunderstanding for a while. This is where many beginners get trapped and you can easily tell when someone doesn't really know how programs work and is just trying to perform the right set of rituals to get it functioning adequately.

However, if you are just learning programming to put together some scripts or small utilities, most of what's written in SICP will not be relevant and you should consider another avenue. There's nothing wrong with this either, there are many other noble purists unrelated to computing and knowing just a bit of practical programing can be immensely useful.

If you do decide to go on with SICP I recommend watching the lectures here in conjunction with reading the text. They're supposed to be quite good and are much more modern (2011) than the ones from the 80s that are generally suggested. It should give a broader perspective on the subjects raised.
archive.org/details/ucberkeley-webcast-PL3E89002AA9B9879E?sort=titleSorter

Note that SICP is entirely promoted by weebs.
You're recommending a garbage collected language that does multi-precision math and has no native integers (fixnum isn't often word sized and differs per implemenation!) to teach someone what a machine actually does? If you add two numbers in javascript it just disassembles to a faddp. Have you ever disassembled the horrific spew that lisp-likes produce for addition? Would you even know how to? Have you seen the freakishly huge executables compiled lisp-likes generate?
$ buildapp --eval '(defun main (argv) (write-line "Hello, world"))' --entry main --output hello$ ls -alt hello-rwxr-xr-x 1 user anon 45056048 Aug 11 20:26 hello
How does that help someone understand what the machine is doing? That's a fourty fucking five megabyte 'Hello, world' and I have no goddamn idea what the machine does with that.

SICP is not a book about how programming languages are implemented and represented on the machine (although the final chapter is an introduction to this topic), it's a high-level view of how they are evaluated and constructed by humans. While computer architecture is certainly a valuable thing to know and I would recommend studying it after SICP, it's orthogonal to the practice of programming.

As for the efficiency of Lisp, it depends on the implementation, SBCL can compile Common Lisp down to quite terse x86 assembly with the right optimisations. This article is a nice introduction to the topic.
blog.30dor.com/2014/03/21/performance-and-types-in-lisp/

Your Hello World example is 40mb because the meta-programming abilities of Lisps mean that basically the entire runtime must be packaged with any given program. You can strip it down considerably if you know that you won't be using this functionality.