Several months ago, I posted a question about developer tools and felt I was at crossroads of sorts. The choice to move away from what is familiar is never easy, but I felt stronger about taking a hard look at the future of how I would approach software than I had in the past. It's impossible to ignore the transformation of technology over the past few years from the near monopoly of Windows desktop computers to an explosion of tablets and smartphones by a variety of vendors that are being used everywhere and increasingly sharing data with one another. The Windows programmer, at least a programmer that knows only 32-bit Windows desktop application programming, is quickly becoming outmoded.
I looked seriously at HTML5, but I kept drifting back to native app development approaches. The tools and languages and mind-set required to create a set of scripted text files that get interpreted in different ways by different browsers on different devices with part of it on the server and part of it on the client and without a constant state is perhaps too much of a paradigm shift for me when building much more than a blog or informational set of pages.
So when I took stock of the state of Delphi and its publisher, Embarcadero, and considered my time-frame and budget and what it would take to move my skills to other platforms, there were several considerations:
- If I stayed with Delphi, I would first have to upgrade to the latest version, then purchase the mobile add-on, then either purchase updates later as needed or start an annual subscription. I was looking at a about $1500. For a side-line business like mine, that's pretty tough.
- Ever since .NET came out, I've been reading about it, following blogs, and watching development trends to see how long it would last and if it would be something worthwhile studying. I am now fully convinced that knowing .NET is an invaluable skill for doing anything with Microsoft's computing devices, from a desktop PC down to the Windows Phone and up to the Azure cloud. And there are multiple third-party tools that use Visual Studio as an IDE for developing cross-platform applications, leveraging the skill sets of C# developers (for example, VSNomad and Xamarin). I longed for the plethora of books, blogs, videos, forums, and other technical resources enjoyed by .NET programmers, resources that are so few and limited in the Delphi arena. If I decided to throw my time and money at Delphi, I would probably forever shut out the possibilities of doing anything serious with .NET--I just don't have the time to spread myself between the two systems to the depth I want to go.
- I had used RemObjects Chrome a few years back and enjoyed getting my feet wet with .NET using the familiar Pascal language, but hadn't kept with it. So I took a second look at the product, now called Oxygene. Many language enhancements are there that can be found nowhere else--it's fun to discover the direction this product has taken. Plus, it now supports all the major platforms and devices. Of course, since it's a plug-in compiler within Visual Studio, it also supports the .NET language and all the devices that Microsoft supports. One very compelling aspect of Oxygene for me was the price--one price gets me all platforms supported AND the annual subscription! In fact, with the cross-grade pricing to move from Delphi, I could move to this environment for about the same price as the upgrade to Delphi WITHOUT the mobile add-on and WITHOUT its annual subscription--about a third the cost!
- Finally, if I was going to do application development on multiple platforms, I was definitely interested in how those applications would be developed. Each device and each vendor has unique features and styles making a write-once, work-anywhere idea nearly impossible. Delphi is attempting to make that work with their FireMonkey framework, but I'm dubious it will ever be the panacea they proclaim. They use the terms "native" and "pixel-perfect" carefully in different contexts and I'm a little nervous about how I will know whether devices or platforms are supported and how long I would have to wait to be able to support a new device or operating system upgrade. However, having one tool to build the GUI for multiple platforms would certainly cut down on the development time. On the other hand, Oxygene utilizes the native designers for each platform allowing their product to work without question on any of the platforms for which they can generate executables. It comes with a price, of course, that price being the learning curve for the designers on the devices you want to support.
So when I factored all these considerations together, the choice for me became relatively clear and simple: for less money than upgrading to Delphi, I could move into .NET development with it's vast technical resources and opportunities AND have a tool that would allow me to explore mobile platforms. For me, learning the designers for the various platforms, while definitely a time-consuming learning challenge, will also make me a more valuable developer by expanding my skill set with recognizable capabilities. I challenge anyone to show me employers searching for FireMonkey programmers, but if I know how to create XAML or Android interfaces, there will be many more opportunities to pursue.
The decision is made
With the decision made, I purchased Oxygene late last spring and have been diligently studying it as time allows. My curiosity about mobile development was sparked almost immediately and I have been building test apps for WinRT and Windows Phone late into many evenings (not even possible if I had chosen to stick with Delphi). I'll write about those adventures soon.
In the mean time, I still happily code in Delphi 2010 during the day. There are a lot of Windows servers and back-end integrations that will need to be supported for a long time--and Delphi for Win32 is well suited for those tasks. If I ever want to get data out of one of those back-end Win32 services and use it on a mobile device, it would not be terribly difficult to add an ODATA interface and spit out JSON or XML.
My goal is that when someone needs support for some .NET code or wonders what it would take to put an app on a smartphone, I want to be ready with an answer--and some experience with popular tools to support it. I believe Oxygene and Visual Studio will take me where I want to go without constraining me in a niche developer market--a niche that worked well for me in the past, but one I feel it's time to leave.