Embracing my inner hacker 6

The word hacker has always held a negative connotation for me and I am sure for quite a few other people. Phrases like “its a hack” are generally used to describe a poor but functional implementation and usually the number of hacks in the codebase are used as a metric for its lack of quality. So naturally I would never dream of calling myself a hacker. For the last 5 years at Comcast I have grown quite a bit as a programmer and for quite a while, was responsible for maintaining some of the core applications’ code bases (I am migrating to new lands now but thats a different topic that I’ll discuss in a later post). I have always had the highest respect for code architecture and am pretty proud of the architecture of the code and frameworks (like OpenPyro) I have written.

However the last few days have been instructional in a couple of different ways. I participated in Yahoo’s Open Hack NYC event, (which was a lot of fun) with Gabo (yes of GaboCorp fame, stop asking me). This was the closest I have ever worked with him and he has a very different coding style then I did. Gabo evolved with Flash and still uses the IDE to amazing potential. Having come from a more traditional programming school (Rutgers, NJ) with a Masters in Computer Engineering, I use Flash as I used to use Java, very strict OOP, design patterns, the works. I havent opened the Flash IDE in the longest time without the reason being to create a quick graphic that I could use from Flex Builder.

But watching Gabo work was fascinating. Most of the UI in our application was done by arranging MovieClips on stage and then gluing in the logic in FlexBuilder (or FDT in Gabo’s case). Surprisingly I found that we got a lot more done than my tradional way of trying to describe the UI in a series of “draw” commands. And tweaking the gradients and shapes was so much easier.

Last week I read this awesome essay by Paul Graham titled Hackers and Painters, which apparently is pretty old. But there were certain parts I agreed with so passionately that I had to write about it. Some excerpts are below:

I’ve never liked the term “computer science.” The main reason I don’t like it is that there’s no such thing. Computer science is a grab bag of tenuously related areas thrown together by an accident of history, like Yugoslavia. At one end you have people who are really mathematicians, but call what they’re doing computer science so they can get DARPA grants. In the middle you have people working on something like the natural history of computers—studying the behavior of algorithms for routing data through networks, for example. And then at the other extreme you have the hackers, who are trying to write interesting software, and for whom computers are just a medium of expression, as concrete is for architects or paint for painters. It’s as if mathematicians,
physicists, and architects all had to be in the same department.

The mathematicians … happily set to work proving theorems like the other mathematicians over in the math department, and probably soon stop noticing that the building they work in says “computer science” on the outside. But for the hackers this label is a problem. If what they’re doing is called science, it makes them feel they ought to be acting scientific. So instead of doing what they really want to do, which is to design beautiful software, hackers in universities and research labs feel they ought to
be writing research papers.

This struck me very close to home. I had fallen in love with Flash when I was in grad school and working with Java Swing for an application’s UI. Suddenly I was confronted with this technology that I could just draw my controls in and didnt have to worry about the GridBagLayout f-ing things up or need 5 lines of code to get a JButton to be blue in color. But I was desperately seeking a topic for my thesis and it was really hard to justify using Flash in a grad school full of Java developers. My final thesis was on Flash Java integration (and this was Flash 6), where I explored a middle layer that maintained application state across a desktop application done with Flash and Java. However I am sure my advisor would have been happier with a crappier looking application that I had gotten to work by beating Java Swing to some level of submission.

Paul literally says this later:

Unfortunately, beautiful things don’t always make the best subjects for papers. Number one, research must be original—and as anyone who has written a PhD dissertation knows, the way to be sure you’re exploring virgin territory is to to stake out a piece of ground that no one wants. Number two, research must be substantial—and awkward systems yield meatier papers, because you can write
about the obstacles you have to overcome in order to get things done. Nothing yields meaty problems like starting with the wrong assumptions.

The way to create something beautiful is often to make subtle tweaks to something that already exists, or to combine existing ideas in a slightly new way. This kind of work is hard to convey in a research paper

I wont quote him anymore since almost every line on that essay is worth quoting. But reading it, I suddenly feel that its okay for me to be more concerned with the visual than the architecture. Fortunately the two goals are not in opposition. Good architecture enables more aesthetically pleasing and interesting interfaces (Look at Flex 4 compared to Flex 3 the Spark architecture in Flex 4 compared to the old Halo architecture. Spark enables creation of so much more interactive and interesting controls). But after reading this I suddenly feel less guilty about not caring for the purest Singleton implementation in AS3 or not being able to launch a headless version of Flash.

I code the pretty!

First impressions on Google Wave 9

So after a tormenting 24 hours without a wave account I finally got my invite last evening (Thanks @blamborn and Mat). So I figured I’d chronicle my first day’s adventures and add to the wave conversation on the intertubes, especially since just the day before I had blogged about what I thought Wave was about. I have a few friends on Wave already so it wasnt a complete case of the empty room syndrome, but my impressions might change once my contact list there reaches any critical mass.

First off: the interface. Quite a few people have talked about Wave looks pretty, (it even has drop shadows and rounded corners), but quite frankly, they are a waste of space here and actually hurt the UI. The gap between the modules is way too much (separator bars should be much thinner), and rounded corners dont really allow modules to butt up against each other too close. I have no idea whats going on with the smart scrollbar on the right hand side of the message window and why it only scroll to a fraction of the size of the main document. Besides that is okay, definitely not as minimalistic as Google has a reputation for.

My first couple of Waves were to myself, I added a couple of robots from the Robots gallery, but most of them didnt work for me. The idea of such extensions is interesting though this is pretty much the same as Yahoo Mail Apps or Zimbra mail or Yahoo Messenger plugins. Not really a new idea or that revolutionary.

I started a wave with Mat and another friend Nick and started working on a cheatsheet for Freemarker, a templating language for Java that we use at Comcast Interactive Media. Here it got kinda interesting, but the formatting options were a far cry from google docs (but thats okay considering the early beta stage here). What was really crazy was that people were adding to the content by “replying” to the original message. What I really thought we should have been doing was adding to the main document which is editable at any time. What this made me realize that there is indeed a difference between a conversation around a document and the document itself. Wave blurs the difference which makes you think a lot more on what should go where.

Nick later discovered the with:public search on wave that just showed all public waves, some with a lot of live editing going on. Cool! … or wait, isnt this what Yahoo chat was (I used to be a fair addict to Y!Chat in my teens). Heck, even the waves sounded like chat rooms: “Utah Wave Users”, “JQuery Users Wave”, etc.So I tried going into a couple of *rooms* and they were pretty chaotic. A few of the wave starters were trying to maintain some order in there (”please dont append to this part”, “please start new waves for smaller topics”, etc). Yeah I left pretty quick.

So here are my thoughts:

  • The idea of a blended medium is interesting but communication is indeed of differnt types: conversations, collaboration on a document, announcements do need different visual cues even if not different applications. For example, could a wave be *marked* as a conversation (chat or email) and then it could force a temporally sorted exchange or marking it as a document could force all conversations/comments on a sidebar.
  • The idea of robots appending content to a messages is powerful. I can imagine quite a few uses for it (you know, like bots do on IRC)
  • Gadgets on Google Wave could be awesome
  • Google Wave will definitely have an app store in the near future
  • Wave definitely needs an SMTP gateway asap that translates email to a “dumb-wave” or a conversation wave as I mentioned in the first point here.
  • I think a good use case for it is for a personal notebook. I use Evernote right now to jot down thoughts etc, but Wave could be a pretty awesome note taker that I could occasionally share a note from

So what do you think. Do you like it? Think it’ll be the future of email? (my opinion, not the current version but something it morphs to)