3 ms·
Learning to program means mastering lots of new abstractions, becoming comfortable with them, and being able to use them. And I know that if I encounter too man
by mdemare 19y ago
Learning to program means mastering lots of new abstractions, becoming comfortable with them, and being able to use them. And I know that if I encounter too many new abstractions at a time, my mind simply shuts down. This happens each time I try to learn Haskell for instance. I'm following a tutorial, and suddenly I encounter this:
parseNumber = liftM (Number . read) $ many1 digit
And then I've hit a road block. This can be solved by better teaching materials. Most education in general is simply bad and terribly inefficient compared to what it could be (but I'm working on it...)
Another thing is attitude. Everyone programmer encounters really hard or confusing problems all the time - the trick is being really stubborn, and never give up. That doesn't come naturally to most people.
Finally, most things we learn, we learn by imitating others. Our brains are hardwired to learn that way, but it's not very helpful for learning to program.
- cowmoo 19y ago"Finally, most things we learn, we learn by imitating others. Our brains are hardwired to learn that way, but it's not very helpful for learning to program." I would like to disagree (respectfully). Although in most CS programs, algorithms and PL classes tend to be heavily proof-based and end up being exercises in tedium. As a TA for a intro. programming class, I would like to present the latest problem-set to students as some kind of narrative, sketch out what makes the problem interesting and the natural flow of the program structure that follows the problem, that comes spontaneously to the mind. So in a way, people are learning by imitating/doing, and not grinding out the hard theory first. Honestly, I don't think everyone here learned for the first time about loop's, as according to proving that loop variants hold on during the iterations; or convinced themselves the way that various data structures work, by way of category theory. You learned it by doing, and you know that it just intuitively works. While functional PL is harder than Java, I think it works the same way; you change the way you think and in turns, the way you program, by doing.
- BrandonM 19y agoMaybe that is one thing that makes CS more difficult than other areas... that you must learn by doing. We really are hard-wired to learn by imitation (as the original commenter said). That is how we learn language, social norms, etc. CS, however, is definitely something that you need to learn by doing. Interestingly, that may also explain the idea of "computer geeks". If CS selects for people who learn by doing instead of by imitation, you are more likely to see those types of individuals. If social norms and social interaction is learned by imitation, those are abilities that are harder to learn for someone who is more inclined to learn in another way.