Subject: Re: Why I can't use Lisp. From: Erik Naggum <erik@naggum.no> Date: 03 Aug 2002 04:11:51 +0000 Newsgroups: comp.lang.lisp Message-ID: <3237336711612014@naggum.no> The most important, if not the only, difference between the Common Lisp world and that of most other languages is that it is /perceived/ to be impossible to get anything done with the free Common Lisp systems; you cannot even /learn/ Common LIsp using the free Common Lisp systems; not even the Trial Edition of Allegro CL or the Personal Edition of LispWorks will satisfy the "newbie" who wants to use Common Lisp. I have no idea where this /perception/ comes from or how it originated, but it is apparently deeply ingrained in people who know nothing about Common Lisp and refuse to learn or listen. The amazingly stupid people who remain newbies for their entires lives seem to be upset about something related to commercial systems, but I actually wonder what it might be. I think it /might/ be envy. Do you /need/ the power of the expensive commercial systems to use Common Lisp? No. What is it that people /miss/ when they claim that they cannot use Common Lisp for their applications while they /could/ use just about any other language? I actually do not know, nor do I know where to start to understand this issue. Allow me to illustrate why I fail to understand this issue with a past project of mine. I developed a system for real-time distribution of financial news for a wire service using Common Lisp that depended on multiprocessing support in the Common Lisp environment, in particular the ability to listen for activity on more than one socket. We chose a commercial Common Lisp. The reasons why we made this choice should be illumiating. The real-time nature of the application means that it was not CPU-intensive, and thus did not need preemptive multitasking between the processes. What made it so convenient to use multi-threading in the Common Lisp environment was the shared memory. It would have been possible to use the file system to share information between processes and to use a control connection to each process and then to implement a broker for messages between the processes. It would be a different design that might have required more time to implement, but it would most certainly be doable. The application would need to be implemented as an event dispatcher in each process, and it would have to be taught how to listen for activity on several sockets (as in the select system call) if the Common Lisp system did not already know how to do that. I estimate that this complexity would have meant an additional month of development time, but it would also have meant that we would have needed more powerful hardware, since the memory requirements would be much higher and the processing power to deal with the interprocess communication (IPC) would be significantly higher. However, my system was to replace an overly complex system that basically did a tremendous amount of IPC and which had serious problems and shortcomings because of the constraints of the IPC methodology used, such as starting and stopping parts of the system independently. (You would think not, but it was written by an idiot.) It would have been a hard sell if I had argued that I would replace the existing mess with another mess of approximately the same magnitude. So what I sold the project on was in fact that I could make all this a lot simpler in Common Lisp and thus remove the manual monitoring required by the frequently failing system. In this regard, it was indeed the benefits of the commercial Common Lisp environment that made the project. This was a highly commercial project, with high risk and high benefits. It had to succeed in a hostile environment,I would have to bring all the clients of the news wire on board with a new communication protocol to solve major problems in the previous design, and I needed all the confidence that money could buy -- in this case, it was for sale in the form of a commercial Common Lisp system. The commercial Common Lisp development environment was dwarfed the other costs involved. (We were much less happy with the "runtime" licensing, but the time and money I spent on that was still worth the cost compared to reimplementing it with a lesser environment, again mostly because of the confidence required in the multi-threading support.) /However/, had this /not/ been a project to salvage a wire service that would in all likelihood have faced survival issues if it had continued to crash and involve lots of manpower to keep it running, and I had been hired to do the original project, instead, I could easily have taken a chance on a "free" environment first, and in case of problems or costs or failure, have purchased "safety" in a supported commercial environment. I included this fairly long exposition of this project to show that I chose a commercial Common Lisp environment with commercial values in mind. I would have to implement some of the things I would have gotten with that commercial environment if I used a free environment, and I would have to make myself an expert in the performance of IPC and socket communication and streams in Common Lisp, and many other internal details. I have become that expert over time, but I was not ready to do it at that time. So another commercial value is development and testing time before deployment. I wager that these are /not/ issues for the free environments, /nor/ of their usability. If you /can/ afford to develop this for yourself, you should do it. If you can /neither/ afford to develop it yourself /nor/ purchase it from someone who has, you had better realize that you should not take on the project. What /is/ missing in the perception of the immature and inexperienced Common Lisp programmers is that /even/ if you had to do the internal stuff you would have to do in any other programming language and /even/ if this non-portable and implementation-dependent, you are /less/ system-dependent and /less/ forced to work at the internal /level/. This is hard to empathize enough to those who have made up their mind that they should get everything for free before they can even /start/ to think about using Common Lisp, but Common Lisp offers so much more convenience in the higher-level logic of the application and so much better ways to think about the system-dependency issues and the native operating system support that it is not worth the effort for anyone to sit down and "standardize" the missing features. It is not the same level of pain and suffering it is in other languages. Too many programmers would want a different take on the too many operating systems that might offer them that it would not make sense to "standardize" a huge number of features. It would, in fact, be detrimental to many development efforts to have to rely on many software packages from independent sources. The reason many of the other programming languages do all these things is that they are single-vendor and single-implementation and can very easily merge independent projects into the common fold and people are willing to hand over copyrights and ownership to this single vendor. This is utterly infeasible in the multi-vendor, multi- implementation world of Common Lisp where some people actually make money from supplying just these kinds of tools. In fact, many programmers are annoyed that a vendor has chosen to join the "open source" community to undermine their own customers' ability to make money on similar efforts, and because the supposed "open source" is so heavily dependent on internal coding practices. It may be difficult for outsiders and newcomers to understand this, but the commercial /success/ of Common Lisp has made it less appealing for people to give stuff away. It is /because/ Common Lisp is so eminently able to make money for those who use it that programmers and managers are reluctant to give away the genius and hard work behind the kind of quality and solid design that we are used to in the Common Lisp world. It is because of the high level of pain and suffering to do relatively simple things that people share the burden in other languages -- the comparable implementation in Common Lisp is far simpler and more elegant. On the other hand, Common Lisp programmers are finicky lot and woudl most probably want a different take on the same features from the operating system or other libraries -- satisfying them all would be an additional cost that would be hard to recover. Common Lisp is on a level /between/ the "free" languages that are quite painful to use and the commercial success of a mass-market language where you can make money on third-party libraries. Those who are new to Common Lisp seldom realize that it is such a different language from the rest of the crop -- it is almost a different crop. This may sound arrogant to people who have not used Common Lisp for real projects. I may sound hopelessly out of touch with other languages and their advantages to those who come from environments where the cost of learning everything you need is much higher than the cost of implementing it in Common Lisp. Those who succeed with Common Lisp are usually very bright people with experience in solving hard problems by making them simpler in surprising ways. To many of them, the boneheaded brute force of many other languages are /distasteful/, not features. Simplicity of implementation is generally not a value, because the elegance of use is what matters to users. Common Lisp programmers are far more /practical/ than the average lot, who are often more self-indulgent and childishly delighted that anyone uses their code or rewards them for their hacks or compact form of expression. Common Lisp has, in essence, a whole different value system. I have said that Common Lisp is the language you graduate into. Common Lisp is what you get to use when you have been a good programmer for a while and grew tired of all the cruft. Common Lisp programmers usually know dozens of languages and are not afraid to use them when practical, but because the cost of using a specialized language can sometimes be very high, such as when you have to keep track of which particular version of "language" and libraries and system libraries and kernels and whatnot in order to keep your system running. Knowing lots of languages also means that you are able to integrate them with ease and use particular libraries from particular languages more easily because you have a deeper understanding of the issues involved and a much broader knowledge of your actual needs. Instead of being blinded by the glitz and the hype factors, Common Lisp programmers are generally more /practical/ and solution-oriented than the random youngsters who want attention and try to get it by giving away their time to strangers. However, if you are the perennial newbie, you will never understand this. All you see is that your perennial newbiehood is rejected and your opinions are not validated by group hugs and cheers. Neither are you able to write code that anyone will applaud, so being a newbie in Common Lisp is not the kind of "fun" it is to be a newbie in Python or Perl or whatever, where everybody is no more experienced than you are and you can impress just about anyone if you are above average. Common Lisp requires more of you, but when you have grown up to meet those requirements, it is also extremely rewarding. If you remain on the unmet side of those requirements, your task is to meet them, not to sulk over the rejection or wax apologetical about your lacking prowess: Your task should simply be to realize that it takes more than you got, then either decide to return later when you have what it takes, or decide to take on the task of learning what it takes. If you hang around feeling inferior, you will do nobody any good, especially not yourself. Despite the nervousness of some Germans, I consider it proper to make it clear to people that they should make this choice, but for some reason, some people prefer to sulk and whine than sit down and figure out what it takes to become a member in good standing. Common Lisp is not a "free" language in that it takes no effort to learn. Common Lisp is not a "free" language in that you can as easily discard it. Common Lisp is not a "free" language in that you will be unchanged by it. Common Lisp is not an investment-free language, but neither it is profit-free. -- Erik Naggum, Oslo, Norway Act from reason, and failure makes you rethink and study harder. Act from faith, and failure makes you blame someone and push harder.