Mon 15 Dec 2008
Eliminating the Programmer
Posted by Scott Westfall under Programming
[23] Comments
Occasionally I run across a tool or development project with the intent of eliminating the programmer. The goal is to have the business team control the behavior of the system. From a business management perspective, this sounds like a great idea. Think of all the money saved if we didn’t have to hire programmers or to waste time communicating requirements to them. In reality, I’ve never seen a tool or project succeed at this.
I worked as a contractor on one such project a few years ago. We were writing a call center application for a large enterprise client. The architect of this system convinced the client that the business analysts would be able to write in a high-level business language (invented by the architect) so that future changes wouldn’t require hiring programmers to modify the system. Each line of business script, it was claimed, had the power of 20 or 30 lines of lower level code. So, this promised even greater efficiency than just eliminating the programmer.
The business language had classes, constructors, destructors, and nearly all of the features of modern object-oriented languages. Maybe it started out as a simplified language that would be accessible to the business team, but it grew into the same level of complexity as the Java code we were writing to implement the rest of the system. There was no way that a business analyst without training as a programmer was going to be able to write effective code with this language.
Even worse, the programming team was struggling to write code with the language. There was no debugger or other tools, not even an editor with color coding. When you had an error, you had to determine if it was a bug in the script or in the interpreter, which was being modified almost daily.
Even if we accept that it is a worthy goal to eliminate the need for programmers, I don’t think it’s possible. That’s because programmers have skills and abilities other than just their knowledge of programming languages.
Whether this is by training or nature, I cannot say. Likely, it is a little of both. Programmers have aptitude in the skills necessary to succeed in our field and these get nurtured through practice. Regardless, I’ve noticed that programmers are often more capable in many ways than their non-programming coworkers.
Programmers think more logically. Working through if-then-else conditions is a core capability for any programmer. While working with business teams on requirements, I have often run across cases the where same ability was lacking.
During one project to develop an expert system for mortgage analysis, I was often given requirements for rules on how to handle loans with particular Loan-To-Value ratios or for a particular loan amounts. Not uncommonly, these requirements would have gaps. I’d have requirements for loans from $0 to $100,000; from $150,000 to $250,000; and for loans over $250,000. But there was a hole between $100,000 and $150,000. At other times I’d have conflicting requirements for overlapping ranges.
Programmers have a superior ability to analyze problems and come up with solutions. They excel at analyzing preconditions, sequences of events, and outcomes. Certainly, this is a key skill in programming, but it is also useful in troubleshooting and business case analysis.
Another key ability where programmers typically have an edge is the ability to make order out of chaos. I think that’s because the programmer is responsible for creating order within the program. We break systems into subsystems, subsystems into modules, and modules into units. There are no physical constraints that dictate the structure of the solution. Whatever order exists is created by the people who write the code. Reflecting on some of the codebases I’ve worked on, it’s clear that this is not a universal trait in all programmers.
While people typically think of programmers as coders, whose main talent lies in writing the arcane syntax of programming languages. I think that their main talent lies in their ability to analyze, troubleshoot, and solve problems. Code is just the physical manifestation that culminates the thought process of the programmer.
Let’s say that someone does manage to write a tool that allows people to define software and control its behavior without having to write code. The person using this tool will still need all of the other mental abilities of a programmer. If this were to happen, we haven’t eliminated the programmer; we just changed the job description a little.
Yes, I can envision a distant future where Artificial Intelligence is used to develop code—but that won’t eliminate programmers, either; it just ported them to a different platform.
December 15th, 2008 at 11:31 am
In _Clean Code_, Robert Martin points out early on
“We will never be rid of code, because code represents the details of the requirements. At some level those details cannot be ignored or abstracted; they have to be specified. And specifying requirements in such detail that a machine can execute them is programming. Such a specification is code.” (Emphasis in original.)
December 15th, 2008 at 12:03 pm
I think a quote very well compliments your post: “Computer Science is no more about computers than astronomy is about telescopes.” –Dijkstra
December 15th, 2008 at 12:54 pm
As a programmer, I’ve always wanted a tool that assists in the coding process. As pointed out above, the low level details can’t be ignored, but a sophisticated enough tool may be able to identify details that I’ve overlooked or reassure me that I’ve covered all my bases.
December 15th, 2008 at 1:15 pm
20 years ago, F. Brooks explained in “No Silver Bullet” why the efforts to “eliminate” the programmer are doomed to fail.
The essential difficulty is the creation of the conceptual construct and not how is represented…
December 15th, 2008 at 1:23 pm
@Aaron: typically we call those “type systems”.
To the best of my knowledge, people don’t tend to lean on them particularly heavily in industry. Probably because in order to make them powerful enough to be able to pick up on all bugs, you have to make them bizarre enough that only CS postgrads and super-nerdy programmers ever learn how to use them.
In context, I find that amusing. The most straightforward way(*) of getting something to help out in ensuring your code’s correctness is to make use of a tool that excludes most people. People whose code’s correctness you’re least sure about are non-programmers. Murphy strikes again! =D
(* I’m not making any judgment as to whether it’s the best, but it certainly is the most direct. Type systems are theorem provers. I can’t think of any way of convincing yourself that your program is correct that is more direct than putting a formal correctness proof right into its source code.)
December 15th, 2008 at 1:24 pm
A planner can eliminate code for some problems. You state what things can do, and where you want to go and, it’ll generate … the plan.
December 15th, 2008 at 1:35 pm
This hope goes way back – COBOL was originally pitched as a way that managers could directly code solutions, because the language “was practically English.” Uh-huh. This sourced from the same fallacy, that programmers are simply coders who have learned the crazy arcane syntax. (and in the days when assembler was the most common way to write biz apps, it seemed believable.)
“Programmers have a superior ability to analyze problems and come up with solutions. They excel at analyzing preconditions, sequences of events, and outcomes.”
The best programmers are “Mappers”. This essay radically recast and clarified my thinking about programming, CS education, and education generally:
http://the-programmers-stone.com/the-original-talks/day-2-thinking-about-programming/
It is “Packer” thinking that you are railing against – the idea that if you just learn some huge set of rules, you will be able to do any job. But the Mappers are much better at programming, because they build and extend mental models which makes them capable and confident.
December 15th, 2008 at 2:52 pm
There are plenty of jobs that people said would never be replaced by computers. They said it was too hard, that a computer could never get it right. Yet a lot of those jobs not only went away, but computers do them better.
That’s what programmers do. They remove work from humanity. It is naive to assume that because we are the ones doing the culling our jobs are safe from it.
Good software engineers make code that is not simply easier to maintain but doesn’t have to be. Closed to modification. Open for extension. Meaning, good software engineers are already replacing themselves.
IMO if you are not actively working to make your job unnecessary, you are not doing your job. It’s just a matter of time.
December 15th, 2008 at 4:22 pm
Wouldn’t it be great to eliminate all the smart people from the business design process?
December 15th, 2008 at 7:55 pm
Business Process Management Modeling and Business Rules-driven tools will effectively remove the programmer within a few years.
December 15th, 2008 at 9:52 pm
Business analysts are not able to eliminate programmers, but programmers are able to eliminate other programmers by using Lisp macros.
Using Lisp macros, the complexity of the code remains at the same level while the scope of work increases.
December 16th, 2008 at 12:04 am
I’m sure glad we have smart people like you around …
“I’d have requirements for loans from $0 to $100,000; from $150,000 to $250,000; and for loans over $250,000. But there was a hole between $100,000 and $150,000″
Otherwise we mortals would never have been able to see through all those levels of abstraction and figure out that there was a gap between $100k and $150k.
December 16th, 2008 at 2:55 am
I am that architect. I find it a really hard habit to break. I waste huge amounts of time trying to make it so non-programmers can configure/change apps I work on. But they never actually do. It’s a hard hard habit to break. Help me.
December 16th, 2008 at 9:21 am
When I was in college getting my Computer Science degree I minored in art because I found it relaxing. We had a visiting artist come speak to my drawing class one time and when he found out I was a computer scientist he was very excited and said he loves teaching programmers how to draw/paint because we look at things differently. To paraphrase a bit, “If I tell an artist the head in his drawing is out of proportion he gives me some bull**** reason about it being representative of his childhood ambitions or something. If I tell programmer that he drew a head out proportion he just asks me how much smaller it needs to be.”
December 16th, 2008 at 1:21 pm
Ah ! Managers thinking about saving money by removing programmers! Crazy just crazy. Think again, how many managers can we replace with a spreadsheet! Programmers can give a better time estimation,co-ordinate better. But of-course we need a boss to pay us
December 16th, 2008 at 2:37 pm
It gave me pause after reading this article, when I had to enter a security code to prove to the form that I’m not a bot. I wonder how much longer these Captchas will work? (CAPTCHA: “Completely Automated Public Turing test to tell Computers and Humans Apart.”)
I’m a Web designer, here via a link on Webmonkey.com. I always encourage clients to fulfill their curiosity about WYSIWYG Web site editors. They always come back afterward.
December 17th, 2008 at 3:44 pm
You dont need to be crazy to be a computer programmer, but it helps.
December 17th, 2008 at 8:54 pm
Having delved into AI a bit myself, i am convinced that it is not a matter of the time until a programmer is able to over come the CAPATCHA techniques, it is the time until the right programmer comes along and applies his knowledge to actually do it. The complexities of nearly all CAPATCHA systems can be overcome easily by some of the more advanced systems out there, it just isn’t worth enough to the people who can do it to actually do it. This is the foundation on which CAPATCHA systems are designed. Until the day where it becomes more worth a programmer’s while to break the security provided by such systems then to design them, the principle gains of CAPATCHA will be retained.
December 18th, 2008 at 6:55 am
what we should eliminate are the so-called ‘architects’
December 18th, 2008 at 10:37 am
Getting rid of the programmer is simple. Just get rid of the machines. But until then, we should feel pretty safe in our profession. I don’t think we need to start working on our people skills any time soon.
My bigger concern though; am I a engineer or a mechanic?
December 19th, 2008 at 8:54 am
I switched from PHP to Rails a little less than two years ago. I have made huge strides in productivity. I write so much of my code as reusable plugins. Lose much less time to maintenance and bugfixes. And my clients didn’t fire their internal programmers. They didn’t cut back my hours. They allow me to produce a lot more features for their systems. You can’t eliminate the programmer but you can minimize repetition. Both physical repetition of tasks and repetition of code. Bring on the revolution. Bring on the code writing robots. My clients will still need me to tell the robots what to do.
December 19th, 2008 at 3:33 pm
i didnt read through all of the comments, so i dont know if this has already been mentioned, but i dont think that the ultimate desire is to eliminate the programmer.
i have a cs degree and I currently do qa and support for a security software company. we have a bunch of really smart and capable software engineers. the problem I see most often between the business end and the engineers is that there is no balance between how well the requirements are defined and the level of complication that the engineers will apply to the project when its left up to them.
dont get me wrong, building an application can be complicated, even if it is a simple application with few features, and most non-technical people are unable to cover the majority of the requirements and expected behaviors. what I find is that once requirements arent defined well enough, the engineers turn the product into their little pet project, adding bells and whistles or simply doing things in the most complicated way they can think of. i completely understand that the complexity is a reflection of creativity and a show of great vision, but the ultimate goal in a for-profit organization is to build a product/service that satisfies the current needs of the potential demanding-population in the most quick and efficient manner.
what im saying, is that if everybody in an organization did their job with a little less emotion and a little more preparation and objective thinking, there wouldnt be any thought of eliminating the programmer.
December 19th, 2008 at 11:49 pm
@grins I have had the same issue as well as many other people I’m sure. Usually the go-between is a business analyst. And in a perfect world all would be Agile.
When programmers start shoving fluff into an app and they don’t understand a concept called “version 2″. People pay for new versions and devalue your app when you give them something for nothing. Again… Agile wrangles a project in.
A good business analyst knows how to speak business jive and a programmers binary language of moisture evaporators.