all bits considered data to information to knowledge


IT debt, Inflated Expectations and Software Engineering

The IT debt is defined as the cost of clearing the backlog of maintenance that would be required to bring the corporate applications portfolio to a fully supported current release state.

It is estimated that the Global [IT Debt] to Be $500 Billion This Year, with Potential to Grow to $1 Trillion by 2015 (yes, all capitals, courtesy of Gartner).

Ah, the novel idea of functionally correct supportable code! There is a lot of poorly engineered software out there, and to some people it might come as revelation that a particular technology is largely irrelevant to the IT debt costs.

The CAST Report on Application Software Health sheds some light on "technical debt" or, as Gartner defines it - "IT debt", details. In absolute uncontested lead is...drums rolling... Java EE with average $5.42 of technical debt per line price tag (the costs of fixing the code). By comparison, COBOL has the lowest score at $1.26 per line of code; much maligned Visual Basic (.Net version excluded) fares much better - approximately the same as C.

Bill Curtis, chief scientist at Cast Software offers his explanation for the COBOL stellar performance - the code base has been around for 30+ years, and had better chance of being fixed during this time. As for Java, Bill said he can only offer a speculation  that "there are many people going into Java now that really don't have strong computer science backgrounds. We may just be seeing the fact that there is an awful lot of people writing code who aren't gurus in software engineering."

While I  agree with the diagnosis in principle, I'd like to point out that there were many more people "who aren't gurus in software engineering" coding in unpretentious Visual Basic  in its heyday (versions 3 through 6), and yet it came up with much better scores. With all the hype surrounding Java development in the late 1990s/beginning 2000 a lot of people led to believe that they are writing solid code just by virtue of coding in Java (on one occasion I was told that the system is "inherently scalable because it is written in Java"!). Call it inflated expectations: the built-in OOP, automatic memory management, structured error handling, byte-code portability and so on (add your favorite silver bullet here...) were expected to make up for the lack of software engineering savvy. Well', it did not - and the proof is in.

The same scenario played out with every technology out there. There is no substitute for sound engineering design and architecture - regardless of whatever technology that might be used to implement it.


P.S. It had occured to me that this is somewhat related to "Software Debt" concept explained in editorial blurb of the book by Chris Sterling -  "Managing Software Debt" - as follows:

"Shipping imperfect software is like going into debt. When you incur debt, the illusion of doing things faster can lead to exponential growth in the cost of maintaining software. Software debt takes five major forms: technical, quality, configuration management, design, and platform experience. In today’s rush to market, software debt is inevitable. And that’s okay—if you’re careful about the debt you incur, and if you quickly pay it back".


Java is losing ground (…yawn…)

The Tiobe Programming languages index came up with the following October headline: Java is losing ground despite its new version 7 release.

I'd say - its about time, just following the all Java frameworks becomes a full time job, not to mention mastering them...

Following the trend towards weakly-typed languages both Lua and JavaScript posted healthy gains; it would be interesting to see Google's Dart performance - "a class-based optionally typed programming language for building web applications"

Sudden popularity of Objective-C can only be explained by a continued craze of iPod/Phone/Pad; I fully expect it to retreat as more Android contenders move into the niche, and Apple's iron grip on the development market slips (see my post on how had circumvented it with HTML5 app)

C# is still climbing the stairs; I have suspicion that it rules supreme in Windows platform development world. The decision to discontinue support Mono project that would allow .Net Framework to be used on Linux platform was, IMHO, a shortsighted one, and will come back to haunt Microsoft in the future; maybe Miguel de Icaza can pull it through with his Xamarin project.

I attribute raising popularity of SQL procedural extensions such as PL/SQL and Transact-SQL to the growing dissatisfaction with ORM (such as Hibernate and MS Entity Framework) among the developers; in many cases the developers' productivity gained from the ability to work in a familiar environment is all but negated by the poor performance as a result of the inefficient query syntax that such frameworks tend to produce...


QED: a glimpse of the future for Java

I blogged about uncertainty facing Java (and Sun's software stack) now that is being owned by Oracle. It appears that my fears are about to come true....:(

Jeffrey S. Hammond, senior analyst at Forrester Research, said he worries that Oracle's lawsuit will not only dampen Android's market momentum, but slow overall adoption of Java in mobile environments and elsewhere.

Tagged as: , , No Comments

.Net as Will and Representation

It's been a long run for .Net in the wild... The experiment with letting go is about to end, and .Net is to become yet another Windows "component".

The update to .NET Framework policy states that beginning with .NET Framework 3.5 Service Pack 1 (SP1) the .NET Framework will be defined as a “Component”. As a Component, .NET version 3.5 Service Pack 1 (SP1) will assume the same Support Lifecycle policy as its parent product or platform.

As Yogi Berra might have remarked: "It's déjà vu all over again!"  Yes, I am referring to Internet Explorer 4.0 being "integral part of Microsoft Windows".
I think this is a major blunder on Microsoft's part, and an opening for Java to regain some of the lost ground (the last time I've checked JVM was still a separate product...)

Tagged as: , , , No Comments

Time to Move on: James Gosling leaves Oracle

As of April 2, 2010 the "Father of Java" is no longer with Oracle. This follows departures of Monty Widenius (2009) and Ken Jacobs (2010)   Oracle might have acquired the body but the soul is gone...

A cute slide presentation from eWeek: The Life and Times of Java and James Gosling

Tagged as: , , No Comments

Native speakers vs. Phrase-book savvy

It is not uncommon to hear from developers during an interview: “I do not remember all these details, I can always look them up”… And this might be a valid response – up to a point.

It used to be simple – all one had to learn was 32 keywords in C, learn the grammar and then use his imagination to create applications. Early on it was understood that re-using code will increase productivity, so the concept of library was born, later augmented by MFC and OWL… The trend continued towards ever greater modularity – the foundation classes were eventually integrated into run-time frameworks, such as Java Foundation Classes (JFC) and Common Run-time Library (CLR) in .Net… Suddenly, a developer had thousands of functional libraries built by professional teams, and incentive to re-invent the wheel diminished accordingly…

 Would it be a reasonable expectation for a developer to know every single of the classes rolled into JFC or CLR? No. Would it be reasonable to expect them to be familiar with hierarchy of the classes? Yes.  A developer needs to know how and where find a piece of code to accomplish what is needed.

 To be productive in either Java or .Net, a developer must have working knowledge of the most commonly used classes, plus a good understanding of where to find the rest. He (or she) must control the urge to create something that might already exist in the environment and  leverage the existing capabilities to create new ones.

 When hiring a developer I expect him to be fluent in the technology; at the same time I am extremely wary of both the “native speakers” – someone who is so immersed in the technology (Java, C#) that he forgets the rest of the world; on the other side of the spectrum - also to be avoided - are the phrase-book tourists who know a dozen of cookie-cutter recipes and lack either ability or curiosity about the technology to become fluent in it. The former might indicate a technology bigot who is so set in his ways that he would never be able to work with any other technology that business might require in the future, the latter might be an indication of a “fly-by-night operator” – someone who is chasing “hot” technologies to make a quick buck (or suffering from programming variety of ADHD).

NB: Interesting perspective taking my point ad absurdum can be found in this blog post: How to Find Crappy Programmers

 P.S. I emphasize “might” word in the above paragraph, as I have met - on a rare occasion - “native speakers” who spoke several disparate technologies, and were open to learning new ones… and some phrase-book savvy developers could be made to see the light, given sufficient time and money. Al in all, I would consider a "native speaker" a highly specialized "tool" that could be very sucessfully utilized on certain types of the project, while "phrase-book savvy" should not be relied upon for tasks that could require even a modicum of creativity.

P.P.S According to some sources there are ~988,968 words in English Language ; other sources imply that 171,476 words are currently in use.

Yet to be fluent you only need a fraction of it. Here's one bold attempt at classification:

3000-4000 words: Sufficient for reading newspapers and magazines fluently.

8000 words: All you ever need. More words are not necessary in order to communicate freely and read all types of literature.

10.000-20.000: Active vocabulary in the mother tongue for cultivated Europeans.


Oracle/Sun: Some questions answered, some are raised..

In my previous post I was pondering future for Sun technologies under Oracle ownership... The latest press conference with Oracle's exec team shed some light on their plans:

Java figures prominently into Oracle's future. Let's wait and see how they are going to handle the open source community...

JavaFX will get aggressive investments. Oracle is going after Flash and Silverlight.

GlassFish is delegated to the status of Microsoft Access (if RDBMS metaphors to be used), departmental use at best. Bye.

NetBeans will remain as a "lightweight development environment for Java developers". Ouch. RIP.

Interestingly enough, the open source continuous integration server HUDSON was mentioned during this heavyweights conference. Not sure what this would spell for the application... Got a feeling that Oracle will try competing in ALM market.

SUN Cloud is officially dead. Oracle CEO Larry Ellison had declared it a fad. I think he's dead wrong on this, just as Bill Gates managed to go spectacularly wrong with his "Internet is but a fad" and "Nobody needs more that 640KB of RAM" assertions.

Nothing specific on either Solaris or MySQL...


FUD for thought

"To be uncertain is to be uncomfortable,but to be certain is to be ridiculous. " Chinese Proverb

The European Commission today (January 21, 2010) cleared Oracle's agreement to acquire Sun Microsystems. What does it mean for the development community, specifically for the future of Sun's crown jewels: MySQL, OpenOffice, GlassFish EE server, NetBeans... Oracle had almost a year to figure things out.

NetBeansis especially vulnerable given tha Oracle has competing JDeveloper (and Bea Java Dev tool); maybe it will be released as open source project to the community? Rolled into JDeveloper? Discontinued?

Why would Oracle need GlassFish when it already has Bea and Oracle AS? Cannibalization is very likely.

MySQL? Anybody's guess, but I bet that it will be supported and development will continue; maybe will undergo Oracle-ization (for example, replace MySQL procedural extensions - just introduced in version 5.0 - with robust mature PL/SQL). Will it still be free? Given $1 bln Sun had spent acquiring it, and $7+ bln Oracle spent acquiring Sun, it seems plausible to assume that Oracle would try to squeeze some dough out of it. Its own flagship database sales were stung by ascending SQL Server and IBM.. I see PostgreSQL as a winner, the only enterprise capable true open source RDBMS on the market.

Java. Once positioned as a spear at Microsoft's heart; not anymore - the landscape has changed, notably with Google becoming a major player, and Microsoft wisely playing its cards by releasing C# as open standard. Yet, I do not see Oracle donating Java to the open source community, most likely we'll see variations of Sun's controlled "Community Development Process". Oracle made significant investment into Java, supporting it inside its products, and even creating its own IDE... but what is going to happen to infant JavaFX ? RIA market is getting saturated - Flash/FlexSilverlight, AJAX (and Ajax support frameworks such as GWT)... Apache Pivot looks darn promising..  Will Oracle have enough resources to spread around?

Solaris. SUN's very own implementation of Unix operating system, arguable the best out there, AIX and HP-UX market penetration notwithstanding. For a long time Oracle and Solaris were inseparable; if an Oracle DBA did not run his database on Solaris he was somewhat deemed less competent. Then Linux came of age, and Oracle made huge bet on it (remember "Linux makes Oracle Unbreakable!",or  was it other way around?). Now they OWN the platform that they flagship database was designed for. Will they ditch Linux? Unlikely. Linux is on upswing, it is robust, reliable and has enterprise level support. Will Oracle push Solaris? Not exactly their domain of expertise, and market of operating systems is not as lucrative as it used to be. Then there is issue of the Sun's proprietary hardware - hugely overpriced, increasingly obsolete... Sun recognized that they cannot charge premium prices for the hardware that is becoming a commodity, and released x86 version of Solaris; it flopped (why x86 Solaris when I can run x86 Linux?). Apple seems to be able to create perception of superiority of both software (Mac OS) and hardware (Apple), but I credit Steve Jobs for it (to support my suspicion, follow the ups and downs of Apple stock plotted against timeline of Steve's health news; also, reliability of Apple laptops lags that of Asus , Toshiba and Sony - yet there is unshakeable perception that Mac is light years ahead of lowly PC... yalk about selling sizzle!)

My bet is that Solaris will be retired over period of time in favour of Linux.... R.I.P.

NB: FUD  - Fear, Uncertainty and Doubt


Who’s got Web Services right

Once in a while, Microsoft does the right thing, and the rest of the programming community ought to simply acknowledge the contribution, and move forward. Consider web services: creating a webservice in .Net is [almost] as easy as marking a function with WebMethod attribute .

Here're some well taken points emanating from Mark D. Hansen - a bona fide Java developer and architect (and the author of SOA Using Java Web Services book)

"Adding web services to Java applications should not require programming. There should be a simple ON/OFF switch. You should be able to select some business logic, flip the ON switch, and publish it as a web service.  Unfortunately, Java isn’t designed that way. Java requires you to write code, annotate classes, recompile, and redeploy. And it isn’t simple coding either[md]particularly when you run into problems with Java/XML serialization."

Mark goes on quoting in his book the blog of Dave Podnar - a hilarious summation of the problem!

Dave Podnar's Five Stages of Dealing with Web Services

1. Denial: It's Simple Object Access Protocol, right?
2. Over-Involvement: OK, I'll read the SOAP, WSDL, WS-I BP, JAX-WS, SAAJ, JAXB, … specs. Next, I'll check the wiki and finally follow an example showing service and client sides.
3. Anger: I can't believe those
#$%&*@s made it so difficult!

I could not find the remaining two stages on the Net, but would speculate that they either deal with either reaching nirvana or switching to COBOL programming...


Profession vs. Technology

Whenever I hear a statement linking one’s profession to a specific technology (“a .Net programmer”, “a Java programmer”, “a Sharepoint developer”, “ a Ruby-on-Rails specialist”…) I cringe, and recall this story:  Profession by Isaac Asimov first published in 1957 (which I read for the first time in the late 1970s... )

This story I recommend as a required reading for every aspiring programmer, budding scientist or  high school student.

The story  is about a boy who aspires to be a Programmer, and discovers along the way that there is more to it than just a technology to master..The full text of the story (in pdf format) is available here;  for those allergic to science fiction here's a synopsis of the story in Wikipedia.

To summarize: a technology is too narrow to define a profession; maybe this is why technology certifications became virtually worthless. I do not want “Java Programmer” on my team;  I want a programmer who can use Java – or whatever technology we might be using at the moment to create a solution.

 Technologies come and go – no matter how hot they may seem today. What stays is refined body of knowledge, patterns and paradigms, rules to follow and rules to be broken... Nothing stays the same, all axioms have to be constantly re-evaluated. 

The quest is not to achive eternal bliss where everything is set once and for all, but to move forward with imperfect solutions optimal for that particular moment in time.. A catapult might have been the pinnacle of military technology innovation in it's time - and is a historical curiosity for several hundreds years now; but the lessons learned percolated into ballistic, structural engineering and rocket science...