Friday, January 07, 2005
« C# event issue resolved | Main | 20 Year Usenet Timeline »
  1. Less choice leads to better results.
  2. Higher level languages and frameworks restrict choice.
  3. Thus, higher level languages and frameworks should lead to better results.

 

The “less choice” statement flows from this article entitled Choice Cuts. Ignore the politics and focus on the research beneath the statement. That’s what is valuable in this context.

 

It is obvious that higher level languages and frameworks restrict choice, so I’m not going to cite a bunch of references for that. While many of these languages and frameworks provide a way to drop out to a lower level, in and of themselves they restrict choice. Just look at Visual Basic versions 1-6. Very productive, but often restrictive.

 

Whether the conclusion that higher level languages and frameworks will lead to better results is true or not is unknown.

 

Certainly there are examples where better results have been gained. This train of thought is lurking somewhere behind the software factories movement, and does seem quite compelling. Certainly many people using CSLA .NET with code generators have found radically increased productivity – and the combination of the two does restrict choice.

 

Yet there are countless examples (especially from the era of CASE tools) where the results were totally counter-productive. Where restriction of choice forced intricate workarounds that decreased productivity and made things worse.

 

Charles Simonyi contributed to an article on The Edge, essentially noting that there still is a software crisis and that low-level languages aren’t solving the problem. He argues in fact, that low-level languages like C#, VB and Java are a dead-end. That we must move to higher-level language concepts in order to adequately represent the real world through software.

 

This is the view of the software factories people and the domain-specific language movement. And it is rather hard to argue the point. There are many days when I feel like I’m writing the same code I wrote 15 years ago – except now its in a GUI instead of on a VT100 terminal. But the business code just hasn’t changed all that terribly much…

 

To look at it a different way, a software architect’s job is to restrict choice. Our job in this role is to look at the wide array of choices and narrow them down to a specific set that our organization can use. Why? Because having each developer or project lead do all that filtering would seriously cut into productivity.

 

Companies employ architects specifically to limit choice. To set standards and policies that narrow the technology focus to a limited set of options. The rest of the organization then lives within those artificial boundaries. There are many reasons for this, including licensing costs, training and so forth. I doubt that many people have considered the direct (presumably positive) impact of the reduction of choice however.

 

I’ve been working on an idea I’ve dubbed an Entity Description Language (EDL). My original motivation was to reduce the amount of plumbing code we write. Look at a typical Java, C# or VB class and you’ll find that less than 4% of the actual lines in the class perform tangible business functions. Most of the lines are just language syntax or pure plumbing activities like opening a database connection.

 

In working on EDL though, I’ve discovered that it is virtually impossible – and perhaps undesirable – to replicate the capabilities of C# or VB in their entirety. There are reasons why these languages use such a verbose syntax. They require verbosity in order to provide flexibility, or choice. Virtually unlimited choice.

 

If we now consider that limited choice is better, then perhaps the fact that something like EDL restricts choice is only good…

Friday, January 07, 2005 10:23:13 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [7]  |  Tracked by:
http://www.cerkit.com/cerkitBlog/PermaLink,guid,cf6a3da2-d876-402f-bda6-4c4ebd34... [Pingback]
"EDL: Entity Definition Language" (The Cerebral Kitchen) [Trackback]

Saturday, January 08, 2005 12:14:28 AM (Central Standard Time, UTC-06:00)
Just as there is a Jing for every Jang, there are always opportunity costs. It is not as simple as limiting choice. The penalty of simplicity through limited choice is flexibility. As you noted, high level languages greatly simplified some problems but created limits that made adjusting to changing business requirements difficult. The job as software architect is to find that right balance of simplicity and flexibility that provide the maximum productivity gain (to use a bunch of execu-speak). Balance, IMO, is the architect’s most important objective.
Thomas
Saturday, January 08, 2005 1:55:23 AM (Central Standard Time, UTC-06:00)
I suspect this will end up being one of the driving factors behind metadata/code generation couplings.

Having languages like C# and VB that will allow a clean seperation between generated and coded 'verbosity' should allow the developer to retain a lot of the flexiblity of the 'mid'-level language while at the same time allowing the programmer/architect to work against simpler models in the metadata.

It won't be perfect but then again people have been building houses for thousands of years and we still have people doing reasearch in to how to do it better and cheaper. Programming is no different.
Ben
Saturday, January 08, 2005 5:21:38 AM (Central Standard Time, UTC-06:00)
"When I use a word, it means exactly what I intend it to mean, no more, no less."
— Humpty Dumpty to Alice, Through the Looking Glass, by Lewis Carroll.

This post resonated with me, because last night I was listening to Barry Schwartz's "Less is more" from IT conversations (http://www.itconversations.com/shows/detail252.html).

To me the problem with trying to move to higher level languages lies in the increasing non-specificity of meaning. An example from my professional field, medicine, is how the word "eczema" used to (in the minds of medicos) refer to a specific kind of skin condition, but through general usage: "The term eczema, which formerly referred to the blistered, oozing state of inflamed skin, has by common usage come to have the same meaning as dermatitis". (sorry if this example is kind of gross).

It may be that the necessity of programming languages to express unambiguous intent requires lower level languages. It is interesting to speculate on the debugging requirements of a programming language in which the compiler had to guess at the programmer's probable intentions by contextual intepretation of code.

The need for languages to precisely define intent implies to me that lower level languages limit choice of intent to a greater extent than higher level languages, and that higher level languages actually increase choice - the choices of the compiler, rather than of the programmer.

Greg
Saturday, January 08, 2005 3:39:21 PM (Central Standard Time, UTC-06:00)
Perhaps it's not the reduction of "choice" that leads to better productivity. Most probably it's the elimination of bad choices that does it. Higher-level languanges and framework restrict the set of possible solutions to a subset that is known to work for the given problem domain.

One could then suggest that it would be just as easy to maintain the same level of quality using lower-level languages such as C#, Java, and maybe C++. All that is needed is for one to know beforehand the subset of the possible solutions that would work for the given problem. But that is, of course, easier said than done.

Hope this makes some sense.
--Mohammad
Saturday, January 08, 2005 7:46:03 PM (Central Standard Time, UTC-06:00)
restrictiveness depends on the view point
http://msmvps.com/bill/archive/2005/01/09/30384.aspx

Sunday, January 09, 2005 2:43:56 PM (Central Standard Time, UTC-06:00)
The time dimension should be taken into consideration… A given high-level tool is specialized (limited) so that it can be directed at a certain set of common problems. The set of common problems lives in a timebox. A specialized tool is typically relevant for a shorter period of time than a lower-level tool. A new, more currently relevant high-level tool can always be created from lower-level tools.

Developers have to understand the appropriateness of both. Unfortunately, developers in the Microsoft culture aren’t traditionally good at having the discipline to not eat the application-development-is-easy-just-depend-on-our-high-level-tools line from Redmond. And this is where the DSL and software factories movement at Microsoft starts to rub me the wrong way.

It looks to me like we're about to take another foray into the world of software-can-be-written-by-anyone. We haven't even recovered from the intellectual coma stemming from the last time we tried to play this game.

I think good things will come of ideas like an Entity Description Language, in fact this particular idea is something I see as essential. But I don’t think that the marketing folks at Redmond are responsible enough to society to not plunge us into another software dark age by trying to sell software factories as the next VB 6.

Like VB 6, software factories will bring some goodness, but also like VB 6, it will likely be sold in a way that attempts to falsely convince millions of unwitting software folks that you don't really need to pay attention to the man behind the curtain to achieve sustainable software success. Unless of course you can also succeed in stopping time.

Less choice always leads to better results - except when it leads to ignorance.

My 2 centas, anyway.
Scott Bellware
Monday, January 10, 2005 10:24:34 AM (Central Standard Time, UTC-06:00)
Someone needs to add a caveat to "less choice means better results". The elimination of bad or redundant choices means better results, not just because you have fewer options. One really crappy available choice won't necessarily be better than two good choices.

Better results == what? Less code, better quality, better features, easier maintenance, easier extensibility, ...?

I've had a first-hand seat to how a well applied framework/set of guidelines/choice reductions leads to better output. Just imagine if you had 10 developers all coding web sites, start to finish, in different ways & languages. And then have them rotate to a different developer's project each month. :)

Ben
www.developmentnow.com
Comments are closed.