Dont Brag Beyond Your Science

I am getting a little tired of people claiming that language X or paradigm Y is so damned great. Not just "good", but "great". If you can produce reasonably objective, external evidence that something is better, such as less code or fixing OnceAndOnlyOnce, then you have room to brag and evangelize. But, that bragging right is only as powerful as the evidence you offer. If something can be shown a few percent better, then you are allowed to brag a little bit, but not a lot.

If it helps you "think better", but you cannot describe in detail how it helps you think better, then shut up. That is not good enough because your thoughts cannot be analyzed by any objective means (except perhaps some kind of productivity metric). I know this bothers some, but internal evidence only frustrates because it cannot be dissected by geeks, and geeks go crazy when you don't let them dissect things that you keep selling.

Here are some guidelines for such evidence:

The reverse is also true: Don't bash something with a heavy hand unless you can clearly show why it stinks.

I am getting a little tired of people saying they are getting a little tired of people claiming that language X or paradigm Y is so damned great.

[And I'm getting tired of:


Let's review past advances that most agree are superior:

The benefits of most alleged advances since these have been far more difficult to describe. Proponents seem at loss of words. It seems we reached a point in history where science cannot work or something. Very odd. They may say things such as "better abstraction", but that is impossible to objectively measure beyond less code and OnceAndOnlyOnce. (MeasuringAbstraction).

Please, there have been many many more advances since then that anyone even slightly educated agrees upon. HigherOrderFunctions, LexicalScope, Closures, Continuations, AnonymousFunctions?, MultiMethods, Classes, Functions, Procedures, Modules, Namespaces, etc. If you think everything since structured programming (it's not called blocks) has no clear cut advantages nor wide acceptance, you need to study more, program more, and quit expecting others to try and prove things to you. The answers are there, easily found, easily understood with only simple reading, if you're looking for it, but no one's going to force it down your throat for you.

Most of those offer incrmental improvements, not revolutionary improvements.

Exactly the words of a Blub programmer, you are caught in the BlubParadox, unfortunately, there is no escape.

Plus, there are different ways to approach the same thing. By the way, In don't include "functions" as something new. Even many assembly languages have subroutine-oriented commands. Plus, some of those offer objective evidence in the form of less code. For example, suppose we get information from an external system which provides a "function code". We want to execute some code based on this function code. If we don't have dynamic function abilities, then we probably have to do an if/elseif or case statement:

  select on function_code
  case "foo": foo(x)
  case "bar": bar(x)
  case "grog": grog(x)
  .....
  end select

If we can execute a function based on the name of the operation (run-time function determination), we don't need a case statement. Thus, we have objectively less code. I can show somebody the code and say "see see see!". (They could counter that the need for such is not common enough to abandon compile-time checking, but at least we are comparing code instead of vague innuendos.)

As far as "not fully understanding what is being criticized", one does not have to know how a car engine works to see who wins a race, or know how rockets work to determine which one flies higher or more accurately.

[Flawed analogies, overly simplifying. What's the analog, in programming activities, to "winning the race"? "Flying higher or more accurately?" Productivity? Hard to measure, and hasn't been. Quality? Same deal. If you're criteria is popularity of a technology, you're not measuring something that's directly indicative of technical fitness.]

[In fact, if you look at specific technologies or solutions within engine or rocket design, you'll no doubt find a lot of debate and opinion. Because of the nature of these pursuits, I'd think it's easier to do specific, controlled tests, and there's more money available to do it, to help sort out the debates and opinions. But choosing among programming languages seems more analogous to choosing between methods of designing engines than what to incorporate into the design, and I'll bet those choices are just as unclear in mechanical engineering as they are in software development.]

But they are fighting over a few percentage points of difference, not revolutionary differences. Nobody in the field claims they can make a rocket go 100 times further on the same amount of fuel. Sure, there is the nuclear option, but it carries a big risk to earthlings. It could be built on the moon instead of Earth to reduce risk, but at a big cost. These tradeoffs are known and accepted. The fights over the significance of these known tradeoffs are not that large. They are what I call "incremental fights".

[Again, you're focusing on the wrong analogy. If you want programs to run as fast as possible, Lisp might not be your best choice. (Although it's not bad in that area, either.) Coding is like detailed design work; you do it once, manufacture the program once (by compiling it and trivially copying the results over and over), and then users run the program over and over again. Launching a rocket is like launching a program. Generating all the detailed mechanical drawings and process descriptions that feed into the manufacturing process is akin to coding. Debating the merits of programming languages and other programming technology is like choosing among CAD programs, catologing methods for drawings, tools to assist in calculating dimensions and shapes. Efficent use of the designer's time is only one criterion; ease of performing engineering changes is also important, and the ability to easily find, read, and understand the drawings, and being able to verify assemblies with simulations is a plus. This analogy still breaks down in some places, but it's much closer. (A big difference is the fact that "manufacturing" is cheap to the point almost of not existing in most software development.)

[I'm not sure why you think that Lisp advocates are fighting a "big fight" rather than an "incremental" one. I've never seen anyone claim that you could write a program a hundred times (or even ten times) faster in Lisp than in C. You might be lamenting a behavior that doesn't exist. But a lot of people say that they've found the writing and modification of programs to be more convenient, more pleasant, and perhaps a bit faster in Lisp than in many other languages. Since Lisp isn't as widely used as C++ or Java, you'll find that a lot of these people, despite their personal preferences, have had to do a lot of coding non-Lisp languages, because there aren't that many Lisp programming jobs to go around. So they have actual hands-on experience with multiple languages. Contrarily, most of the naysayers seem to have minimal Lisp programming experience. These impressions come from following comp.lang.lisp for a couple of years, and from debates here on C2. I find this to be pretty interesting, don't you?]

[Lisp comes up often on wiki because CommonLisp is a rich language with features that are directly relevant to many of the technical topics that come up here. Few other languages cover this much territory, all in one package. As more people become familiar with it, it's not surprising that it gets mentioned with disproportionate frequency.]


Re: "Contrarily, most of the naysayers seem to have minimal Lisp programming experience..... I find this to be pretty interesting, don't you?"

A classic "chicken-or-egg" issue. Those who don't find it as wonderful are probably less likely to pursue it.

[Bad analogy. You need an egg to get a chicken, and a chicken to get an egg. If someone cares to, they can find out more about a programming language by investing the time. In other words, it's a matter of choice, not impossibility. We already have the chicken; but she hasn't invested the time necessary to lay an egg. So she doesn't have much credibility when lecturing other chickens on the merits or faults of egg-laying. ]

[Those who do find it wonderful frequently have extensive experience in Java or C++ (owing to the necessity of, y'know, earning a living) and yet still prefer Lisp. The typical pattern is Lisp-lovers who know a lot about Lisp and Java/C++, and Lisp-haters who know a lot about Java/C++ only. Given a choice between someone who knows a lot about both options, and someone who knows a lot about one, who are you more likely to believe?]

Using that logic, most fan-backed languages will always score "better". Only the most popular languages will have people forced to use them for long periods of time even if they are not a favorite choice of a given person. I find your metric silly. By the way, I don't think highly of C++ or Java either.

(This also works against Lisp when compared to HaskellLanguage/ObjectiveCaml programmers. Many Lisp-lovers - notably PaulGraham - lack experience in Haskell/Ocaml and tend to dismiss it as "academic", while many Haskell weenies also have extensive experience with Scheme and other Lisp dialects. This leads me to believe that Lisp is Blub to Haskell (BlubParadox)). -- JonathanTang]

[Hmm. Found this interesting thread where Graham's comments get discussed by Lispers: <http://lambda-the-ultimate.org/node/view/186> The conversation wanders off into the pros and cons of Haskell.]


EditText of this page (last edited September 19, 2004) or FindPage with title or text search