Skip to content

Cutting off the head of the rock star metaphor

I’ve seen the phrase “rock star software developer” one too many times. This trite and misleading metaphor needs to die. By decapitation if necessary.

In my opinion, the key ingredients of being a rock star are mediocre talent, a massive publicity machine, and an insatiable ego. These are not qualities that I want to see transfer into the software world. Software development, in its ideal, is about curiosity, teams, and skills. It should be about merit, clear thinking, and sharing. It should not be molded after irrational cult followings, record company influence, boy bands, or beat-it-into-your-brains radio station overplay.

I agree that good software development might have things in common with a good music. Developers must perform! But the nature of the audience is different — it involves other software developers (who read the source code) as well as people who use the software (who probably don’t care if the programmer has a mohawk, leather pants, and a life expectancy of 27 years).

So let’s not use rock stars as our model. Only a select few rock stars, in my opinion, are masters of music. I would take an average jazz musician over the average “rock star” any day, because the jazz field encourages real-time improvisation and understanding music on many levels. Let’s find programmers who can deliver (similar to performance artists) but also understand the culture and history of programming (similar to musicologists).

There have to be more useful metaphors for greatness in software development. They should be fresh, specific, and (hopefully) strange or funny. Here’s an example I just threw together: “I’m looking for a software developer that is a direct descendant of Perseus. Someone who can refactor some horrible code (i.e. slay Medusa) without turning to stone.”

P.S. Ever met someone who proclaims their own greatness? Perhaps it is better to let someone else to credit your skills than to wave a flag brandishing your mighty abilities. I hear that a sign of true greatness is humility. Putting yourself on a pedestal is probably counterproductive, unless you want to surround yourself with other arrogant people. Instead, aim to be approachable. This opens up a learning frame of mind, which allows you to become even better in the long run.

Scattering your attention for fun and profit

I value my attention; I’ve been paying attention to my attention for quite a few years actually. In this fantastic article from The Atlantic, Nicholas Carr connects together some disturbing trends about Google and the Web in general.

When the Net absorbs a medium, that medium is re-created in the Net’s image. It injects the medium’s content with hyperlinks, blinking ads, and other digital gewgaws, and it surrounds the content with the content of all the other media it has absorbed. … The result is to scatter our attention and diffuse our concentration.

I think Carr’s article is a must-read. It covers a lot of ground, and I do not have the time or space now to address all of its points one by one.

But let me say one thing: I am saddened to think that the Net itself, driven by its current revenue model of advertising and ad click-throughs, is probably profiting from the ADD of its viewers. This is why I believe that people must guard their attention and spend their time with Web sites that provide real value. I also hope that the next round of Internet entrepreneurs will offer Web experiences that truly enrich people’s lives rather than sending them careening around the Net aimlessly.

Challenging America to be Renewable

Last Thursday, Al Gore challenged America to produce 100 percent of its electricity from renewable energy and clean, carbon-free sources within 10 years: http://wecansolveit.org/

 

 

Good looking codes?

I’m comparing some open source Javascript plugins. I won’t name names (unless I change my mind), because my point is not to bring public shame. I respect anyone who takes the time and effort to release an open source project.  

That said, I don’t think there is ever an excuse for releasing codes that been given a severe beat-down by the ugly stick. I’m talking about screwy indentation, splatterings of unnecessary whitespace, jumbling up spaces with tabs, using fugly variable names, and lines that are 120 characters long. (Of course, this doesn’t matter for minified or packed JS.)

Is it unfair of me to judge code in this way?  Perhaps.  But I have found that first impressions can be useful: code that is ugly-on-first-sight probably won’t fail to disappoint later.

 

Setup PostgreSQL on Mac OS X

MySQL was feeling lonely, so I decided to install PostgreSQL as well:

sudo port install postgresql83 postgresql83-server

Now update your path by adding this line to your .profile:

export PATH=”/opt/local/lib/postgresql83/bin:$PATH”

# the exact order is up to you

I also recommend adding the architecture flag if you use an Intel-based Mac:

export ARCHFLAGS=”-arch i386″

# Don’t forget to restart your terminal or resource .profile

Install the postgres rubygem:

sudo gem install postgres

Create the default database:

sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb

sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb

sudo su postgres -c ‘/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb’

To start the server:

sudo su postgres -c ‘/opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb’

To start the server with a logfile (warning this does not work for me):

sudo su postgres -c ‘/opt/local/lib/postgresql83/bin/pg_ctl -D /opt/local/var/db/postgresql83/defaultdb -l logfile start’

This post was partly inspired by the March 2008 article by ShiftEleven.

GIGO Polling

You’ve heard of the computer science acronym “GIGO”: Garbage In, Garbage Out?  Computers don’t have a monopoly on GIGO; pollsters love it too.  For example, this poll demonstrates the garbage-in principle quite well.

Yes, I am glad that politicians are using online tools to reach out to people. It is high time that issues of energy and transportation are in the public consciousness.

Ok, no more Mr. Rogers. I’m done being nice now. The poll bent me out of shape a little bit. Here’s why:

1. Using a traditional radio button format for a poll is pretty weak in my opinion.  It is a common approach, sure.  But it constrains responses to pre-defined choices. Why not allow free-form text entries? Just an idea, not really a stinging criticism, I admit. No one ever got fired for using a radio-button poll!

2. I don’t like that only one response is allowed. Such a poll reflects a (flawed) mentality that one option is “best” or a “silver bullet.”  We need to wise up and plan for multiple future scenarios.  We need to hedge our bets.

3. The given options are far from comprehensive. Why not also list ideas such as:

  • Implement energy conservation programs
  • Improve our electric infrastructure
  • Drastically reduce our need for gasoline
  • Launch an “apollo program” for solar energy
  • Elect Barack Obama (my favorite)*

4. The poll also presumes that “gas should be affordable.” But that is not what really matters.  What really matters here is making transportation affordable.  We could be more broad — what really matters? Quality of life is what really matters.  Let’s make it affordable and safe to travel between work, home, and third places.  Now we’re talking about urban planning, commuting, mass transit, cycling, and walking.

Conclusion

Energy, economic vitality, and transportation are the core issues here.  Gasoline is only one fuel source; we should not view the debate only the terms of oil.  Let’s put our priorities in the right places. Our leaders should lead by framing questions in ways that elevate the public debate.  The poll above does the wrong thing; it reduces our collective intelligence.

* In case it wasn’t already obvious, let me share my personal biases. I do not see McCain as being a good choice to lead America into the next four years. I want a President who understands problems at their core (i.e. transportation, quality of life, healthcare, and economics) and can apply this understanding to lead and solve the millions of surface problems (i.e. pain caused by the rising cost of oil, lives lost in Iraq, the economic cost of Iraq.)

Understanding TextMate Paths

I recently installed Ruby 1.8.7 in /usr/local. I have Ruby 1.8.6 installed via MacPorts in /opt/local. I couldn’t understand why TextMate’s Ruby bundle was running Ruby 1.8.7 even though my bash .profile was setting PATH correctly; i.e. /opt/local/bin was before /usr/local/bin.

Several people in the #textmate IRC channel helped out, including Allan, the creator of TextMate, the popular text editor for the Mac. These are the must-read resources:

The key thing I learned is that TextMate has two execution contexts: the “bash execution environment” and the “shebang execution environment.” Each context acquires its PATH in a different way.

Examine the PATHs

Here is how you can see the value of PATH for each context:

# bash execution environment
echo “$PATH”
# Highlighting the above line and pressing CTRL-R…
# …will give something like:
/Applications/TextMate.app/Contents/SharedSupport/Support/bin/CocoaDialog.app/Contents/MacOS: /Users/djwonk/bin: /opt/local/bin: /opt/local/sbin: /usr/local/mysql/bin: /usr/local/bin: /Users/djwonk/bin: /opt/local/bin: /opt/local/sbin: /usr/local/mysql/bin: /usr/bin:/bin:/usr/sbin: /sbin: /usr/local/bin: /usr/X11/bin: /Applications/TextMate.app/Contents/SharedSupport/Support/bin

# shebang execution environment
#!/bin/sh
echo “$PATH”
# Highlighting the two above lines and pressing CTRL-R…
# …will give something like:
/usr/local/bin: /Users/djwonk/bin: /opt/local/bin: /opt/local/sbin: /usr/local/mysql/bin: /usr/bin: /bin: /usr/sbin: /sbin: /usr/local/bin: /usr/X11/bin

(Note: I added spaces between : and / purely for blog formatting. That way the lines wrap at sensible places. Your actual results won’t have these spaces, and you shouldn’t have any extra spaces in your PATHs.)

My bash execution environment was fine. However, my shebang execution environment was incorrect: /usr/local/bin was in front of /opt/local/bin.

The Solution

The solution for me was to create the ~/.MacOSX/environment.plist file with the desired path. In my case it was:

{ PATH = “/Users/djwonk/bin: /opt/local/bin: /opt/local/sbin: /usr/local/mysql/bin: /usr/bin: /bin:/usr/sbin: /sbin:/usr/local/bin: /usr/X11/bin”; }

MethodTrails Demo at RailsConf

I just gave a quick talk about MethodTrails at RailsConf 2008.

MethodTrails visualizes the method call graph of Ruby source code. It generates a dot file that can be viewed with Graphviz. It requires Ruby 1.9, which gives you a great excuse to download the latest Ruby and see what it is all about. MethodTrails uses Ruby 1.9’s Ripper to parse any Ruby file into an s-expression. Then it explores the s-expression to find the information it needs to build up the dot file. It does so by using a rule engine, so very little in MethodTrails is hard coded. Tweak it and play around if you want to extract different information.

Here is a sample visualization of Merb’s awesome router (router.rb):

Can Twitter Remain Personal?

One of my favorite things about Twitter is that it is personal.  Sometimes it is funny, sometimes serious. With the people I follow at least, the ethos feels pretty good. However, I’ve recently gotten many twitters in a row (echo chamber style) that are quite clearly all about marketing. Apparently, some of my friends have been hijacked by marketing machines. I hope they come back — I miss them!

I don’t know how other people feel about this, but it seemed like an unwelcome departure from the tone that I’m used to on Twitter. Some of these messages are from people that I respect and like very much. But I don’t like the direction it is going.

The world has, more or less, figured out the norms surrounding email, instant messaging, and IRC. But we have some learning and back-and-forth to do when it comes to Twitter.

I guard my attention. When the noise-to-signal ratio increases, a communication channel becomes less valuable.  When a threshold is crossed, I turn it off. On Twitter, that means that I’m not going to follow people that generate too much noise. Especially if that noise is impersonal marketing.

When Incremental Change Isn’t

At time marker 50:35 in his Git presentation to Google, Linus has a slide that says ”Performance is not secondary… it affects how you work .. and it affects quality.” At 54:50 Linus talks about “the kind of performance that actually changes how you work / it allows you to work in a completely different manner.”

These quotes are in the context of Git, but I think they apply to technology in general. I often think of performance improvements as being linear; it is common to talk about 10% or 20% speed increases; I suspect Git’s performance increases are more on the order of 10x (1000%) for many workflows. These kinds of performance speedups, though impressive, are actually more impressive than they sound!

Linear improvements, in some cases, have non-linear effects on how humans use the technology. The Ruby world has seen a massive migration to Git in the last few months. A significant reason, I believe, is that Git unlocks a new way of working. Another reason is peer pressure (the good kind): Rubyists do not like behind behind the curve.