For a while now, I’ve been convinced that it is becoming increasingly important for regular software developers to really know Computer Science. Yes, the internals that you don’t really care about ’cause all you care about is “business value”. Yes, I’m talking about finite automata, algorithms, operating systems, compiler theory, artificial intelligence, functional programming… Without this knowledge and the deep understanding of where to apply it, it is very hard to progress to beyond journeyman. I’ve also realized that what many people claim is master-level of competence, is really not quite the truth. If someone who is supposed to be a master programmer doesn’t understand computer science internals, then he or she is really not all that masterful.
Those who think that these are merely details left to the systems guys are just plain wrong. While you may not write the next RSA, the enlightenment that all this knowledge gives you, when coupled with actually applying this theory to “application development” will take you to the next level.
With the kind of attention given to usability of regular desktop or web-based applications (sic), is it any surprise that most mobile applications are downright annoying to use? Many reasons contribute to this sad state of affaris – general lack of User Centric Design and Interaction Design awareness, applications being written for the developers themselves (as opposed to regular or specific users), a philosophy of miniaturization rather than careful thinking and planning of the application UI and technical limitations. The one that causes me the most amount of frustration is the indifference.
Nothing new here – this is the same indifference that causes you to reach for a nearby rock to lob into your computer screen. The fact is, given the much smaller form factor – smaller screen, smaller buttons and the associated painfully slow text input, potentially single-hand operation, potentially flaky network connections, slower processors for some older models, no mouse (with black-berry type devices) – the need for carefully thought out, user centered design is even more important. On top of these issues, some mobile browsers only support vertical scrolling, devices are different in soft-key placement and use, users have to often pay by the byte for bandwidth used – all add to the overall problem. These issues only serve to lay more constraints on the application designer. And yet, most mobile software development teams don’t seem to care – and they treat their users with the same disrespect they treat PC users.
I plan to write a series of articles that address a few of these issues – and how to design better interfaces for mobile devices. Not too much in these thougts will probably be original – but will essentially be applied user-centric design priciples for mobiles. Hope they help!