http://www.perlmonks.org?node_id=379335


in reply to How to abate the Ubiquitous Fear of Programming

But not everyone can do it well.

Have you ever gotten completely unfollowable instructions from someone about how to get to a place they know? I would suspect that lack of attention to detail while describing an algorithm would apply both to giving directions to a location and to writing a program. Hence, those people would probably also be bad programmers.

To be a good programmer, you have to consciously and reflexively know how to solve a problem (or at least the meta-problem), know how to reduce it to things that the language can represent, and then construct a representation of the solution steps in that language. Most non-programmers I know cannot do one or more of those steps with any precision.

It's amazing how many of us programmers take those skills for granted. Yeah, we think "well of course, everyone can do what I do easily!" But I have good counterexamples: I cannot remember pictures, nor can I construct good art. Yeah, it seems most people can do both of those, but then those people also take those skills for granted. So I'm not so naive as to presume that the skills I take for granted are also universal.

-- Randal L. Schwartz, Perl hacker
Be sure to read my standard disclaimer if this is a reply.

Replies are listed 'Best First'.
Re^2: How to abate the Ubiquitous Fear of Programming
by Your Mother (Archbishop) on Aug 02, 2004 at 17:39 UTC
    To be a good programmer, you have to consciously and reflexively know how to solve a problem...

    This is true, but only a truism by the hour. A bad programmer can write a good program--just not on a deadline or in an area than isn't personally compelling enough to put in the effort required. A bad writer can write a good story. An awful artist can make a beautiful painting.

    I cannot remember pictures, nor can I construct good art.

    Maybe can't today, but you definitely could. Anyone with a creative, problem solving mind can be a visual artist. I think this is an important point.

    The reason most adults can't draw/paint is related to why they can't program. The mistakes are too painful for an adult. A child can make horrible drawing after horrible drawing for hours for days for months and not mind b/c no one says to a kid, "That's really ugly. What is that? A cat or a cat turd?" An adult draws the same picture and even if no one else says, "That sucks," his/her own internal editor will say it. The trick to learning something new and especially something creative is to keep the editor out until the skills are passed infancy.

    This is a trick for this site (a bad drawing can't crash a server) and one that is usually handled well, I think. A beginner can usually get explicit and friendly help with the kind of question that would get a middle of the road hacker like myself a lot of RTFMs and onto the worst nodes page (as it should be).

    (update: question question)

      I cannot remember pictures, nor can I construct good art.

      Maybe can't today, but you definitely could. Anyone with a creative, problem solving mind can be a visual artist. I think this is an important point.

      No, I can't. And that's why I bring up this particular point. I don't see pictures. I don't visualize. I can't recall pictures. I have a particular, call it "brain condition" that prevents me from doing so.

      And that seems to really get into the way of being a visual artist. {grin}

      Are you not aware of people who are "tone deaf"? All the training in the world won't get them to recognize tones. It's similar with me and recalling pictures or visualizing. My brain doesn't do that. I am unable. Understand?

      I've even commented here on it at GUIs and CLIs about why I hate some GUI designs.

      And it's a bit crazy of you to think that everyone is like you, although completely understandable, because we want to be tribal and presume that all other humans have all the traits we have.

      Oddly enough, I think it's my lack of cognitive ability to visualize that makes me a very good programmer and writer. Yes, I have trouble when people tell me that they want to see how a variable sits in memory, but I'm not burdened with any of that overhead. I just deal with the patterns and abstractions of variables and processes.

      -- Randal L. Schwartz, Perl hacker
      Be sure to read my standard disclaimer if this is a reply.

        Interesting, I've long suspected that my lack of facility with visualisation was due to some of that part of my brain being given over to pattern recognition and abstraction instead.

        I'm also therefore reluctant to experiment with attempts to improve my visualisation skills, because viewed (!) from here the potential cost is much higher than the potential gain.

        Hugo

        Are you not aware of people who are "tone deaf"? All the training in the world won't get them to recognize tones. It's similar with me and recalling pictures or visualizing. My brain doesn't do that. I am unable. Understand?
        Actually, I have seen people who were supposedly "tone deaf" and, as the saying goes, not able to carry a tune in a bucket in fact be trained to carry a tune in a bucket. (Did I mention I was a music major?) However, some people undoubtedly have more of a propensity for carrying tunes, drawing pictures, writing code, etc. Some of that propensity may be genetic, some may be environmental, and everything seems harder to learn as we get older. I agree that the vast majority of people with basic math skills (add/subtract/multiply/divide) and able to read at a junior-high level could learn to program computers to some degree. But there certainly are those with a greater innate skill, propensity, desire, etc. who become the really good coders (not me!), and there are undoubtedly those who don't have the innate abilities required and lack the desire to acquire those abilities, assuming they don't in fact have some phsycial/mental defect that gets in the way of such learning.
        I just took these various aptitude tests (from rockport institute), and one of the fields they tested was the Spatial/Non-Spatial continuum. The idea is that some of us are more spatial than others, and some of us are better at non-spatial stuff than others. I think my super spatialness is actually a hindrance to my programming - I get bored easily cause there isn't a whole lot that I need to visualize in order to do my job. I suppose I should be programming things that require mad spatial skills. My point here is that yes, some people are naturally spatial and some people aren't so much. And there are benefits either way. Oh yes - one more thing - I don't think a person is an awful artist if they make a great painting.
        Are you not aware of people who are "tone deaf"? All the training in the world won't get them to recognize tones.

        That's really the point. Training can be in the way initially. Formalizing a process for a child or beginner is often the fastest way to destroy their desire to pursue a thing.

        And it's a bit crazy of you to think that everyone is like you, although completely understandable, because we want to be tribal and presume that all other humans have all the traits we have.

        Without going too political or philosophical: that's the last thing in the world I think or want.

      The reason most adults can't draw/paint is related to why they can't program. The mistakes are too painful for an adult.

      The reason most adults can't draw/paint is as children they were never given any feedback which allowed them to refine and improve their technique. After a while the kid gets to a point where they are completely frustrated with drawing pictures which they can see look like cat turds and not cats and give up saying "I can't do it". By comparison the majority of children grow up with a fair degree of language competency because parents will correct the child allowing them to see, and thus learn from, their mistakes.

      I had a tennis coach when I was in school who said that the saying that "practise makes perfect" was nonsense, he said instead "perfect practise makes perfect". He never hesitated to say if your technique sucked and I was a visibly better tennis player for his coaching.

      --
      Do not seek to follow in the footsteps of the wise. Seek what they sought. -Basho

        practice makes permanent

        Love the tennis coach story and it reminded me of my teacher on my fundementals of programming course at college.
        On the first day he said
        "I've been doing this job for 13 years and I know that there are some of you in this room I won't be able to teach programming too"
        This caused up roar and complaints to the course head. However he was right at the end of the course out of 24 people, 12 had flunked out, 10 had moved to systems analysis and 4 of us got jobs as programmers.
        I think part of being good at anything is listening to the right people and acting when they tell you your not doing right.
      The mistakes are too painful for an adult. A child can make horrible drawing after horrible drawing for hours for days for months and not mind b/c no one says to a kid, "That's really ugly. What is that? A cat or a cat turd?"
      Sadly, some so-called adults do. But I must say, that's very well put, and an excellent point about the relationship of the creative-mind to the editor-mind. Programming is kind of unique because it requires us to use both the creator and the editor inside ourselves and also to know when to tell which part to shut up and mind its own business. Excellent point too about the community aspect of the criticism process. Great post, Your_Mother++.