In time I became very frustrated with my educational path for industrial strength Common Lisp. Things should not be as hard as this to install a few libraries that are probably in very common use (relatively). Maybe I’m dense, maybe I’m impatient, or maybe I’m just using the wrong implementation (CLISP on Windows), but I found this experience very painful.
Common Lisp has a comprehensive standard, true. But a standard is not enough. You also want a free implementation that conforms to the standard. Most modern programming languages like Perl and Ruby have one “base” implementation which everyone uses. Is there really a need for more ? I don’t think so (think about Java, C/C++ (gcc), C#, Python, it’s the same story…). The base Perl implementation is quite enough to serve millions of happy Perlists writing useful applications. Sure, Ruby now has forking implementations for the JVM and CLR, but they all try to fully port the base implementation in its entirety, and not just the core language.
Having a “full standard” to which many implementations conform is nice, but do everyday programmers really need it ? I’m not sure at all. Take Common Lisp for instance. That it has many popular implementations makes things worse, in my very humble opinion. Take a typical newbie post to comp.lang.lisp – they’re all very much alike. Newbies are always asking which implementation to use – which is better, what are the differences, etc. Although it isn’t easy for old-timers to relate, a multitude of implementations is confusing. Especially when you pick not the most popular and supported one (which seems to be CmuCL / SBCL on Linux for Common Lisp) – you’re up for a lot of uphill struggle.
I have a theory that what drives programming languages into the spotlight is the mass of newbies, not the few elite hackers who can recite selected parts of the implementation’s source code in their sleep. A language can be average, but once it has a lot of support, it breaks into public awareness and gradually improves to become pretty good.
Take the small and modest Newlisp, for example. It is a dialect of Lisp which is, admittedly, quite inferior to CL and Scheme. However, it has a single well-supported implementation, a lot of useful libraries right out of the box and a vibrant and supportive user community which makes it much more fun for newbies than Common Lisp. Sure, CL hackers walk with their nose pulled high in pride of how CL is vastly superior to Newlisp as a language for “serious programs”. But most of these newbies will take a couple of years to reach the level of those “serious programs” anyway, and some may never reach it. And in the meantime, they will use Newlisp, have fun and brag about it to their friends, while CL hackers will look with envy. Another recent example is the AutoHotKey language I wrote about earlier. As I said in that post, the programming language driving AHK can make any programming purist nauseous. It is that bad, true. However, it is usable, and the language installs easily, has tons of libraries and users who submit a lot of useful scripts and libraries. In the meantime, its responsive author is slowly but surely improving the language. All you need is the initial push, the dynamic resistance is much lower than the static resistance, as we all know from physics.
This is not to say that languages should be weak and all that matters is the implementation, not at all. It is to say that Common Lisp is damn unattractive for new programmers. Probably the least attractive of the popular languages. To make it more attractive, some changes need to be done, especially making it more newbie-friendly. I think that the litmus test for newbie friendliness is something like this:
- You can easily download and install a free implementation of the language, preferably for Windows, where the vast majority of computer users is (and hence the newbies and the clients).
- With a simple copy-paste of code, you can pop-up some rudimentary GUI, right out of the box.
- If you want a library that does *whatever*, you can easily download it from some central repository and install it, without the need to compile anything with your own compiler.
- Have any question answered in a well-written documentation and set of Wikis, FAQs and forums with helpful users.
At the moment, Common Lisp fails to pass this test. I think that while this is the situation, CL will fail to become more popular and will stay a curiosity. Some CL users say it’s for their own good, but I doubt that. Even inferior languages like Newlisp pass this test, not to mention Ruby, Python and even Scheme (for example PLT Scheme).
The most successful products in this world are not necessarily the best ones. It is the best marketed ones. I think this is one of those cases.