Tell HN: Trying to learn from SICP makes me cry

17 points by adentral ↗ HN
Hello HN,

I felt like I needed to vent somewhere while breaking from my SICP self-study session.

Just for some background, I do not have a college degree because I have always felt like the schooling system is not a place for me to thrive. I am 23 now and 3 years ago I have decided to learn programming on my own and I have been working as an iOS Developer for the past 2.5 years. Gradually I have come to realize that whenever I am getting stuck on something, it most likely stems from having no background in CS and having little to no information about how the computer, interpreters, compilers, programming languages etc. work. Neither I am able to solve algorithmic challenges - if I do try to solve them, it takes insane amount of time for me to get some understanding on how to approach the problem. Professionally speaking, while doing day-to-day iOS Dev agenda, no one even expects me to have some profound knowledge of CS concepts, as mostly iOS has been just a bunch of Apple Library calls, some networking and then layout, animations etc.

Having being immersed more and more into coding, I really would like to expand my knowledge and understand how the stuff in the background really works. My motivation here is to master this field to at least partly understand what I am doing and why I am doing things and also just out of pure curiosity, and also, frankly, being able to financially provide for my mom, that hasn't been as lucky as me to end up in such a privileged position and also for my (possible) future family - spouse, child/ren or other people in need. I might be wrong here, but I am convinced that having a solid theoretical and practical foundation would make me a better developer, having easier time time to learn other languages and technologies and would make me approach problems in a more efficient manner.

After reading through various forums and blogposts I have come across SICP as an important resource for understanding how interpreters, recursions, and functional languages work among other concepts. I have been going through that book for the past 2 months and currently I am in the middle of the second chapter. During my studying process I have also been watching lectures Berkeley CS61A lectured by Brian Harvey to not rely solely on text. Although I have skipped just several really math heavy exercises and have done the rest of them, learning from this book literally made me cry today. Most of the exercises, even the seemingly easy ones, take me immense amount of time to solve, making me demotivated and full of doubt and leaving me exhausted, in need of taking a day of break to continue further. I generally don't think my intelligence (in a sense of the speed of understanding complex concepts) is any good/high enough to keep on learning CS/programming. Little by little I am starting to doubt my abilities, whether I really should be doing programming, since I have such a hard time understanding things.

I do love programming, I do love learning new things and concepts, but I simply feel like I am not the right person to do it because my thinking is just way too slow/limited.

Having said that, I am genuinely very grateful and very privileged to be in this position, tackling these kind of problems, I do understand majority of the population has not been as lucky as me.

Thanks for reading this far and for those who are in a similar situation, I just want to let you know that you are not alone and I really do wish you can get through whatever you are struggling with study/work-wise.

18 comments

[ 4.2 ms ] story [ 35.0 ms ] thread
You should reconcile these:

"I have always felt like the schooling system is not a place for me to thrive"

and

"I do love learning new things and concepts, but I simply feel like I am not the right person to do it because my thinking is just way too slow/limited"

Given these two statements, and the struggles you're going through -- why not reconsider/rethink the first statement? You don't have to pursue a degree, but some formal education might actually help you.

Thank you very much for the comment. I will contemplate my decision when it comes to formal education. Also what I particularly found intriguing is "You don't have to pursue a degree, but some formal education might actually help you." It's true that studying college from start to finish is not the only option.
I'll try to state this without bias, which feels a little difficult (but feel free to read into this however you like):

If you started with iOS development, it's not very hard to believe that you struggle to pick up fundamental paradigms of computing. Apple has long been about abstracting things away from the user, and over time that philosophy has started to spill over into the way they treat development too. Some people love it because it makes it so they don't need to learn the boring stuff, and other people despise it because you never get to solve truly interesting problems and are ultimately at the behest of a multi-trillion-dollar corporation. One thing is certain though: you aren't getting the full picture.

SICP is about expanding your mind as a developer, which is a painful process that most people don't notice as they learn to program over extended periods of time. Not understanding it doesn't make you dumb, it's just particularly heady stuff that's intended to stick in your brain. There's a reason why people treat SICP like a bible; it's an allegorical exploration of computer science, not necessarily rooted in raw truth, but more intended to help you realize the awesome scale of the modern computer and the people who program it. Being humbled by that book is just part of the process.

Thank you, I appreciate your opinion. I very much feel that the journey has been very painful, yet rewarding in a sense. Also, as much as I tend to say my memory is bad, truly a lot of concepts have stuck with me from the first chapter even when it's more than a month since I have learned about them. Probably it's due to the fact that SICP going forward has been continuously building on the previously attained knowledge.

Thank you again!

SICP is a wonderul resource, but people already used to (not to say "indoctrinated" with) some knowledge from other sources may struggle to un-learn some old habits, or at least retain an open mind to allow for exploring alternative ways.

Note that the book teaches 1. a new language LISP/Scheme, 2. a new programming model (functional programming) and 3. a core computer science concept in various disguises (abstraction) - all at the same time! Some of the chapters require additional knowledge from other areas (hardware, compilers) or benefit from it (software engineering/API design), either as prerequisite or taught in parallel courses.

I found the book very valuable as the textbook at undergraduate level, but as part of a formal computer science university degree, where one gets help from lecturers, tutors, fellow students. It's definitely a demanding text for auto-didacts already stuck in their own (or Apple's) ways.

Thank you for the comment! I think I should look into some complementary resources in parallel to SICP after having read your insight :)
I'm in the same boat as you but I work on web development instead of iOS.

I do not have a CS degree but I do have an engineering background. When I started reading SICP a few months ago, it felt refreshing. But I slowly lost interest as I progressed, for two reasons.

1) I had trouble understanding some math concepts mentioned in the book.

2) The exercises were getting difficult and I felt demotivated for not being able to take some extra time to solve them (I already have a regular day job).

I realised I had to get better at math first before learning more CS stuff.

So, now I'm learning discrete math for CS from MIT's 6.042J. I'm enjoying it so far.

Thank you for the valuable insight. I really am in the same boat regarding SICP.

> CS from MIT's 6.042J Thanks for the recommendation. I will check it out. I think that having a better understanding of math would surely help me out in the process of going through SICP.

i don’t think it’s that you’re dumb, i think it’s that you’re missing background knowledge the author expects, so it will take more time for you to understand.

I feel like I understand CS concepts and programming language theory well. But I’m having a hard time learning machine learning. Most of my experience is in software development and discrete math, where it looks like ML requires more calculus, linear algebra, and statistics. The formulas which use vector and matrix multiplication go over my head because i haven’t really internalized matrix algebra yet, these formulas are supposed to be trivial and intuitive but to me they’re not.

> i don’t think it’s that you’re dumb, i think it’s that you’re missing background knowledge the author expects, so it will take more time for you to understand.

I really do hope it's the case :). But regarding missing background knowledge the author expects it is definitely true!

Thank you for replying and I wish best of luck with your efforts!

I found watching the "lisp lectures" way more enlightening than that inscrutable book... The book assumes all sorts of geometrical and mathematical knowledge which I don't have. And when you don't have that, yet attempt the exercises, you are basically tasked with reinventing the field of mathematics from scratch. Given it took our collective species a few thousand years to get where we are now this is unreasonable for a single person to pull off in a lifetime.

The lectures however focus on Lisp and recursive problem solving, and abstraction itself. Basically everything the book is, but in total they take less time, and are (for me) more effective.

https://www.youtube.com/playlist?list=PLE18841CABEA24090

For perspective, SICP was written to accompany a course for MIT students. Students who not only had the background for MIT, but access to its authors, MIT grad student teaching assistants, and soft resources like study groups. Students who were not usually working full time jobs.

On top of that, it was written to challenge even the best of those students (including grad students).

SICP is really really hard for just about everyone...at least in parts...by design. That's what makes it a good book. You can keep going back to it for years and years and learning something as you gain relevant experience and knowledge.

The good news is nobody cares how long it takes you to learn from it, and anything you learn from it is valuable even if it is just a small part. You have decades to open it and read from time to time. There's no test in a few weeks and no grade in May.

It might be worth checking out the original Ableson and Sussman lectures on Youtube: https://www.youtube.com/watch?v=2Op3QLzMgSY

It is also worth considering How to Design Programs as a supplemental text. https://htdp.org/ and moving into the Racket ecosystem.

Good luck.

It's a challenging book and really pushes abstract thinking on a level rarely encountered.

Yes, it's an introductory text in some sense because it introduces you to a dizzying array of subjects in computing, but imo, it's not the equivalent of a typical introductory course in Chemistry or something. It's hard, especially if the things it goes over are new to you, and I think few people would think failing to grok it the first time around implies anything about your suitability as an engineer.

SICP is known to be quite difficult - it was originally written for MIT students who also had college-level training in other math, science, and engineering subjects including calculus - as I recall SICP assumes you know something about these.

Most of the exercises, even the seemingly easy ones, take me immense amount of time to solve - This is not unusual for college-level problems in science and engineering. If you can solve them at all, that's a reason for pride, not discouragement.

To restore your confidence, you could have a look at Brian Harvey's textbook Simply Scheme. It is intended for students from a wider range of backgrounds and does not assume a heavy science/math background.

By no means are you dumb. Some corollary of Dunning-Kruger Effect -- your frustration is probably proportional to your ability to think and to operate in this domain.

My summer project for myself last year was making a big working desk and a rack-mount setup for a workspace at home. I listened to Hal Abelson and Gerry Sussman, recording from 1989 (I think), when they taught on site for HP engineers; SICP in a week. I still had some surprises, things clicked for me.

https://overcast.fm/+Do0X1PN6k

https://groups.csail.mit.edu/mac/classes/6.001/abelson-sussm...

I was very fortunate to have been in the first or second batch of CS61A students that Brian Harvey taught at Berkeley. It's still my favorite class, and although it was challenging, I had far more difficult experiences with calculus.

Calculus almost broke me. The first time.

I completed some of the SICP exercises on morning train commute. Four years after seeing them for the first time. Five years after that, I returned to college for another try at linear algebra, having actually flunked it the first time.

All these people seemed to just cruise on by. But actually, everyone hits the wall at some point.

I have a PhD in programming. I gave up on SICP after chapter one.
I read SICP when I was learning to code a few years ago, and for me it was a life changing / transformative book. I remember the feeling of what you're describing exactly. It's humbling to work through. But it is worth it. My ability to think recursively, solve problems, and understand and pick up new programming languages is leagues above where it would be otherwise.

I have two suggestions.

The first is, if you haven't realized this already, don't struggle with the problems. Think about them for a few minutes, and if you can't solve them, look up the answer and try to understand it. A few days later, try it again. After a few times, you'll automatically be able to solve the problem, and wonder why you thought it was so hard. After enough problems, your knowledge will sort of magically generalize.

The second is, while I love the book, a lot of its explanations of concepts are very flawed, and can make anyone feel like an idiot not because the concepts are hard, but just because of the language used. That's because a lot of the ideas in the book are self-referential, so they're hard to explain in a linear book. And rather than give ambiguous explanations the authors try to be very precise, but that means using specific words you may not have the background yet to understand. Once you work through more of the book, you'll have the context to go back and actually understand what the hell they were talking about in the first few chapters. So on your first read-through, I wouldn't sweat understanding everything, just try to get some of the high level ideas. Then read it again with more context and it will feel much easier to actually understand the details. I'm glad I didn't take the course at MIT, because I wouldn't have been able to do this, but I think it is really the key to understanding the content.