Hacker News new | ask | show | jobs
by justinpaulson 4058 days ago
You created a bimodal distribution because you only talked about two types of people. Some people start later in life, but have an incredible talent for programming. Some people start early because they really like programming, but never achieve the highest levels of proficiency because they lack some natural talent.

Like most things, programming is a mix of natural talent and practice. Some people have incredible natural talent and will succeed no mater when they started. Some people will achieve a very productive level of programming with less natural talent because they put in the work to achieve it. There are more than just two archetypes that make up the landscape of developers.

1 comments

Then, there are those profoundly incapable of programming. My high school classmate who seemed to be getting it, but on the 1st assignment came to me and asked for help. It became clear he had no concept of the ordering of statement. He wrote them like math formulas, and didn't understand that they got executed in order.

Fast-forward 3 years; both of us in college. He had to take a programming class again. I met him in the 'computer center' (they used to have special buildings for using computers). He asked for help again; he still didn't understand about statement ordering. I smiled and suggested a tutor. There was just nothing I could say that would get through to him.

So no, not everybody will learn to write computer code. Some people are tone-deaf too, and will never sing nor play an instrument.

> Some people are tone-deaf too, and will never sing nor play an instrument.

That's quite a telling statement. Actually, there are very, very few people who are _truly_ tone deaf. Since intonation is used extensively in nearly all human languages, anyone who truly is 'tone deaf' will have quite an issue in communication. Nearly all the time (and tbh I think it probably is just all the time), they actually just have an 'untrained ear'. Like most people in that kind of position, part of the reason they are in it may well be because they were told when they were young that they weren't any good, and decided to put their efforts elsewhere. And like all people in that position, you can get better. Will they be the next Miles Davis? Probably not. Will they be able to play in a band with their mates? Yes.

A century or two ago, around the time literacy started to become a thing most people could attain, people must have had a similar attitude to yours with learning to read. Some people can read, others will just never learn. Their brains aren't designed for it.

This is how stigmas form. Coding is not that much different to other human endeavours.

All I'm saying is, if you plan on becoming a teacher ever (in the widest possible sense), you're really going to have to re-think your attitude there.

Yet people think different ways. Its easy for a musician to think "everybody knows how music works; its easy for me so its possible for everyone". The evidence suggests otherwise.

I think we may all want to rethink our attitudes.

Actually, that's really not true at all. In my experience studying music, and surrounding myself with musicians, nearly every professional musician knows that understanding how music works -- and becoming proficient at performing it -- only happens through intentional practice. Nobody starts out as a world class musician, no matter how talented they are. Every new musician who picks up a saxophone, for example, has a hard time playing in tune. It takes time and dedication. To musicians, music is easy because they've earned it, not because of innate talent.

Sure, some people might have "innate" talent in regards to music, but that just means they'll progress a little more quickly. But they still need to progress. And that takes work.

At some point it becomes a philosophical question: is this person incapable of learning to program or do they just lack the will and persistence.
Sure (although I'm not a musician).

But it's possible to get better at something with practice and to think or say otherwise is toxic. If you think it's possible for someone to rethink their attitude then you already agree with me.

Sure; but there's talent and there's complete lack of talent. Start with something you have a particle of skill at, is yards more satisfying. At some point, its beating a dead horse, to torture yourself with practice at what you stink at.

Talent scouts do a good job finding young people. They pick ball players, runners, divers, gymnasts early. Its not magic - they show early promise. And so many times they pan out. That probably means that talent is real and actionable.

"He wrote them like math formulas, and didn't understand that they got executed in order."

So he had a talent for functional programming, then?

Cute, but not quite. Those are still executed in some order. Not like algebra which is a set of expressions that are all true over all time.
>Those are still executed in some order.

Not really. E.g. there's no ordering in function composition that isn't also in high school math. Also, you shouldn't depend on e.g. maps processing elements in a given order.

My impression is that statement ordering is easier for mediocre but competent programmers than it is for excellent programmers. The reason is that writing correct imperative code is non-trivial, but writing correct-y imperative code is pretty easy. So someone who's carefully thinking things through while learning will have a more difficult time with simple assignments, because -- at least while learning -- they're essentially trying to construct the correctness proof in their head. And that's pretty hard for imperative code.

Confused. Array iteration is sequential, and common in every functional language, right?
Then declarative programming, maybe? You don't care as much about execution order when doing declarative programming like Prolog. (unless you're writing code "procedural-style")
That's it! He could have found a niche there.
Given that I have a hell of a time wrapping my own (algorithmic-oriented) mind around that kind of programming, that's not necessarily a weakness. It is an interesting contrast in ability though.
Those are still executed in some order.

in all languages? i don't think so.

    def x = y where
      y = a * b
      a = 21
      b = x
in all non-declarative languages.
Functional means that sequence doesn't matter. Haskell is functional, Lisp largely isn't.
Functional means that sequence doesn't matter. Haskell is functional, Lisp largely isn't.
It became clear he had no concept of the ordering of statement. He wrote them like math formulas, and didn't understand that they got executed in order.

We eschew languages like BASIC these days, but I wonder how much BASIC, as available on Commodore machines, the Apple II, or even some graphing calculators, helped communicate this concept. I know I didn't have any problem understanding that when moving to languages that don't have line numbers (although, I did have trouble moving from the full-screen interactive editing on the Commodore to editing "files" as "the program" vs files being a "snapshot" of the program), and I've had the same experience with people who couldn't grok statement ordering. BASIC with its line numbers and simple loops with GOTO may continue to be good first programming languages because it helps with these concepts.

I wonder too. I'm no help; it never occurred to me that programming was functional. I took to 'imperative programming' like a fish to water, at a very young age (elementary school).
> It became clear he had no concept of the ordering of statement. He wrote them like math formulas, and didn't understand that they got executed in order.

That's not an ability issue, just a knowledge issue. Coming from math, you'd assume there is no evaluation order.

I think the point of the statement was to show it was a ability issue because knowledge can be acquired and presumably abilities cannot. So the second time the friend asked for help with the same issues it should not have have happened if missing knowledge were the only issue.

I was not there and my opinion on this issue is complex, so I will just step out now.

squeaky has it exactly right. No matter how many times I said "they get executed in order. There is a state to the computer, and these statements modify that state sequentially", he just wrote random statements down in no particular order. I never saw such profound inability to understand programming.
You needed to be able to find a way to relate the machine model to him. There must be some kind of everyday task that could be used as an analogy. Also, because code looks kind of like maths this person was engaging a math mental model. Therefore you needed to say, (1) it's not like math, stop thinking like that and (2) it's like a recipe for a cake where each step must go in a particular order (or whatever analogy works! Maybe multiple analogies!

That said, I was asked to give computer grinds to a friend and the guy could just not grok it. But then again he had zero motivation and interest. Lots of people who say that they are bad at math/programming have no interest in making the effort to becoming even a little bit proficient.

I really really would like to know if there are people out there who want or would like to code but for the life of them they cannot wrap their brains around it. I think this is a very important question because I can imagine future social arrangements and scenarios where not knowing how to code will be highly socially disadvantageous.

All that is true, sort of. OR you could find somebody who gets it easily, and spend your time teaching them. There are essentially an infinite number of people in the world to teach.
If you don't explain a concept adequately you cannot blame someone for not understanding it.
Sure I can. That's part of the definition of IQ - how much explaining is needed, how much time it takes to understand. I can explain away this guy's inability as a different way of thinking. But you could also say, he had a low IQ. Except he was smart in other ways.