I'm going to start working through the SICP, as my first true venture into programming. Is there any background info I need to know? I know some basic algebra.
I'm going to start working through the SICP, as my first true venture into programming...
Other urls found in this thread:
functionalcs.github.io
youtube.com
archive.org
blog.30dor.com
edx.org
youtube.com
twitter.com
install gentoo
Stop wasting your time on bullshit meme functions and read TAOCP instead.
Different user, but how much math/other knowledge would I be expected to know before starting TAOCP?
I started HtDP awhile ago, but it seemed to be kinda math heavy in the beginning. So I put it on pause while I work on my math.
I am vaguely doing this course:
functionalcs.github.io
I've been catching up on math doing khan academy(reccomend for anyone reading this and looking for a good resource because they feel like a retard, I am breezing through even concepts I had never encountered before), the math books all expected way more knowledge than I had.
Also I am halfway decent at python, as I have been learning that for awhile. Just trying to get a solid foundation to not be a pajeet.
SICP requires no prerequisites besides High School math. Don't give up if you encounter things that weren't taught to you like proving by recursion, as you can quickly learn those things through the internet.
The increasing number of people that say it is nothing but a meme or that it is too difficult are unfortunate demonstrations of Holla Forumss decline. Working through SICP is time well spent especially if you have no experience in lisps.
I hope you're watching the lectures.
youtube.com
Induction*
Ok, thanks. How do I use that lectures? Watch then read a chapter?
That's how I started with it.
It's a Computer Science 101 book, so you don't need any prerequisites beyond school math. SICP is a book that uses Scheme, but it is not a book to teach you Scheme, you will have to pick it up as you go along with the book. I remember when I first started out I had difficulty remembering when to push parentheses around what, so if you find yourself in the same spot look up a quick and very basic Scheme tutorial or find a Scheme cheat sheet.
It doesn't really matter, the lectures are just complementary material. You can watch the lecture first, then read a chapter, or vice-versa. Personally I skipped the lectures and just read the book because I prefer the pacing of a book, but your mileage may vary.
It is a "meme" in the sense that you are very unlikely to ever use Scheme in the real world. But the principles and techniques learned form SICP can still be applied in other languages, so SICP should be taken as a book about CS itself, not a "how to become a Scheme master" book.
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
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
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.
incorrect. it teaches you how to write well-constructed programs, and it uses lisp to do it.
if you know how to write well-constructed programs then you can then write them in an implementation language better suited for the task at hand. but if you don't know how to write a well-constructed program it doesn't fucking matter how many languages you know.
the fact that you didn't think of
shows that you aren't nearly as knowledgeable as you think you are.
you're the best, user, I've been looking for these.
HtDP isn't really math heavy, you can do the online MOOC if you want videos and all that it's based on HtDP edx.org
Here are the youtube videos ; youtube.com