I mostly taught myself to program. Did an intro class freshman year of college. Five years later my adviser had me tackle a certain math problem using the computer and to do that, I had to learn a fair bit of programming. I had the distinct impression of being thrown into the deep end and told to figure out how to swim.
I noticed that there’s a certain understanding that comes from actually applying a concept that I just didn’t get from reading the book and working through the examples. I eventually picked up the habit of looking for a nontrivial application whenever I came across new programming concepts. Oftentimes the application I had in mind would require filling in gaps in my knowledge. Throughout I’d use a lot of things I didn’t really understand (by modifying existing code) to get things done, and then when I’d come across that part of the theory everything would just seem to click.
I figure that most programming techniques were invented to deal with specific problems, and understanding those problems gives a lot of intuition about the techniques.
Another thing I hate: when people say, “you just have to practice”. I’ve asked people, “how can I get good at X?” and they’ve responded, “you just have to practice”. And they say it with that condescending sophisticated cynicism. And even after I prod, they remain firm in their affirmation that you “just have to practice”. It feels to me like they’re saying, “I’m sorry, there’s no way to efficiently traverse the graph. It’s all the same. You just have to keep practicing.”
As Euclid once said, “there’s no royal road to geometry”. Practice means making mistakes, figuring out your misconceptions and gaps in understanding, then grappling with the material until it finally makes sense.
I mostly taught myself to program. Did an intro class freshman year of college. Five years later my adviser had me tackle a certain math problem using the computer and to do that, I had to learn a fair bit of programming. I had the distinct impression of being thrown into the deep end and told to figure out how to swim.
I noticed that there’s a certain understanding that comes from actually applying a concept that I just didn’t get from reading the book and working through the examples. I eventually picked up the habit of looking for a nontrivial application whenever I came across new programming concepts. Oftentimes the application I had in mind would require filling in gaps in my knowledge. Throughout I’d use a lot of things I didn’t really understand (by modifying existing code) to get things done, and then when I’d come across that part of the theory everything would just seem to click.
I figure that most programming techniques were invented to deal with specific problems, and understanding those problems gives a lot of intuition about the techniques.
As Euclid once said, “there’s no royal road to geometry”. Practice means making mistakes, figuring out your misconceptions and gaps in understanding, then grappling with the material until it finally makes sense.