Iztok has been at it again, making comments that prompt another post. 🙂 He expresses his view that there are only two viable options for mobile development. The first is essentially the web-based technology approach (HTML/JS/PhoneGap etc) and the other is the platform native tool chains, Eclipse/AndroidStudio/Xcode etc.
He may be correct about the latter, and at some point in the future I may have to switch from Oxygene to those platform tool chains.
The Future Perhaps Lies in the Past
Before Oxygene I already tried those platform tools. I just couldn’t get on with Eclipse at all and have always hated Java. I also started learning Xcode and Objective-C and whilst this was vastly more enjoyable than Java/Eclipse and I could appreciate the idiosyncrasies of Objective-C at a technical level, it was still not what I’d call fun. And when the learning is for it’s own sake, fun is a key ingredient.
The problem I think is/was this: I have 20 years of Pascal behind me (plus numerous other languages, but Pascal has been my principle language skill). With so much ingrained knowledge, It’s asking a lot to learn a new IDE, a new framework (two in fact) and a new language all in one go. A far different proposition than when it’s the first and only thing you have learned, with no habits and preferences having had time to bed in.
But lest you get the wrong impression, I am by no means a monoglot. Over the years I have used many languages in a commercial setting, sometimes even at the same time (i.e. within a single project/product development). These have included, in no particular order:
- various BASIC dialects (GW, SuperBase, DATA/BASIC, VB)
- TurboPascal For Windows
and, of course
Something I have found over the past 20 years is that I – personally – find it easier to learn by relating new knowledge to the fundamentals of familiar ones before grappling with the entirely new aspects.
I find that it helps to have familiar points of reference off of which to hang your learning.
Whether this was a habit I formed from my first experience of acquiring a new (i.e. more than one) language or whether that first experience was simply the first time I was exposed to this method of learning, I don’t know. Cause or Effect ? I’m not qualified to decide. 🙂
But that first experience provides a useful – and simple – illustration.
From BASIC to ‘C’ – via Pascal
I found my way into this industry through an informal path – entirely self-taught.
The first language I tried to learn after BASIC on various home computers (ZX81, TI-99, Amiga) was ‘C‘ (SAS/Lattice on the Amiga), and I found it near impossible to start with. I just could not get my head around pointers and you couldn’t avoid them since strings were built on them! The syntax and notation perhaps made it harder (for me, for some reason). Then I found the HiSpeed Pascal compiler for the Amiga – based on TurboPascal 5. This was much easier, coming from a BASIC “background” (remember we’re talking teenage bedroom years here, not practical working experience or classroom learning).
Pascal enabled me to learn some more advanced concepts in relatively familiar territory. Strings in particular were something I could just “work with” just as I had been able to in BASIC. I simply had to learn new ways of doing LEFT$ and RIGHT$ etc (learning BASIC on the Amiga meant I had already progressed beyond WHILE INKEY$ WEND as an “event loop” :))
But pointers did also exist in Pascal and in that setting I could make sense of them and the concepts. Thus armed with what I learned in Pascal I could tackle ‘C’ again and this time it was (relatively) easy.
What Does All This Have To Do With Delphi ?
Learning for learning’s sake is all well and good, but when your livelihood depends on skills that you must learn it is also important to choose to learn skills that will continue to support that livelihood.
What is unavoidable is that mobile development is going to become only more important, though I do not believe it will ever entirely supplant the desktop. At least not any time soon.
So I understand the attraction of FireMonkey. It reduces the learning challenge to just one: a new framework – with the promise of easy access to these new mobile platforms. But that framework is a niche within a niche and the knowledge gained isn’t remotely portable outside of that niche. Furthermore, it is my view that the FireMonkey platform is fundamentally flawed both in concept and execution.
Whether you agree or disagree isn’t the point for this discussion. It’s my personal view, and it has informed my learning choice. That is all.
That choice is of course Oxygene.
Perhaps in time I might have to switch to Xcode and Android Studio, but in the meantime I can focus on learning the SDK’s in the comfort of a familiar language (actually a better version of the one I am used to) and a (more) familiar IDE. And if Windows 8/Windows Phone becomes more important than it currently is, I am also gaining familiarity with the environment in which I will have to work to support those “natively” as well.
I can honestly say that I am learning Android and I am learning Cocoa and iOS, in a way that could and should prove useful in the future, whether in the context of Oxygene or not.
But perhaps the real point is that using Oxygene to learn these frameworks reduces the scale of the challenge to a point where it becomes FUN in much the same way that Delphi 1.0 made learning the Windows API fun.