I saw a few years ago a study which claimed professional programmers had the second or third highest average IQs of any occupation. Probably depends on how you measure, but you get my point. After 10 years of programming, it's only gotten marginally easier. The fundamental stuff of programming, solving highly complex and abstract problems, never seems to go away. Somehow I doubt bricklayers can say the same.
Programming is part craft, part science, and occasionally a very small dash of inspiration or art.
But for the most part I think that a very large amount of it is very comparable to bricklaying. Especially in the part where most people in the IT world make their money, such as software for the financial and the business world.
Rarely does it elevate itself to the level of watchmaking and even rarer do you find art. It does happen though, but not often.
I'm sure that programming is conceptually different from bricklaying in a sense that we are solving puzzles, sometimes. But everybody that got in to it for that reason knows that the only time you really need that skill is when you've messed up and you are facing a very tough bug.
Once you get better at programming it is more like knitting or weaving than puzzling.
Of course there are different styles of programming, and there are only so many kinds of brick. But programming for the most part is hard because we have chosen to make it hard. If bricklayers had to create each and every brick from clay and bits of stone then you'd be much closer to what programmers do for a living than what bricklayers do.
Bricklaying has been 'industrialized', and one day programming will be too. It will probably still be marginally harder than bricklaying, even after that has happened. But if you can explain what you want done and in which order then you are essentially programming.
People often say they would like to learn how to program but they are not smart enough for it. And plenty of programmers just love that because it makes them appear special.
But I think anybody can program, the difference is not some binary switch in your head 'programmer/non-programmer'. The difference is in how complex an arrangement you can create, and that's a continuum.
Some programmers are better at this than others and can solve more complex problems.
"Bricklaying has been 'industrialized', and one day programming will be too."
This prediction has been made for decades now. I suppose if people keep predicting this indefinitely, someday it will become true.
In the meantime, new programming tasks are invented faster than the old tasks are industrialized.
"Once you get better at programming it is more like knitting or weaving than puzzling."
This is up to you. Was building Google, Amazon, Linux, Firefox, iPhone OS, etc. etc. etc. more like knitting or weaving than puzzling? Maybe what you are saying is that most programmers aren't good enough to build those kinds of products, or would just rather stick to their knitting and weaving. That I would agree with.
"Some programmers are better at this than others and can solve more complex problems."
> This prediction has been made for decades now. I suppose if people keep predicting this indefinitely, someday it will become true.
One day is on purpose very vague, I haven't a clue on what timescale we're talking. But I'm fairly sure what will be the sign that we've reached it, it's when we will remove the term programming from language and use 'teaching' instead.
> This is up to you. Was building Google, Amazon, Linux, Firefox, iPhone OS, etc. etc. etc. more like knitting or weaving than puzzling? Maybe what you are saying is that most programmers aren't good enough to build those kinds of products, or would just rather stick to their knitting and weaving. That I would agree with.
Most of those were huge projects, but if you break them up in to little pieces some of them were artwork, most of them were bricks. The architecture of each of those was likely artwork.
> This is trivially true of any cognitive task.
Yes, but many programmers seem to think there is something 'magical' about the ability to program, as if there is some kind of essential element that differentiates those that can program from those that can not.
"many programmers seem to think there is something 'magical' about the ability to program, as if there is some kind of essential element that differentiates those that can program from those that can not."
I challenge you to find someone that I can't teach how to program a computer.
Maybe they won't be the next Donald Knuth, but they'll be able to hold down a job and make a living. I guarantee it.
You ship 'm I'll teach 'm, no matter how much time it takes I'll do it. The only pre-requirements are a willingness to learn and a willingness to spend the time, as well as an iq of 80 or more.
Anybody can do it, not equally fast, not equally good, some may hate it and some may love it.
That test is so biased it's not even funny, I've linked the script below, it assumes that people will clue in to the different meaning of the '=' sign in programming (assignment) as opposed to what it means in the rest of math (equality). I note that some programmers that are very well seasoned have been caught to mess up '==' and '='.
I always thought that the '=' sign for assignment was a huge mistake and that '<=' would have been far better.
But it's a little late for that now. What galls me even more about that test is that instead of providing a warm up with a bunch of assignment samples and 'print' statements afterwards would have given the really interested parties a shot at figuring out how it works, to test their assumptions.
The problem with programming is an educational one, not some kind of genetic pre-disposition to being able to program.
Just as there are people that are better and not-so-good at arithmetic there are people that are better and not-so-good at programming.
It's a skill thing, and if you work at it hard enough you can get better. The ten thousand hour rule definitely applies. If that's not the case then how come there are a thousand and one books that will teach you how to become a (better) programmer. It is teachable, it is a skill, there is no magic component, in spite of what this so-called study says.
Have read, and see what you think, try to pretend that you have no programming knowledge and that all you know is arithmetic, it basically tests a single question in different forms over and over again.
In my opinion, a much better way to grade people to find out who will be the 'good' programmers is to find who is good at solving puzzles.
Bricklaying is actually a really good comparison to programming. It's stacking bricks with glue. But those bricks eventually end up making an entire building. And with that, you have corners, archways, windows, doorways that you have to determine how to cut or turn the bricks so that it will support the bricks you're going to put above it, or the lack of bricks below it. Bricklaying is a craft and an application of sciences that are well understood. That's the reason why so many comparisons fall flat, why there's discussion about "is it science" and "is it art". The only part of software development (I'd like to use the term engineering and have it mean that one day, it'd be nice) that's art should one day be science.
Let's face it, with programming, we're inventing entirely new domains with their own special rules that we create. It can be an artistic process or a scientific process. As an artistic process, it's very hard to judge the outcome from the start. As a scientific process, the result is much easier to judge prior to completion. Until the processes and methods are understood to a sufficient level, programming will be very much like an art. Once they're understood, it's a science, apply the rules and out pops a software.
I have several relatives that are plumbers, electricians, carpenters and architects. Once there's a common set of tools, language (as in, for communication between people) and understanding, programming is no different than any other craft.
The windows, corners, doorways and arches where exactly what I had in mind, but even a straight wall is already pretty hard. Each building is, when it's done a work of art, and possibly more so than most computer programs, especially your garden variety throw-away web-app.
The 'art' part in programming is exactly that part where it is not yet a science.