“Man’s scientific genius and technological ingenuity has dwarfed distance and placed time in chains. Jet planes have compressed into minutes distances that once took days and months to cover…

“Through our scientific genius we have made this world a neighborhood; now through our moral and spiritual development, we must make of it a brotherhood. In a real sense, we must all learn to live together as brothers, or we will all perish together as fools. ”
    — Martin Luther King, Jr., Lincoln University 1961

This is even more true in the age of the Internet. Connections between ideas and people are not limited by geography or time. I’ve gotten used to wishing “good morning!” to an IM buddy from India when I get a message at 10pm. Martin Luther King said “We have allowed our civilization to outdistance our culture.” I believe that is still true today. “Civilization refers to what we use; culture refers to what we are. Civilization is that complex of devices, instrumentalities, mechanisms and techniques by means of which we live. Culture is that realm of ends expressed in art, literature, religion and morals for which at best we live.”

The treatment of black people in this country has dramatically improved since 1961. Its illegal to segregate schools and lunch counters. However, we have not yet created a society where all people are treated equally. Despite the awesome power of the Internet to bridge distance and provide universal access to information, there exists a well-documented digital divide. A Nation Online by the U.S. Dept of Commerce (Appendix Table 1) reports that while Internet use has grown over the past few years, there still remains a wide gap between white Internet users (65%) and black Internet users (45%). In looking at the differences with respect to income and education the gaps are even more dramatic.

I have worked with hundreds of software engineers, and throughout all of that experience only two of them have been black. Despite there being 13% black and 4% asian americans (2003 population), I’ve worked with more asians. (As an aside, I believe I’ve worked with more asian engineers than women engineers — a related, but different phenomenon.)

Today as we honor Martin Luther King with a day off from work and school, I think it is important to consider how each of us in our own lives and in our own interactions with others can create a society where people are judged by their own merit and where we can create opportunities that overcome historic biases toward race, gender and class.

Emerging Tech SIG:
Where the Web has been and where it needs to go…
and how Laszlo can help us get there.

If you’ve been reading about Laszlo here and would like to hear more about it. David Temkin will be speaking at SDForum tomorrow evening.

Tuesday, January 11 2005
7:00pm

more details

Back at my day job last week, I was faced once again with a mystery bug. This bug seemed to defy logic and the physical laws of the universe. The whole system behaved correctly, except for the undesired behavior.

I was tired. It really felt like someone else’s bug. It would take me a half hour just to write an isolated test case. (I could hear Kent Beck’s voice reminding me that developer testing really does save time.) Everyone on my team is supposed to write unit tests. Of course there wasn’t one for this particular unit. I considered chastising the developer in question and investigating the bug another day. Unfortunately usability testing was scheduled for the next day, and this bug was …ahem.. bugging me, and I felt it would affect the usability of the app.

A long time ago when I was working on a solo project and dispairing of ever finding a particular bug. I had been hunting for this bug on-and-off for days. It was a large, not particularly wonderful code base that I had adopted from an acquistion. There really was no one at the company who knew much about it. I was alone in my SF office and I was at my wits end. I remember calling my long-time friend and co-worker David Simons and asking “what if I never find this bug?” and he asked me “Has there ever been a bug you haven’t fixed?” Well sure, we always have to defer some bugs. “No,” he said, “one that had to be fixed.” Begrudgingly, I admitted, that I had actually fixed every bug I had ever set out to find. I hung up the phone, took a deep breath, and hunted it down.

At times like this when debugging seems bleak and hopeless I always ask myself that question and I reflected that this bug is not likely to be any harder to find than the most difficult bug I’ve ever fixed. In fact, this bug was likely to not even rank my top ten.

Also for this bug I did have a good clue. A colleague of mine had taken a look at it in the late afternoon and had discovered something I hadn’t noticed. I instrumented the code a bit and saw the same odd behavior.

I spent hours examining the state of run-time, puzzling over variables that did not have the appropriate value. I kept thinking I had discovered that cause of the bug, but my code changes had no effect on the sympton. I had found 8 different variables that proved that the state of the app is disastrously incorrect. After while, I noticed that the symptoms had changed from my original observations. The app was more broken that it was initially. I removed my instrumentation and voila the bug was fixed. I had actually fixed this bug an hour before, but I had introduced another problem with my debugging statements.

Aha! A Heisenbug, so called from the Heisenberg uncertainty principle. From quantum mechanics: “The more precisely the position is determined, the less precisely the momentum is known.” And more generally, Heisenberg introduced the notion that when you measure something, you change its behvior.

I find that the more experience I have debugging software the more I see patterns in the kinds of problems I find. Most of the patterns are not so delightfully named as the Heisenbug. I wonder… does anyone else have good names for common bugs?