In the world of software development is there such a place? A mythical place of wonderful dreams and pure happiness for all … I doubt it.

We have Windows, Apple and Linux/Unix/BSD as the OS platform and each chose their own path as to how the bare electronics should be leveraged to provide an overall User Experience. Each domain also chose different business models to attract different users to their platforms.

Microsoft wanted to be everywhere and dominate as the sole platform to build from but since the start has always approached this from a Software Engineers perspective which was always struggling with the balance between Versatility and Usability.

Apple spotted a gap in this market understanding that the majority of users struggle using the TV remote so a computer needs to be even simpler. They recognized that quality was also key and thus focusing on high quality, easy to use products. This came at a cost of individuality because apple treated all its users equally in its eyes.

Now if you thought I was building up to Linux/Unix/BSD being the perfect solution, you would be wrong. This required you spent 10 years studying computer science, and after many technical publications in the academic world followed by the sacrifice of at least 2 windows desktops and 5 iMacs and you would manage to unlock the ability to boot your computer getting a bash shell … Okay a slight exaggeration but this area of the computer world has been anything but easy to get in and left only for the true enthusiasts.

Now imagine as a developer you want to write your own software for a computer?

I have been plagued by this issue for two decades, bouncing from one language to the next. Simple dos batch files; BASIC; VB5; C; C++; VBA; C#; Java; JavaScript … all in the hopes to find “the one”.

I have foolishly been tempted by ideas of coding once and deploying to all platforms and honestly i am not sure if will ever get there.

Every time I start down a path I get distracted my “coding squirrels” that tempt me down a different path and thus struggle to ever complete a personal project fully to my own satisfaction.

Microsoft has come a long way and might soon get UWP applications to take off. All that is needed is to forsake all users before Windows 10 and then you get applications which run on Windows, Mac, Linux, Android and IOS. The tooling for developing is first class but if you intend to build business class applications your out of luck because some business will still be using Windows 7 for some time.

Java is promising in that it operates on its own VM of sorts so technically can function on any system that has a JVM but honestly Java applications look like something from the 70’s … you might as well have written your software in Delphi (some people still do). For businesses, visual appeal is not a big requirement but that is starting to change.

A new trend is HTML5 based software, a new collection of standards that combine traditional HTML elements with JavaScript and css. Creating a balance between easy and flexible UI that is also dynamic and visually appealing. This introduction of “Web Apps” starts to make sense with devices such as the Chromebook genre which is basically just Linux combined with the Chrome browser. To solve the need for always connected these “Web Apps” have offline functionality being built into them so as long as you can get internet connectivity eventually they can become appealing given their much cheaper price point.

Other options include Node.js where you can stand up your own lite weight web server again solving the lack of internet connectivity and will run across all three pc platforms.

So this must be it right? Maybe for most applications but nothing beats the native code base performance and if you need pure performance either for gaming or crunching large sets of data then you might do better to leverage Java/C#/C++. You might even need to target a specific architecture such as ARM of X64 depending on your application space.

Now all that is left is where and how to store your data … SQL/Memory/JSON/? … But that is another story.