Category Archives: Other

Why talking about “alternative” is shooting yourself (and others) in the foot

I’ve seen it happen time and again. Companies and individuals go out of their way to write great open source software, then, when the moment comes to let the world know about it, they (and/or their early adopters and proponents) present it as “an alternative to [proprietary solution] Foo”.

That’s bad when Foo is an established player:

But it borders on self-flogging nonsense when Foo is not even in the stores: Linux MPX Multi-touch Table May Become Alternative Microsoft Surface.

When you frame things like that, you’re giving positive (and free) advertising to the opposing party. At least for me and for those I asked, the following accurately portrays what the phrase “alternative to Foo” brings to mind:

Whether you’re the author of “Bar” or a passionate user advocating it, is that really the picture you want to suggest? (This, by the way, is why there’s no place for things like alternative to MSN/AIM/YahooIM/whatever on, despite much well-meant advice to the contrary.)

“Oh, that’s all good and well, but how am I supposed to advocate Firefox to someone who doesn’t even know what a browser is? How, if not contrasting it to something they know, such as Internet Explorer?”

If you’re advocating a product, and genuinely believe that it’s better (if not, why are you advocating it in the first place?), that is the idea you want to get across.

“Oh, you’re still using this to browse the ‘net? Haven’t you upgraded to Firefox yet?”


I have made attempts at saying something about the subject myself, but really, it doesn’t get much clearer than how Bill de hOra puts it:

Reasoning about code that depends on something other than its inputs is arguably the operational meaning of ‘complexity’ in software.

A case for functional programming and another against fear

avatraxiom on Designing Too Far Into the Future

…design for the specific requirement (singular) that you know is broadly needed, and implement that on top of the system you already have. If that can’t be done, or can’t be done with simple code, then you do re-architecture. Rinse and repeat.

You do re-architecture. There must be some wicked spirit hiding in a dark corner of the collective unconscious of programmers, probably born when re-architecting involved re-punching a card. Fact is, many still try to get a system right the first time, out of fear that they will have to later change it otherwise. Bad news, you will have to anyway; good news, it’s no longer that painful if you accept it from the start and for each line of code you write you don’t just ask yourself “will this run” but also “will it be harder to change things because of this”.


This is how many, many people can be working on an open source project simultaneously without knowing what the others are doing. They design their code so that it doesn’t matter what’s going on anywhere else, the code just works, and can be modified and extended easily by anybody. There are lots of ways to do this—they mostly fall under the rules for good object-oriented design.

That is actually an excellent case for functional programming—and for function without side-effects in particular. If the things that the outcome of a piece of code depends on are clearly spelled out under your eyes in an argument list, instead of floating somewhere in outer space (and that means not just global variables, but also instance variables once the class definition gets taller than a couple of pages), it becomes much easier to reason about that piece of code and change/grow it in ways that do not impair other parts of the system.

LibrieX released: turning e-book readers into platforms with High Tinkering Potential

This has been sitting on my hard disk for a while. So, with some help from a winter evening cold enough that staying home and writing documentation becomes something to be looked forward to, here it is:

LibrieX (or Librié, eXtended) is a toolkit that turns the Librié E-book Reader
into a platform with High Tinkering Potential.  Highlights are a way to establish
TCP/IP connection with a host machine and a preliminary port of the Nano-X graphic

More information can be found on the project home page.