Wednesday, December 30, 2009

Reflection

Memory WaitingImage by FJ!! via Flickr

I left Amsterdam in 1995, after getting my degree in Computer Science there. I was back in the Netherlands to visit family for the holidays, and did also spend some time in Amsterdam. Since I have spent so little time there in the last 15 years, my memory of the city is frozen, and, where great leaps have happened in society most, the contrast between then and now is very acute for me. Like in personal technology.

My memories are of sitting in a dark room of computer terminals in the University, closed for the winter break and thus without heating, seeing my own breath as I was trying to get my social fix (Usenet, at the time), typing with gloves on. I carried a map in my backpack because after two years I was still getting lost, and my Walkman kept eating my tapes I was tired of anyway, and lord knows if meeting up for dinner with a friend would actually happen.

Yeah, things are a little different now. My phone shows me where I am (if I want to spend the money on foreign data roaming), the texts keep me abreast of where everyone is, I have so much music with me on my iPod Touch I do not know what to play, there's always a little game to play, and the moment I walk into an open WiFi range (like the Stadsschouburg on Leidseplein) I catch up with Tweets, Status updates, and blogs. I barely used the laptop at all, actually, the little black slab took care of most casual communications. And yes, I actually like this situation much, much better. It is not just me: over Christmas my 15 year old nephews realized there really was a time people had to make do without their "GSMs", and it consisted mostly of expensive dumb beepers, difficult key combinations to forward your land-line phone to another land-line phone, and calling often to let people know where you are only to get answering machines. They were unable to wrap their heads around it.

I was struck during my stay by one technology music experience that had stayed the same: the simplest way to have a continuous consistent stream of music following you from room to room to car to workplace is still radio. Sure, radio itself has changed, with digital broadcasts and more functions and clearer stations and almost every radio being made now having presets. But the basic model is still the same as it ever was: tune the radio, get the broadcast on that specific frequency. It works the same on every radio the user will encounter anywhere, guaranteeing a seamless experience: walk into the room, tune, hear the sound stream where you left off.

Sure there are multi-room audio systems available, like Sonos, ready to stream your library into every room you have wired up with it. I have used it, it is fun, it works great, and when you walk out of the door of your house it is gone. Unless you use the other alternative, using your digital player with headphones, but even that will not pick up where the Sonos player left off when you close the front door, the same way radio does when you switch it off in the kitchen and switch the radio on to the same station in the car, to then continue to listen in the gym.

You still can't just make your own audio stream transfer seamlessly from your pocket to your stereo system to your car to someone else's stereo system even if they give you permission. Broadcast radio still does that best. Same goes actually for almost all data streams coming to us; I can't simply redirect the mobile phone call I am getting to come from my computer or the desk conference system so I can get a better hands-free experience, I can't switch the call to use the car's sound-system when I am in someone else's car so everyone can listen in. There are experiments and early systems to do it with video streams, but it mainly involves looking at the content of your Digital Video Recorder at home over the net.

It's already considered a major breakthrough when you can see the contents of one computer on another computer or TV in your own home on your own network, and it is still too complicated to set up. I think this is where I want the future to go: anywhere I go I want to be able to switch something on, make a simple gesture like tuning to a station or hitting a preset, and get whatever data stream I was experiencing on the ambient equipment. Or maybe even have that be automatic in my own home: take the headphones off when I walk in and have the stereo take over exactly where I left off.

Since what I wish for often does end up being made (a place to upload my pictures from my phone, a website to share videos, a platform to distribute writing) I am putting this out there: what I want from the future is to be able to carry any datastream with me and be able to flick it to other devices, better suited to the current location, to pick up where I left off, seamlessly. I know there have been trials and tests -- one of the more interesting ones being a system developed in the early 2000s by an MIT spin-off that let you read an article on a mobile phone and then insert it into your car so the car radio would start reading it to you from the page you were on -- but it needs to be more pervasive. I want the future that doesn't require juggling of gizmos and devices, and I want it soon.

Friday, December 11, 2009

The Difference Between a Design vs Software Education

When I worked inside Disney's Imagineering, a senior creative once told me the story of an assignment while he was getting his design degree at Art College in Pasadena. He had worked on this pencil drawing for an outrageous amount of hours, days on end, just making this drawing perfect. Come hand-in time, his drawing goes on the wall with all other assignments, and the teacher and the class gather around to discuss it. And to make a critique, the teacher pulls out his red pen and starts drawing and annotating all over it. The student can't but watch in horror. When he told the story you could see the residuals of shock about it in his face. But also acceptance: it had been necessary.

Over the years I have found out that having something like this happen, many times over, is an essential step in acquiring a solid design background, because it gives you an ability to let any idea go the moment it is ready to be seen by others, at any stage, and have it be torn to shreds and re-assembled and considered and taken away by your Creative Director and given back and smoothed and roughed-up as the team navigates the space of unknowns in a process called Designing, without going to pieces or hampering the process by being defensive. You have to go through this process over and over and over to get over investing ego into a design, and you have to get over that ego-investing if you choose to have many minds work together to make it better.

Interestingly enough, I do not remember much of this during getting my degree in Software Engineering. Most of the results were graded by whether the program actually worked, there was some cursory look at the code, a discussion of API design, and that was it. There wasn't a grind of having every line, the structure of every call, every class, every interface dissected, discussed, called good, called bad, over and over and over. Scrutinization of the coding or architecture design process didn't happen to a significant degree.

The same happens afterward. One of the most educational activities I did in all my software engineering was being part of a group code review. One of us would present a problem we were trying to solve or some object or family of objects we needed to make to allow a task, and then we would all look at the code, line by line, all of us, compare it against the style guide we chose to follow, exchanged ideas about how to make single statements or whole blocks more efficient, what pattern of the Gang of Four it fit best and what the implications of that was for surrounding code.

This exercise contributed most to making me a better programmer. And in 11 years of being a full-time Software Engineer, I got to do it all of, oh 7 times or so. Because instead of this rigorous learning evaluation, our code is evaluated on whether it works, and if not, thrown back to us to debug. We only get a second pair of eyes when we are seriously stuck, or when our code gets maintained by someone else, at which point the stories appear on about how terrible the code is on some Code Disasters site. It is so seldom pro-active before.

Maybe in some institute of higher learning about Computer Science there is a class where the students carefully craft APIs for complex libraries, and the class, as a group, evaluates them not just for whether the implementations work, but what established patterns of design they follow, what their future strengths and weaknesses will be, and how they will scale based on similarities of well-known APIs or libraries already in production. Maybe there is a class where the top graphics or sound or application APIs are evaluated against each other, and the underlying coding is scrutinized for style, brevity, and maintainability. Maybe there is a whole set of classes that is not just about making UML diagrams, but what UML diagrams are actually for. If there is, I have not heard of them; it is always "here's the API, code a program, make it pass the test suite, the Teacher's Assistant will grade the code by looking at it for 5 minutes."

Which means Software people do not get the exercise of not getting ego-invested, of being able to let the design go. In between all the buggy systems, buggy operating systems, vendor systems that do not operate as promised, a fundamental lack of knowledge whether we actually can deliver on time, budget, and spec, while the world is expected of us, we get invested in how we make it work, we get a sense of pride every time we solve this puzzle. And many of the questions a software architecture has to answer can not be asked at the beginning, or seem ludicrous (like the Twitter people ever knew when they started out they would have to run half the world, tweeting, on their systems, while hundreds of rabid startups would try to create an ecosystem on top) so it is really hard to do objective evaluations. During crunch times, scope creeps, and fickle angry customers, you hardly ever get time to create a test prototype of an architecture. You just have to do.

The result is that software architecture meetings can get testy. And that when software creator transition into the more visual or product design world, they have to learn to let go of any personal involvement of what they make, and actually mean it when they say they seek deep criticism. It is quite the little mindswitch to do when not already learned in school. But very necessary. And in the end, very satisfying.

Thursday, December 03, 2009

As The Browser Stats Churn

I have taken a contract for a digital agency, now working on an account for a mobile handset manufacturer. Consequently, I can't actually blog about what I usually blog about because I am completely in the middle of it.

Instead, I will write about something else that caught my eye. After much neglect I checked my browser stats today after forever for my personal site. My personal site really has only one noteworthy page, the PHKL page, which, 10 years or so after it was put up and now that there are plenty of competing products out, still gets 2000 hits a month. What caught my eye was the follwing table:

Operating Systems (Top 10)

Operating SystemsHitsPercent

Windows3203786.8 %

Macintosh33168.9 %

Linux7231.9 %

Unknown7061.9 %

Nintendo Wii580.1 %

Symbian OS280 %

Sony PlayStation Portable50 %

Sun Solaris30 %

Two gaming machines get used more for browsing that Solaris. Which is a startling statistic for anyone who still remember when Solaris was The Future of UNIX, and UNIX actually counted for something, which is people, like, well, me. I guess I am Old School now, and am wondering what those game whippernsappers are doing on my lawn.

Well, that, and the current crop of Solaris users deep inside SUN and academia are simply not that interested in pink kawaii laptop hack mods.