It just needs to be tested on more complex decisions, possibly in a larger network. Most people don't feel the need to delegate choosing what kind of food they like to eat. Now if google starts using this system to decide what kind of phone they are going to make next, things will get interesting.
If you started programming when you were 12 and you've been programming for fun more than 4 hours a day every day since then, you are going to be drastically better than someone who starts programming in their first year of college and only does it to graduate. It feels like a bimodal distribution because you then get both kinds of programmers interviewing for jobs at the same age when they graduate from college and one of them is going to feel drastically different than the other.
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.
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.
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.
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.
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.
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 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.
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.
This seems like a form of elitism very specific to programming.
I graduated with a degree in Electrical Engineering, and barely did programming until I began my first job out of college. In many people in the programming space, I see contempt that coding was something I didn't start until later in life. When I interviewed for Electrical Engineering positions, no one ever scoffed at me, "you haven't been computing the impulse response of a filter for 4 hours a day since you were 12? There's a massive difference between engineers who have done that and those that haven't."
I think it really comes down to how much enjoyment one gets out of programming. If you thoroughly enjoy the process, you are more likely to put in the time and effort (in fact it will feel effortless), and you will be thinking about it all the time. Then there are those who don't mind programming, or maybe even see it as a chore, but choose to do it anyway.
I sometimes see the amount programmers believe they're supposed to enjoy their job as unique to programming.
People always talk about pursuing coding projects just for the fun of it outside of work, but that's a pretty unusual trait for other forms of engineering.
My father has a PhD in Chemical Engineering and has been doing crude assay work for the last twenty years. He obviously enjoys and gets fulfillment out of his job. But if you asked him to analyze crude oil samples on his free time? He'd say you're crazy.
I dunno, I've been in this field for five or so years coming out of other engineering disciplines, and it always surprises me how programmers view their trade as fundamentally different from other forms of engineering.
You know it's funny I agree. When I was working as an EE no one ever gave me trouble because I wasn't building circuits or filters or doing RF design at home and because I didn't want to think about it when I got home. I keep seeing this attitude in the software engineering sphere that you have to totally embrace it and have all sorts of side projects and it's encouraged to more or less dominate your life; I can't imagine this is healthy for most adults.
I think this is because a lot of computer work isn't just engineering (although there is a large amount of that mindset involved), but it is a mix of engineering and art. One thing to compare it to is woodworking. Many people who are good at it will go into something like cabinet making, but they will still have a lot of personal woodworking tools in their garage. There is something about creating something that, even if the process itself isn't really enjoyable, the final result is.
I've heard the same. There's an opposing group to that: writers.
Read any interview with a novelist, screenwriter, short story writer, etc and most will say it's something they hated doing but were glad to get done.
Pushed further though, I've seen good advice in some of those interviews which is to try to learn to enjoy the process, as what happens with the finish product is usually out of their hands. I think that's pretty applicable to a lot of other fields as well.
Exactly. My dad is a musician, and I always wanted to make music, but I just don't have that thing where I'm always thinking of new melodies or beats or whatever. I know that I could not make music on par with the people in the world that do this like my father. Unless I have some previously undiscovered stroke of genius with music. But that is very unlikely, and still the standard comes down to "How much do you enjoy doing X?" that really determines how good you are or will be at X. I fucking love programming. That means I've got the capacity to excel at writing code. But I'm only okay at making music, and I only really listen to music when I code. So there is diminished capacity for me to be a rock star. Sufficiently diminished capacity that I probably will never be a well-known musician, let alone Michael Jackson.
Exploring isn't a passive activity, everyone has their own way of discovering the world and I don't think anyone can claim theirs is superior.
Furthermore, being able to transfer concepts from one activity to another is a clear sign of intelligence: applying an idea to 1-dimensional text and then applying it to social relations isn't a passive activity either, it shows deep understanding of the idea.
I don't think it's elitism, it's just that programming offers a unique opportunity to do this stuff from a very early age from home and the end results is some people end up being very good at it "early" in their career.
Unfortunately you couldn't start "computing the impulse response of a filter" when you were 12 but if you could, and you continued to practice it daily, you would be very capable compared to people who just started in university.
You're demonstrating the exact syndrome the story discusses: conflating the ability to write code "well" with all the other things one does as a software engineer. The article goes into more detail, but I do a fair number of things every day that do not involve typing in code on a keyboard.
Going further, I would argue that most people I know who've been programming since they were 12 weren't even writing very good code at 22 (or whenever they left college and entered the working world). It's vanishingly rare that people were writing flexible, maintainable code in their teens. It's much more common that they were coding to scratch an itch, and that their code only solves the pieces of the problem they cared about, and probably not very well.
For the most part companies doing EE work seem to rely on the big three companies making EDA software to do tech development.
On the web and in app development, there's a far greater variety of technical bases to begin building atop, and a lot of web fundamentals that have developed culturally (rather than out of scientific or mathematic bases, where it can be clear your tools are helping).
A sometimes seen result is that those communities of developers that are "well served" by platforms perhaps "shielding" them from the sticky intertwingulated overwhelmingness of choices and protocols and systems often can't relate, don't relate to the wider body of codecrafters.
Ability to harness the best or biggest slices of culture well is a huge part of programming, and that requires more than being really good or really smart: it requires a will and energy to chase, and to always be chasing, keeping yourself unrooted from what you merely know or how you've done it. That doesn't justify a bimodal view, because there are certainly all kinds of ways people come about to programming, but I think in programming it really is different- since everything is made up and abstract, we're still figuring out general shapes. It's all a social milieu, and it requires paying attention to establish and keep authentic roots and identity, roots you'll need to contextualize what it is you do and what's coming down the pipe. Calculating impulse response is a hard task, but it has a mathematical fixity with no compare to the computer arts we use.
It's also been an extremely exciting time watching programming's recent decades. So there is some elitism of simply- why haven't you been here, enjoying the hell out of this? I think it's ok to feel that inside in a general way, I don't think that can be stopped or avoided, but how we reconcile that with the world without falling into the abundant moral hazards, how we still be good- it's doubly hard to reconcile yourself when the feeds are rife with people berating and assaulting tech culture, when you can get lost in these other people fights.
As a programmer, keep an open mind and accept many types of people as peer. As a person in the world, keep an open mind and accept that programmers are still quite high on some cyberspace utopianism and a precambrian-esque explosion of capabilities, and that just as much as you feel alienated by them, they feel alienated that a wider world excuses itself from recursing the depth and breadth of what enraptures the techie. 'The weirdo is just as scared of the normal person as the normal person is scared of the weirdo'
>This seems like a form of elitism very specific to programming.
In my experience it's not at all specific to programming. Other domains have their "rock-star" experts: The brain surgeons, the rocket scientists, the literal rock stars (or at least the true masters of one or more instruments, amazing songwriters, gifted vocalists), the Olympic athletes...the masters of their skill who are so good at what they do that they make it look easy. They've put in the metaphorical 10,000 hours of practice and self-improvement. They are awesome, and the rest of us mere mortals by comparison.
Programming is different from many disciplines, though:
* World-class skill in one domain or language translates to a very short learning curve in just about any other domain. I've hopped between native apps, games, high performance servers, networking, security, drivers, web apps, embedded, IoT and machine learning, for example, and have used just about every mainstream language (and some trendy ones).
* Programming as a discipline has a 10x-20x measured productivity between practitioners with similar experience -- and the real difference can be infinite (there are tasks that I have accomplished that I know would never have been completed by some people I've worked with in the past). Though some will claim it's unique in that respect, it's not: It shares that trait with (for example) the creation of art and music. I can spend 10 hours working on something artistic, and I know artists who can produce a better result in 30-60 minutes.
* Programming can be learned with a computer and 100% free tools. You can start when you're 12 and have access to a computer, and you are limited only by your skill and imagination in what you can create. So those who have an aptitude can spend thousands of hours in practice for only the cost of electricity (after they have a computer).
It may be that Electrical Engineering doesn't have the 10x-20x relative skill effect, or maybe it does. I don't feel qualified to argue one way or another. It does seem like practitioners will specialize in a particular area, though, and tend to stick with it; correct me if I'm wrong?
Also, it's rare for someone at 12 to feel the need to compute Ohm's Law (well, I used Ohm's Law as a 14-year-old, but I'm odd that way), much less the impulse response of a filter, so for most you're learning those equations at the same time, and the difference between the best and worst students isn't measured in thousands of hours of previous experience.
>"you haven't been computing the impulse response of a filter for 4 hours a day since you were 12? There's a massive difference between engineers who have done that and those that haven't."
For the record, if you're one of those people who did start coding at 12 or earlier, it's not hard to spot another "native programmer", any more than, as a native speaker of a language, it's easy to hear when someone has learned a language as an adult. Sometimes late-learners with particular aptitude for languages can speak without an accent, but most of the time it's easy to tell. There are documented brain organization differences (fMRI) between people who learn a language before they're 12 vs after they're 14, and I suspect the same may be (statistically!) true for people who learn programming early vs. late.
He does not deny that there are people on the tail of the normal curve. But his point would be that there are more people that started at 12 and programmed a couple of hours on the weekend v. 4 hours a day. And there are still more than that that started at 15. This creates a normal curve, not a bimodal.
Don't underestimate by how much the speed at which you learn increases as you get older. There's lots of amazing musicians around who only started playing as adults, for example, because aside from a couple of kid geniuses, learning an instrument when you're young is just really, really hard.
I'm not thoroughly sold on the "too old to learn" adage either. I think it has more to do with time and focus. Since moving into the stage of life in which I have a family and more responsibility in my job, I have considerably less time to focus on learning a new instrument or music theory or ______.
I have no doubt that there is an age, beyond which, your brain has degenerated too much to learn. But, I'm not convinced it's as early as 50's or 60's. Hopefully, with better awareness about nutrition, exercise, and stress, we can see people learning music instruments well into their 80's.
I really wish the main findings had been summarised in one paragraph at the top of the article, instead of towards the end. All things considered it could have been written a lot shorter and a lot clearer.
I wonder what the game depth would be for significantly more complex games like Starcraft 2 or League of Legends. Given the way those games track statistics we should be able to get a definitive answer.
The game depth for those games is going to be enormously large. Chess is played with 32 figures on a 64-tile board, and that's enough to give us serious problems. Games like SC or LoL have way, way more options -- the set of all possible game states is of such a size that I don't even have a sense of scale for this order of magnitude.
Think about it this way: the average branching factor of a legal chess move is 35: there are about 35 legal moves that could follow. For Go, the average branching factor is 250. In StarCraft, how many "legal moves" do you have available at a given game state, on average? Tens of thousands? Millions?
By the way, this is made significantly more difficult by SC and LoL not being turn-based games the way Chess is.
Maybe. There are indeed many possible moves, but how many represent important strategic choices that take learning to understand, and how many are just the obvious thing that even beginners will see how to do after a little study? (there are plenty of "broken" RTS games where there are millions of choices but there's a clear winning strategy in building lots of one particular unit as fast as possible - StarCraft is the exception and not the rule in sustaining interesting gameplay years after its release).
And if we're talking about computer playability, the real-time nature of these games cuts both ways; in StarCraft analysis we literally talk about how many "actions per second" a player was able to execute, a field where a computer will naturally have an enormous advantage (part of why I prefer to play Supreme Commander).
The only way to be able to quantify "10%" is if you have the ability to predict the future perfectly. If you don't have any stockpiled bandwidth you will have big issues if anyone leaves the company for any reason, and you will also not be able to easily take advantage of any unexpected opportunities that come your way. I wouldn't call it a bloated organization, more like a flexible organization.
Speaking as someone who used to watch SC2 and now mostly watch DOTA2 only, the reason I stopped was because it got so boring. Blizzard design choices made the games awfully predictable, to the point where I just lost interest. This is in contrast to DOTA2, which continues to be exciting and fresh, with exciting matches and constantly evolving new strategies (not all of them but enough to keep me interested)
This was a terribly written piece. It is terribly long winded, when what it was trying to say could have been said much better in a few short paragraphs. I don't think it is possible to take seriously the words of anyone who thinks the "art of programming" is the art of debugging programs. That's like thinking the art of astronomy is about cleaning telescopes.