The Lost Generation
It's exam results season once again in the UK, and as usual newspapers are complaining how easy modern exams are. If they're to be believed in days of yore a Mathematics pass grade involved proving Fermat's Last Theorem — today one merely need find the exam room and spells one's name correctly.
A junior school teacher recently told me current practice advises against correcting more than five spelling errors in a pupil's text, for fear of smothering their creativity with a smog of red ink. Initially I reacted with incredulity, but upon reflection I realised each generation's education slaughters a few sacred cows of the previous generation.
In the final three years of high school my own "Eng Lit." education took in three Shakespeare plays, a couple of Arthur Miller offerings, some Orwell, brief excursions into Dickens and BrontÃ«, a smattering of Dylan Thomas, and sundry other classics (To Kill a Mockingbird and Hobson's Choice stick in the mind.) And that's just the stuff I can remember! I considered this modestly taxing, until I recalled my father's generation apparently studied Latin and learnt their poetry by heart. Much as I appreciated "Under Milk Wood", "If", etc., I'm eternally grateful I don't have them etched indelibly onto my brain.
Times change, priorities change. Education is shaped by the present, and in turn it helps shape the future. Nothing demonstrates this more than the World Wide Web revolution of the past decade (just in case you thought I'd forgotten this is technology blog!)
If environment shapes our learning, what has the last decade done to today's programmers? And if the internet is now to be nudged back towards the (neo-)desktop via RIAs (Rich Internet Applications), how might that web-centric education obfuscate, or even hinder, that transformation?
Selling your soul for an executive parking space
I'm going to make a bit of a leap of faith here. I've no figures to back this up, it's just a hunch: I'm guessing the average age of the majority of professional programmers — the community as a whole — is probably somewhere in their early to mid twenties.
Before you spit your java all over that nice new widescreen monitor, and reach for the COMMENT button, hear me out...
For organisations centred around software, the demographic of programming staff probably extends into middle age and beyond. But most programmers don't work in 'software houses'. Finance, publishing, commerce, transportation, the military — all business is now highly reliant on software. The birth of e-commerce saw an increase in programmers at these non-software organisations. Companies previously making do with a meager programming team suddenly up-sized their techie quota when e-commerce began to demand a 24/7 web presence.
For such programmers promotion naturally takes them away from 'the source'. One moment they're a coke-swigging pizza-munching code junkie, the next they're suited and booted, tidy haircuts, thumbing copies of Powerpoint for Dummies. Okay, not everyone is caught by this Logan's Run style cull, a few survive long enough to become crusty 'COBOL beardies' (the cult of the IBM AS/400), but sooner or later the majority get lured away from the career dead-end that is the programming/web team.
Supposing this proposition is indeed true, it naturally follows that the majority of today's programmers have lived their entire professional lives in the shadow of the World Wide Web.
A slight detour...
For the last few months I've been working on a desktop application in .NET — the first time I've worked with C# in anger, and my first serious experience with the .NET framework. Jumping from Swing to .NET was a strange experience. I'd heard talk that the .NET framework is easier to work with than Swing. I wondered whether this simply meant Visual Studio was a better 'builder', or whether .NET components themselves were better designed? Given the extreme (almost anal?) levels of abstraction Swing exhibits at ever turn, I could well imagine a more streamlined toolkit.
Well, in the last few months I finally got my answer...
The .NET components are certainly simpler, to the point of missing some pretty basic functionality. For example, I wanted to change the text on a ListBox item. Swing's models, listeners and renderers make this straight forward, if slightly verbose. But in .NET the only solution I could 'Google' was to unassign the data source, then immediately reassign it. There is apparently no other way to re-evaluate current ListBox contents.
I asked a colleague with .NET experience about this, he mumbled something about components being compatible with web forms. Hmm... are .NET desktop components really hobbled by what their poorer web cousins can do? (I don't really have enough experience to answer that myself.)
I suppose the above can be explained away via one of Microsoft's most annoying habits: making their technologies be all things to all men. We see it in the agnostic way they treat languages. We see it in the design of C# itself (an already kitchen sink syntax rapidly acquiring every passing language fad, seemingly devoid of focus or vision. Not that we'd ever do that in the Java camp, right?) But I suspect this is merely an extreme example of a trend which is reflected in other technologies.
All that glistens...
I can see why Microsoft consider it advantageous to mask the differences between web and desktop UIs. We have a generation of programmers for whom coding in the likes of Swing is an ancient black art. They think in terms of pages and databases, not events, object models and files. Their error handling instinct is "log and recover", not "report and query". They fret about design, colours and fonts. They cover the window in buttons for options which should be on menus. They create image buttons, rather than buttons which contain images. These aren't random grumbles, by the way, but real 'disorientations' I've encountered from web programmers moving to the desktop.
In and of themselves these problems aren't so bad. Nothing a few good books and some practice couldn't fix. What is perhaps more disconcerting is the way some RIA technologies seem to draw their primary influence from the page-centric, design-heavy world of the web app. As nice as Adobe AIR applications can look, nobody could ever mistake their (often bold) UIs for looking like (or behaving quite like) conventional desktop applications.
But then, why should they? Conventional desktop applications don't look like conventional desktop applications any more — increasingly they look like web pages. Another legacy of the web app! (Grumble grumble, mutter mutter!! :)
I actually think Java offers the best blend between traditional and modern here. Swing is an out-and-out unashamed desktop API, with no compromises made to marry it to any other medium. Likewise JavaFX provides a flexible way to add web-esque 'informality' to a UI, without forcing informality universally across it.
Java, I feel, is the superior technology in this field. But we really must make a strong case for it, or risk losing the popular vote to a compromise technology, and forever more be hobbled by the worst habits of the web decade, rather than set free by its best.