Language Wars

This was originally posted as part of a discussion associated with an article about programming in Visual Basic on Joel Spolsky’s excellent Joel on Software site. Is that enough links for you?

Someone asked early in this discussion about good books about programming practices. To answer briefly, the single best book I’ve read on the subject is _Writing Solid Code_. The second-best book is likely to be Joel’s own collected writings. That may surprise some people who’ve seen me be very critical of Joel recently, but it’s true. There’s no shame in being a better coach than player.

I’m primarily a kernel hacker, so the bulk of my professional work is in C. Even C++ is not available in-kernel on any but one of the platforms (NT) on which I program. I’ve publicly lambasted people on more than one occasion for using Java to teach OS classes, or to implement functionality that belongs in a filesystem. People who know all of this about me are often surprised to find out that I’m also an ardent Python user and advocate. People who know that about me were in turn quite surprised to learn that I turned to PHP for some stuff on my website recently. So where am I going with this? It’s simple: one size does *not* fit all. Some languages are better for GUIs, some are better for business logic, some are better for device drivers. Anyone who is well educated in the basics of software engineering – general hardware/software architectures, algorithms, development methodologies – should be totally unfazed by a switch to a new language. There’s an old saying that “a bad programmer can write FORTRAN in any language”; it’s almost equally true that a good programmer can do good work in any language.

The key, I think, is that the “one language for everything” meme must die. John Ousterhout, Guido van Rossum, Larry Wall, and Bill Joy – among others – all realized this early on. More recently, Microsoft has gotten the message. The hero of Joel’s story, IMO, is not VB or C# but the CLR – a way to get code written in different languages to work together instead of requiring that the whole damn application all be written in one “jack of all trades, master of none” language. We could have the same thing using the JVM, or P-code, or ANDF, but the important thing is that we stop fighting language wars while we still have other things to do.

Et tu, Chris?

I just found out that another one of my coworkers, this time someone actually in my development group, has been let go as well. This is really starting to suck.

Congratulations, BMJP

This note is for the person who signs as “blowmyjoustpole” on shockwave.com’s version of Joust. Congratulations. You’re going to break a million soon. I’ve been there, I know what it takes to get your current personal-best, and all it takes to get from there to a million is a little bit more practice so you’ll have a few more lives stockpiled when stuff starts to get really amusing. I haven’t seen Ohtar for a while, so you seem to be my only serious competition right now, and competition is good. It’s too bad you spoil it by using such an offensive and childish handle.

Farewell, Tanya and Leo

In the elevator on the way to my office, I found out that the admin for my floor has been laid off. Then I noticed that the shipping guy’s office has been cleaned out too. This is ridiculous. Laying off low-salary “overhead” employees like this means that now we’ll have high-salary engineers doing stuff that they used to do, and taking longer to do it. That won’t save the company one dime overall.

Meanwhile, this company has dozens of vice presidents and hundreds of directors. At a time when any idiot could see that our competition was gaining ground, this cadre of sub-idiots continued to recommend a “more of the same” strategy. The party line was that we were still on track to meet revenue targets that were unrealistic even when they were first set back in the good old days. Now these people, who got us into this mess, are still here, probably getting bonuses when they “cut costs” more than their peers, and real working people are paying the price.

Damn right I’m mad.

Good Morning, Mr. Hitchcock

I got up today to a scene from The Birds – literally hundreds of starlings and grackles foraging about in our back yard. I tried to take a couple of pictures through the windows, but they turned out so poorly that it’s not worth posting them here. Very strange.

Why? Dear God, why?

Why do I write all this stuff? It’s not like I consider myself a journalist or auteur. I don’t want to be a “public person”; in fact I’d probably find that pretty aggravating. Most of the motivations that seem to drive most other keepers of diaries/journals/logs (I hate the term “blog”) don’t apply to me. When all the BS is stripped away, I have basically one single reason for maintaining all of this: I hate repeating myself.

This aversion to repetition has a lot to do with why I write code. A lot of the code I write helps rid my life of repetitive tasks. This anti-repetition obsession is even reflected in how I write code. People who read my code often comment on my relentless use of abstraction and miniature state machines and even stranger tricks to make sure that even the smallest fragment of code doesn’t get repeated. If two modules or objects or functions do similar things, I often have a strong urge to combine them into one that has enough flexibility to handle both cases. The no-repetition aesthetic has served me very well in my career.

With regard to ideas in general, it drives me nuts when I have to repeat the process of translating those ideas into words multiple times, such as every time I meet someone or join a mailing list. I would much rather capture a set of ideas in the form of an essay, and then refer people to that essay when the occasion demands. This not only saves me aggravation, but avoids problems with me forgetting a crucial part of the idea complex or not being able to represent it properly due to self-editing for the brevity that an interactive discussion demands. I’m fortunate that I have the skills to commit my ideas to writing in a way that’s (mostly) coherent and (sometimes) compelling, and that the web makes it easy for me to put these ideas somewhere that others can see.

This is why adding topic-based navigation to my site was such a priority for me. I hope that it helps people browse my site and find interesting stuff to read, but that’s not really the point. More importantly, topic-based navigation allows me to find stuff I wrote before, so I can give someone else a link instead of having to repeat myself. That’s why I write, and that’s why I publish my writings, and that’s why I’ve organized the site this way. Now don’t make me explain it again. ;-)

Web Design Styles

Yesterday I got into a discussion with fellow web-logger Bill Lazar about website design. The following is excerpted from that conversation. I don’t want people to treat this as a zero-sum game in which one of us has to be right and the other wrong. My intent is more to promote open discussion of some issues that many of us face, with the contrast between Bill’s views and my own illustrating some salient points.

The following has been quite aggressively edited for brevity, but (I hope) no meaning or tone has been altered.


From: "Bill Lazar" 

Date: Monday, October 15, 2001 5:06 PM

I would suggest you look at my site since I try and implement any good ideas I have or see.


From: "Jeff Darcy" 

Date: Monday, October 15, 2001 5:35 PM

Well, to be quite blunt I think your page is quite far on the “heavy” side – 44K, dozens upon dozens of links on one page, entries included inline in their entirety regardless of length. It also seems extremely slow, BTW, and I quite often get timeouts when trying to follow any of the internal links. Obviously I’m going for a more spartan approach – links arranged in deeper hierarchies, content on aggregation pages truncated and linked if it gets too long. To put things even more strongly, I think that a search function on a personal site is an almost sure sign that not enough effort has been put into functional/topical organization. I don’t mean to offend, or even to imply that your design choices are invalid, just that I see some quite different design principles at work in your site and mine. It might be no more than a reflection of the fact that my site is more purely personal – I make my living quite far from website design – while yours is partly a portfolio in addition to its micropublishing role.


From: "Bill Lazar" 

Date: Monday, October 15, 2001 5:53 PM

When you say there are dozens of links, are you including those contained in the weblog? If so, then I guess I have to agree to disagree, since I just think of those as part of the nature of a weblog. Others, like dangerousmeta(.com) are way heavier in that context but I like them.

Also, I think that when there are months or years of content in a weblog, a search function is often useful. I suppose if Blogger supported categorization search would be less necessary, but it doesn’t, and even if it did categories won’t catch all the details. For example, I just mentioned Springsteen in an entry on an entirely different topic and even given multiple categories per entry I probably will find things through search that categories just don’t cover.


From: "Jeff Darcy" 

Date: Monday, October 15, 2001 6:19 PM

I recognize that, being an aggressive minimalist in this as in other areas, my opinions on these matters are far from the mainstream, and recommend the appropriate large grains of salt. Nonetheless…

I counted 30+ links just on the left-hand navbar; IMO that’s too many right there, and doesn’t even count the links appearing within the blog text itself. I realize that such a profusion of links is a common thing and that others go further than you do, but I still have to ask: regardless of convention or popularity, is it a *good* thing? My own opinion is these tendencies must be fought, not embraced. Users shouldn’t have to scroll, even on the largest displays, to see all of your navbar. Likewise, having every other phrase in a log entry be a link leads not to richness but to overload. The overall effect is like using caps or bold or profanity too much: the user starts to feel shouted at and tunes out. Ultimately you lose the ability to emphasize those things that really need to be emphasized, or to have links to really important stuff highlighted.

Also, I think that when there are months or years of content in a weblog, a search function is often useful.

Months? No. Years? Perhaps. I’m a fairly prolific writer myself (at least considering that my profession is as a software architect/implementor) and I’m close to having “years” of content on my own site, yet I still feel I’m quite far from needing a search engine to find stuff. Maybe it’s justified in your case, but even something that is justified can still be a crutch. The #1 reason I wanted to do content generation on my site was so that I could group stuff by topic as well as by date.

I suppose if Blogger supported categorization search would be less necessary, but it doesn’t

Then that’s a problem with the software – not necessarily one that should be passed on to the reader in the form of a “busy” layout.

For example, I just mentioned Springsteen in an entry on an entirely different topic and even given multiple categories per entry I probably will find things through search that categories just don’t cover.

What’s the tradeoff here? Sure, search might turn up stuff that would be missed otherwise, but that’s a two-edged sword. One of the biggest problems with search engines in general is relevance, and a tendency to present the user with lots of…well, crap. Minimizing both false positives and false negatives with a search-based approach is all but impossible even for small datasets, and when users have to sift through too many irrelevant result it sort of defeats the purpose of having a search engine in the first place. The question you need to ask is whether users actually gain much value from having a search function. Do they use it? Do they click through and stay at the target (indicating relevance) after they do use it?

Search engines are not without value, but *relying* on one as the user’s sole and total content-location solution is a serious mistake. If I had to choose between a human-maintained directory and a search engine in the context of a single site – the web at large is a different story – I’d prefer the directory every time.


From: "Bill Lazar" 

Date: Monday, October 15, 2001 6:29 PM

I counted 30+ links just on the left-hand navbar; IMO that’s too many right there, and doesn’t even count the links appearing within the blog text itself.

Okay, but the important links show up with no scrolling. If HTML had, for example, better support for tree controls, I would make some changes.

I realize that such a profusion of links is a common thing and that others go further than you do, but I still have to ask: regardless of convention or popularity, is it a *good* thing?

I think this is the nature of a weblog, or at least one very popular style.

Others come occasionally but outside of my famil and girlfriend, people rarely visit except to follow up on some newsgroup/discussion board posting. The latter rarely come back.


From: "Jeff Darcy" 

Date: Monday, October 15, 2001 6:51 PM

I think this is the nature of a weblog, or at least one very popular style.

Yes, it is unquestionably popular…with the blog authors. My concern is whether is serves the blog *reader* well, and if it doesn’t then it ultimately doesn’t serve the authors very well either.

outside of my famil and girlfriend, people rarely visit except to follow up on some newsgroup/discussion board posting. The latter rarely come back.

I’m trying very hard not to sound snide as I say this, but perhaps you as the designer/author have more influence than you think on whether they come back.

Broken Browsers, part 2

OK, I’ve managed to fix some of the worst display glitches without having to resort to platform-specific HTML/CSS. Netscape doesn’t align article sources properly, and Opera does something weird with the tops of the article-index tables, but otherwise those two are fine. I haven’t tried Mozilla, Galeon, Konqueror or Nautilus, but I figure if the page validates and IE/NS/Opera can all display it reasonably then any other browser would have to be severely broken for the content to be unreadable.

Broken Browsers, part 1

It appears that this page doesn’t display properly in all browsers. I expected Netscape to botch it and, sure enough, it ignores the “cellspacing” table attribute so viewers get annoying lines in the middle of the tables I use for the article headers. I was more disappointed with Opera, which I have generally regarded as one of the most standards-compliants out there; it just doesn’t use any of the style information at all, so the headers appear as plain text. Maybe there’s a way to set presentation preferences so it’ll do the right thing, but it sure as hell doesn’t work properly with the default settings.

And do you know what? I’m not going to bother fixing it. I’ve gone to the trouble of verifying that at least the front page (/index.php) is correct HTML and CSS, using W3C’s own tools, and I’ve re-read the relevant specs. As near as I can tell:

  • The way IE displays these pages is correct.
  • The other browsers are in error.
  • The content is still quite readable even though the display is incorrect.

Accordingly, I’m not going to go out of my way to support non-standards-compliant browser behavior. I’ve sure as hell seen enough anti-MS types use that same line when they refuse to support IE’s own idiosyncrasies (and yes it does have some); it’s about time they started admitting other browsers’ failings as well.

Joel Spolsky: NIH Syndrome

Joel Spolsky wrote an interesting article In Defense of Not-Invented-Here Syndrome. I mostly agree with what he has to say, actually, but I do have a couple of quibbles. Firstly, I think it’s important to note that people should apply their expertise to evaluating and selecting solutions, not necessarily to building their own. Secondly, when the “build vs. buy” decision does get reduced to “build” I think the decision-makers need to make two secondary decisions:

  • Who, within the entire organization, should do the building? If the organization already has a compiler group, for example, it makes sense for them and not the spreadsheet group to be the ones developing compilers.
  • Who should the newly developed solution be designed to serve? Having one group develop a solution in-house because no off-the-shelf software works quite right is OK, but having five groups develop five solutions in-house is still stupid.

In Joel’s Excel-compiler example, the problem in my opinion is that it was easier for the Excel group to get management approval for development of their own compiler than to get management support to make the compiler group more responsive to internal needs. It sounds to me like there’s something very wrong with the political situation if something like that can happen.