Ask HN: I've tried to learn programming for 3 years, but I'm not progressing.
Title is pretty self-explanatory. I picked up python 3 years ago hoping to learn it on the side. Fast-forward to today, I can only seem to think in simple conditional loops and functions. People often tell me to make stuff, and when I do, I follow tutorials and simply copy what I'm told to write to move on. I find that in the end I haven't really learned anything, and even when I do try to understand every step or function called, etc, I get confused way too quickly.
It's weird: I'm stuck in this weird middle-ground where I can breeze through beginner exercises and understand them conceptually, but I've still yet to attain a higher more complex understanding of programming.
I've tried looking at open source and I get swamped in a sea of questions almost immediately.
What can I do to become better?
10 comments
[ 2.1 ms ] story [ 71.8 ms ] threadhttp://www.algorist.com/ (gentle, but most of the code is in C, however, which it doesn't sound like you know)
http://en.wikipedia.org/wiki/Introduction_to_Algorithms (Standard Thick reference)
http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming (One of those classics that everyone mentions, but very few have actually read)
Other than that, actually read through Wikipedia articles on various sorting and searching algorithms, trees, graphs.
Due to the nature of this forum, you probably won't get a magic solution to your slump -- you're past the point of cookie cutter magic bullets, which is a good thing.
However, my one piece of quick advice might be to, rather than just copy code, copy it and then try to understand _why_ those lines are there, even in the libraries and frameworks you use. You likely know what everything does at this point, but if you take it to "next level", you'll eventually be able to start making things from scratch.
That's not making stuff. You have to think about it yourself. Programming is not memorising syntax and copying other people. Programming is thinking about solving problems in a way suited to the tools you have. That is what you need to work on.