Subject: Loyal opposition [was: Possible bug in ACL and Corman Lisp?] From: Erik Naggum <erik@naggum.net> Date: Fri, 01 Feb 2002 05:01:21 GMT Newsgroups: comp.lang.lisp Message-ID: <3221528480408972_-_@naggum.net> * Erann Gat | Erik's view in a nutshell was: | | [We should] focus our attention on stuff that actually affects | users of all categories much more than this trifling issue | | The reason I raise this issue again now is that here we have evidence that | it *does* affect users of all categories, from beginners to implementors. | The fact that *two* implementors got this wrong, including the industry | leader, indicates that this really is a pervasive problem, and not just a | fluke. A slightly more accurate nutshell summary would be just what I said: removing special variables because they confuse a few people is a typical "modern" reaction to the lack of diligence and effort that "modern" users are no longer expected to expend in learning anything. this is simply a beginner's issue. Common Lisp used to cater to experienced programmers at the cost of having to learn it, like a _skill_, something people of reasonable competence levels would _value_. Most countries have laws that are fairly obscure and hence are neither commonly followed nor broken. However, a universal legal principle is "ignorantia legis neminem excusat" (ignorance of the law excuses no one). It behooves the citizen of a country to know its lawa. We find that more or less formal standards of good practice exists in every field of professional endeavor -- with the exception of programming computers. For some unfathomable reason, computers should be optimzed for those who are completely clueless, who cannot accept the responsibility for their own actions, who do nothing to rectify problems they run into, who are, plain and simple, _incompetent_ at their job. Microsoft has clearly made a huge contribution to this state of affairs in its incessant propaganda that computers should be _so_ easy to use that actually learning to use them well has become a disadvantage. However, failing to understand how something works, be it the society in which you live of the computer you use, can only lead to frustrations, complaints, and miserable experiences with the software you use. So, too with programming languages. I believe that there is nothing whatsoever to be gained by catering to stupid and incompetent people. Others, such as Bill Gates, believe otherwise, but in order to take advantage of stupidity and incompetence, you have to make a choice: Make yourself manifestly unattractive to good and smart people. If a society catered to its criminals, good and smart people would leave that society, too. This is why I think it is worth the pain to expose and get rid of those who have no desire to see their wishes in a context of a community that would have to (help) fulfill them. If there is a law we do not like, there are some exceptionally complex _laws_ to follow to change it. It is not just in programming language communities that "cost to implementors" is considered and valueed higher than some "perfect solution". If a society is made up of people who are so ill equipped to deal with disagreement that they throw up their arms and cry "design flaw" whenever their pet peeve comes up, they survive solely on the momentum of whatever processes allowed that society to be created and grow out of barbarianism and "might is right" to begin with.. Sadly, many Western societies virtually surf on the waves made by those who were smart enough to figure out that need for legal infrastructures such as constitutions. It takes a considerable amount of intellectual effort to see that freedom is achieved only within a society of just law, because most people who have not quite grown up mentally are still quite short-sigtedly egoistic and think that their desires are the law. Some think this regardless of the consequences for others. Those who hold the community interests above their own, or, more precisely, who adjust their own desires so that they do not require a different community than that in which they live, are generally much more successful in achieving their goals than those who spend their time wishing for a different community, society, world, or universe. If you stumble and fall, do you blame gravitation, meomentum, friction, or some other part of what we consider "laws of physics"? If you stumble in your code and it misperforms, do you blemae physics for making it harder to type in correct programs, do you blame the hardware for not doing what you want, do you blame the compiler for not understanding you, do you blame the language specification for not being what you want? If you get ill from a disease for which you were genetically predisposed, do you blame your God, do you blame your parents, do you blame your doctors for not fixing it, do you blame medicine as a whole for not being able to give you the life you want? Or do you, in each of these cases, figure out that there are many things you cannot change and that it is useless to fight, that there are many things that just happen by coincidence and which have no conscious will behind them, that even if things seem wrong to you, they are in fact right for a lot of other people? You are rich if you can purchase whatever you want, whenever you want it. Corollarily, it depends more on what you want and when than on how much money you have. The basic question is: Can you adapt to a society made by others? Some are unable to do this and have to have their own will or they threaten to destabilize the society that made their very "protest" possible -- in a less civilized society, they would have been orstacized or killed, but because of the freedom they enjoy to express their views, they attack the very basis of that freedom. These people are generally dissatisfied with some part of their society (and this will not stop -- they are basically fighting _against_ the "establishment" and it will never be to their liking, because their role is a fighter, a role that would vanish if their "demands" were met) and act like the proverbial disgruntled postal workers instead of trying to find something more valuable to wast their life on. Are special variables in Common Lisp difficult to understand? No, but let me rephrase the question to explain why: how much _education_ (as opposed to mere _training_) do you need to figure out what variable reference mechanisms exist and how they work and is this more than (1) any other feature in the language (it is clearly not), (2) any other features of other languages regarding non-trivial handling of bindings (it is clearly not). What we have is a failure of some people to spend any effort _at all_ to learn how to use special variables, and those seem to think it is legitimate to fault the language for their lack of desire to expend effort to learn it. So, the question is really, do we want to optimize a _language_ for the uneducated, untrained, unskilled moneky who coulud be replaced at a moment's notice or do we aim for the professional or professioal-to-be in both our education of beginners and in the design of our language? In yet other terms, do we recognize that knowing how anything works that is not exactly like something else you already know takes special effort? The first thing you learn is so simple and easy to internalize precisely because _nothing_ is there to get into a conflict with, but if you know one thing, like C's global variables, then your next thing, which will in _some_ way be different, will take some effort to understand. Those who do not want to expend this effort, _assume_ that all things are the same and do not even want to recognize that they might be wrong when they run into problems. This is flat out _stupid_ and betrays an _unconscious_ modus operandi, which I consider to be _fundamentally_ incompatible with programming computers. Those who fail to think even when the suggestion that they do so is presented by something as clear-cut as a failure of a computer do their bidding, should not be used as arguments to redesign a language that works perfectly well for those who _have_ learned it. Such is no more than nihlistic change-for-the-sake-of-change and serves nobody. Common Lisp does _not_ have the luxury of being first contect, so those who discover it and want to learn it and use it productively have no more choice about having to expend the extra, but necessary effort to learn how it both exceeds and differs from other languages whose designers never dared to challenge the same design issues than those who wish to learn a physical skill that involved "unlearning" some bad habits, such as learning proper pronunciation in a foreign language, driving a car, becoming a master marksman, or even just typing faster on a computer. However, if the first thing an otherwise eager student sees when he is in this transition and re-learning period is some disgrunted ex-Lisper whine that so and so feature is a design flaw, the likelihood that he will want to expand that effort approaches zero faster than intelligent youngsters get rid of their desire to learn mathematics when presented with idiotic drills in arithmetic and a teacher who thinks real mathamatics is "too difficult". What we should do instead of this stupid whining about how badly designed the language is, is simply to show people what is on the other side of learning it well. It is my personal opinion that those who gripe about bad design are unable to adapt their personal will to _any_ design not their own, and if my memory does not fail me, the same person who whines about special variables yet again also whined about how "impossible" it would be to use Common Lisp is real life applications, too, going all George Michael on us and "losing his religion" in the process. Learning the prerequisite skills to do the necessary work is _not_ an option. Education to understand the theoretical underpinnings of one's work is _not_ an option. Being nice to uneducated, untrained, unskilled fools who effectively complain that the world is not to their lazy liking _is_ an option, but forcing others to accomodate them because there are lazy idiots out there who do not want to learn anything at all, is not. Every other human endeavor requires expenditure of effort and some pain in learning even to be bad at it, and much more to be good at it. There is not a single exceptions. and computer programming most certainly is not it just because it has an amazing ability to reward those who learn its first, simple skills faster than any other discipline. However, one must not _stop_ at the simple skills just because it begins to get harder to become better and more advanced. If there is only one way to destroy a discipline, it is to rob people of the opportunity to improve by giving them too few challenges. I am, incidentally, interested in and care deeply about _professional_ exchange of information, among and for the professional programmer or professional-to-be. Lazy hobbyists who do not want to work at all, disgruntled ex-professionals who still hang around instead of just doing something else that is valuable to them, anti-social individuals who want to destroy the basis of the profession, i.e., its formal standards and informal standards of best practice, etc, should in my view get the hell out of public fora designed for the exchange of information between those who have at least some of the interests they do not share with the rest of the community. Compulsive whiners are not welcome in any professional setting and I fail to see how they are welcome in any personal company, either. As for the Common Lisp community's "resistance to change": If you have only bad ideas, do not blame other people for the resistance to change, be _intelligent_ and figure out what constitutes acceptable changes and propose them. Improving Common Lisp is _hard_. That is the result of it being good in the first place. It used to be damn easy to improve Perl or C++, and any random idea got in, but even that is getting harder. It would be foolish to argue that that which has precisely been _matured_ by exposure to a barrage of ideas, good and bad, and have in the past been more than willing to adopt the good ones, has somehow _stopped_ adopting ideas, but it turns out that the education necessary to improve something that is highly advanced takes so much longer to acquire that those who have no such education, and who fail to understand what they are trying to improve, will merely _repeat_ all the "good ideas" that have already been rejected in the past. This, howeer, is precisely what marks the transition from a hobbyist discipline to a professional discipline: When the hobbyists can no longer offer up random ideas that are good enough to merit changes, the language is so good on its own terms that only those ideas made by experienced, mature professionals stand a chance of causing a change. As examples: random syntactic stunts are foolish hobbyist ideas, whether "marking" special variables or some new conditional macro to supplant all others, but a new basic design for streams that maintains compatibility and respect for other members of the professional community by offering something superior in functionality and performance, is very clearly a professional idea, complete with implementation. Another good pair of examples: Useless whining about lowercase symbol names and a way of doing this that violates the standard is a hobbyist's lack of ability to grasp what he is facing, while using the substrate of the language to offer extensive support for external-formats and a uniform internal character set, complete with implementations with very good performance, is clearly a professional design improvement. In my view, the Common Lisp community is short on praise for real, professional changes, and very long on whining about the resistance to adopting hobbyist stunts. In summary, what we lack is a professional attitude towards loyal opposition. The disloyal opposition offered by whining hobbyists who want change because _they_ feel bad about something and cannot get over it for personal reasons, causes a lot of grief and traffic in this newsgroupp. Those who have misgivings about something, appear to be so uneducated, untrained, and unskilled in public debate that they cannot present an argument from loyal opposition, which would have respected past decisions, accepted and existing designs, rejected suggestions, and those who have made up the community and brought it where it is today, but seem instead obsessed about the need to make that which they want to "improve" look _bad_, those who designed it _braindamged_, those who want to adhere to procedures and to support the community _religious_, etc. Instead of being able to see a series of steps from here to there, those who are far more disgruntled than interested in improving anything, want all of their changes in one giant step, crushing any and all opposition and forcing a _departure_ and _forking_ instead of linear improvement. The disloyal opposition can be summarized with "I don't like this, so therefore it's bad", while the loayl opposition would argue "this might be even better than what we already have". /// 2002-02-01 -- In a fight against something, the fight has value, victory has none. In a fight for something, the fight is a loss, victory merely relief.