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!