Last year I wrote an article entitled "Not Because It Is Easy..." and I find myself thinking back to it this week because Jonathan Edwards wrote an article that made the rounds in the tech circles last week entitled "The problem with programming and how to fix it."
Mr. Edwards argues that programming should be so easy that everyone can do it, and once again I disagree. I started working with simple programming when I was around seven years old, using GW-BASIC on a Telecompaq workstation that my dad had rescued from the trash at work. It was mostly functional, running DOS 2.1. The first floppy drive worked, but the built in modem and second floppy drive did not function. It was a beast, but mostly I got to play on it as much as I wanted.
Thirty-two years have passed, and aside from vacations (and sometimes even then), I probably haven't gone more than three days without writing some snippet of code, whether it's a one-liner to help me sort through things or a shell script, something more complex like database abstraction layer, or even a full application - and here's what I can tell you: my skills are solid. Thirty plus years - and maybe I'm being a bit too harsh on myself, as I'm my own harshest critic - but while there are plenty of people who are better at me at this one skill, there are many, many more that are (or would be) worse at it than I.
This is not to say that makes them worse as people or to say that we should make things easier for anyone. I, for one, am all for amping up the targets to make things more difficult, in general. I don't think every average person is a great one in waiting, and I don't think that lowering the bar make people who are average, better, it just means that we are willing to accept mediocrity has the same merit as exceptional.
I have acquaintances who work in international finance. They got degrees in finance or mathematics or actuarial science and then went to work and generally sat on the bottom rung, learning the ropes, for a long time. When they show signs of success, they take the next step. And so it progresses when the work is difficult.
By the same token, those in the medical field are required to have supervised, practical experience before they ever start working unsupervised on people. As a society, we'd be pretty concerned if people started handing biology or pre-med baccalaureates scalpels and telling them that we need them to cut out a cancerous growth as soon as possible. While a few would certainly be successful, how many would not? A vast majority - because they have not yet learned the techniques necessary to apply to the situation into which they are being thrust.
Education gave them the basics, but only the real world can prepare you for the real world. Some people adapt more quickly than others, learn more quickly than others, and excel more quickly than others. Some people never adapt, never learn, and never excel. It does not make them bad people.
Programming is not surgery and it is not international finance. It is math and logic, and sometimes very deep math and logic. I do not propose that it is impossible for most people to learn to program at a cursory level, the same way that it is not impossible for nearly everyone to learn first aid or bookkeeping. These are the precursors to the real work though, and I would never suggest that people who know first aid are qualified to be nurses or doctors or EMTs, and I will also never suggest that those who learned how to make a turtle draw a picture in LOGO (old, right?) or in a more modern world, using tools like Tynker and Hopscotch, should be professional developers.
Knowledge is good, but Mr. Edwards claim that the progress of programming languages and the sciences and effort that go along with them has been a fifty-plus year long exercise in mental masturbation for overachieving nerds (and that such a thing is bad) discounts the fact that it should have been exactly that. Systems are more complex now than ever before, and with each second that ticks by, the systems that are part of our lives grow even more so. We should not be catering to the least common denominator, we should be celebrating the people that fight their way past the barriers to entry and succeed.
I think I'm a decent programmer. I know plenty of other decent programmers. I know exceptional programmers. I know cruddy ones that still somehow get the job done. With that being said, not everyone should follow that path, just as not everyone follows the path of a surgeon or a financier, and that's most people.
Everyone should know what programming is and the effort that it takes. Everyone should know first aid. Everyone should know how to manage their own finances. Certainly not everyone that knows first aid is a surgeon and not everyone should be a financier just because they can manage their own money. Everyone should not be a programmer even if they do understand the basics of how to program, because understanding effort and being a professional are two very different things.