> The "battle" is a battle for mindshare. That battle is fought one
> mind... one program... at a time. So we Tcl weenies just keep on
> chooglin'. If you're a committed bike rider and you turn into a strong
> headwind, you don't get mad, you just downshift, put your head down, and
> pedal. And before too long, you've ridden pretty far. You want LISP's
> influence to increase, you're not going to get people to do it your way
> by flaming them. You've gotta remove obstacles to its use, pump out
> tools and apps, help people who run into problems, and push out the
> examples and games and clever little hacks that pique peoples'
> curiosity. You gotta sell it to the people who would use it. And make
> sure it really is as general purpose as you say... Like rewrite some
> shell scripts in it. But a lot it seems like the attitude of the LISP
> camp toward workaday programmers ranges from condecension to derision to
> outright contempt. You want LISP to do better? Lose the attitude, and
> make sure you have a good, free implementation that runs real well on
> Windows 95.
I absolutely agree.
This "MIT" attitude has continued to linger.
But if I have my way, those days are OVER.
The view that Lisp must be an order of magnitude better to win,
ends up with making it be an order of magnitude more complex,
and those who don't need nor understand this complexity are viewed as
"not worthy" --- is it any wonder why Lisp won't be widely used?
If one reads my first CLOS column in JOOP, it is titled,
"Invitation to CLOS", where I invite everyone to join the party,
not make it the exclusive club with secret parenthesized handshakes,
which has been its history.
I'll make this concrete:
I propose a new dialect which has a simplified syntax, that makes it accessible,
but without losing it's power, by adding a few simple keywords
to replace parenthesis. It isn't (foo 1 2) vs foo(1,2) that's the barrier
or problem, it is having this:
(let ((x 10) (y 20))
(do ((i 0 (+ i 1)))
((> i 10) x)
(cond ((> x y) 10)
((< x 0) 20))))
When it is much clearer and accessible if it is written like this:
(let x = 10
y = 20
do
(loop for i from 1 to 10
do
(if (> x y)
then
10
elseif (< x 0)
then
20
else
nil)
And has no less power than the more parenthesized version:
The functional view is just the same, and macros are no less powerful.
-Kelly Murray (speaking for myself)
|