Journal / 2013-12-12

On Design and Algorithms

Well, it’s been almost a year since I have posted to this blog. There is no doubt that I have neglected it, but life goes on. A lot has happened since the last time I wrote. Shortly after finishing up my junior year of college, I embarked on a four-week study abroad experience in Italy. There’s no sense in summarizing that here, but I did manage to complete a detailed journal if you’re interested. Believe it or not, I am still finding new ways to relive the experience.

After returning from Italy, I spent the remainder of my summer in New York City working at Smartling, a software company that is redefining the human translation industry. While on the front end team, I learned a lot about JavaScript and the craziness of human languages. It was an invaluable experience. And yes, I did manage to partially complete a blog.

I am currently writing with the second-to-last semester of my college experience behind me. I’m not sure if it was the particularly challenging courses, the fact that I could not be more ready to graduate or a combination of the two, but it was a challenge to say the least. Either way, this blog is not a vent about the past four months — don’t worry, I’ve gotten all of that out of my system (sorry Bri).

One of the courses I took this semester was Algorithm Design. The goal of the course, as clarified by Dr. Pruhs on multiple occasions, was to learn how to “think algorithmically.” Acquiring any skill requires practice, and that’s just what we did this semester through a steady stream of homework problems that fell into one of four categories: greedy algorithms, dynamic programming, reductions and parallel algorithms. Each topic required us to think in a different way. This was especially apparent when thinking in parallel as opposed to our standard sequential mindset. Looking back on it, the course was extremely beneficial, and there is no doubt that I have improved my approach to problem solving.

This semester also marked my first online course: Human Factors in System Design. I have to be honest, the online format was not my first option, but I was really interested in the subject, and it was the only thing that would fit in my schedule. With that said, I lucked out with a great professor, and the course was truly worthwhile. Dr. Weaver, a cognitive psychologist living in New Zealand, structured the course around weekly lecture notes, online discussion boards, a user needs analysis and supplemental readings. In addition to select chapters from Shneiderman and Plaisant’s Designing the User Interface, we read a staple in the field of cognitive psychology: Donald Norman’s The Design of Everyday Things.

In his book, Norman advocates user-center design and suggests that objects should be visible (that is, they afford intended action with intuitive mapping) and provide a good conceptual model (that is, the object’s image should be coherent while providing interpretable feedback). As implied by its title, user-centered design is all about the user as opposed to the object or system. And to be clear, Norman is not referring to a specific user; he is referring to all of them.

All of them? Crap. How the heck do you design for everybody? Well, there’s obviously not a simple answer, and I’m not in any position to make an attempt. At the very least, you should never design solely for yourself because as it turns out, you’re entirely biased and only a negligible fraction of the real people using the object. There are some techniques that have proven to be useful in achieving user-centered design, but I’m getting sidetracked. If you’re intrigued, I would strongly encourage you to pick up a copy of The Design of Everyday Things.

Here is what I’m trying to get at. Design, and in particular user experience design, is a mindset. As entrepreneur Don Charlton once said, designers are “storytellers.” But a good book is more than just appealing cover art; it’s about the contents of the actual story. Alright, yeah that’s obvious. But consider applying this analogy to design. Too often, designers fall into the trap of solely making things look aesthetically pleasing. Designer Paul Adams eloquently described this phenomena as the “Dribblisation of Design.”

In reality, aesthetics should always come second to usability. That is, the focus should be on improving the tasks that users need to accomplish as opposed to simply how the product looks. Now, this is a lot easier said than done. In fact, it is almost always a process that seems relatively unnatural. It takes a conscious, disciplined shift in perspective to design for usability.

If you haven’t caught on already, I suggest that this user-centered mindset of design is analogous to the process of thinking algorithmically. Thinking in parallel is not something that most programmers are used to doing. At the very least, it requires approaching the problem from a different perspective than its sequential counterpart. In order to design a usable experience for all users, one must similarly alter their perspective. Only then will they capture what it really means to design a usable system.