5 ms·
Programming isn't that easy. I've been trying to teach some friends who've expressed interest for years. It seems rote and simple to me, but even working with t
by agentultra 16y ago
Programming isn't that easy. I've been trying to teach some friends who've expressed interest for years. It seems rote and simple to me, but even working with them one on one doesn't seem to work. I've tried analogies, metaphors, and diagrams; I've tried to start from the high-level over-view and from the nitty-gritty. Some of them make a little head-way, but most have given up.
I think it has something to do with the cognitive load of assimilating language. A lot of what makes math hard is the language of math. Those that understand math find the language to be the easiest part and by far the most mechanical and simple to understand. Yet not everyone can pick up new languages. Most people as I understand it only have room in their heads for one or two. I would wager those that learn math or programming might have room for a little more. To learn a language is rote excercise, but not everyone can retain it for some reason afaik.
I think most people can learn what a "variable" is and might understand assigning a number or a "string" of letters. Yet even understanding arrays, hashes, and such low-level primitives is difficult. Going beyond that into functions, operators, generators, classes, objects, closures, data structures, memory allocation, pointers, references, etc... forget it. It takes a certain kind of person to be able to assimilate all of that and use it effectively.
Why else do we continue to invent languages "for people who cannot program?"
It's hard for a master to think like a student.
- j-g-faustus 16y agoSome people find programming easy. I was well into my twenties when I started programming, but I found the logic very natural - if this do that, otherwise do something else. A friend of mine was skilled in natural languages (she spoke several languages reasonably well) and wanted to learn programming (it's just another form of language, right?), but she gave up after a semester - she found programming languages to be hopelessly nitpicky with nonsense rules and no relation whatsoever to languages used to communicate between humans. For some segment of the population the basic premises of programming come easy, and it's just a matter of spending time enough to learn the details. Others struggle mightily with the same basic premises, it seems like they can't really switch to the "extremely narrow minded one step at a time and you can't substitute uppercase letter O for numeric zero even though the look the same" frame of mind that is a prerequisite for doing any kind of programming in any language. It's possible that programming is learnable by everyone, but it certainly seems to come more natural to a few. I suspect that the difference is more deep seated than we normally give it credit for, possibly even somewhat analogous to the mix of "fast twitch" and "slow twitch" muscle fibre (http://sportsmedicine.about.com/od/anatomyandphysiology/a/MuscleFiberType.htm http://sportsmedicine.about.com/od/anatomyandphysiology/a/Mu... ) that can give someone a natural advantage in certain kinds of sports.
- agentultra 16y ago... she found programming languages to be hopelessly nitpicky with nonsense rules and no relation whatsoever to languages used to communicate between humans. I find that funny. Has she tried learning Russian? As far as being "just another form of language;" I think the assumption is quite reasonable. However, like any significantly complex language it's easy to learn enough to get around and order dinner. But to be conversant enough to explain to someone how to perform a complex task in that langauge is quite another. I read somewhere once that people generally only have a certain amount of space in their brains in which to assimilate a language to such an extent.
- chc 16y agoA Russian won't throw an error (or anything else) at you if you conjugate a verb slightly wrong in a sentence where the meaning is otherwise clear, but a programming language will error out if you accidentally type two periods instead of one. Even the pickiest of human languages will generally be heard by listeners far more forgiving than a compiler.
- agentultra 16y agoYou still need to be a sufficiently proficient speaker of Russian to get to a point where a slight mistake of inflection is so easily forgiven. Similarily, once you are well versed in a programming language the compiler really stops bugging you about trivial errors in syntax and grammar. However, it still won't forgive you if you make them. Just as I won't forgive people when they make glaring mistakes in their use of English. Yes I can still understand them, but I have the advantage over a computer -- there are probably half a dozen non-verbal cues that I can use to decipher your intended meaning (and is probably why online discussions are so prone to turning into flame wars).
- evilduck 16y agoMy wife is a smart person. She's a seismic geologist, she can do calculus, she has no problem thinking in her domain's language and concepts, and memorization of information has never been a problem. She's asked me to explain basic programming concepts a few times. She can't or won't make the mental leap from basic algebra skills to variables and functions. Mentally unrolling loops or recursion, forget it. I don't even bother trying to explain data structures like stacks and heaps. How a programming language [that's mostly human readable] gets turned into machine interpretable information is black magic. She even took an intro to programming class as part of her degree, so I'm not the only teacher who's failed at the topic. It can really be frustrating at times because I have a respectable knowledge of geology and its industries and can conversationally hold my own with her and her peers, but she can't reciprocate at all with my peers. For my sanity, I've always assumed some people just can't readily grasp the abstract symbolism and recursiveness programmatic thinking requires.
- aristus 16y agoI think CS is so new that we don't quite have a grasp on what is truly hard and what is merely being explained badly. That's nothing against your teaching skills; I mean that our mental model of functions and recursion may be unnecessarily complex, or mixed in with other things, or perhaps depends too much on visual or symbolic thinking.
- arctangent 16y agoAs the grandparent said, "It's hard for a master to think like a student." This is perhaps the biggest obstacle for people who are trying to teach others to program - and so I agree with you here. However, it does seem like there are some people who will just never be able to pick it up - even though they are demonstrably smart in other areas.
- aristus 16y agoI don't buy that. That's like saying some people are smart enough to read, but just can't figure out writing. There will always be those with exceptional aptitude. But if you must be exceptional to simply understand a subject as broad as computer science, that's a problem with how we conceive the science. The Romans thought multiplication was really hard, too. Exponents were literally unthinkable. We know better not because we're that much smarter, but because we have a simpler and more powerful way to think about it.
- zipdog 16y agoI agree that it's not easy for some. I watched a group of intelligent people who'd forgotten all their high school math try and learn programming for 9 weeks and it was unproductive. Math builds abstraction upon abstraction, and programming does too. There was a study two years ago showing that learning maths literally rewires your brain (noticeable on scans)... so it's not just a matter of adding some more knowledge - it's a different way of thinking.
- foobarbazoo 16y agoThere is a very easy way to explain programming (in assembler, no less) by analogy to how children do basic mathematics -- addition and subtraction. That's because mathematicians do use algorithms, and concepts like "position" (indexing to us programmers), though they don't have names for them. If you explain programming using the concrete things every educated person knows, it is much easier to teach.
- waynecolvin 16y agoAccording to this paper http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf the greatest hurdles are usually: assignment and sequence recursion / iteration concurrency