<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: The &#8220;Worse is Better&#8221; idea and the future of Lisp</title>
	<atom:link href="http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/feed" rel="self" type="application/rss+xml" />
	<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp</link>
	<description>Software and Innovation</description>
	<lastBuildDate>Fri, 26 Feb 2010 22:22:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Harold Ancell</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-32898</link>
		<dc:creator>Harold Ancell</dc:creator>
		<pubDate>Sat, 05 Sep 2009 19:32:13 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-32898</guid>
		<description>@Daniel Weinreb: Saber became Centerline Software in 1991 to avoid confusion with the Sabre that you&#039;re rather familiar with today.  Through 2004 they sold CodeCenter and ObjectCenter for C and C++, and the latter was a &lt;i&gt;fantastic&lt;/i&gt; development environment (at least, it allowed me to  develop some software at near Lisp Machine speeds in the early &#039;90s).  They got bought by Integrated Computer Solutions and that company&#039;s web site implies development of both products has ended.  Ah well, but this market failure surely implies something.</description>
		<content:encoded><![CDATA[<p>@Daniel Weinreb: Saber became Centerline Software in 1991 to avoid confusion with the Sabre that you&#8217;re rather familiar with today.  Through 2004 they sold CodeCenter and ObjectCenter for C and C++, and the latter was a <i>fantastic</i> development environment (at least, it allowed me to  develop some software at near Lisp Machine speeds in the early &#8217;90s).  They got bought by Integrated Computer Solutions and that company&#8217;s web site implies development of both products has ended.  Ah well, but this market failure surely implies something.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Weinreb</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-30087</link>
		<dc:creator>Daniel Weinreb</dc:creator>
		<pubDate>Sat, 04 Jul 2009 20:04:27 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-30087</guid>
		<description>@Jeremy, yes, there&#039;s dependence on order, but there&#039;s a qualitative difference here.  Once your program is inside the Lisp world, the order in which the forms were originally written doesn&#039;t matter any more.  You can recompile/reload any function.  In Haskell, you can&#039;t do that.</description>
		<content:encoded><![CDATA[<p>@Jeremy, yes, there&#8217;s dependence on order, but there&#8217;s a qualitative difference here.  Once your program is inside the Lisp world, the order in which the forms were originally written doesn&#8217;t matter any more.  You can recompile/reload any function.  In Haskell, you can&#8217;t do that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy H. Brown</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-29961</link>
		<dc:creator>Jeremy H. Brown</dc:creator>
		<pubDate>Thu, 02 Jul 2009 15:57:44 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-29961</guid>
		<description>@Daniel Weinreb:  &quot;Haskell has a more serious problem: the semantics of the program depends on the order in which the top level forms are written...&quot;

Of course, Common Lisp has the same problem:  macros must precede their use points, or it looks like function calls to nowhere.  And functions the macros use at expansion time need to have been loaded.   And I remember headaches with symbols interning into the wrong packages, but I&#039;m already blissfully forgetting the details --- I think that was load-order dependent too?</description>
		<content:encoded><![CDATA[<p>@Daniel Weinreb:  &#8220;Haskell has a more serious problem: the semantics of the program depends on the order in which the top level forms are written&#8230;&#8221;</p>
<p>Of course, Common Lisp has the same problem:  macros must precede their use points, or it looks like function calls to nowhere.  And functions the macros use at expansion time need to have been loaded.   And I remember headaches with symbols interning into the wrong packages, but I&#8217;m already blissfully forgetting the details &#8212; I think that was load-order dependent too?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Weinreb</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-29959</link>
		<dc:creator>Daniel Weinreb</dc:creator>
		<pubDate>Thu, 02 Jul 2009 14:52:35 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-29959</guid>
		<description>@Dave Moon:

Saying that having a read-eval-print loop is &quot;a function of the development environment, not of the language&quot;, while almost right in theory, is a lot less relevant in practice.

First, as you say, there really are features in languages that are problematic for the whole REPL concept, such as the distinction between expressions and statements.  Lisp also has some features that are mainly there to help with interactive development, such as the print-object method in CLOS.  Good introspection features also help support this kind of environment; Java actually does have good introspection but Haskell does not.  (Alan Bawden says there is something called &quot;Template Haskell&quot; which is the closest you get to introspection, and is Haskell&#039;s answer to Lisp macros, but it&#039;s not part of the standard.)

Haskell has a more serious problem: the semantics of the program depends on the order in which the top level forms are written, because there is an implicit &quot;if-then-else&quot; structure, and if you change the ordering of the clauses, the semantics of the program can change.

If you are at a Haskell REPL and you type &quot;23&quot;, what happens?  It is the job of the Haskell type inferencer to decide whether that&#039;s an Int, an Integer, a Double, or a Float, based on what type the program is expecting.  But in a REPL, there isn&#039;t any expectation.

Any one of these things could presumably be addressed, but my point is that there really is a link between the language definition and its suitability for a REPL-Lisp-style development environment.

Furthermore, Alan says that the semantics of a REPL in Haskell is up to the implementation.  I guess there&#039;s an interesting question of whether REPL semantics should be considered &quot;part of the language definition&quot; or not.  In Lisp, because of the way we heavily use interactive development, it really ought to be, and mostly is (although the spec could be improved).  eval-when, for all its faults, at least shows that the language designers were making some attempt to deal those kind of semantic issues.

But Haskell aside, I don&#039;t think it&#039;s just happenstance that nearly all users of the Java language and the C++ langauage do not use development environments that are oriented around REPL&#039;s and Lisp-style interactive development.

In the early Java days, there was a product, whose name I no longer remember, that had a pretty interesting programming environment of this sort.  There also was once &quot;Saber C&quot;, a C implementation that provided that kind of programming environment.  But you don&#039;t see a lot of use of things like this, and I don&#039;t know of products that you can currently get of this kind for Java nor C.</description>
		<content:encoded><![CDATA[<p>@Dave Moon:</p>
<p>Saying that having a read-eval-print loop is &#8220;a function of the development environment, not of the language&#8221;, while almost right in theory, is a lot less relevant in practice.</p>
<p>First, as you say, there really are features in languages that are problematic for the whole REPL concept, such as the distinction between expressions and statements.  Lisp also has some features that are mainly there to help with interactive development, such as the print-object method in CLOS.  Good introspection features also help support this kind of environment; Java actually does have good introspection but Haskell does not.  (Alan Bawden says there is something called &#8220;Template Haskell&#8221; which is the closest you get to introspection, and is Haskell&#8217;s answer to Lisp macros, but it&#8217;s not part of the standard.)</p>
<p>Haskell has a more serious problem: the semantics of the program depends on the order in which the top level forms are written, because there is an implicit &#8220;if-then-else&#8221; structure, and if you change the ordering of the clauses, the semantics of the program can change.</p>
<p>If you are at a Haskell REPL and you type &#8220;23&#8243;, what happens?  It is the job of the Haskell type inferencer to decide whether that&#8217;s an Int, an Integer, a Double, or a Float, based on what type the program is expecting.  But in a REPL, there isn&#8217;t any expectation.</p>
<p>Any one of these things could presumably be addressed, but my point is that there really is a link between the language definition and its suitability for a REPL-Lisp-style development environment.</p>
<p>Furthermore, Alan says that the semantics of a REPL in Haskell is up to the implementation.  I guess there&#8217;s an interesting question of whether REPL semantics should be considered &#8220;part of the language definition&#8221; or not.  In Lisp, because of the way we heavily use interactive development, it really ought to be, and mostly is (although the spec could be improved).  eval-when, for all its faults, at least shows that the language designers were making some attempt to deal those kind of semantic issues.</p>
<p>But Haskell aside, I don&#8217;t think it&#8217;s just happenstance that nearly all users of the Java language and the C++ langauage do not use development environments that are oriented around REPL&#8217;s and Lisp-style interactive development.</p>
<p>In the early Java days, there was a product, whose name I no longer remember, that had a pretty interesting programming environment of this sort.  There also was once &#8220;Saber C&#8221;, a C implementation that provided that kind of programming environment.  But you don&#8217;t see a lot of use of things like this, and I don&#8217;t know of products that you can currently get of this kind for Java nor C.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brian J. Fox</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-29219</link>
		<dc:creator>Brian J. Fox</dc:creator>
		<pubDate>Mon, 22 Jun 2009 16:48:30 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-29219</guid>
		<description>Overtaken by a wave of nostalgia, I remember meeting Dan on my first day hacking around the lab.  I walked into the 7th floor, a 21-year old freshly back from my music-playing 3-year stint in California, and eager to be around some computing devices.  Prior to the lab, I had programmed on TRS-80s and Apple ][s.  Sitting in front of this ridiculously tall black-and-white screen, covered in piles of parenthesis, I saw this guy type something in that looked like plain english: &quot;(draw-line-high &#039;left-foobar)&quot; or something similar.  Then, much to my jaw-dropping amazement, the TV set to the right of this crazy monitor suddenly had the circuit diagram on it change colors!  I couldn&#039;t believe what I was seeing.

About two weeks later, I asked some bearded guy (Alan Bawden) about this programming language called lisp.  He stopped what he was doing, and gave me a 2 hour lesson, at the end of which, I understood more about programming than I had ever understood before.

For those of you that remember me as &quot;the suspicious looking guy hanging around a CADDR on the 4th floor&quot;, I thank you for an incredible experience in innovation and imagination, and I thank you for the attitude that allowed me to learn at a rapid pace in a rich environment.

It worked out well for me and others - I worked with Patrick Sobolvarro and Leigh Klotz at Terrapin, writing the Apple //gs version of Logo, wrote an Emacs clone for the Apple with M-x completion and dynamically loadable libraries, and then worked with rms as his first employee, where I wrote Bash, TeXInfo, and other stuff.

But my favorite experience in the Lab was using Danny Hillis&#039; AAA60 while he wasn&#039;t around, and asking Hal for help with Emacs.  &quot;Emacs is very helpful,&quot; he told me.  Just type &quot;M-x apropos&quot;.  Unable to find the &quot;meta&quot; key, and unaware of how &quot;apropos&quot; was spelled caused me frustration - but I know those things now!</description>
		<content:encoded><![CDATA[<p>Overtaken by a wave of nostalgia, I remember meeting Dan on my first day hacking around the lab.  I walked into the 7th floor, a 21-year old freshly back from my music-playing 3-year stint in California, and eager to be around some computing devices.  Prior to the lab, I had programmed on TRS-80s and Apple ][s.  Sitting in front of this ridiculously tall black-and-white screen, covered in piles of parenthesis, I saw this guy type something in that looked like plain english: &#8220;(draw-line-high &#8216;left-foobar)&#8221; or something similar.  Then, much to my jaw-dropping amazement, the TV set to the right of this crazy monitor suddenly had the circuit diagram on it change colors!  I couldn&#8217;t believe what I was seeing.</p>
<p>About two weeks later, I asked some bearded guy (Alan Bawden) about this programming language called lisp.  He stopped what he was doing, and gave me a 2 hour lesson, at the end of which, I understood more about programming than I had ever understood before.</p>
<p>For those of you that remember me as &#8220;the suspicious looking guy hanging around a CADDR on the 4th floor&#8221;, I thank you for an incredible experience in innovation and imagination, and I thank you for the attitude that allowed me to learn at a rapid pace in a rich environment.</p>
<p>It worked out well for me and others &#8211; I worked with Patrick Sobolvarro and Leigh Klotz at Terrapin, writing the Apple //gs version of Logo, wrote an Emacs clone for the Apple with M-x completion and dynamically loadable libraries, and then worked with rms as his first employee, where I wrote Bash, TeXInfo, and other stuff.</p>
<p>But my favorite experience in the Lab was using Danny Hillis&#8217; AAA60 while he wasn&#8217;t around, and asking Hal for help with Emacs.  &#8220;Emacs is very helpful,&#8221; he told me.  Just type &#8220;M-x apropos&#8221;.  Unable to find the &#8220;meta&#8221; key, and unaware of how &#8220;apropos&#8221; was spelled caused me frustration &#8211; but I know those things now!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dave Moon</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-28785</link>
		<dc:creator>Dave Moon</dc:creator>
		<pubDate>Mon, 15 Jun 2009 01:57:42 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-28785</guid>
		<description>Tom writes &quot;perl however is the only language that gets philosophy right.&quot;

Well, that settles it, worse really is better!  Or perhaps Tom is saying that the best philosophy is no philosophy.

I am not bigoted, I have used Perl successfully.  I can write it, I just can&#039;t read it.

Let&#039;s not hijack the thread into a Perl discussion.  Probably the important lesson for Lisp from Perl is that making it easy and concise to do the things a particular community wants to do a lot is much more important for success with that community than having a beautiful language design.  The technical characteristics of Lisp ought to be very consistent with making it easy and concise to do things, and should not require making programs unreadable to accomplish that.  I admit keeping concise programs readable is very hard.

Getting back to worse is better, it&#039;s all about worse in what specific dimension and better in what specific dimension, isn&#039;t it?  It&#039;s not a paradox if something is worse in one dimension and better in a different dimension.  Abstracted of details Gabriel&#039;s argument is that if a system designer only looks at one of the many dimensions of goodness, and optimizes that at the expense of other essential dimensions, then the result will not be successful overall.  At a slightly less abstract level he is saying you can&#039;t be successful if you overengineer and undermarket. Can&#039;t argue with that.  (Here by &quot;market&quot; I mean everything connected with who will use your thing and how and why they will use it.  This isn&#039;t necessarily just the things marketing professionals say they do.)</description>
		<content:encoded><![CDATA[<p>Tom writes &#8220;perl however is the only language that gets philosophy right.&#8221;</p>
<p>Well, that settles it, worse really is better!  Or perhaps Tom is saying that the best philosophy is no philosophy.</p>
<p>I am not bigoted, I have used Perl successfully.  I can write it, I just can&#8217;t read it.</p>
<p>Let&#8217;s not hijack the thread into a Perl discussion.  Probably the important lesson for Lisp from Perl is that making it easy and concise to do the things a particular community wants to do a lot is much more important for success with that community than having a beautiful language design.  The technical characteristics of Lisp ought to be very consistent with making it easy and concise to do things, and should not require making programs unreadable to accomplish that.  I admit keeping concise programs readable is very hard.</p>
<p>Getting back to worse is better, it&#8217;s all about worse in what specific dimension and better in what specific dimension, isn&#8217;t it?  It&#8217;s not a paradox if something is worse in one dimension and better in a different dimension.  Abstracted of details Gabriel&#8217;s argument is that if a system designer only looks at one of the many dimensions of goodness, and optimizes that at the expense of other essential dimensions, then the result will not be successful overall.  At a slightly less abstract level he is saying you can&#8217;t be successful if you overengineer and undermarket. Can&#8217;t argue with that.  (Here by &#8220;market&#8221; I mean everything connected with who will use your thing and how and why they will use it.  This isn&#8217;t necessarily just the things marketing professionals say they do.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-28715</link>
		<dc:creator>John</dc:creator>
		<pubDate>Sat, 13 Jun 2009 17:41:46 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-28715</guid>
		<description>&gt; I’ve been trying to answer “What do we want from Lisp that Python
&gt; does not already give us”:I have been writing a detailed comparison
&gt; of Common Lisp and Python, which I really ought to finish up,

Would love to read this, though I&#039;m also curious how Scheme compares as well.</description>
		<content:encoded><![CDATA[<p>&gt; I’ve been trying to answer “What do we want from Lisp that Python<br />
&gt; does not already give us”:I have been writing a detailed comparison<br />
&gt; of Common Lisp and Python, which I really ought to finish up,</p>
<p>Would love to read this, though I&#8217;m also curious how Scheme compares as well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott L. Burson</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-28681</link>
		<dc:creator>Scott L. Burson</dc:creator>
		<pubDate>Fri, 12 Jun 2009 20:05:07 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-28681</guid>
		<description>Just a brief rant about a small example of the philosophical divergence that came to my attention today.

Doesn&#039;t it stand to reason that block comments should nest, so you can comment out a chunk of code without having to tweak the delimiters for block comments within said chunk?  It&#039;s clearly TRT.  But the WIB design of C said no, we&#039;re not going to bother, and C/C++ users have gotten so used to that that I can&#039;t even persuade my colleagues that it&#039;s an unfortunate choice that should not be copied in new languages.

So, while I understand Moon&#039;s point that a lot of what became Common Lisp was &quot;just hacked up&quot;, I still think it was hacked up from a different design philosophy than that from which C and Unix were hacked up; and I think that block comment nesting is a nice, clear, albeit small, example of that.</description>
		<content:encoded><![CDATA[<p>Just a brief rant about a small example of the philosophical divergence that came to my attention today.</p>
<p>Doesn&#8217;t it stand to reason that block comments should nest, so you can comment out a chunk of code without having to tweak the delimiters for block comments within said chunk?  It&#8217;s clearly TRT.  But the WIB design of C said no, we&#8217;re not going to bother, and C/C++ users have gotten so used to that that I can&#8217;t even persuade my colleagues that it&#8217;s an unfortunate choice that should not be copied in new languages.</p>
<p>So, while I understand Moon&#8217;s point that a lot of what became Common Lisp was &#8220;just hacked up&#8221;, I still think it was hacked up from a different design philosophy than that from which C and Unix were hacked up; and I think that block comment nesting is a nice, clear, albeit small, example of that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: vsevolod</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-28660</link>
		<dc:creator>vsevolod</dc:creator>
		<pubDate>Fri, 12 Jun 2009 12:30:27 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-28660</guid>
		<description>tom, on the topic of &quot;the right way&quot; -- actual data doesn&#039;t seem to support your claim: see Python&#039;s motto &quot;there&#039;s only one way to do it&quot; (something in those lines) and Rails &quot;convention over configuration&quot;. People actually strive for &quot;one true way&quot;, but it should be properly given to them (marketed, as some might say). On the contrary Lisp, IMO, always followed the middle way (at least, in most aspects I care).</description>
		<content:encoded><![CDATA[<p>tom, on the topic of &#8220;the right way&#8221; &#8212; actual data doesn&#8217;t seem to support your claim: see Python&#8217;s motto &#8220;there&#8217;s only one way to do it&#8221; (something in those lines) and Rails &#8220;convention over configuration&#8221;. People actually strive for &#8220;one true way&#8221;, but it should be properly given to them (marketed, as some might say). On the contrary Lisp, IMO, always followed the middle way (at least, in most aspects I care).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carl Gay</title>
		<link>http://danweinreb.org/blog/the-worse-is-better-idea-and-the-future-of-lisp/comment-page-1#comment-28649</link>
		<dc:creator>Carl Gay</dc:creator>
		<pubDate>Fri, 12 Jun 2009 10:07:44 +0000</pubDate>
		<guid isPermaLink="false">http://danweinreb.org/blog/?p=157#comment-28649</guid>
		<description>@Dan: How about starting with Dylan then?  What would CL programmers need to change in Dylan to make it the New Lisp?  As I read through the article and the comments (particularly Dave Moon&#039;s 2nd) I can&#039;t help thinking it&#039;s mostly already been done.</description>
		<content:encoded><![CDATA[<p>@Dan: How about starting with Dylan then?  What would CL programmers need to change in Dylan to make it the New Lisp?  As I read through the article and the comments (particularly Dave Moon&#8217;s 2nd) I can&#8217;t help thinking it&#8217;s mostly already been done.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
