I’ve discovered something recently. Most programmers have a favourite programming language. No, that’s not it, there’s more to my discovery. Whenever those programmers have an idea they open a text editor and start coding and/or they start playing with a REPL, if they are lucky to like a programming language that provides one.

You watch them code and they do it fast, with little errors. They don’t program fast because it’s a good language, they program fast because they know it, and they know it because they use it often, and they do that because they like it. That was the first part of my discovery.

I don’t like any particular programming language. You can follow the previous logic path backwards to find out that I’m a slow, error-prone programmer, that’s the second part of my discovery. Actually, I’m good at some programming languages, which I wouldn’t pick for my own projects, like Python, C or even Erlang, which I may pick for some projects, but not for most of them.

That means that whenever I have an idea, I am bored to a halt trying to deal with any programming language’s idiosyncrasies (they all have some) before I can even write the first of code for my idea. This is bad, very bad; and it makes me unhappy. I want to fix it.

I’ll pick one programming language and make it my own, even if I don’t like it. I’ll start using and continue using it, and when I’m sick and tired of how ugly it is, I’ll continue using it. Until I fill like a fish in the water with that programming language (I hope fish like being in the water).

I tried with a couple extremely beautiful programming languages. I failed with both. One of them doesn’t have enough libraries packaged for Debian, or derivatives. The other, although it’s beautiful for some kind of programs, it is ugly and hard to use (at least for me) for the kind of programs I generally make (useful day-to-day programs, desktop or web applications). I don’t mention them to avoid falling in a rant. Next in my list is Common Lisp (for those wondering, Python is also in the list, but still a few steps away).

I took a deep breath and picked up Practical Common Lisp once again (at my current job, nobody uses CL (Common Lisp), but they have a copy of this book).

My intention with this blogpost is to set a record for me. In one or two days, when the ugliness of Common Lisp makes me sick, I want to be remembered of this post, of why I picked CL. I can remind me myself or maybe some friend who appreciate me enough will remind me to take a practical path, for once at least, that takes me somewhere.

This blogpost is also for other developers who may be suffering the same illness as I and still aren’t masters of one language because there’s no perfect language. The perfect language doesn’t exist (you’ll have to make it), so, pick one and master it (you’d also need a language to write the perfect language’s interpreter).

Comments at the original blog

  1. beza1e1 Says:
    If your footnotes are bigger than your text, you should reconsider your text.August 5th, 2007 at 4:34 e
  2. Brian Says:
    I like your blog because I am you and you are me.

    I am != to people who don’t make many errors.

    August 5th, 2007 at 6:05 e

  3. Pupeno Says:
    beza1e1: Thank you. I always want to take another branch of the idea when writting something and I use footnotes for that, I shouldn’t do it.

    August 5th, 2007 at 6:10 e

  4. Martin DeMello Says:
    If the ugliness of CL makes you sick, but you favour the idea of some sort of lisp, spend a few days checking out schemes like Chicken Scheme (which has a fairly decent set of libraries and compiles to native code) and/or PLT scheme (which has an even better set but doesn’t).

    August 6th, 2007 at 8:50 e

  5. Pupeno Says:
    I’ve tried both, Chicken Scheme and PLT Scheme, they are one of the two beautiful languages I’ve tried, which I decided not to mention to avoid turning this into a language flame-war.
    But now that you mention them, the problem with them is the libraries. Yes, both have a lot of libraries, but they built their own building tools and package management which are incompatible with any other package manager. That is, it is impossible to make a deb or rpm out of a plt or egg (I don’t mean magically transforming them, but making them the same way I do it with a .tar.gz that just uses autotools, configure, make, etc).
    One important requirement of package managemen is that the installer only copies files and that it can be tricky to copy them somewhere else, so that you can install in a separate location and then package to redistribute. Both packages, plt and eggs break those assumptions.
    Having liked Chicken Scheme, I actually make a SCons module which you can find in this web site, under software (SCons is a replacement for make and autotools) that allows you to easily install in the usual install-from-sources, allows you to make any kind of packages, rpm or deb or whatever, and with a special feature I wrote lets you even generate an egg.
    But nobody cared and I’ve found both comunity don’t even care that there are operating system with package managers and that there are people maintaining servers, like me, that would never install anything that is not prepackaged (and that can easily be upgraded with a command, or removed with a command) or people like my wife, that doesn’t know and will never know how to install something unless it is pre-packaged.

    August 6th, 2007 at 11:41 e

  6. Martin DeMello Says:
    Yeah, that’s definitely a problem wth Scheme in general and individual Schemes. Not only don’t they care about OS-level packages, most of them don’t seem to care all that much about each other’s packages either

    August 6th, 2007 at 12:09 e

  7. Martin DeMello Says:
    Incidentally, what does CL do to fix this problem?

    August 6th, 2007 at 12:09 e

  8. Pupeno Says:

    CL provides packages in the definition of the language, in that huge standard of which only the index is as big as Scheme standard. So, no matter to what CL implementation you are programming, you define packages the same way.
    Unfortunately, packages only separate code but don’t offer a way to load code. This has been solved by a package called asdf. Sincethere would be a bootstraping problem, most CL implementations just ship asdf. asdf also includes a way to install software and in the end it is not so packager friendly, but people at Debian worked hard and made asdf packages easier to package (oh! and asdf packages are just .tag.gz, no fancy packaging like plt or egg really). Common-lisp-controler, or clc, is what some inteligent Debian guys created to deal with this and other problems. clc was now adopted by Gentoo and it can be adopted by other OSs (I think FreeBSD uses it as well). If you want to check the efectiveness of this, you can see how many Common Lisp packages there are in Debian:
    And I’ve made some package myself, it’s not hard, I just wish the Debian comunity was a bit more active. The Gentoo comunity is much more active and they even have a populated irc channel at freenode #gentoo-lisp (or #lisp-gentoo?).
    Another thing I’d like to add is that by having a good support in Debian, you also have a good support in Ubuntu, Kubuntu, Xubuntu, etc. Which is nice, because they are very popular distributions.

    August 6th, 2007 at 12:30 e

  9. Phil Carbone Says:
    If anyone is interested in a “Universal Programming
    Language” concept please visit the URL below:


    November 8th, 2007 at 15:50 e

You may also like:

If you want to work with me or hire me? Contact me

You can follow me or connect with me:

Or get new content delivered directly to your inbox.

Join 5,043 other subscribers

I wrote a book:

Stack of copies of How to Hire and Manage Remote Teams

How to Hire and Manage Remote Teams, where I distill all the techniques I’ve been using to build and manage distributed teams for the past 10 years.

I write about:

announcement blogging book book review book reviews books building Sano Business C# Clojure ClojureScript Common Lisp database Debian Esperanto Git ham radio history idea Java Kubuntu Lisp management Non-Fiction OpenID programming Python Radio Society of Great Britain Rails rant re-frame release Ruby Ruby on Rails Sano science science fiction security self-help Star Trek technology Ubuntu web Windows WordPress

I’ve been writing for a while: