Everyone wants to know the one thing that made you a better dev. Though, I don't usually have an answer, I can for certain say reading this book leveled me up. Its not the one reason I am where I am today, but I can definitely say it contributed to making me stronger technically.
Story time
I have a mentor, who shall not be named, that told me to buy the book SICP(Structure Interpretation of Computer Programs). So I did.
Why did I buy it?
It introduced me to CS concepts I wasn't already familiar with and all of the MIT coursework is on youtube so you can follow the lessons chapter by chapter in the book (highly recommended).
Did I actually do the exercises in Scheme?
100% YES I DID. I know a lot of people will cringe at the thought of learning Scheme(Ive been made fun of more times than I can count) but its a great language to familiarize yourself with and its flexibility is amazing to learn some of these concepts the book goes over. Some popular languages are based on Scheme. Lisp and Clojure to name a few. If you want to do the challenges in Scheme and JS, go ahead its your adventure, choose your path. Whatever you decide, I do recommend actually doing and struggling through the challenges.
Did I actually finish the book?
Sadly, no I did not. I think I completed almost every challenge up to the last 30% of the book and I still got a lot out of it. Enough to write a blog post about it. One day I hope to restart it and finish it. I think theres value in re-reading books that influence you, this is definitely one of them.
How should I read it?
Slowly
I would spend days on 1 page, struggling with the challenges and drawing out my solutions on the bus ride home. It's ok to not progress fast, get the most you can out of every page. Put the book down, pick it up again, take breaks for months at a time. Use it as a tool you can continuously reference and go back to when you have the time.
What should I take away from it?
Patterns patterns patterns. I think the best thing that came from doing the challenges was learning how to apply problem solving patterns you learned. Eventually you'll start applying those patterns to your work.
What do I mean by pattern
I mean looking at a problem, analyze what youre given and see if you can see a relationship with your input. Look at the list of numbers, do they have anything in common? Can I apply reptitive logic to this problem to get my answer? What problems should use iteration vs recursion, why? What are the tradeoffs?
Happy Reading and Struggling!
Scott
Top comments (4)
The pragmatic programmer
It made me emphatic towards other programmers about code I write
Thanks for sharing! This has been on my list for a while!
I also loved SICP and intend to finish it someday! It turned me on to Racket as well, which I would love to explore more due to it's language creation capabilities.
Awesome!!!! Thanks for sharing and reading!