Monday, July 27, 2009

I have issues

Wired magazine is awesome, significantly more so now that I read it. I described it once as Maxim for nerds, but it's more like Maxim is Wired for sexually charged toddlers (Lolita 2: Lolitita.) Wired has consistently thought-provoking articles (New Socialism and Formula that Killed Wall Street come to mind) and the writers don't dumb technical shit down more than they have to. My first and probably only print magazine subscription.

Back to the issues thing. I've been getting dragged into GUI programming, but not kicking and screaming as I had expected. There's a certain appeal to the subjectivity of interface requirements (build what the user wants, not what the user says he/she wants) and I'm not going to lie... I really like pretty things. Also... Javascript programming is fun as hell. It's a great language (first class functions ftw) and your development cycles are like minutes long (write, reload, check if shit works.) Coding seems to become a chore whenever you move away from that iterative paradigm. Writing huge, complex systems in one sitting is definitely a recipe for disaster.

So I've been settling on two approaches to interface design recently. One is... present the user with a playground. With lots of visual and/or tactile feedback, the user is able to learn quickly and the interface becomes incredibly intuitive over time. There's an investment for the user, but it pays off. The interface here needs to be minimally stateful i.e. the actions the user can possibly perform needs to stay fairly constant.

The second is... present the user with as few actions as possible. I try to use a lot of fade-away menus here. This is where you want to funnel the user down a certain process; you want to assert some level of control over the user's actions so that they don't fuck shit up or generally do something you don't want them to do. An example of this would be a landing page for an internet advertisement: you want to prevent the user from surfing off into the sunset... you want the user to BUY YOUR SHIT.

The trouble is you often need to make a compromise between these two approaches. A simple design example would be say a process tracking application. You want to enforce a reasonably strict process with data input. Data needs to be accurate. But the reporting needs to be more or less a sandbox. The process of converting data to information requires user freedom.

There are probably two areas of computer programming that require this level of balance and dare I say Zen. Interface design is one. The other is programming language design. These diametrically opposed aspects of HCI illustrate the two types of computer users, their differences and similarities. The similarities, in my opinion, are more interesting.

In both, there's this yin-yang conflict with user freedom vs. system integrity. With memory management: "C programmers think memory management is too important to be left to the computer. Lisp programmers think memory management is too important to be left to the user." Computers are excellent at dealing with well-defined rules, but I think it's less than clear if memory management can be defined by a set of simple or even complex rules. I think it's less than clear in both interfaces and programming languages if users want control or simplicity. Ideally they could have both, but having your cake and eating it too is improbable, even in Schroedinger's box. C and C++ have diminished significantly in popularity, esp. in mainstream programming. I understand that C++ still plays a huge role in game development and some server-side programming, but let's be honest here: Java, PHP, and Python won with the Joe Schmoes.

You also have the trend towards sandbox environments and "tactile" feedback. As I mentioned before, iterative development is best because humans are built to process feedback. Here we have this trend towards languages that are simpler and "safer" to screw around with. At the extreme end you have LISP, Python, Ruby that have REPL environments. But you also have PHP and Java, which are safe enough to change, run, and debug without worrying about a dangling pointer that will guide you to a blue screen of death. Basically... garbage collection ftw.

Sorry for rambling here... but I've been trying to write more. It's a good habit. Also, take everything I say with a grain of salt. I'm a n00b and I actually kind of like C++. Wrangling with memory issues builds a lot of character, something these limp-wristed (well... more limp-wristed than the typical computer programmer) Python hacking kids these days really need. :-p

No comments: