Blunder Dome Sighting  
privacy 
 
 
 

Hangout for experimental confirmation and demonstration of software, computing, and networking. The exercises don't always work out. The professor is a bumbler and the laboratory assistant is a skanky dufus.



Click for Blog Feed
Blog Feed

Recent Items
 
Rigorous Software Engineering at the Application-D...
 
Automated Authentication of Programming Standards?...
 
The Important Software Standards: Quality, Perform...
 
Virtual Classrooms Model Social/Collaborative Soft...
 
Microsoft Cracks Open the Word, Excel, and PowerPo...
 
A Litany of Lists: Creatiing Secure Applications
 
As Complex as Necessary and no More.
 
The Same Old Mistakes, Over and Over Again
 
Sorting the Mail: Agile Databases, Vulnerable Appl...
 
SSH and Known_Hosts Vulnerabilities Threaten Grid

This page is powered by Blogger. Isn't yours?
  

Locations of visitors to this site
visits to Orcmid's Lair pages

The nfoCentrale Blog Conclave
 
Millennia Antica: The Kiln Sitter's Diary
 
nfoWorks: Pursuing Harmony
 
Numbering Peano
 
Orcmid's Lair
 
Orcmid's Live Hideout
 
Prof. von Clueless in the Blunder Dome
 
Spanner Wingnut's Muddleware Lab (experimental)

nfoCentrale Associated Sites
 
DMA: The Document Management Alliance
 
DMware: Document Management Interoperability Exchange
 
Millennia Antica Pottery
 
The Miser Project
 
nfoCentrale: the Anchor Site
 
nfoWare: Information Processing Technology
 
nfoWorks: Tools for Document Interoperability
 
NuovoDoc: Design for Document System Interoperability
 
ODMA Interoperability Exchange
 
Orcmid's Lair
 
TROST: Open-System Trustworthiness

2005-06-22

 

Dynamic Languages Improve Software Quality?

ACM News Service: Testing, Testing, One to Three, TestingThere’s something about this blurb that sets my teeth on edge.  Not all the teeth, just the ones at the back.  Let’s see if I can figure out what’s off for me, since so much of the full article is just fine.  From the blurb we get that

  • The advancement of software development to attention on best practices and codification brings with it a focus on testing.
  • The testing process has been helped by dynamic programming languages (with Python, Smalltalk, and Scheme as examples).
  • The ability to change instructions in running programs and to modify them after deployment is the enabling feature.  Huh?  My emphasis – dh:]
  • The use of XML schema assessment is taken as an example of continuous testing?  [Well, it is a dynamic process that can lead to improved input validation, but that has nothing to do with the choice of programming language nor does it get very deep into the kind of validation that applications require.]

It’s the last two that leave me at “Huh?”

I don’t doubt that there is growing and welcome use of dynamic languages, like original Basic in its day but with much greater scope of application.  The Python (and EcmaScript) languages have great appeal for certain kinds of utility computing.  The ease of integration with components created elsewhere is no small part of the charm, and the increased ability to produce components and applications usable elsewhere is completing the circle.

This ease of testing is in the hands of developers during development and when the developer is the user.  This works in the small (look at the popularity of Perl) but I don’t think it is exactly enterprise-ready.  And for me, modification after deployment strikes me as about as smart as instructing people to modify the Windows registry.  It’s one of those “all warranties are voided and remember to sign your life-insurance waiver before getting on this ride” moments.  I’m sure the IT department will be thrilled to start getting calls from executives who’ve been hacking the business-intelligence application.

The part that throws me has to do with deployment of solutions with languages that, as the result of dangerous design cleverness, are inherently insecure and exploitable.  I think the comparision with C++ and other production languages (including Java and the .NET family as well) is awkward in that regard.  

Sean McGrath’s 2005-06-10 ITworld.com article takes a more leisurely pace.  There is an important progression of levels of software correctness:

  1. It gets the job done enough for the boss to keep me on the payroll  [the survival view of correctness: ha, ha, didn’t catch me!].
  2. It passes all the tests we wrote and there are haven’t been any bug reports in some time [a phenomenon that is the same as nobody using it, too; I am happy to point out that continuing to pass a test suite is not a mark of dynamicity].
  3. We proved it to be bug free [sic] using a formal, mathematical method.

What I find interesting about this is that when you get to formal mathematical methods, unless the proof mechanism jumps in your face when an alteration breaks the proof, this is all for a very static world, and mucking with code after the proof of function (not bug-freeness) is a serious no-no.  For one thing, one may need to ship the proof with the software, and it passing a verification may be a condition on acceptance for installation. 

At the heart of this nice little progression is a misunderstanding about what one can prove.  One cannot prove that a program is bug-free either.  Proving a program correct is not the same as proving a program to be free of bugs.  I know that sounds strange, so I will leave that to be mulled over and argued with.

There seems to be confusion of the programmer’s desire to increase the efficiency of code-and-fix development cycling and with the desire to produce correct code.  It is great to shorten the code-test-repair-rinse-repeat toil of developers, but that is a bit like saying all we need is to do what we already do more, better, and faster.  It certainly fits the programming by trial-and-error-discovery-of-a-program approach to producing software.  What has us think that will do much to increase the correctness and reliability of the result?

There’s interesting linkage to Bruce Ekel and Tim Bray on this matter, and I find Tim’s appraisal not so decontextualized as Ekel’s (and McGrath’s).  I don’t think the availability of strong typing and of exception mechanisms are the problems.  It’s really about handling failure modes.  That dynamic languages have different failure modes is fine, but I wouldn’t want an end-user to see the failure modes, and that’s what happens in those models (as you’ll notice when a web page vomits an EcmaScript or other exception at you).  There are a lot of ways to deal with failure modes in a disciplined way, and no dynamic language of the kind we have right now will save us from failure modes that pertain to the application, not the programming model.

 
Orcmid, good points here. Especially your two "huhs?" Those dots don't connect for me either. And while test driven development can turn into trial and error it doesnt' have to.

I generally applaud the development of unit testing and test driven coding, but when coding this way then the construction of the tests really matters.

But thanks for the good points on testing for bugs and proving programs correct. It's also not clear to me that a correct program necessarily has the best quality. Remind me, what exactly is quality without context?
 
 
"but I wouldn’t want an end-user to see the failure modes, and that’s what happens in those models"

No, that's what happens in those models by default.
 
 
"no dynamic language of the kind we have right now will save us from failure modes that pertain to the application"

Erlang is a dynamically type checked language designed for building fault tolerant systems.

Here's a good overview
Making reliable distributed systems in the presence of software errors

Here's an industry example
Four-fold Increase in Productivity and Quality
 
 
Isaac, thanks for your comments.

Two things. Yes, it is the default behavior, but I think that play's into Ted's argument that these are dangerous tools for non-experts if put into production settings.

With regard to Erlang, I don't think that fits on the roster of what people are promoting as dynamic languages for easy software rolling. But I think the bigger disconnect is that you and I might not mean the same thing by "application."

Is there a better place we could discuss considerations like that?
 
 
"these are dangerous tools for non-experts if put into production settings"
LOL! If we cannot assume basic competence there was a hiring mistake.

"I don't think that fits on the roster of what people are promoting as dynamic languages"
Why not?

"a better place"
Such as?
 
 
Well, the languages that were mentioned in the article that led to my post are Python, Jython, Smalltalk and Scheme. The other examples that spring to people's lips are Ruby and Perl. Sometimes PHP too. (ECMAscript doesn't receive many mentions, which is interesting since it's so ubiquitous.) Erlang is not a household name, as you know.

With regard to hiring decisions, I think a lot of these choices are made by self-hired developers and people making web sites and so on. And in a very many places, I am not sure the maturity of the organization and the hiring managers would be one where this discussion made any sense.

By another venue, I was wondering if you had a blog and we could cross link our thoughts rather than hiding out down here in the comments of a rarely-read blog.
 
 
Oh, and I suppose we could go over to Lambda the Ultimate. That would be an interesting place. They have a wiki, as I recall.
 
 
Erlang is not a household name, as you know
afaict Erlang has the characteristics ascribed to "dynamic languages" so generalizations about "dynamic languages" need to take Erlang into account (or be more specific).

maturity of the organization and the hiring managers
If both the managers and developers are incompetent then I don't think we need to worry to much about the development tools ;-)
 
 
I can't argue with any of that.

In your honor I went and read through my stack of LtU RSS clippings and resubscribed to their RSS. I don't think it is worth moving this discussion to there. They seem to have beaten it to death already.
 

 
Construction Structure (Hard Hat Area) You are navigating Orcmid's Lair.

template created 2004-06-17-20:01 -0700 (pdt) by orcmid
$$Author: Orcmid $
$$Date: 10-04-30 22:33 $
$$Revision: 21 $