01.29.10

Weighing in on the iPad

Posted in Apple, Journal at 3:14 pm by Pablosan

I’ve purposely refrained from reading too much about the release of the iPad. In all likelihood these points have already been made elsewhere, but this is my view of Apple’s new toy.

I’ll start with the patently obvious (pun intended): exactly like their introduction of the iPod, and exactly like their follow-on introduction of the iPhone, the iPad’s primary raison d’être is to provide yet another portal to content. Steve Jobs brazenly admitted as much in Wednesday’s product announcement, citing a couple of facts:

  • Apple has 175 million consumer credit card numbers attached to iTunes accounts.
  • Customers have downloaded 3 billion apps for their iPhones and iPod Touches

That’s just applications! What about music and videos?

  • As of a year ago (Phil Schiller’s Macworld keynote) iTunes customers had purchased 6 billion songs.
  • Over a year and a half ago, customers were purchasing 50,000 videos per day on iTunes. Assuming that hasn’t changed (and the daily rate is likely much higher today), that would be over 18 million video downloads per year.

Interestingly, as the iPhone and iPod Touch opened up new content sales for Apple in the form of videos, the iPad also adds ebooks. So Apple wants you, me – all of us – to purchase our content from them. The devices are simply the conduit. Granted, the folks at Apple are software and hardware artisans, so using their devices to consume all that content is a joy in itself. But I think Apple figured out a while ago that hardware will continue to be marginalized and that “content is king.”

So enough stating the obvious. I’ve heard a few people (geeks, mostly) ask questions that basically boil down to “So what? Who cares?” I have an iPhone. I have a Macbook Pro. The last thing I want to do is lug around a third device that doesn’t give me anything new!

I’ve also heard it stated that the iPad is a let-down because it’s evolutionary, not revolutionary. I disagree with these sentiments. I think the iPad is revolutionary and I think we, as geeks, need to sit up and take notice. It has been a very long time coming, but the way we interact with computers is finally becoming a bit more… human. Lately, there has been a lot of buzz in the IT world about User Experience, stating that it has been a second-class citizen for far too long. We are striving to simplify interfaces and improve user experience. Yet we still expect every computer user to be proficient with a keyboard and a mouse, to understand hierarchical menu systems, keyboard shortcuts, archaic command line incantations, etc.

Years ago, I had an idea for a computing device. The impetus for my idea was the simple thought that “a computer should be as easy to use as a piece of paper.” The iPad is not that device, but it is much closer than a device that uses a keyboard and a pointing device. What is more natural than pointing at something with your finger? The iPad is revolutionary by being a full-scale computing device that we interact with very naturally; directly. It eliminates a layer of abstraction at the most fragile, yet crucial part of any system: user input. This is a Good Thing, and I can’t wait to see where this latest step in improving user experience leads us!

So I, for one, will be lugging around three devices… at least for a while.

01.11.10

Go and Software Development

Posted in Agile, Go, Software Development at 2:04 pm by Pablosan

I recently ran across Kent Beck’s blog post, Valuing Ambiquity. In it he uses the game of Go as an excellent analogy for dealing with ambiguity in software development.

I have been a casual Go player for about two years now, ever since being introduced to the game by a friend and former teammate. Around that same timeframe I read somewhere online that all software developers should learn the game of Go (sidenote: if there was ever a case for Semantic Web, it is Go. Googling “Go” is… pointless).

I’ve written about Go before, and looking back on my approach to Go so far (I am probably rated around 20 kyu, which is a rank beginner) gives me plenty of object lessons.

One such lesson is looking at the game as an emerging design. I have no idea what the end state of a game of Go will be. The way I currently approach the game is to quickly survey the entire board with a bias for the area in which my opponent just played, in order to narrow my focus to a few strategic moves. This usually leads me to a smaller section of the board, where I will play out a series of moves in my head to determine which of my possible moves seems the most valuable (value being defined as the right balance between potential gains and potential losses).

I have found the same approach useful in improving the design of legacy code. In dealing with very large codebases (over 500K lines of code), I find it impossible to determine what the end-result of design improvements should be. However, I can look at small parts of the system and see small ways in which the design could be improved. Many times I am looking in a certain section of code because a search for the root-cause of a defect has led me there (my opponent’s last move?). Writing Unit Tests allows me to explore the problem space and find the best course of action. All of this leads to incrementally improving design, which in turn increases value.

The hard part, both in the game of Go and in software development (as Kent Beck clearly articulates), is dealing with ambiguity. I cannot lose sight of the big picture: staying focused on a small subset of the overall problem space almost certainly results in failure. Yet allowing the insurmountable complexity of the big picture to paralyze me is as detrimental as losing sight of it.

Like so many things in life, it’s all about balance: balancing potential gains and potential losses as well as balancing focus on the big picture and focus on the details.