Programming Aint Neuro Surgery

(spawned from DeschoolingSociety)

Often, people try to equate software development with other professions, and find software lacking.

This isn't because we're a bunch of lazy buffoons (though some of us might be...), but because the demand is different.

Let's take a look:

Neurosurgery

Forces:

You have to get it right, first time, every time. If you don't somebody's liable to die on the table.

People don't want anything fancy, and definitely not anything new. You aren't adding capabilities, you're removing defects.

You are expected to perform life-saving miracles on a regular basis.

Your patients are more or less the same, though their problems are different, and they have been the same for thousands of years.

Only one or two of you can reasonably work on one patient at a time.

Results:

You require a license to do your work, and your license takes the better part of a decade to earn. By the time you're allowed to take the test, you're at a high enough level to teach undergraduates. And only then are you allowed to begin the apprenticeship process.

Experts have converged (mostly; innovation still happens) on best practices, and pretty much codified them into law. Decide not to wash your hands before cracking somebody's skull open, and you could be subjected to severe disciplinary action, and possibly criminal prosecution.

You work in an environment that is scientifically optimized for what you are doing, with over a million dollars of equipment at your beck and call. You have a small staff in your workspace to do everything from fetch you your tools to wipe the sweat off your brow. Your workspace is its own little world, and the outside world rarely, if ever, interrupts you while you are there.

Your employer (hospital in this case, and I know it's more of a consulting relationship than employer/employee) knows that you are a rare commodity, and will pay top dollar if you have proven talent. You are a Prima Donna.

You don't even spend most of your working hours inside that environment. You have a lot of time in an office, keeping up with the latest technologies, meeting with clients, and otherwise out of the high pressure of your actual workspace.

Software Development

Forces:

You can get it wrong a hundred times, as long as you get it right before the product ships. You have a near infinite number of "test patients" to practice on, and nobody cares if they end up as bloody heaps, so long as one of them comes out right.

While you're certainly spending a lot of time fixing the problems you made, your main task is to give your patient the ability to do things it's never been able to do before.

The sheer number of things people are asking you to do to your patients is overwhelming, and customers will pay to get a new, shiny feature, even knowing that it may kill you.

Your patients change radically every 3-5 years, to the point where the concept of working on a 20-year-old patient is often laughable.

Lack of raw talent can be countered by sheer numbers, as developers can be organized in ways to allow thousands of them to work on the same patient, if need be.

Results:

You don't need a license, or even the right kind of college degree, for your job.

You may learn more about your trade by the apprentice system than in college, where you may have trained for something completely different. If you went to college at all.

You are commoditized (TheMythicalManMonth). You may have at most a few thousand dollars of equipment at your hands, and you are expected to be interruptable when doing your most delicate work. Your employer may not even buy you the best tool for the job.

You don't have your own support staff. You may work with another developer.

Your employer knows that you are replaceable, even if it wouldn't be easy to do so. There are few Prima Donnas in this field.

Each employer has its own set of best practices, often incompatible with those of other employers. Many just throw up their hands and let you proceed with no standards whatsoever.

Of course, there are some cases where programming is neurosurgery. If you're writing fly-by-wire systems, defibrillators, atomic reactor controllers, or something similar, your experience isn't much like your typical software developer. But then again, the forces in your field is closer to that of the neurosurgeon.


There are inexpensive neurosurgeons in the back alleys of Tijuana that fit that description.

And the demand for them is very low and they don't operate on patients of epic worth yet software for multi-billion dollar mission critical software is written using dated technology and WTFs of non-best-practices

IfItsNewItMustBeBetter is not always true. And it's difficult to find a consensus on "best practices". Our industry is still an art, not a science.

[SoftwareDevelopment is neither and both. Like bridge-building, custom furniture construction and gourmet cooking, it is a craft.]


AprilTen


EditText of this page (last edited April 10, 2010) or FindPage with title or text search