How Heraclitus would Design a Programming Language
CowboyRobot writes "Developer of Smalltalk Alan Kay has an interview on ACM Queue where he describes the history of computing and his approach to designing languages. Kay has an impressive resume (PARC, ARPAnet, Atari, Apple, Alan Turing Award winner) and has an endless supply of memorable quotes: 'Perl is another example of filling a tiny, short-term need, and then being a real problem in the longer term,' 'Once you have something that grows faster than education grows, you're always going to get a pop culture,' 'most undergraduate degrees in computer science these days are basically Java vocational training,' 'All creativity is an extended form of a joke,' and 'nobody really knows how to design a good language.'"
I'd disagree that there aren't people who can design decent languages. The problem is that they can't market them, and that developers continue to go back to the brain-dead syntax of C as if looking like C was an aspiration for a language.
Languages like Ada, Eiffel etc (which yes I have used commercially) are brilliant from a language perspective, especially for large projects. The trouble is developers would prefer to write something in 5 characters than 30 characters in a mistaken belief that they are being more productive and that typing is the longest task they undertake.
When you get into more "esoteric" areas like goal driven programming or agents then the languages become better, because the people using them are more aware of the purpose of the language and aren't constrained by a belief that it has to look like C.
C# and Java are great example of languages that took on that syntax and many of the constructs as its easier to get a language accepted when it looks like C than when a developer has to learn a new syntax that will in the long run be better.
The problem isn't language designers its us developers, we don't want to spend a week learning a new syntax for a loop, we want to use what we used before. In other words we are luddites.
Smalltalk was okay, but I prefered Eiffel, Java and C# are both by comparison rubbish, but they have better GUI libraries and marketing departments.
An Eye for an Eye will make the whole world blind - Gandhi
I would suggest targetting Parrot [slashdot.org] which makes implementing compilers 1000 times easier than ever before,
In light of more than half a century of dynamic language history, that's just astounding hubris. By comparison with systems like Lisp and Dylan, for example, the Parrot system is still enormously complex, limited, and cumbersome from the programmer's point of view. And compared to Smalltalk, Perl/Parrot isn't even in the same league when it comes to programming environments, browsers, and other tools (in fact, very little really is).
Kay's example of Perl as a language that reinvents the wheel poorly is as appropriate today with Parrot as it was for earlier versions of Perl. The fact that Perl is useful in practice (I use it all the time) because it has lots of libraries and ports doesn't change the fact that its foundations are poorly thought out.
But Perl! Ah, Perl! Such a bundle of contradictions! It violated every rule I held dear about language theory, and was a better language for it. Perl doesn't try to be a theoretically perfect language for any particular theory of linguistic perfection. It has principles, but it is not a slave to those principles. It has a degree of consistency, but never a foolish consistency.
No language on Earth has made me rethink my concepts of "what makes a good language" more than Perl.
proof, n. A demonstration that a conclusion is implied by certain premises and axioms.
I kindof get the impression Kay hasn't looked at modern lisp as much as historic lisp - for starters, lisp has had structured data for, well, decades (no, lisp doesn't just do symbols and lists, okay?), and while us lispers applying lessons from compsci type theory piecemeal to practical lisp drives the static-typing bigots/purists into insane flamewars, the existence-proof of the applicability of such lessons that availability of type-inferencing lisp compilers such as CMUCL and SBCL shows that Kay's comments about lisp and types are again, while not exactly wrong, are mostly applicable to the lisp of yore (and with, lisp, we're really talking _yore_, compared to almost any still-used language around today except FORTRAN), not ANSI Common Lisp.
So I don't particularly like his pigoenholing of lisp - he says there were three working extensible languages, and smalltalk was one of them, kindof not mentioning however, that lisp _wrote the book_ on extensible languages. Every good lisp program extends the vocabulary of the lisp language into the problem domain (a characteristic shared with good Forth).
I confidently predict something vaguely recognisable as "Lisp" will outlast pretty much every other computer language on the planet. You see, new dynamic languages have a choice when they get to a certain point (a choice e.g. python is now facing) - do they add the remaining features of lisp and thereby "risk" being classed as a reinvented dialect of lisp, or refuse those features, maintain their independent identity, but forever cripple their language compared to lisp?
But I think that's as much as a function of the fact that a developer today is standing on the shoulders of giants more than ever.
To quote Isaac Newton, "If I have been able to see farther, it is only because I have stood on the shoulders of giants."
Frankly, we've hit a point where there's a lot less "science" in Computer Science, or rather, the need for such training in many programming jobs.
There's nothing wrong with a well rounded education but for some people they don't have the time or inclination to take on full engineering curriculums (as I did).
While I don't mind have gotten a rounded education in light of where tech careers have gone, it's too bad I didn't follow my father... construction. Given his real estate holdings, I doubt I will reach his station in life (economically) if I stay on a pure tech track... highly unlikely.
So if CS degrees are nowadays more about vocational training, so what. A tech degree of any kind, no matter how full of yourself you are, is not going to take you where it once might. That's reality. For all the noise we hear about a focus on math & science, it seems to me to be rendered somewhat moot since some Big Wig Biz guy is going to offshore such work anyway. So I ask, what's the point?
Don't get me wrong, a good foundation in math is good, we just don't all need to become math majors...
If you manage to learn and apply algebra, you can at least solve some practical math problems. But considering some of the stories of people who can't deal with fractions, well, obviously we're failing somewhere in the math department.
Anyway, just rambling now...
-M
> ADA is good for secure stuff
Actually, Ada [sic] is for big, complicated software systems that you want to be able to maintain.
Of course, maintainability is a key component of security, and Ada does offer built-in resistance to buffer overflows, but I don't think security is the primary reason for choosing Ada [sic].
> C++ is good for GUI
That claim isn't so much wrong as... baffling.
Sheesh, evil *and* a jerk. -- Jade
Thanks,
--
Matt