There's a point I make in my Introducing the Ceylon Project presentation that's been widely misunderstood (perhaps mainly by people who're trying to misunderstand). Since I've been criticized over this in several venues, it merits a response. The offending statement is the following:
- Java’s syntax is rooted in standard, everyday mathematical notion taught in high schools and used by mathematicians, engineers, and software developers
- not the lambda calculus used only by theoretical computer scientists
Of course, now that I read this back, I admit it's quite unclear what I'm trying to say here. In my defense, this was from a presentation slide for a small conference in China that somehow wound up on slashdot. The context of the statement is a slide where I list some reasons why I think Java was a successful mainstream language for business computing. It's really quite a small point and it doesn't especially matter whether you agree with it or not.
So, a bunch of people have decided that what I'm trying to say is that somehow Java is better or more mathematical
than the lambda calculus or something. Well, this interpretation doesn't even make sense. Java is a programming language. The lambda calculus is a formal system for studying the mathematical behavior of functions. So it's clear that this can't possibly be what I mean.
Now, I understand that in these days where the gotcha
demagoguery and cheap-point-scoring of cable news, twitter, and blog comments have substituted for thoughtful intellectual debate, many folks aren't aware of the idea of reading arguments according to the principle of charity
, that is, searching for the most charitable possible interpretation when the author's meaning is unclear. But I'm an old-fashioned type of guy, and I'm still surprised by this lack of ... hmmm ... courtesy?
Anyway, since we know - starting from the assumption that I'm not a total idiot - that I can't possibly be trying to say something totally idiotic, let's ask ourselves what is it that I was actually trying to say. (I'm afraid my real meaning will turn out a bit disappointing, after all this fuss.) The key to understanding is my use of the word syntax
. Focus on that word for a second. What I mean is that Java uses a notation for function invocation, for example, f(x,y), that is taken directly from everyday mathematical notation used in engineering, science, and applied mathematics. It doesn't inherit the notation in which the lambda calculus is usually expressed, for example f x y or \x y -> x*y. I'm talking about notation. I'm not talking about the actual semantic relationship to the lambda calculus or any other mathematical concepts or formal systems.
Now, there might be perfectly good reasons why a language might want to use the notation in which the lambda calculus is usually expressed. There might be problems where this notation is simply less clunky. All I'm arguing is that it's a barrier to readability for a language intended for business or scientific computing. Again, it doesn't really matter to me if you agree or not.
Now waiting for a flood of apologies from all the folks who've called me ignorant
over this. I'm looking especially at you, Scala fans ;-)