Paul Graham is spot on (as always)

Holding a Program in One’s Head

In fact, if you look at the way software gets written in most organizations, it’s almost as if they were deliberately trying to do things wrong. In a sense, they are. One of the defining qualities of organizations since there have been such a thing is to treat individuals as interchangeable parts. This works well for more parallelizable tasks, like fighting wars. For most of history a well-drilled army of professional soldiers could be counted on to beat an army of individual warriors, no matter how valorous. But having ideas is not very parallelizable. And that’s what programs are: ideas.

And some interesting thoughts from the comments:

One possible alternative organization pattern is the “band.” …

It would be interesting to see how a band-style organization would apply towards more practical software products. Software so produced would come in boxes with the band’s logo, but more importantly, a _list of credits_, anecdotes about the software’s creation, etc. That is, to make the delivery of the software more _human_.

Back in the day, when credits on software were more commonplace, it was possible to judge the quality of a product (to some extent) based on who was involved with it. Some people became reknowned coders, reknowned technical writers, etc. I think it gave two incentives: first, your name is going on the box of that package — this gave prestige in the community post-sale; second, it allowed the customers to predict the overall feel of the software prior to actually purchasing it, based on their experiences with software written by the same or similar authors.


The only part I don’t really agree with is the implicit condemnation of programming done by large companies. Yes, their methods result in mediocre software, but that’s often what you want. There’s a reason they try to treat programmers as interchangeable cogs, and resist having an entire program in one person’s head.

To use the tired “building a house” metaphor – you can get a renowned architect to design the next landmark in a city, or you can get mediocre, interchangeable architects to design a row of townhouses. Both approaches are valid and have their own place, but there’s no point asking the famous architect to build townhouses.

Saying good bye to Lotus…

Its been two years in at IBM, so that is about time for the “I‘ve Been Moved” pseudonym to take affect. Starting this past week (since I was on vacation the week prior) I left the yellow box plastered walls of Lotus and head to a group inside of the CIO office.

The short of it is, I’m moving away from product development toward prototype/research development. Not research in the academic sense (though I did consider that), but research in the sense of experimenting, learning, and innovating.

… intermission

Please remember that I’m not IBM, so these thoughts are 100% owned by Timothy J. Finley and not HAL^h^h^hIBM.

…And for the longer version (which has turned into quite a history lesson (more for my own archival purposes))

At Lotus I’ve been working on the Activities project from the first day I started, but Activities has meant many different things over the past few years. I was originally inspired to join IBM to help work on the productization of the Activity Explorer research project (wahoo a new way to collaborate!). When I started the team was just releasing the preview of Activity Explorer in IBM Workplace.

But it wasn’t very long before momentum started moving away from Activities as a traditional rich client application toward focusing on a web experience. This was great for me since I was one of the few people on the team that already had some web development skills. The period that followed was the best programming experience I’ve had so far in my life. We (me and my tech lead) were pumping out code left and right, righting decent tests, quickly getting a prototype usable, continually responding to feedback from use, and adding features all the time.

You are not a true web developer until…

You have used firebug. I’ve been an avid firebug user the minute I first heard about it — starting with the initial appeal of CSS inspection, then integrated error reporting, and then getting hooked on the interactive javascript console. Firebug .3 was a big step up from the built in DOM inspector, but still it had its problems with generated content, a quirky debugger, and the inability to see inherited styles.

Then firebug 1.0 came along obliterating these problems and brought a ton (no a metric *#$! ton) of great new functionality. Its sad enough that I’m extolling a piece of software publicly… its even sadder that I was jumping up and down (literally) in my apartment when I first tried out firebug 1.0 beta. Yeesh…

But I do have a good excuse. I do a lot of web development, I practically live and breathe it (though I have not been doing it much on the side lately). If a tool came along that made you twice as productive for your job/hobby, you’d be happy too — right?! And it is not just about productivity, its also about joy of use. I used to dread debugging nasty CSS issues. It sometimes took hours to figure out that that 3px gap was caused by a measly missing space between two selectors. Now I feel like I’m in control and am confident that bug will be easy to find (and fix)! So please, before you label me as too big of a dork remember that you’d be pretty happy too to find something that made your life so much easier :).

So for the doubtful, what can firebug do?

  • Click to inspect any part of the page to see its styles (and all the styles that have been inherited and/or overwritten), box model, dom properties, or html source
  • Dynamic editing of the page. HTML, CSS, and javascript. Just click to edit a field. The page will update to your changes in real time. As a bonus the edit fields have auto-complete (just like every other place you can type)
  • Solid javascript debugging with really quick and easy watch expressions. I knew that I should have been debugging instead of logging messages for a long time, but now I can finally use a debugger that isn’t painful (sorry Venkman… and firebug .3).
  • Profiling!!
  • Graphic visualization of all the http requests made on a page, including everything you need to know for page optimization!!!
  • Easily navigate between contexts since nearly everything in firebug is a link. Want to look into the properties of a javascript object? Click it. Want to see the http headers of a request? Click it. Want to inspect an element in the source view? Click it. This UI paradigm easily leads to feature discovery since you’ll always try to click on something to find out more about it — and you will quickly realize that it just feels right.
  • And many things are easily discoverable without a click. Just hover over any image string and a popup will appear. Same with variables while debugging and with hex colors (no more memorizing hex codes)!

And after watching a video of Joe Hewitt demoing his creation, I still learned more features:

  • When editing a numeric field such as padding just press up or down with the arrow keys to change the padding amount, slick!
  • Extremely simple conditional breakpoints. I used to think that you couldn’t do that in firebug, but all you have to do is right click a breakpoint and type in an arbitrary javascript expression.
  • Automatic bookmarklet “scrunching” when copying from the multi-line console
  • Keyboard shortcuts.. I can’t live without ctrl-shift-t and ctrl-shift-r in eclipse, and now I know I can do ctrl-shift-space in firebug. Oh and I finally found out that I can get rid of the Wed Developer Extension’s shift-ctrl-c shortcut so I can use it for firebug :)

If you still are not satiated, watch this screen cast.

Firebug - Web Development Evolved

Go and try it, and if you love it please donate to the guy. He deserves it.
I’m very surprised Joe hasn’t been picked up by one of the big web companies yet… He single-handedly has saved them potentially millions of dollars in man-hours. Maybe he has just turned them all down :)

Art.. and a bit of software

Art is “the documentation of a thousand interesting decisions”.

Signs of Art from Rands in Repose… you’ll have to read this (at least the beginning) to get context of what I’m talking about… or you could miss these small letters and get confused… your choice


Now I don’t agree that this is the precise definition of art (fortunately I gave up thinking there was any such thing as a precise definition of anything a while back), but I do like its approach. And I think it brings up some notions of Art that don’t come with all those dusty textbook definitions from my Art theory class. I’ve certainly heard things about capturing/substance and difficulty/size/complexity but decisions — that is a new vantage point.

I like the notion of the decision making of/on/about Artwork because if you have ever been in the process of seriously trying to create — it seems like its all you are doing. Creating a mark of such shape, texture or bracketing your shot to attempt to get the exact exposure you want or decrescendoing till the note falls from your lips or designing your software abstraction in such an elegant and comprehensive fashion (well to start at least. we all know that abstractions are leaky and spherical).

The problem with decisions is that the term feels so rigid. Even the most non-organic of us still don’t think in black and white despite the fact our minds make us think that we do. You could never take a piece of Artwork and create a flow-chart from it. If you could, well… you are super-anal or its no where near a piece of art (moving to lowercase due to laziness). The decisions you make — while very intensive — are more often subtle (sometimes unknowingly subtle) or spontaneous and intuitive. Calculated decision making certainly takes place in artwork. “I like that wash, but I need to balance it.” … “How can I support the weight of that?” …”I need to use higher-speed film/this rated flash for this light.” … But, if you are you trying to create solely formulaicly* you will have a very difficult time (psst.. your subconscious is actually smarter than you think, let it have a bit more control every once and a while).

Does this mean that software is too black and white to be artistic? No way! I’ve already talked closely to this topic a bit before when I compared software to literature (word or sxw). In fact I think software is extremely artistic. Writing software is like having to elegantly dance a story around various constraints (hardware, language, requirements, OS, dependencies…). Sometimes you have to tip-toe, sometimes leap, but it all must be smoothly interconnected and yet still be recognized as part of a whole.

Where I disagree with Rand(s?) is his critical eye of modern art. Honestly, I’m not a huge fan of it either (most of the time), but it does have its place in the art world. One part of art is the progression of itself. Post Moderns built off the Moderns built off the Abstractionists built off the Cubists built off the Impressionists built off the Romantics… I really am no art buff (believe me, I just looked at Wikipedia to make sure that what I just said isn’t too glaringly wrong), but I feel that part of the point of modern art is that it is so different that you have a difficult time placing it as art. Artists need to explore, need to push the boundaries, and also need to cross the line. If there wasn’t anyone saying something isn’t art, then how can it be art?

I help rationalize this because I do not think that there is anything that completely un-artful (yes double negatives can sometimes make more sense then their counterpart). So art to me is more of a spectrum to me than a classification. And more so, things can be more artistic to some than others. This has to be true since so much of the importance is the experience you have with the work. A piece can only be boring if everyone had the same response! Then all you would have to do is read a review to tell you what that response is.

Whew.. why don’t you go forth and break some new boundies then?

* probably not a word, but I like it nonetheless

Little book review

Here a bit of a change from the semi-regular updates I’ve been posting. I figured that I could give a small review on a couple of books I’ve read recently. These books fill an interesting niche; one that suites myself well, but possibly not many others.

The author of these books is Donald E. Knuth. For those who are not too familiar with Computer Science history (well recent history, Knuth is still very much alive), Knuth is called by some “the Father of Computer Science”. He is widely known for writing three volumes of The Art of Computer Programming, which Amazon.com calls the “definitive description of classical computer science.”

The two books I’ve just finished reading, Things a Computer Scientist Rarely Talks About and 3:16 Bible Texts Illuminated, are different from Knuth’s technical literature because the focus is not about computers, but about spirituality. These books are intertwined since Knuth uses his experiences writing 3:16 as material for Things a Computer Scientist Rarely Talks About. But in both, he combines his experiences as a prominent computer science academic and his experiences as a life-long Christian.

I found both of these books very stimulating and I’d highly suggest for you to look into them if you are a geeky Christian like me. For others who are interested in the crossovers of religion, spirituality, and computer science, Things a Computer Scientist Rarely Talks About may be for you. For those who would like to read about a scientist’s approach to bible interpretation and translation check out 3:16 Bible Texts Illuminated.

For those are not interested in any of these topics, no big deal. Hopefully I read something more in your interests soon.