Mike Riley

Dr. Dobb's Bloggers

Coding in a Post-PC World, Part 1

November 11, 2011

The latest trend that has captured my attention is the impact of a Post-PC world on software development. I'm not talking about how we are using our PCs to run mobile device emulators and simulators to write software for those platforms. I'm talking about actually using those new hardware devices to write code.

Lately, I have been busy writing my first technical book, Programming Your Home, published by Pragmatic Bookshelf. But now that the book project is wrapping up, I once again have bandwidth to devote to writing about the latest emerging technology trends in software development.

The latest trend that has captured my attention is the impact of a Post-PC world on software development. I'm not talking about how we are using our PCs to run mobile device emulators and simulators to write software for those platforms. I'm talking about actually using those new hardware devices to write code.

This four-part series of blogs will discuss the hardware, software, and cloud-based services I use to write code. This series was partly inspired by what has become a popular post by Munich-based programmer Mark O'Connor and partly by my personal hit and miss experiences in my own Post-PC efforts. I'm going to tell it like it is, no sugar coating. When it works, it works well. When it doesn't, it crashes and burns. I'll share with you my hardware and software configurations, workflow practices, and hard-earned lessons from the successes and failures I have had with coding in a Post-PC world. This first post will begin with my tablet coding-oriented hardware configuration.

The Power is in the Pad

I try to be platform agnostic when it comes to computing. Each OS has its advantages and disadvantages. I like Android for its Linux roots, its open source hack-ability, and its rapid iterative ascent in the mobile space. But compared to the iPad, Android tablets are still far behind. For those readers as old as I am, we are experiencing the PC vs. Mac era all over again. Ultimately, Android will win the battle for the same reason Windows won the PC wars  its cheaper and has far more marketing partners than Apple's approach. But as it stands today, the iPad is the far better unification of hardware and software choice. Even with Ice Cream Sandwich's (Android OS 4.0 release) improved support for Bluetooth and USB controllers, Android's tablet experience still feels disjointed. It will likely take the Android team two more iterations (roughly two years) to catch up to what the iPad running iOS5 has to offer today.

That said, my preferred platform for writing code when not in front of my Mac, Linux, or Windows PCs is the iPad.

While the iPad certainly has a lot of hardware facets to like, there are a few areas that I miss. First, due to the closed nature of the Apple ecosystem, no removable media slots mean that I require a TCP/IP connection to perform file transfers. Second, the standalone, encapsulated nature of the application's file system means there is no central storage I can use to share the file across applications. This can make for some incredibly inefficient file duplication. For example, I can't have an onboard version control utility access the same file store as a standalone text editor. Either I have to duplicate the files between each application's file store or I have to rely on an external application to manage these processes.

The most annoying attribute of the iPad for coders is the onscreen keyboard. I consider myself a pretty fast touch typist, but when it comes to the onscreen keyboard, I feel like I'm back in grade school pecking away on a brick. Not only does it feel unnatural, the lack of any tactile key depression or hard outline throws me off. Combined with the auto-correct feature that tries to figure out what my jumble of letters really meant to spell, I feel as though I am always fighting with the onscreen keyboard to codify my thoughts, and I am losing the battle. And even if I could eventually master the onscreen keyboard, its lack of tab and arrow keys and the fact that I have to enter multiple key presses just to produce popular programming symbols like #, *, {}, or [] is cumbersome and painful. Some of the more sophisticated text editors for the iPad compensate by laying an additional keyboard overlay, but this hack takes up valuable screen real estate, leaving even less room for me to make sense of my code compositions.

Enter the Keyboard

Fortunately, the iPad supports Bluetooth keyboards, and there are a lot of choices here. While I do like the integrated keyboard+case designs from the various manufacturers, my default iPad physical keyboard of choice when in a stationary mode is Apple's own wireless keyboard. This keyboard is small, lightweight, with a width not much longer than an iPad. This is due to the fact that the keyboard doesn't have a numeric keypad. It's more or less the same keyboard format and functional design found in Apple's laptops. It is high quality and just "feels" right. The big pitfall with this keyboard-only approach is that the iPad still needs a stand or folding case to prop up it up, so that's a lot of extra gear to carry around. Plus, it makes things cumbersome in a mobile scenario. And don't even think about using such a configuration during a public transportation commute.

The setup works better on a plane, where the serving tray is just the right size for the Apple wireless keyboard, and an encased iPad can hang against the back of the seat in front of you. Even so, I have yet to find an optimal mobile hardware keyboard configuration, but a physical keyboard still beats the onscreen keyboard for writing code by a long shot.

So what about those times when a separate keyboard just doesn't fly, such as in the aforementioned packed commuter train scenario? That's where the various case+keyboard combos come into use. I'm currently on the lookout for the best case+keyboard combination for either the iPad or Android tablet, so if you use one that you absolutely can't live without, email me or post a comment. I'm keenly interested to learn what made that keyboard such a winner for you.

Tune in Next Week

The iPad is optimized for content consumption, not content creation. Yet as the market becomes further saturated with consumption apps, opportunities for creation apps will blossom. Of course, that segment will remain a sliver in the larger app category pie for the simple reason that people use the iPad mainly as an entertainment and inbound communication device.

In the next installment, I will discuss the software I use to reproduce and enhance the desktop coding experience on both the Android and iPad tablets. Until then, feel free to leave comments and share your own Post-PC coding configurations.

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task.
However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Video

This month's Dr. Dobb's Journal

This month,
Dr. Dobb's Journal is devoted to mobile programming. We introduce you to Apple's new Swift programming language, discuss the perils of being the third-most-popular mobile platform, revisit SQLite on Android
, and much more!