Jul 2, 2009

Kozma Prutkov, one of the brightest minds in the software development

Alright, that's quite a stretch. Not only Kozma Prutkov is by no means a software developer (he was a writer, one and a half centuries ago), it's also not a real person (but rather three people behind a single fictional name).
The reason that he's not that well known is that it appears to be quite hard to translate his aphorisms, which are hugely based on the wordplay. Which reminds of what Douglas Hofstadter said about Gödel, Escher, Bach translation:
There were a million issues to consider in any potential translation, since the book is rife not only with explicit wordplay but also with what Scott Kim dubbed "structural puns" - passages where form and content echo or reinforce each other in some unexpected manner, and very often thanks to happy coincidences involving specific English words.
And I think it's a shame in case of Kozma Prutkov. Those little revelations, hidden in a generally tongue-in-a-cheek perls of wisdom, in some ways defined my own world-view long time ago, and I am even more amused to see how do they manage to take new forms when I return to them today.
Fortunately, some people tried to translate it, anyway.
The good thing about this kind of ambiguous and satirical aphorisms is that one is free to put into them whatever meaning he feels fits better himself.
However, in this particular case I was really impressed to discover so many empirical truisms of the software development, which can be directly mapped upon Kozma Prutkov's aphorisms.
Well, this discovery is quite a pleasant exercise on its own. People tend to get enjoyment in finding familiar patterns observing seemingly unrelated phenomenas ("We experience delight when we recognize patterns, yet we're also surprised by them").
So, I will dare to cite some of them.
To be honest, my original plan was to append my own thoughts/associations (and possibly explanatory links) triggered by these sentences. But then I understood that most of those thoughts are pretty obvious, and besides that would possibly rob some people from having a kind of enjoyment I had while discovering these associations themselves.
So for only the couple of the first ones:
  • Do not cut everything that grows.
  • Buy a painting first, and then frame it.
You are not gonna need it
  • The first step of a baby is the first step to his death.
Most of the software designs are deemed to die much sooner than one would expect. But chances are that they will give a birth to the next generation, and many others after that. One has to consider it when designing the systems.
Now, I challenge you to find your own associations for the rest:
  • Many things are incomprehensible to us not because our comprehension is weak, but because those things are not within the frames of our comprehension.
  • If upon a cage of an elephant you will see a sign reading: "buffalo", do not believe your eyes.
  • When casting pebbles into water, look at the ripples being formed thereby. Otherwise this activity will be an empty amusement.
  • Never run to the extreme: who wants to dine too late today takes chances to instead breakfast tomorrow, early in the morning.
  • What other people can say about you if you can't say anything about yourself?
  • Trace everything back to the beginning and you will understand a lot.
  • New boots always pinch.
  • Nobody will embrace the unembraceable.
  • There is no great thing that would not be surmounted by a still greater thing. There is no thing so small that no smaller thing could fit into it.
  • Look in the root!
  • Better say little, but well.
  • People's memory is like a piece of white paper: sometimes it writes well, and sometimes bad.
  • What is the best? - Having compared the past, link it to the present.
  • If you have a fountain, plug it up. Let the fountain too have a rest.
  • Only reason on what your notions allow you to discuss. Thus, knowing nothing about the laws of the Iroquois language, can you pass a judgement on it that would not be ill-founded and stupid?
  • Having lied once, who will believe you?
  • Looking into the distance, you will see the distance; looking to the sky, you will see the sky; looking in a small mirror, you will only see yourself.
  • Where is the beginning of the end that comes at the end of the beginning?
  • Do not seek for unity in the whole, but rather in the uniformity of distinction.
  • We don't care for what we have, we deplore what we have lost.
  • Every thing is a manifestation of infinite diversity.
  • Who prevents you from inventing waterproof gun-powder?
  • When looking at the sun, squint your eyes - and you'll readily discern the spots upon it.
  • If all the past were present, and the present existed along with the future, who would be able to distinguish, where are the causes and where are the consequences?
  • Virtue is an award for itself. A man excels the virtue, if he serves never receiving an award.
  • The harm or benefit of an act depend on the combination of circumstances.
  • Things can be great or minor not only by fate's will, or contingency, but also by every person's notions.
  • Sometimes, zeal overcomes even the common sense.
  • When it concerns art, every tailor has views of his own.
  • People could not stop living together, even if they walked far away from each other.
  • If you want to be happy, be!
I'd be really happy to hear from you, and compare it with the picture in my own head.

Jul 1, 2009

There will be no substitute for COBOL

I've bought that book quite some time ago, and only recently managed to fetch it from my bookshelf (did I already mention that I am a book junkie)?..
Being a second edition of the classic book, some kind of a new thin wrap around ten years old candy, it still manages to sound insightful in some places.
Well, that candy is not just old, it's ancient (first edition is 1990, second one is 2005)... well, at least from the perspective of everchanging software development world.
Still, I'm done through the bigger half of that, and I am not regretting doing that so far. However, there was one part which has turned out to be mind provoking in a somewhat unexpected way:
But there's something else happening here, too. With all that heavy use of COBOL in the business world, where money is to be made by cutting costs wherever possible, why haven't at least a few companies switched to something better? No, I don't mean 4GLs. I mean 3GLs that provide the same capabilities as COBOL. Why haven't the innovative, advanced firms started using a better COBOL?
Here's where I want to get to the real point of this essay. I want to take the position that people aren't switching away from COBOL because there really isn't anything better to switch to.
Heresy! Ignorance! Stupidity! I can hear the silent cries from my reading audience now. But wait, there is method in my madness, and I would like to explain.
...What other tools have been invented to address [the business] problem domain?.. That better way is still COBOL. That's the gist of my heresy.
Does that mean that I think COBOL is a good language?
Emphatically, my answer is a resounding "No."
...Why? Why is this ancient and clumsy language not replaced by something that does its job more cleanly? Because, I would assert, the research world which might create a better language is so disdainful of business application software in general, and the COBOL language in particular, that it is blind to the thought that a major research challenge lies in defining a better COBOL.
COBOL, eh?
Now, certainly, COBOL is out from the scene, and that's something Robert Glass acknowledges himself (what a surprise!) in that "special 2nd edition chapter". But that's not the point.
"COBOL" is just a label, and if one blurs it away from the picture (together with probably some other vintage things), the pattern extracted seems to be very familiar.
As it usually happens with my poor mind, when it's being provoked by something, I see a reference to several (possibly non-related) things at once:
  • That Deja Vu feeling one gets often when reading discussions about the present state of the technology. So, does C++ looks like COBOL in this context?..
  • And what about that too well known Tim Sweeney talk?..
  • And what is a "programming language", after all? Is it programmers' or users' thing, or maybe both?
  • Is really software development history developed in a spiral (pretty much like the human history)?
  • What is the point in developing the new "programming languages"? It seems that users do not care about languages, they prefer working software.
  • And what about our's today arrogance? Like in, "C++ is going to stay here for a while, because it's the most efficient language, and computer games do demand performance".
  • Could it be, that business value of the software is higher if users have more control over the way this software is applied to their domain?
I mean, yeah, of course. C++ is not COBOL. And Java is not COBOL. And C# is not COBOL. And F# is not COBOL.
Those are bloody modern and mainstream.
Or are they?..
Or maybe they are just an another coil of the Spiral?
What we are, then? Are we the pivot of that spiral, or just a part of a coil?
All our experience, knowledge, mental models - all of it can happen to become nothing in the long term.
So, what do we do to prevent that?
Learn COBOL, of course.