The personal computer industry has experienced a massive shift in recent years. Desktop computers still exist, of course, and they remain vital for tasks that require keyboards and large screens: program-ming, writing, spread-sheeting, data tracking. But much of personal computing now occurs on smaller devices, particularly for quick information, media consumption, and social networking. Tablets and smartphones have a fundamentally different user-interaction paradigm based primarily on touch, with a keyboard that pops up only when necessary.
The mobile landscape
Although the mobile market has the potential for rapid change, currently two major phone and tablet platforms dominate:
- The Apple family of iPhones and iPads, all of which run the iOS operating system.
- The Android operating system, developed by Google based on the Linux kernel, which runs on a variety of phones and tablets.
There is also a third mobile development platform, which is not as popular as iOS and Android but involves a company with a strong history in the personal computer industry:
- Microsoft’s Windows Phone and Windows 10 Mobile.
Even more compelling is the Universal Windows Platform (UWP), a version of the Windows Runtime that forms the basis for Windows 10 and Windows 10 Mobile. A single UWP application can target every form factor from the desktop to the phone.
For software developers, the optimum strategy is to target more than just one of these platforms. But that’s not easy. There are four big obstacles:
Problem 1: Different user-interface paradigms
All three platforms incorporate similar ways of presenting the graphical user interface (GUI) and inter-action with the device through multitouch, but there are many differences in detail. Each platform has different ways to navigate around applications and pages, different conventions for the presentation of data, different ways to invoke and display menus, and even different approaches to touch.
Users become accustomed to interacting with applications on a particular platform and expect to leverage that knowledge with future applications as well. Each platform acquires its own associated culture, and these cultural conventions then influence developers.
Problem 2: Different development environments
Programmers today are accustomed to working in a sophisticated integrated development environ-ment (IDE). Such IDEs exist for all three platforms, but of course they are different:
- For iOS development, Xcode on the Mac.
- For Android development, Android Studio on a variety of platforms.
- For Windows development, Visual Studio on the PC.
Problem 3: Different programming interfaces
All three of these platforms are based on different operating systems with different APIs. In many cases, the three platforms all implement similar types of user-interface objects but with different names.
For example, all three platforms have something that lets the user toggle a Boolean value:
- On the iPhone or iPad, it’s a “view” called UISwitch.
- On Android devices, it’s a “widget” called Switch.
- In the Windows Runtime API, it’s a “control” called ToggleSwitch.
Of course, the differences go far beyond the names into the programming interfaces themselves.
Problem 4: Different programming languages
Developers have some flexibility in choosing a programming language for each of these three plat-forms, but, in general, each platform is very closely associated with a particular programming lan-guage:
- Objective-C for the iPhone and iPad
- Java for Android devices
- C# for Windows
For these reasons, a company that wants to target multiple platforms might very well employ three different programmer teams, each team skilled and specialized in a particular language and API.
This language problem is particularly nasty, but it’s the problem that is the most tempting to solve: If you could use the same programming language for these three platforms, you could at least share some code between the platforms. This shared code likely wouldn’t be involved with the user interface because each platform has different APIs, but there might well be application code that doesn’t touch the user interface at all.
A single language for these three platforms would certainly be convenient. But what language would that be?
I hope I have helped in something. Until the next opportunity!