Paradigm Shift

What are the necessary conditions for a paradigm shift in programming? Off the top of my head:

  1. Dramatic change in how solutions are expressed (syntax shift)
  2. Exponential increase in developer productivity
  3. Improved application support and maintenance (fewer bugs, better docs, etc)
  4. Better process woven in to system

The most important condition is a change in how a solution is expressed to a machine. Bring me a new language with different methods of expression versus the stuff available now. If a new set of libraries are grafted on to an existing language, it (for me) isn't a paradigm shift. It might result in better developer productivity -- a new XML library means I don't have to sling one from scratch -- but it does not shift the paradigm.

One of my favorite paradigm shifts often seen in science fiction shows *cough* Star Trek *cough* is "programming on demand". It works like this:

Science Officer: Computer, the X-12 virus will destroy life as we know it if we don't find a cure in 43 minutes.
Computer: Understood.
Science Officer: Run a cross check against all known X-12 spores back to 5000 b. c. and then filter using the Snoo-Snoo algorithm.
Computer: Of course. Done. If you reverse the polarity of the flux capacitor, you can derive Chemical X which should provide a cure.
Science Officer: Great! That only took 2 minutes!
Computer: 1.5 minutes. But we don't have a flux capacitor. For that you must insult the Klingons, toss an irritated Jawa at Darth Vader, and jump rope with angry replicants...

Computers in the future don't need to be programmed so much as asked to solve a problem. In fact, in a sufficiently advanced computer, why would humans even need to ask it to solve a problem? Why would I need to tell my Windows 3010 machine to "make me a zillionaire" or "run a program to create a life-like hologram of me and send it to dinner with the in-laws"? It should just do it. By itself. Without taking over Sky Net. Or keeping the pod bay doors shut. Or starting a global thermonuclear war. That is what I call a paradigm shift.

In poetry, paradigm shifts are usually accompanied by a shift in form and expression. From Edmund Spenser discarding of the shepherd's pipes and pastoral form to T. S. Eliot's exploration of modern man and comparative desolation, poets devise new forms at the turn of a pen. And while most new forms do not gain popularity, one or two take hold often enough to push the art forward. Paradigm shifts in poetry can be ignored, or ridden to exhaustion after a few years, and, in a few cases, kept and subsumed within the larger tradition.

A poet generally works (suffers?) alone and can easily adopt and explore different forms. A developer generally works as part of a larger group and is part of a process and usually cannot introduce a paradigm shift in the middle of a project. This tends to level potential paradigm shifts, smoothing them out and ensuring that they reatain links to what has come before. So too in poetry -- beat poetry is great stuff, but it did not have the staying power of the sonnet or other stricter forms found in tradition.

In a paradigm shift, I expect an exponential increase in developer productivity as measured by his or her ability to write applications that adhere to industry best-practices and are developed in a fraction of the time the same application takes using current tools. This is a tough one. I might break the rules if a new paradigm resulted in efficiencies but not an exponential increase provided the other conditions were satisfied.

Maintenance and software process can be improved through language and tool, but usually such changes are dictated by the toolset. Some developers will embrace the changes to enjoy the benefits of maintainable code (comments, pattern usage, etc) and software process (scrumm, whatever) that results in on time, under budget solutions, but often the non-coding parts are circumvented or ignored. Who uses Weave? How rigorous are your // C# comments? How rigorous are they when you are under a tight deadline?

I look forward to the next paradigm shift. Maybe someone can devise a way to make a language that can be expressed using the guitar from Guitar Hero. Why not?