Archive for May 2002

2002/05/05 05 May

Why do developers choose one programming language over another for a given task?

Sometimes I choose raw C when I need blazing speed.

When I want something that will run on Windows with as small a distribution as possible, I often choose C++ with MFC statically linked.

When we need a GUI that will run on Mac, Windows, and Linux, a common choice is Java (although the GUI will not be perfect, it will work.)

For rapid GUI development and really smooth UIs, I like Visual Basic, but I know that I'm going to have to pay the price in the size of the distributable and the fact that I'll be locked into Windows.

For a command-line tool that must run on any UNIX machine and doesn't need to be fast, perl is a good choice.

If you have to run inside a web browser, JavaScript is the really the only choice. In a SQL stored procedure, you usually get to choose between one vendor's proprietary SQL derivative or go home.

What's the Point?

But I hardly ever choose a language based on syntax. Yeah, I prefer the {}; languages (C/C++/C#/Java). And I have lots of opinions as to what makes a "good" syntax. But I wouldn't accept a 20 MB runtime just to get semicolons.

Which makes me wonder a bit about .NET's cross-language strategy. The idea is, choose any language you want, there are zillions, and they all work the same way.

VB.NET and C#.NET are virtually identical except for tiny syntactic differences. And other languages that want to be part of the .NET world need to support at least a core set of features and types or they won't be able to Play Well With Others. But how do I develop a UNIX command line utility in .NET? How do I develop a tiny Windows EXE in less than 16K in .NET?

It seems like .NET gives us a "choice" of languages precisely where we couldn't care less about it -- in the syntax.

2002/05/06 06 May

Why Religious Wars are Stupid

Yesterday I made what I thought was a lightweight claim about how the "choice" of languages in .NET is not as much of a choice as you might think.

Some people assume that this means I am against .NET, or I'm "clueless," because I don't understand the productivity benefit of managed code.

OK, they didn't read what I wrote less than a month ago praising the productivity of .NET.

Of course, when I wrote that, some people assumed it meant I was for .NET, and dug up an old article from two years ago in which I complained that an early white paper on .NET didn't say anything. (It was true, the white paper didn't, and .NET didn't ship for 2 years). So I'm a hypocrite because I used to be against .NET and now I'm for .NET.

Anything as complicated as .NET is bound to have many positive aspects and many negative aspects. Duh. The stupid thing about religious wars is when one person says, "you don't get as much language choice as you think" and the other person says, "you are clueless, because you're 4-6x more productive!" What a waste of time.

The World Is Complicated. Get Used To It.

Some people can't. Look at how angry Michel gets because I point out that (a) features sell products and (b) choices reduce usability. So? The whole point of design is that you have different goals that you need to resolve. Want to design a trashcan for street corner? You have to make it light so it can be emptied easily. You have to make it heavy so it won't blow away. You have to make it big so it will hold lots of trash and the trash won't blow out. You have to make it small so it won't take up too much space. You have to make it easy to throw trash in so people don't miss and litter. You have to make it hard for trash to get out so when it's windy the street doesn't litter itself. Design is all about making hard choices and, hopefully, sometimes, hitting upon elegant solutions that solve conflicting goals. But when you can't solve conflicting goals, you have to be smart enough to decide which goal to solve, and not just be a lazy punter and pretend that adding a checkbox to the options dialog will solve it.


Don't use Verisign. They suck, and there's no reason to use them. I've been using for domain names (although is cheaper and run by with the same excellent interface) and Commercelock, also run by, for digital certificates. Commercelock is actually provided by Baltimore Technologies which charges a heck of a lot more for exactly the same thing.

2002/05/07 07 May

Five Worlds: not all software development is the same.

PS. There is a large grey area between internal, consultingware, and shrinkwrap - the three worlds are often a continuum. Often products start out as internal products, then the business guys have the bright idea of selling it to other companies, but it is so brittle and makes so many assumptions about its environment that it takes weeks to install it at other customers' sites, which is how consultingware is born. (cf. Vignette StoryServer which started as c|net's inhouse content management system and now costs millions to get running.) Theoretically the software should then migrate towards shrinkwrap as the customer base grows, with increasing emphasis on ease of installation, but these companies get so addicted to their consulting revenue they don't see any benefit in making it easier to use off-the-shelf. And many internal developers have no prior experience with making software run in the wild, so it doesn't.

2002/05/08 08 May

Bertrand Meyer provides a far better analysis than I did about multiple languages in .NET in this month's Software Development Magazine. "Of course, the [.NET] languages involved have their own models, which may differ significantly from the .NET object model. That's to be expected: Otherwise, they wouldn't really be different languages, just a different syntax and minor variations on a single language theme. To a certain extent, this characterization could be applied to C# and Visual Basic .NET; one may claim that these two are, deep down, just one language, now that VB has become an OO language. But it's definitely incorrect if we consider the entire set of .NET language players."

He goes on to point out that "Managed C++ is very close to C#, in spite of what the default Microsoft descriptions would have you believe." And I'm sure when Java.NET comes out it will be too.

2002/05/10 10 May

Jim Highsmith has a great idea for figuring out the big picture of the products you build: "design the box."

2002/05/13 13 May

RealNames is going out of business. They deserve it. It was just a dumb scam to try and establish yet another Verisign-like monopoly on everybody else's trademarks. And it was a "boil the ocean" business plan, one which required everybody on earth to go along with their stupid scheme. And Keith Teare's public crybabying is really quite unprofessional, albeit fun to read.

Now if would kindly just go away. Why anybody would pay actual money, the stuff that can be used to purchase valuable goods and services, for a domain name that is only visible to a fraction of the Internet is completely beyond my comprehension. Another scam hoping to prey on stupid businesses?

2002/05/16 16 May

James Ladd: "Have any of you integrated a software license management solution into your product?"

(We're rolling our own for Fog Creek's products.)

Current News >>

Historical Archive

1114 posts over 16 years. Everything I’ve ever published is right here.

1999           Dec
2000  MarAprMayJunJulAugSepOctNovDec
2010JanFebMarAprMayJunJulAugSepOct Dec
2011JanFebMarAprMayJun  Sep   
2012JanFebMarApr  Jul     
2013  MarApr  Jul     
2014      Jul     
2016    May       

Now that you’ve read all that —

There’s a software company in New York City dedicated to doing things the right way and proving that it can be done profitably and successfully.

Fog Creek Software