<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cognitive Consonance &#187; Languages</title>
	<atom:link href="http://tiago.org/cc/category/languages/feed/" rel="self" type="application/rss+xml" />
	<link>http://tiago.org/cc</link>
	<description>Software engineering in a computational biology environment</description>
	<lastBuildDate>Mon, 06 Sep 2010 14:09:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>In praise of Groovy</title>
		<link>http://tiago.org/cc/2010/08/27/in-praise-of-groovy/</link>
		<comments>http://tiago.org/cc/2010/08/27/in-praise-of-groovy/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 12:36:12 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Languages]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://tiago.org/cc/?p=211</guid>
		<description><![CDATA[Preamble: The problem of writing a defense of a certain thing X is that, most people interpret that as an attack to potential alternatives. This is not how this post should be read. There is no One Single Solution. My defense of Groovy is based on a set of assumptions that do not hold true [...]]]></description>
			<content:encoded><![CDATA[<p>Preamble: The problem of writing a defense of a certain thing X is that, most people interpret that as an attack to potential alternatives. This is not how this post should be read. There is no One Single Solution. My defense of Groovy is based on a set of assumptions that do not hold true for many people. In fact, they do not even hold true for myself. Different people and different development problems entail different solutions.</p>
<p>My main assumption in defense of Groovy is that you are, a Java person. Java is your day to day programming language and you are comfortable with that. Though you are comfortable with that you want to try something different: maybe you want to try a scripting language, maybe you do not like too much boilerplate code.</p>
<p>Why Groovy? Because it gives you a lot of goodies with essentially no learning curve. An illustrative example: I&#8217;ve spent the whole morning thinking that I was editing a Java source file, but I was indeed working on a Groovy file. You see, Groovy not being a superset of Java ends up being almost that: Code in Java is, in most cases already code in Groovy. So, if you know Java, you can write Groovy. You will not write the best idiomatic Groovy, you will not gain any of Groovy&#8217;s goodies (and you will pay a performance penalty, BTW). But this is an amazing head-start if you want to go in the direction of higher-level languages (I would argue that it is even smoother than C from C++ as the paradigm does not change from Java to Groovy, it is OO to OO). If you go the Jython way then you have to learn a new language. If you go Scala or Clojure then you have to learn a whole new paradigm (and deal with the impedance of imperative semantics in typical Java libs against standard functional semantics).</p>
<p>For little to no cost you have now many goodies associated with scripting languages (dynamic, low boiler-plate coding, DSLs, better meta-programming, &#8230;). In some cases Groovy even out-competes supposedly more elegant languages (are Scala meta-programming facilities still as bad as in the past?).</p>
<p>Another interesting advantage of Groovy is that, if you want to revert back to Java then it is much easier. Why would you want to do that? Well, for performance reasons. In a Groovy application that I have, a small part of the code is extremely intensive, so I had to rewrite it in Java. This revealed to be a trivial exercise (similar syntax, similar semantics).</p>
<p>Again, let me stress out this: your requirements and your personal path are fundamental in any decision you take. There is no true language (OK, Prolog&#8230;. <img src='http://tiago.org/cc/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ). Different people, different approaches. All I am saying is: if your background is strongly grounded on Java and you feel comfortable with that, then Groovy is probably the way to go.</p>
<p>Disclaimer: While I have a couple of applications made in Groovy, most of my scripting efforts in the JVM world involve Jython (another fine language implementation, appropriate in a different set of circumstances) and I also believe, that from a declarative and highly expressive language point of view, what is being done with Clojure certainly deserves mention.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Social network sharing</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;title=In%20praise%20of%20Groovy&amp;bodytext=Preamble%3A%20The%20problem%20of%20writing%20a%20defense%20of%20a%20certain%20thing%20X%20is%20that%2C%20most%20people%20interpret%20that%20as%20an%20attack%20to%20potential%20alternatives.%20This%20is%20not%20how%20this%20post%20should%20be%20read.%20There%20is%20no%20One%20Single%20Solution.%20My%20defense%20of%20Groovy%20is%20based%20on%20a%20" title="Digg"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;title=In%20praise%20of%20Groovy&amp;notes=Preamble%3A%20The%20problem%20of%20writing%20a%20defense%20of%20a%20certain%20thing%20X%20is%20that%2C%20most%20people%20interpret%20that%20as%20an%20attack%20to%20potential%20alternatives.%20This%20is%20not%20how%20this%20post%20should%20be%20read.%20There%20is%20no%20One%20Single%20Solution.%20My%20defense%20of%20Groovy%20is%20based%20on%20a%20" title="del.icio.us"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;t=In%20praise%20of%20Groovy" title="Facebook"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;title=In%20praise%20of%20Groovy&amp;annotation=Preamble%3A%20The%20problem%20of%20writing%20a%20defense%20of%20a%20certain%20thing%20X%20is%20that%2C%20most%20people%20interpret%20that%20as%20an%20attack%20to%20potential%20alternatives.%20This%20is%20not%20how%20this%20post%20should%20be%20read.%20There%20is%20no%20One%20Single%20Solution.%20My%20defense%20of%20Groovy%20is%20based%20on%20a%20" title="Google Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;title=In%20praise%20of%20Groovy" title="DZone"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;title=In%20praise%20of%20Groovy" title="Reddit"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=In%20praise%20of%20Groovy&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F" title="Slashdot"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;title=In%20praise%20of%20Groovy" title="StumbleUpon"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F" title="Technorati"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;title=In%20praise%20of%20Groovy&amp;source=Cognitive+Consonance+Software+engineering+in+a+computational+biology+environment&amp;summary=Preamble%3A%20The%20problem%20of%20writing%20a%20defense%20of%20a%20certain%20thing%20X%20is%20that%2C%20most%20people%20interpret%20that%20as%20an%20attack%20to%20potential%20alternatives.%20This%20is%20not%20how%20this%20post%20should%20be%20read.%20There%20is%20no%20One%20Single%20Solution.%20My%20defense%20of%20Groovy%20is%20based%20on%20a%20" title="LinkedIn"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;title=In%20praise%20of%20Groovy&amp;description=Preamble%3A%20The%20problem%20of%20writing%20a%20defense%20of%20a%20certain%20thing%20X%20is%20that%2C%20most%20people%20interpret%20that%20as%20an%20attack%20to%20potential%20alternatives.%20This%20is%20not%20how%20this%20post%20should%20be%20read.%20There%20is%20no%20One%20Single%20Solution.%20My%20defense%20of%20Groovy%20is%20based%20on%20a%20" title="connotea"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/connotea.png" title="connotea" alt="connotea" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=In%20praise%20of%20Groovy&amp;link=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F" title="FriendFeed"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=In%20praise%20of%20Groovy%20-%20http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F" title="Twitter"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://bookmarks.yahoo.com/toolbar/savebm?u=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F27%2Fin-praise-of-groovy%2F&amp;t=In%20praise%20of%20Groovy&opener=bm&amp;ei=UTF-8&amp;d=Preamble%3A%20The%20problem%20of%20writing%20a%20defense%20of%20a%20certain%20thing%20X%20is%20that%2C%20most%20people%20interpret%20that%20as%20an%20attack%20to%20potential%20alternatives.%20This%20is%20not%20how%20this%20post%20should%20be%20read.%20There%20is%20no%20One%20Single%20Solution.%20My%20defense%20of%20Groovy%20is%20based%20on%20a%20" title="Yahoo! Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/yahoomyweb.png" title="Yahoo! Bookmarks" alt="Yahoo! Bookmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tiago.org/cc/2010/08/27/in-praise-of-groovy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Is Java/JVM still viable?</title>
		<link>http://tiago.org/cc/2010/08/17/is-javajvm-still-viable/</link>
		<comments>http://tiago.org/cc/2010/08/17/is-javajvm-still-viable/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 05:10:59 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Languages]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jvm]]></category>

		<guid isPermaLink="false">http://tiago.org/cc/?p=215</guid>
		<description><![CDATA[First, let me tell you a little story: A few years ago I worked for an university and we decided to replace a closed, proprietary backend infrastructure with an open one. The strange thing is that we replaced IBM with&#8230; IBM. You see, a long time ago IBM had a self-centered, closed mentality but since [...]]]></description>
			<content:encoded><![CDATA[<p>First, let me tell you a little story: A few years ago I worked for an university and we decided to replace a closed, proprietary backend infrastructure with an open one. The strange thing is that we replaced IBM with&#8230; IBM. You see, a long time ago IBM had a self-centered, closed mentality but since Gerstner&#8217;s time as IBM CEO things changed a lot. So, the old unpalatable IBM was replaced with the new, desirable IBM. A similar argument can be made for Sun&#8230; you probably still remember the closed Sun, the closed Java. Interestingly when we replaced IBM with IBM we also replaced the database backend: from Oracle to IBM.</p>
<p>Oracle.</p>
<p>Let me continue my little story: Fast-forward a few years and I accepted a job at the same university as data centre manager. The 3 biggest universities in the city had bought the same accounting/payroll system. This system had a Oracle backend: database, application server and financial extensions. It so happened that each component had completely different licensing terms: one was on concurrent connections another on concurrent users, yet another on the total number of users. The notion of user also varied: The financial application had thousands of users, but it connected with a single user to the application server. The usage of multiple CPUs was also subjected to licensing. I hate to think on the countless hours spent by the data centre managers just parsing all this. It still gives me a headache.</p>
<p>But it does not stop here: even as a manager I was still very technically inclined (and had previous experience as a database manager): I would subscribe to the view that Oracle databases are a too-much complex database system that seem to be highly profitable to Oracle and the contractors that are payed to maintain such a complex system. Between Oracle DB and IBM DB/2 I would take DB/2 any time (at least 5 years ago where my professional path changed). Of course, for most applications PostgreSQL is more than enough&#8230;</p>
<p>The point is, as you probably have noticed by now: I am not comfortable with Oracle&#8217;s corporate culture. I am not comfortable with Oracle taking the lead on Java. In fact I can think of no worse corporation to lead Java.</p>
<p>I would also like to draw your attention to size and power bias. My point is this: people tend to dislike Microsoft, but <i>part</i> of that dislike does not come from corporate culture but from the influence and power that Microsoft has (still) in computing. I dread to think of the consequences of people like Larry Ellison or Steve Jobs having the same influence as Bill Gates. I am not defending Bill, just suggesting that it could be much worse. We do not feel the pain of Oracle (or Apple for that matter) because they do not have the massive OS/Office market share that MS has.</p>
<p>I always had a love relationship with Java (though I have a background in declarative languages). It was amazing to see the appearance of new languages on top of the JVM (I use Groovy, Clojure and Jython). The idea of a shared VM (and shared libraries) which a set of cooperating and competing languages on top is wonderful&#8230;</p>
<p>But I am starting to doubt that the JVM world will stay an open community where the best ideas can be incepted and flourish.</p>
<p>If IBM had bought Sun&#8230;</p>
<p>I do not trust you, Larry!</p>
<p><small><br />
Recommending readings (from James Gosling&#8217;s blog):<br />
<a href="http://nighthacks.com/roller/jag/entry/quite_the_firestorm">Quite the firestorm</a><br />
<a href="http://nighthacks.com/roller/jag/entry/the_shit_finally_hits_the">The shit finally its the fan</a><br />
<a href="http://nighthacks.com/roller/jag/entry/cynical_chuckles">Cynical chuckes</a><br />
</small></p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Social network sharing</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;title=Is%20Java%2FJVM%20still%20viable%3F&amp;bodytext=First%2C%20let%20me%20tell%20you%20a%20little%20story%3A%20A%20few%20years%20ago%20I%20worked%20for%20an%20university%20and%20we%20decided%20to%20replace%20a%20closed%2C%20proprietary%20backend%20infrastructure%20with%20an%20open%20one.%20The%20strange%20thing%20is%20that%20we%20replaced%20IBM%20with...%20IBM.%20You%20see%2C%20a%20long%20time%20ago" title="Digg"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;title=Is%20Java%2FJVM%20still%20viable%3F&amp;notes=First%2C%20let%20me%20tell%20you%20a%20little%20story%3A%20A%20few%20years%20ago%20I%20worked%20for%20an%20university%20and%20we%20decided%20to%20replace%20a%20closed%2C%20proprietary%20backend%20infrastructure%20with%20an%20open%20one.%20The%20strange%20thing%20is%20that%20we%20replaced%20IBM%20with...%20IBM.%20You%20see%2C%20a%20long%20time%20ago" title="del.icio.us"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;t=Is%20Java%2FJVM%20still%20viable%3F" title="Facebook"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;title=Is%20Java%2FJVM%20still%20viable%3F&amp;annotation=First%2C%20let%20me%20tell%20you%20a%20little%20story%3A%20A%20few%20years%20ago%20I%20worked%20for%20an%20university%20and%20we%20decided%20to%20replace%20a%20closed%2C%20proprietary%20backend%20infrastructure%20with%20an%20open%20one.%20The%20strange%20thing%20is%20that%20we%20replaced%20IBM%20with...%20IBM.%20You%20see%2C%20a%20long%20time%20ago" title="Google Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;title=Is%20Java%2FJVM%20still%20viable%3F" title="DZone"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;title=Is%20Java%2FJVM%20still%20viable%3F" title="Reddit"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Is%20Java%2FJVM%20still%20viable%3F&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F" title="Slashdot"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;title=Is%20Java%2FJVM%20still%20viable%3F" title="StumbleUpon"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F" title="Technorati"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;title=Is%20Java%2FJVM%20still%20viable%3F&amp;source=Cognitive+Consonance+Software+engineering+in+a+computational+biology+environment&amp;summary=First%2C%20let%20me%20tell%20you%20a%20little%20story%3A%20A%20few%20years%20ago%20I%20worked%20for%20an%20university%20and%20we%20decided%20to%20replace%20a%20closed%2C%20proprietary%20backend%20infrastructure%20with%20an%20open%20one.%20The%20strange%20thing%20is%20that%20we%20replaced%20IBM%20with...%20IBM.%20You%20see%2C%20a%20long%20time%20ago" title="LinkedIn"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;title=Is%20Java%2FJVM%20still%20viable%3F&amp;description=First%2C%20let%20me%20tell%20you%20a%20little%20story%3A%20A%20few%20years%20ago%20I%20worked%20for%20an%20university%20and%20we%20decided%20to%20replace%20a%20closed%2C%20proprietary%20backend%20infrastructure%20with%20an%20open%20one.%20The%20strange%20thing%20is%20that%20we%20replaced%20IBM%20with...%20IBM.%20You%20see%2C%20a%20long%20time%20ago" title="connotea"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/connotea.png" title="connotea" alt="connotea" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Is%20Java%2FJVM%20still%20viable%3F&amp;link=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F" title="FriendFeed"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Is%20Java%2FJVM%20still%20viable%3F%20-%20http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F" title="Twitter"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://bookmarks.yahoo.com/toolbar/savebm?u=http%3A%2F%2Ftiago.org%2Fcc%2F2010%2F08%2F17%2Fis-javajvm-still-viable%2F&amp;t=Is%20Java%2FJVM%20still%20viable%3F&opener=bm&amp;ei=UTF-8&amp;d=First%2C%20let%20me%20tell%20you%20a%20little%20story%3A%20A%20few%20years%20ago%20I%20worked%20for%20an%20university%20and%20we%20decided%20to%20replace%20a%20closed%2C%20proprietary%20backend%20infrastructure%20with%20an%20open%20one.%20The%20strange%20thing%20is%20that%20we%20replaced%20IBM%20with...%20IBM.%20You%20see%2C%20a%20long%20time%20ago" title="Yahoo! Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/yahoomyweb.png" title="Yahoo! Bookmarks" alt="Yahoo! Bookmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tiago.org/cc/2010/08/17/is-javajvm-still-viable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lisp and Clojure: prefix notation and parentheses</title>
		<link>http://tiago.org/cc/2009/12/03/lisp-and-clojure-prefix-notation-and-parentheses/</link>
		<comments>http://tiago.org/cc/2009/12/03/lisp-and-clojure-prefix-notation-and-parentheses/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 11:32:47 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Languages]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://tiago.org/cc/?p=205</guid>
		<description><![CDATA[I would like to add just a few more arguments regarding the issue of notation. There is a certain austerity tradition coming from the CS community (at least from the BEST part of it). Most people see syntactic sugar as a waste of time and energy. Furthermore everything is just trees and a linear representation [...]]]></description>
			<content:encoded><![CDATA[<p>I would like to add just a few more arguments regarding the issue of notation.</p>
<p>There is a certain austerity tradition coming from the CS community (at least from the BEST part of it). Most people see syntactic sugar as a waste of time and energy. Furthermore everything is just trees and a linear representation with the root at the head is just fine to represent trees. Lisp embodies this tradition to the full. And for the most part is a great tradition.</p>
<p>This is all fine, and I would understand the defensiveness considered that we live in a world polluted with overly complex languages which just bring problems and no advantages to compensate.</p>
<p>But some level of syntactic sugar is important for humans. And while meta-programming is nice, I suppose most programming languages are still used by human programmers <img src='http://tiago.org/cc/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  . </p>
<p>It would suggest to have a look at the literature on human cognition, namely the strategies used to read text: it is messy. But I prefer to go in a different direction. I just want to expose how some subtle representation issues might have a massive impact: Have you ever tried to do basic arithmetic with roman numerals? Have a look <a href="http://mathforum.org/dr.math/faq/faq.roman.html">here</a>, namely &#8220;How can I use Roman numerals to do arithmetic problems?&#8221;. While this is a different problem, it serves to emphasize that representation matters in the most strangest ways.</p>
<p>Even if it doesn&#8217;t, humans are a conservative species, they are not ready to change everything at the same time. Having a to jump to imperative+heteroiconic+infix to functional+homoiconic+prefix is too much. Lisp derived languages loose potential to attract more people. And in this case is is really worth it? Is it really THAT IMPORTANT to be prefixed? Is that the main conceptual selling point of Lisp?</p>
<p><b>But most importantly there are solutions that are not dirty:</b>.</p>
<p>First nobody is forcing infix notation, one can have both at the same time (check Prolog  :- op &#8211; you can do BOTH +(1 2) and 1+2).</p>
<p>Second hard-coding operators is not necessary at all: again check the Prolog suggestion. You can have all infix operators that you want (including none)</p>
<p>It is easy to conceptualize a superset of Lisp with infix notation and ZERO INITIAL infix operators.</p>
<p>If I can shout something is this: Check Prolog&#8217;s :- op ! Simple, elegant. And fully coherent with the Lisp philosophy at its core.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Social network sharing</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20&amp;bodytext=I%20would%20like%20to%20add%20just%20a%20few%20more%20arguments%20regarding%20the%20issue%20of%20notation.%0D%0A%0D%0AThere%20is%20a%20certain%20austerity%20tradition%20coming%20from%20the%20CS%20community%20%28at%20least%20from%20the%20BEST%20part%20of%20it%29.%20Most%20people%20see%20syntactic%20sugar%20as%20a%20waste%20of%20time%20and%20energy.%20" title="Digg"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20&amp;notes=I%20would%20like%20to%20add%20just%20a%20few%20more%20arguments%20regarding%20the%20issue%20of%20notation.%0D%0A%0D%0AThere%20is%20a%20certain%20austerity%20tradition%20coming%20from%20the%20CS%20community%20%28at%20least%20from%20the%20BEST%20part%20of%20it%29.%20Most%20people%20see%20syntactic%20sugar%20as%20a%20waste%20of%20time%20and%20energy.%20" title="del.icio.us"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;t=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20" title="Facebook"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20&amp;annotation=I%20would%20like%20to%20add%20just%20a%20few%20more%20arguments%20regarding%20the%20issue%20of%20notation.%0D%0A%0D%0AThere%20is%20a%20certain%20austerity%20tradition%20coming%20from%20the%20CS%20community%20%28at%20least%20from%20the%20BEST%20part%20of%20it%29.%20Most%20people%20see%20syntactic%20sugar%20as%20a%20waste%20of%20time%20and%20energy.%20" title="Google Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20" title="DZone"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20" title="Reddit"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F" title="Slashdot"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20" title="StumbleUpon"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F" title="Technorati"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20&amp;source=Cognitive+Consonance+Software+engineering+in+a+computational+biology+environment&amp;summary=I%20would%20like%20to%20add%20just%20a%20few%20more%20arguments%20regarding%20the%20issue%20of%20notation.%0D%0A%0D%0AThere%20is%20a%20certain%20austerity%20tradition%20coming%20from%20the%20CS%20community%20%28at%20least%20from%20the%20BEST%20part%20of%20it%29.%20Most%20people%20see%20syntactic%20sugar%20as%20a%20waste%20of%20time%20and%20energy.%20" title="LinkedIn"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20&amp;description=I%20would%20like%20to%20add%20just%20a%20few%20more%20arguments%20regarding%20the%20issue%20of%20notation.%0D%0A%0D%0AThere%20is%20a%20certain%20austerity%20tradition%20coming%20from%20the%20CS%20community%20%28at%20least%20from%20the%20BEST%20part%20of%20it%29.%20Most%20people%20see%20syntactic%20sugar%20as%20a%20waste%20of%20time%20and%20energy.%20" title="connotea"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/connotea.png" title="connotea" alt="connotea" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20&amp;link=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F" title="FriendFeed"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20%20-%20http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F" title="Twitter"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://bookmarks.yahoo.com/toolbar/savebm?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F03%2Flisp-and-clojure-prefix-notation-and-parentheses%2F&amp;t=Lisp%20and%20Clojure%3A%20prefix%20notation%20and%20parentheses%20&opener=bm&amp;ei=UTF-8&amp;d=I%20would%20like%20to%20add%20just%20a%20few%20more%20arguments%20regarding%20the%20issue%20of%20notation.%0D%0A%0D%0AThere%20is%20a%20certain%20austerity%20tradition%20coming%20from%20the%20CS%20community%20%28at%20least%20from%20the%20BEST%20part%20of%20it%29.%20Most%20people%20see%20syntactic%20sugar%20as%20a%20waste%20of%20time%20and%20energy.%20" title="Yahoo! Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/yahoomyweb.png" title="Yahoo! Bookmarks" alt="Yahoo! Bookmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tiago.org/cc/2009/12/03/lisp-and-clojure-prefix-notation-and-parentheses/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Clojure: &#8220;Being a Lisp Is a Handicap&#8221;</title>
		<link>http://tiago.org/cc/2009/12/02/clojure-being-a-lisp-is-a-handicap/</link>
		<comments>http://tiago.org/cc/2009/12/02/clojure-being-a-lisp-is-a-handicap/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 15:34:44 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Languages]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://tiago.org/cc/?p=200</guid>
		<description><![CDATA[Tim Bray presented his 11 Theses on Clojure. Thesis number 2 is &#8220;Being a Lisp Is a Handicap&#8221;. This argument has actually 3 parts: the Lisp-parenthesis syntax, which he finds bad. Homoiconicity (he finds good) and macros (again good). I would like to discuss a bit the first (syntax) and the last (macros). The macro [...]]]></description>
			<content:encoded><![CDATA[<p>Tim Bray presented his <a href="http://www.tbray.org/ongoing/When/200x/2009/12/01/Clojure-Theses">11 Theses on Clojure</a>. Thesis number 2 is &#8220;Being a Lisp Is a Handicap&#8221;. This argument has actually 3 parts: the Lisp-parenthesis syntax, which he finds bad. Homoiconicity (he finds good) and macros (again good).</p>
<p>I would like to discuss a bit the first (syntax) and the last (macros). The macro part discussed somewhere in the future. For now I would like to concentrate on syntax.</p>
<p>Lisp syntax is strange for most humans, we simply do not write (+ (* 2 3) (/ 4 2)). Lisp proposers are probably aware that this will not be very popular, as people are used to something completely different. It is not only different but is also very uneconomical to both read and write: 2*3 + 4/2 is arguably easier to read. One can even make some intuitive declarative things. Notice that I&#8217;ve written 2*3 (no space around *) but 2*3 + 4*2 (spaces around +). This allows to give queues to readers about the precedence of operators. You can say that these issues are just simple and ridiculous syntactic sugar. Well, it seems that <i>Homo sapiens</i> has evolved to appreciate it. And I don&#8217;t really see a reason not to accommodate this requirement.</p>
<p>Yes, I read you already: infix syntax forces hard-coding of operators and precedences (e.g. + precedes *) . Makes parsing much more complex (there goes the beautifully simple Lisp parser out of the window) and in fact forcing a certain structure with hard-coded operators.</p>
<p>Well&#8230; no.</p>
<p>Take a look at Prolog <a href="http://www.cse.unsw.edu.au/~billw/cs9414/notes/prolog/op.html">op built-in</a>. :- op allows you to define operator precedence and association rules. So the parser is really not much complex: it starts with a simple, uber-flexible, blank slate which you can fill in.</p>
<p>So, for (- 4 3 2) you can say &#8211; is an infix operator with first argument with precedence over the second (i.e. (4 &#8211; 3) &#8211; 2) and, voila, you can write 4 &#8211; 3 &#8211; 2. No need for hard-coded operators, all dynamically defined. You could, maybe for sadistic reasons, change the argument precedence so 4 &#8211; 3 &#8211; 2 would become 4 &#8211; (3 &#8211; 2). The flexibility is there. </p>
<p>You can also state that + and &#8211; have higher precedence than  * and /. So that 2*3 + 2 is interpreted as (+ (* 2 3) 2). Again, you can change the precedence rules.</p>
<p>Ah&#8230; and you can have operators that are atoms (alphanumeric symbols). In Prolog you can say &#8220;X is 3 +2&#8243;. &#8220;is&#8221; is an operator. You can redefine operator rules, define new operators.</p>
<p>Operators are nothing more than a set of syntactic sugar rules to convert a more intuitive representation to another. But they really make things much more pleasant and humane.</p>
<p>I would imagine that adding this to Clojure would be DEAD EASY, by the way. </p>
<p>Regarding the issues about macros, I will leave it for another post.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Social network sharing</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22&amp;bodytext=Tim%20Bray%20presented%20his%2011%20Theses%20on%20Clojure.%20Thesis%20number%202%20is%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22.%20This%20argument%20has%20actually%203%20parts%3A%20the%20Lisp-parenthesis%20syntax%2C%20which%20he%20finds%20bad.%20Homoiconicity%20%28he%20finds%20good%29%20and%20macros%20%28again%20good%29.%0D%0A%0D%0AI%20would%20like%20" title="Digg"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22&amp;notes=Tim%20Bray%20presented%20his%2011%20Theses%20on%20Clojure.%20Thesis%20number%202%20is%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22.%20This%20argument%20has%20actually%203%20parts%3A%20the%20Lisp-parenthesis%20syntax%2C%20which%20he%20finds%20bad.%20Homoiconicity%20%28he%20finds%20good%29%20and%20macros%20%28again%20good%29.%0D%0A%0D%0AI%20would%20like%20" title="del.icio.us"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;t=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22" title="Facebook"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22&amp;annotation=Tim%20Bray%20presented%20his%2011%20Theses%20on%20Clojure.%20Thesis%20number%202%20is%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22.%20This%20argument%20has%20actually%203%20parts%3A%20the%20Lisp-parenthesis%20syntax%2C%20which%20he%20finds%20bad.%20Homoiconicity%20%28he%20finds%20good%29%20and%20macros%20%28again%20good%29.%0D%0A%0D%0AI%20would%20like%20" title="Google Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22" title="DZone"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22" title="Reddit"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F" title="Slashdot"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22" title="StumbleUpon"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F" title="Technorati"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22&amp;source=Cognitive+Consonance+Software+engineering+in+a+computational+biology+environment&amp;summary=Tim%20Bray%20presented%20his%2011%20Theses%20on%20Clojure.%20Thesis%20number%202%20is%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22.%20This%20argument%20has%20actually%203%20parts%3A%20the%20Lisp-parenthesis%20syntax%2C%20which%20he%20finds%20bad.%20Homoiconicity%20%28he%20finds%20good%29%20and%20macros%20%28again%20good%29.%0D%0A%0D%0AI%20would%20like%20" title="LinkedIn"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22&amp;description=Tim%20Bray%20presented%20his%2011%20Theses%20on%20Clojure.%20Thesis%20number%202%20is%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22.%20This%20argument%20has%20actually%203%20parts%3A%20the%20Lisp-parenthesis%20syntax%2C%20which%20he%20finds%20bad.%20Homoiconicity%20%28he%20finds%20good%29%20and%20macros%20%28again%20good%29.%0D%0A%0D%0AI%20would%20like%20" title="connotea"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/connotea.png" title="connotea" alt="connotea" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22&amp;link=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F" title="FriendFeed"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22%20-%20http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F" title="Twitter"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://bookmarks.yahoo.com/toolbar/savebm?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F12%2F02%2Fclojure-being-a-lisp-is-a-handicap%2F&amp;t=Clojure%3A%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22&opener=bm&amp;ei=UTF-8&amp;d=Tim%20Bray%20presented%20his%2011%20Theses%20on%20Clojure.%20Thesis%20number%202%20is%20%22Being%20a%20Lisp%20Is%20a%20Handicap%22.%20This%20argument%20has%20actually%203%20parts%3A%20the%20Lisp-parenthesis%20syntax%2C%20which%20he%20finds%20bad.%20Homoiconicity%20%28he%20finds%20good%29%20and%20macros%20%28again%20good%29.%0D%0A%0D%0AI%20would%20like%20" title="Yahoo! Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/yahoomyweb.png" title="Yahoo! Bookmarks" alt="Yahoo! Bookmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tiago.org/cc/2009/12/02/clojure-being-a-lisp-is-a-handicap/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Comparing programming languages by homoiconicity</title>
		<link>http://tiago.org/cc/2009/11/01/comparing-programming-languages-by-homoiconicity/</link>
		<comments>http://tiago.org/cc/2009/11/01/comparing-programming-languages-by-homoiconicity/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 12:46:27 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Languages]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[metaprograming]]></category>
		<category><![CDATA[prolog]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://tiago.org/cc/?p=125</guid>
		<description><![CDATA[When you read about programming language comparisons, the main narrative for comparison is normally about the paradigm(s) supported. Lisp, Haskell, Scala, Clojure fall mainly in the functional realm. Prolog is logic. Smalltalk OO. C and Fortran, imperative. Most of them are not &#8220;pure&#8221; paradigm (e.g. you can make nice OO designed programs in C &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>When you read about programming language comparisons, the main narrative for comparison is normally about the paradigm(s) supported. Lisp, Haskell, Scala, Clojure fall mainly in the functional realm. Prolog is logic. Smalltalk OO. C and Fortran, imperative. Most of them are not &#8220;pure&#8221; paradigm (e.g. you can make nice OO designed programs in C &#8211; just check GTK&#8217;s GLib library if you disagree, imperative coding in Prolog, and so on&#8230;), but that is besides the point.</p>
<p>The point is that, when comparing programming languages, the main issue of discussion is the bloody paradigm thing.</p>
<p>Paradigm is not really that important! In fact, as said above, you normally can tweak a language to write in your favorite paradigm. Sure the ability to do that varies from case to case, but in most cases that I can think of, it is really not difficult to cross paradigm boundaries. In fact, I would go as far as to argue that it is easier to do proper OO <b>design</b> with C using GLib then with the highly complex and convoluted C++.</p>
<p>Before going into the fundamental point that I want to make, I would also note that ecology matters: Are there good libraries? Good documentation? Does it run on a virtual machine? Portability? Nice community? User base? That is, when comparing programming languages all that is around the language is more important than the language itself. Just ask all the poor of us poor Prolog/Lisp/Haskell fans why are we doing Java/C++ during most of our day? It puts bread on the table, and, for the most of us, that is the most important criteria (I prefer not to starve!).</p>
<p>But, going to the main point here, I would like to propose that one of the fundamental points in comparing programming languages from a technical standpoint is <a href="http://c2.com/cgi/wiki?HomoiconicLanguages">homoiconicity</a>.</p>
<p>Just to remember, an homoiconic language is a language where the program is represented as the core language data-type. Code is a data type.</p>
<p>If you classify languages according to homoiconicity, then they split in completely different ways:</p>
<ol>
<li>The homoiconic bunch: Lisp, Prolog, Ioke, Clojure, &#8230;
</li>
<li>The non-homoiconic bunch: Cobol, Fortran, C, Java, Goovy, Scala, Haskell, OCaml, [A very long list follows]&#8230;
</li>
</ol>
<p>From this point of view, the comparison of say, Clojure to Scala as sister-languages makes little sense, as they fall in different groups.</p>
<p>Homoiconic languages lend themselves to &#8211; by construction &#8211; metaprogramming and extensibility (think very easy embedded DSLs). And some of these features are difficult (with varying levels of difficulty) to implement in non-homoiconic languages. At best (as &#8220;best&#8221; I am thinking of some scripting languages like Python), they are awkward to do in a non homoiconic language.</p>
<p>As a side jab, last time a checked, Scala was very very poor on metaprogramming (has that changed?), making it the only &#8220;modern&#8221; language which seems to be scorning metaprogramming. Scala can still be DSL-extensible (I offer my own example both in Scala and Grovy: <a href="http://popgen.eu/ronald">Ronald: A Domain-Specific Language to study the interactions between malaria infections and drug treatments</a>.</p>
<p>One could argue of the value of doing programs that reason about themselves (and that idea has very bad karma coming from assembler &#8211; an idea so old and so disconnected from current reality that I am not even going to discuss it). I am surely on the side that proper metaprogramming is one of the core features of any elegant, productive and declarative solution.</p>
<p>Also, a very nice side effect of having code as data, is that the syntax of homoiconic languages is normally very, very simple (as in trivial to learn). This is just a side effect, but compare this with the learning curve of, say, C++ syntax. There is also a philosophical issue here: you get a simple, highly flexible environment, where complexity is tacked not by having a complex mammoth that tries to address all possible cases, but by a set of plastic, bendable building blocks.</p>
<p>Homoiconicity is not a black-and-white feature. For instance, Lisp macros are not first-class objects (I am a Clojure newbie, so feel free to correct me) so you cannot metaprogram with them. Prolog seems to come close. In fact, to a Prolog programmer, Lisp macros seem especially inelegant as the are &#8220;out of the system&#8221;.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Social network sharing</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;title=Comparing%20programming%20languages%20by%20homoiconicity&amp;bodytext=When%20you%20read%20about%20programming%20language%20comparisons%2C%20the%20main%20narrative%20for%20comparison%20is%20normally%20about%20the%20paradigm%28s%29%20supported.%20Lisp%2C%20Haskell%2C%20Scala%2C%20Clojure%20fall%20mainly%20in%20the%20functional%20realm.%20Prolog%20is%20logic.%20Smalltalk%20OO.%20C%20and%20Fortran%2C%20impe" title="Digg"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;title=Comparing%20programming%20languages%20by%20homoiconicity&amp;notes=When%20you%20read%20about%20programming%20language%20comparisons%2C%20the%20main%20narrative%20for%20comparison%20is%20normally%20about%20the%20paradigm%28s%29%20supported.%20Lisp%2C%20Haskell%2C%20Scala%2C%20Clojure%20fall%20mainly%20in%20the%20functional%20realm.%20Prolog%20is%20logic.%20Smalltalk%20OO.%20C%20and%20Fortran%2C%20impe" title="del.icio.us"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;t=Comparing%20programming%20languages%20by%20homoiconicity" title="Facebook"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;title=Comparing%20programming%20languages%20by%20homoiconicity&amp;annotation=When%20you%20read%20about%20programming%20language%20comparisons%2C%20the%20main%20narrative%20for%20comparison%20is%20normally%20about%20the%20paradigm%28s%29%20supported.%20Lisp%2C%20Haskell%2C%20Scala%2C%20Clojure%20fall%20mainly%20in%20the%20functional%20realm.%20Prolog%20is%20logic.%20Smalltalk%20OO.%20C%20and%20Fortran%2C%20impe" title="Google Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;title=Comparing%20programming%20languages%20by%20homoiconicity" title="DZone"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;title=Comparing%20programming%20languages%20by%20homoiconicity" title="Reddit"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Comparing%20programming%20languages%20by%20homoiconicity&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F" title="Slashdot"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;title=Comparing%20programming%20languages%20by%20homoiconicity" title="StumbleUpon"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F" title="Technorati"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;title=Comparing%20programming%20languages%20by%20homoiconicity&amp;source=Cognitive+Consonance+Software+engineering+in+a+computational+biology+environment&amp;summary=When%20you%20read%20about%20programming%20language%20comparisons%2C%20the%20main%20narrative%20for%20comparison%20is%20normally%20about%20the%20paradigm%28s%29%20supported.%20Lisp%2C%20Haskell%2C%20Scala%2C%20Clojure%20fall%20mainly%20in%20the%20functional%20realm.%20Prolog%20is%20logic.%20Smalltalk%20OO.%20C%20and%20Fortran%2C%20impe" title="LinkedIn"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;title=Comparing%20programming%20languages%20by%20homoiconicity&amp;description=When%20you%20read%20about%20programming%20language%20comparisons%2C%20the%20main%20narrative%20for%20comparison%20is%20normally%20about%20the%20paradigm%28s%29%20supported.%20Lisp%2C%20Haskell%2C%20Scala%2C%20Clojure%20fall%20mainly%20in%20the%20functional%20realm.%20Prolog%20is%20logic.%20Smalltalk%20OO.%20C%20and%20Fortran%2C%20impe" title="connotea"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/connotea.png" title="connotea" alt="connotea" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Comparing%20programming%20languages%20by%20homoiconicity&amp;link=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F" title="FriendFeed"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Comparing%20programming%20languages%20by%20homoiconicity%20-%20http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F" title="Twitter"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://bookmarks.yahoo.com/toolbar/savebm?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F11%2F01%2Fcomparing-programming-languages-by-homoiconicity%2F&amp;t=Comparing%20programming%20languages%20by%20homoiconicity&opener=bm&amp;ei=UTF-8&amp;d=When%20you%20read%20about%20programming%20language%20comparisons%2C%20the%20main%20narrative%20for%20comparison%20is%20normally%20about%20the%20paradigm%28s%29%20supported.%20Lisp%2C%20Haskell%2C%20Scala%2C%20Clojure%20fall%20mainly%20in%20the%20functional%20realm.%20Prolog%20is%20logic.%20Smalltalk%20OO.%20C%20and%20Fortran%2C%20impe" title="Yahoo! Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/yahoomyweb.png" title="Yahoo! Bookmarks" alt="Yahoo! Bookmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tiago.org/cc/2009/11/01/comparing-programming-languages-by-homoiconicity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DSLs and IDEs</title>
		<link>http://tiago.org/cc/2009/01/12/dsls-and-ides/</link>
		<comments>http://tiago.org/cc/2009/01/12/dsls-and-ides/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 18:05:59 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Languages]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[ioke]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[prolog]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tiago.org/cc/?p=78</guid>
		<description><![CDATA[If you search the web you can find some discussions on whether IDEs for dynamic languages can be as helpful as IDEs for static languages. The issue is that static languages like Java have compile-time (thus easy to get at IDE-time) information in order to provide that fundamental code-completion functionality (among many others). If the [...]]]></description>
			<content:encoded><![CDATA[<p>If you search the web you can find some discussions on whether IDEs for dynamic languages can be as helpful as IDEs for static languages. The issue is that static languages like Java have compile-time (thus easy to get at IDE-time) information in order to provide that fundamental code-completion functionality (among many others). If the IDE knows that a certain parameter is a String, than it is simple: it will present to you all the String methods when you type in the dot. For dynamic languages things get more complex are there is formally no (by definition) compile-time information. Some people would argue that there are ways around it (which you can already find in existing IDEs, I remember having some sort of code completion, years ago, on SPE &#8211; for Python). I will not add anything to that discussion here, this preamble was mainly for putting the reader in context. I am more interested in discussing good IDEs for DSLs.</p>
<p>With DSLs you get, most of the times, added syntax. Worse than that, you might fall into situations where you have changed (not only added) the initial language syntax; furthermore those syntax changes might even become valid only in runtime (imagine that a method is added to a class that is supplying DSL methods).</p>
<p>One example comes from Ioke and Prolog operator precedence and associativity rules which are changeable (see the previous post). It is not trivial to know if something like 1+2 is even syntactically valid (*). Even if it is syntactically valid things like association rules might change. In languages like Groovy you can add (e.g., through categories) methods to code blocs (from classes that can be dynamically changed). Then there is dynamic dispatching and macros. What is valid in a certain piece of code can be different from what is valid a few lines below. In fact, complete information of what is valid in a certain code block might require code execution. Or, to put in another way, it might be very difficult to have a completely helpful IDE! In this scenario there are 3 considerations that I think are worth being done:</p>
<p>1. One should not be discouraged for not having perfect solutions. Maybe it is not possible to determine all that can be expressed in a certain code block, but sometimes good approximations are enough.<br />
2. On this issue, one good example comes from Prolog: In Prolog, syntax can be changed mainly through the use of the <img src='http://tiago.org/cc/wp-includes/images/smilies/icon_surprised.gif' alt=':-o' class='wp-smiley' /> p directive (and through asserts and retracts). The <img src='http://tiago.org/cc/wp-includes/images/smilies/icon_surprised.gif' alt=':-o' class='wp-smiley' /> p directive changes operators but is very easy to analyze pre-compilation/interpretation. So, the way DSLs are normally be constructed lend themselves very easily to code analysis which can be used by IDEs. This unfortunately not the case in most real-world languages.<br />
3. It would be cool to have a language where DSL specifications could be automatically used to construct IDEs. The current real-world DSL-able languages (Ruby, Groovy, &#8230;) are DSL-enabled through indirect techniques which can be used to build DSLs (Dynamic reception, operator overload, whatever), in fact many of these techniques exist with other objectives than creating DSLs. If there was a declarative and explicit way to create DSLs, that information could be used to inform IDEs on parsing and other issues. An embedded, core way, to explicitly specify DSLs.</p>
<p>(*) I suppose some will see this as an argument for the fact that you can do pretty stupid (or at least unintuitive) things with DSLs. Well, you can do stupid things with everything. The question is not if you can or not, but the extent of bad use cases and how bad uses can creep in easily. Another (interesting) discussion, but not for now.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Social network sharing</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;title=DSLs%20and%20IDEs&amp;bodytext=If%20you%20search%20the%20web%20you%20can%20find%20some%20discussions%20on%20whether%20IDEs%20for%20dynamic%20languages%20can%20be%20as%20helpful%20as%20IDEs%20for%20static%20languages.%20The%20issue%20is%20that%20static%20languages%20like%20Java%20have%20compile-time%20%28thus%20easy%20to%20get%20at%20IDE-time%29%20information%20in%20ord" title="Digg"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;title=DSLs%20and%20IDEs&amp;notes=If%20you%20search%20the%20web%20you%20can%20find%20some%20discussions%20on%20whether%20IDEs%20for%20dynamic%20languages%20can%20be%20as%20helpful%20as%20IDEs%20for%20static%20languages.%20The%20issue%20is%20that%20static%20languages%20like%20Java%20have%20compile-time%20%28thus%20easy%20to%20get%20at%20IDE-time%29%20information%20in%20ord" title="del.icio.us"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;t=DSLs%20and%20IDEs" title="Facebook"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;title=DSLs%20and%20IDEs&amp;annotation=If%20you%20search%20the%20web%20you%20can%20find%20some%20discussions%20on%20whether%20IDEs%20for%20dynamic%20languages%20can%20be%20as%20helpful%20as%20IDEs%20for%20static%20languages.%20The%20issue%20is%20that%20static%20languages%20like%20Java%20have%20compile-time%20%28thus%20easy%20to%20get%20at%20IDE-time%29%20information%20in%20ord" title="Google Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;title=DSLs%20and%20IDEs" title="DZone"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;title=DSLs%20and%20IDEs" title="Reddit"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=DSLs%20and%20IDEs&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F" title="Slashdot"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;title=DSLs%20and%20IDEs" title="StumbleUpon"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F" title="Technorati"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;title=DSLs%20and%20IDEs&amp;source=Cognitive+Consonance+Software+engineering+in+a+computational+biology+environment&amp;summary=If%20you%20search%20the%20web%20you%20can%20find%20some%20discussions%20on%20whether%20IDEs%20for%20dynamic%20languages%20can%20be%20as%20helpful%20as%20IDEs%20for%20static%20languages.%20The%20issue%20is%20that%20static%20languages%20like%20Java%20have%20compile-time%20%28thus%20easy%20to%20get%20at%20IDE-time%29%20information%20in%20ord" title="LinkedIn"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;title=DSLs%20and%20IDEs&amp;description=If%20you%20search%20the%20web%20you%20can%20find%20some%20discussions%20on%20whether%20IDEs%20for%20dynamic%20languages%20can%20be%20as%20helpful%20as%20IDEs%20for%20static%20languages.%20The%20issue%20is%20that%20static%20languages%20like%20Java%20have%20compile-time%20%28thus%20easy%20to%20get%20at%20IDE-time%29%20information%20in%20ord" title="connotea"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/connotea.png" title="connotea" alt="connotea" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=DSLs%20and%20IDEs&amp;link=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F" title="FriendFeed"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=DSLs%20and%20IDEs%20-%20http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F" title="Twitter"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://bookmarks.yahoo.com/toolbar/savebm?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F12%2Fdsls-and-ides%2F&amp;t=DSLs%20and%20IDEs&opener=bm&amp;ei=UTF-8&amp;d=If%20you%20search%20the%20web%20you%20can%20find%20some%20discussions%20on%20whether%20IDEs%20for%20dynamic%20languages%20can%20be%20as%20helpful%20as%20IDEs%20for%20static%20languages.%20The%20issue%20is%20that%20static%20languages%20like%20Java%20have%20compile-time%20%28thus%20easy%20to%20get%20at%20IDE-time%29%20information%20in%20ord" title="Yahoo! Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/yahoomyweb.png" title="Yahoo! Bookmarks" alt="Yahoo! Bookmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tiago.org/cc/2009/01/12/dsls-and-ides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Operators in Ioke and Prolog and DSLs</title>
		<link>http://tiago.org/cc/2009/01/09/operators-in-ioke-and-prolog-and-dsls/</link>
		<comments>http://tiago.org/cc/2009/01/09/operators-in-ioke-and-prolog-and-dsls/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 13:42:26 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Languages]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[ioke]]></category>
		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://tiago.org/cc/?p=68</guid>
		<description><![CDATA[I was reading Ola Bini&#8217;s post about operators in Ioke (Ioke being the new language that Ola is developing). It is a common saying around LISPers that everything that is being done in &#8220;modern&#8221; languages is a return to LISP. And the argument holds some ground. The truth is, among the 4 most conceptually influential [...]]]></description>
			<content:encoded><![CDATA[<p>I was reading Ola Bini&#8217;s post about <a href="http://olabini.com/blog/2009/01/operators-in-ioke/">operators in Ioke</a> (Ioke being the new language that Ola is developing).</p>
<p>It is a common saying around LISPers that everything that is being done in &#8220;modern&#8221; languages is a return to LISP. And the argument holds some ground. The truth is, among the 4 most conceptually influential programming languages that I can think of (Lisp/Functional, Fortran/Imperative, Smalltalk/OO, Prolog/Logic), the bad option (Fortran) won as it is the major philosophical contributor to current programming languages (much more than Smalltalk).</p>
<p>Take the reinvention of operators on Ioke as per the post above. This concept <a href="http://www.cs.sfu.ca/CC/SW/Prolog/Notes/operator.html">is available in Prolog for decades</a>. It is all there: precedence (i.e. 2*3+4 means (2*3)+4 and not 2*(3+4)). Associativity (left or right &#8211; ie. 3-2-1 is 0 (3-2)-1 and not 2 3-(2-1) ). And even more as new operators can be defined and can be made of alphanumeric characters (want to create a new operator called say, &#8220;in&#8221;? go ahead). In fact people were doing DSLs a long time ago (in the small Prolog community at least) using techniques such as these.</p>
<p>The next thing that you will need (and we are getting there with macros and AST access) is no default interpretation. This is especially important with arithmetic, let me give an example:</p>
<p>Imagine the expression 1+x. Most languages will evaluate this expression and will return the sum of 1 + x. If x is defined and say is 4, then 1+x is 5. If x is not defined then an error (compile or run)-time will be raised. This is an absolute disgrace for DSLs with are essentially declarative (i.e., detached from semantics). &#8220;1+x&#8221; might be something that you want to evaluate now (and get the result) or might be something that you want to specify in order to evaluate later (say, I want to do a chart of all values of x between 1 and 5, or I want to differentiate), look at this pseudo-code</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;">Var x
Exp expression <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">+</span> x<span style="color: #66cc66;">**</span><span style="color: #cc66cc;">2</span>
&nbsp;
chart<span style="color: #66cc66;">&#40;</span>expression, <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#91;</span>x,<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">//do a chart, x between 1 and 5</span>
evaluate<span style="color: #66cc66;">&#40;</span>expression, <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#91;</span>x,<span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">//Evaluate expression where x is 3 (i.e.  10)</span>
diffe <span style="color: #66cc66;">=</span> differentiate<span style="color: #66cc66;">&#40;</span>expression, x<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">//returns the expression 2*x</span>
prettyprint<span style="color: #66cc66;">&#40;</span>expression<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">//Pretty prints the expression.</span></pre></td></tr></table></div>

<p>Most people automatically associate the operation evaluate to 1+x**2. That might be so in an imperative world (can I call it shitty world?). But in an declarative/DSL world 1+x**2 is just that, an expression, it has no meaning attached per se. What you do with it depends on the context. Pretty print it, differentiate it, integrate it, or even evaluate it by instantiating x to 3 and getting the &#8220;precious&#8221; 10.</p>
<p><b>Update:</b> I was rereading the post and noticed that it might be read as seeing Ola&#8217;s work as less interesting. Not at all: I actually think the way forward is precisely improving the current &#8220;imperative&#8221; setting in the way Ola is doing.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Social network sharing</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs&amp;bodytext=I%20was%20reading%20Ola%20Bini%27s%20post%20about%20operators%20in%20Ioke%20%28Ioke%20being%20the%20new%20language%20that%20Ola%20is%20developing%29.%0D%0A%0D%0AIt%20is%20a%20common%20saying%20around%20LISPers%20that%20everything%20that%20is%20being%20done%20in%20%22modern%22%20languages%20is%20a%20return%20to%20LISP.%20And%20the%20argument%20holds%20s" title="Digg"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs&amp;notes=I%20was%20reading%20Ola%20Bini%27s%20post%20about%20operators%20in%20Ioke%20%28Ioke%20being%20the%20new%20language%20that%20Ola%20is%20developing%29.%0D%0A%0D%0AIt%20is%20a%20common%20saying%20around%20LISPers%20that%20everything%20that%20is%20being%20done%20in%20%22modern%22%20languages%20is%20a%20return%20to%20LISP.%20And%20the%20argument%20holds%20s" title="del.icio.us"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;t=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs" title="Facebook"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs&amp;annotation=I%20was%20reading%20Ola%20Bini%27s%20post%20about%20operators%20in%20Ioke%20%28Ioke%20being%20the%20new%20language%20that%20Ola%20is%20developing%29.%0D%0A%0D%0AIt%20is%20a%20common%20saying%20around%20LISPers%20that%20everything%20that%20is%20being%20done%20in%20%22modern%22%20languages%20is%20a%20return%20to%20LISP.%20And%20the%20argument%20holds%20s" title="Google Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs" title="DZone"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs" title="Reddit"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F" title="Slashdot"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs" title="StumbleUpon"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F" title="Technorati"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs&amp;source=Cognitive+Consonance+Software+engineering+in+a+computational+biology+environment&amp;summary=I%20was%20reading%20Ola%20Bini%27s%20post%20about%20operators%20in%20Ioke%20%28Ioke%20being%20the%20new%20language%20that%20Ola%20is%20developing%29.%0D%0A%0D%0AIt%20is%20a%20common%20saying%20around%20LISPers%20that%20everything%20that%20is%20being%20done%20in%20%22modern%22%20languages%20is%20a%20return%20to%20LISP.%20And%20the%20argument%20holds%20s" title="LinkedIn"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs&amp;description=I%20was%20reading%20Ola%20Bini%27s%20post%20about%20operators%20in%20Ioke%20%28Ioke%20being%20the%20new%20language%20that%20Ola%20is%20developing%29.%0D%0A%0D%0AIt%20is%20a%20common%20saying%20around%20LISPers%20that%20everything%20that%20is%20being%20done%20in%20%22modern%22%20languages%20is%20a%20return%20to%20LISP.%20And%20the%20argument%20holds%20s" title="connotea"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/connotea.png" title="connotea" alt="connotea" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs&amp;link=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F" title="FriendFeed"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs%20-%20http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F" title="Twitter"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://bookmarks.yahoo.com/toolbar/savebm?u=http%3A%2F%2Ftiago.org%2Fcc%2F2009%2F01%2F09%2Foperators-in-ioke-and-prolog-and-dsls%2F&amp;t=Operators%20in%20Ioke%20and%20Prolog%20and%20DSLs&opener=bm&amp;ei=UTF-8&amp;d=I%20was%20reading%20Ola%20Bini%27s%20post%20about%20operators%20in%20Ioke%20%28Ioke%20being%20the%20new%20language%20that%20Ola%20is%20developing%29.%0D%0A%0D%0AIt%20is%20a%20common%20saying%20around%20LISPers%20that%20everything%20that%20is%20being%20done%20in%20%22modern%22%20languages%20is%20a%20return%20to%20LISP.%20And%20the%20argument%20holds%20s" title="Yahoo! Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/yahoomyweb.png" title="Yahoo! Bookmarks" alt="Yahoo! Bookmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tiago.org/cc/2009/01/09/operators-in-ioke-and-prolog-and-dsls/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Why I like explicit typing</title>
		<link>http://tiago.org/cc/2008/12/31/why-i-like-explicit-typing/</link>
		<comments>http://tiago.org/cc/2008/12/31/why-i-like-explicit-typing/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 00:06:28 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Languages]]></category>

		<guid isPermaLink="false">http://tiago.org/cc/?p=47</guid>
		<description><![CDATA[Some reasons in favor of explicit typing (I am not talking about static vs dynamic here, just about the possibility annotate the expected type of a certain thing): 1. It can serve as code documentation. In some cases, with some kinds of programmers, the only documentation that you have is code itself (although this would [...]]]></description>
			<content:encoded><![CDATA[<p>Some reasons in favor of explicit typing (I am not talking about static vs dynamic here, just about the possibility annotate the expected type of a certain thing):</p>
<p>1. It can serve as code documentation. In some cases, with some kinds of programmers, the only documentation that you have is code itself (although this would require compulsory explicit typing which doesn&#8217;t happen always &#8211; groovy, caml and scala are examples of exceptions &#8211; in many cases saying the type is optional)</p>
<p>2. It helps IDEs help you. There is some discussion that IDEs for non-explicit (actually dynamic) languages can be as helpful as static languages. Well, if the information is there, then surely the IDE case use it and help you.</p>
<p>3. Bugs. Maybe your function is working and should not be working. Maybe the object, which should never be passed to that function is responding just because there is a signature that matches. I find this pattern somewhat common: a) There is a function parameter (without the explicit type) on a buggy function call. b) I put the type in on the called function. c) It immediately becomes clear that somewhere I am passing something that shouldn&#8217;t be going in in that form, a pseudo-code example:</p>
<pre>
myFunction(a, b) {
  String x = a + b
  print x.toUpperCase()
</pre>
<p>a should be a String (+ is a concatenation), but for some reason myFunction gets called with a as an integer and kaboom (+ is interpreted as addition).</p>
<p>This can be quite insidious with type inference (CAML for sure, probably Scala also) where you can get a bug on a chain of say, myFunction3 calling myFunction2 where the bug is somewhere else (say another myFunction1 which also calls myFunction2): When the compiler reads myFunction1 it does a wrong type inference about myFunction2. Afterwards, when the compiler passes on myFunction3 it complains, but the bug was caused elsewhere (so the information from the compiler is useless). If you put the type on myFunction2, the compiler will whine on the correct place (on the myFunction1 call). These bugs can be a pain to detect because sometimes the chains can be long. I had the &#8220;pleasure&#8221; of spending countless nights with caml tracking these bugs. 15 years ago, but I still remember.</p>
<p>Anyway, non-compulsory explicit typing (a la Groovy, Scala, CAML) is a good compromise (use it if you like it). In fact, in some cases it is good to be lazy anyways <img src='http://tiago.org/cc/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>PS &#8211; As far as I remember in Groovy and Scala there are cases where explict typing is compulsory anyways (correct me if I am wrong). I would suppose that comes as a need as those languages and JVM and Java friendly by design and the compiled code will require that info.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Social network sharing</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;title=Why%20I%20like%20explicit%20typing&amp;bodytext=Some%20reasons%20in%20favor%20of%20explicit%20typing%20%28I%20am%20not%20talking%20about%20static%20vs%20dynamic%20here%2C%20just%20about%20the%20possibility%20annotate%20the%20expected%20type%20of%20a%20certain%20thing%29%3A%0D%0A%0D%0A1.%20It%20can%20serve%20as%20code%20documentation.%20In%20some%20cases%2C%20with%20some%20kinds%20of%20programmer" title="Digg"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;title=Why%20I%20like%20explicit%20typing&amp;notes=Some%20reasons%20in%20favor%20of%20explicit%20typing%20%28I%20am%20not%20talking%20about%20static%20vs%20dynamic%20here%2C%20just%20about%20the%20possibility%20annotate%20the%20expected%20type%20of%20a%20certain%20thing%29%3A%0D%0A%0D%0A1.%20It%20can%20serve%20as%20code%20documentation.%20In%20some%20cases%2C%20with%20some%20kinds%20of%20programmer" title="del.icio.us"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;t=Why%20I%20like%20explicit%20typing" title="Facebook"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;title=Why%20I%20like%20explicit%20typing&amp;annotation=Some%20reasons%20in%20favor%20of%20explicit%20typing%20%28I%20am%20not%20talking%20about%20static%20vs%20dynamic%20here%2C%20just%20about%20the%20possibility%20annotate%20the%20expected%20type%20of%20a%20certain%20thing%29%3A%0D%0A%0D%0A1.%20It%20can%20serve%20as%20code%20documentation.%20In%20some%20cases%2C%20with%20some%20kinds%20of%20programmer" title="Google Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;title=Why%20I%20like%20explicit%20typing" title="DZone"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;title=Why%20I%20like%20explicit%20typing" title="Reddit"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Why%20I%20like%20explicit%20typing&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F" title="Slashdot"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;title=Why%20I%20like%20explicit%20typing" title="StumbleUpon"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F" title="Technorati"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;title=Why%20I%20like%20explicit%20typing&amp;source=Cognitive+Consonance+Software+engineering+in+a+computational+biology+environment&amp;summary=Some%20reasons%20in%20favor%20of%20explicit%20typing%20%28I%20am%20not%20talking%20about%20static%20vs%20dynamic%20here%2C%20just%20about%20the%20possibility%20annotate%20the%20expected%20type%20of%20a%20certain%20thing%29%3A%0D%0A%0D%0A1.%20It%20can%20serve%20as%20code%20documentation.%20In%20some%20cases%2C%20with%20some%20kinds%20of%20programmer" title="LinkedIn"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;title=Why%20I%20like%20explicit%20typing&amp;description=Some%20reasons%20in%20favor%20of%20explicit%20typing%20%28I%20am%20not%20talking%20about%20static%20vs%20dynamic%20here%2C%20just%20about%20the%20possibility%20annotate%20the%20expected%20type%20of%20a%20certain%20thing%29%3A%0D%0A%0D%0A1.%20It%20can%20serve%20as%20code%20documentation.%20In%20some%20cases%2C%20with%20some%20kinds%20of%20programmer" title="connotea"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/connotea.png" title="connotea" alt="connotea" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Why%20I%20like%20explicit%20typing&amp;link=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F" title="FriendFeed"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Why%20I%20like%20explicit%20typing%20-%20http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F" title="Twitter"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://bookmarks.yahoo.com/toolbar/savebm?u=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F12%2F31%2Fwhy-i-like-explicit-typing%2F&amp;t=Why%20I%20like%20explicit%20typing&opener=bm&amp;ei=UTF-8&amp;d=Some%20reasons%20in%20favor%20of%20explicit%20typing%20%28I%20am%20not%20talking%20about%20static%20vs%20dynamic%20here%2C%20just%20about%20the%20possibility%20annotate%20the%20expected%20type%20of%20a%20certain%20thing%29%3A%0D%0A%0D%0A1.%20It%20can%20serve%20as%20code%20documentation.%20In%20some%20cases%2C%20with%20some%20kinds%20of%20programmer" title="Yahoo! Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/yahoomyweb.png" title="Yahoo! Bookmarks" alt="Yahoo! Bookmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tiago.org/cc/2008/12/31/why-i-like-explicit-typing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducing Cognitive Consonance</title>
		<link>http://tiago.org/cc/2008/03/11/introducing-cognitive-consonance/</link>
		<comments>http://tiago.org/cc/2008/03/11/introducing-cognitive-consonance/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 19:16:27 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Languages]]></category>

		<guid isPermaLink="false">http://tiago.org/cc/2008/03/11/introducing-cognitive-consonance/</guid>
		<description><![CDATA[Cognitive Consonance is a spin off of my original blog, Perfect Storm. Cognitive Consonance is about programming (for science Perfect Storm is still the place to go) from a declarative and agile perspective (high-level programming, domain specific languages, efficiency). I mainly develop under the JVM in Java and Groovy (though Scala and Ruby are also [...]]]></description>
			<content:encoded><![CDATA[<p>Cognitive Consonance is a spin off of my original blog, <a href="http://tiago.org">Perfect Storm</a>. Cognitive Consonance is about programming (for science Perfect Storm is still the place to go) from a declarative and agile perspective (high-level programming, domain specific languages, efficiency). I mainly develop under the JVM in Java and Groovy (though Scala and Ruby are also favorites). As I am the developer of the Biopython population genetics&#8217; module, some Python content will appear.</p>
<p>Time and patience permitting I will be cross posting relevant old content from Perfect Storm. Future posts that are relevant to both blogs will also be cross posted. </p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Social network sharing</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;title=Introducing%20Cognitive%20Consonance&amp;bodytext=Cognitive%20Consonance%20is%20a%20spin%20off%20of%20my%20original%20blog%2C%20Perfect%20Storm.%20Cognitive%20Consonance%20is%20about%20programming%20%28for%20science%20Perfect%20Storm%20is%20still%20the%20place%20to%20go%29%20from%20a%20declarative%20and%20agile%20perspective%20%28high-level%20programming%2C%20domain%20specific%20la" title="Digg"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;title=Introducing%20Cognitive%20Consonance&amp;notes=Cognitive%20Consonance%20is%20a%20spin%20off%20of%20my%20original%20blog%2C%20Perfect%20Storm.%20Cognitive%20Consonance%20is%20about%20programming%20%28for%20science%20Perfect%20Storm%20is%20still%20the%20place%20to%20go%29%20from%20a%20declarative%20and%20agile%20perspective%20%28high-level%20programming%2C%20domain%20specific%20la" title="del.icio.us"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;t=Introducing%20Cognitive%20Consonance" title="Facebook"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;title=Introducing%20Cognitive%20Consonance&amp;annotation=Cognitive%20Consonance%20is%20a%20spin%20off%20of%20my%20original%20blog%2C%20Perfect%20Storm.%20Cognitive%20Consonance%20is%20about%20programming%20%28for%20science%20Perfect%20Storm%20is%20still%20the%20place%20to%20go%29%20from%20a%20declarative%20and%20agile%20perspective%20%28high-level%20programming%2C%20domain%20specific%20la" title="Google Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;title=Introducing%20Cognitive%20Consonance" title="DZone"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;title=Introducing%20Cognitive%20Consonance" title="Reddit"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Introducing%20Cognitive%20Consonance&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F" title="Slashdot"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;title=Introducing%20Cognitive%20Consonance" title="StumbleUpon"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F" title="Technorati"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;title=Introducing%20Cognitive%20Consonance&amp;source=Cognitive+Consonance+Software+engineering+in+a+computational+biology+environment&amp;summary=Cognitive%20Consonance%20is%20a%20spin%20off%20of%20my%20original%20blog%2C%20Perfect%20Storm.%20Cognitive%20Consonance%20is%20about%20programming%20%28for%20science%20Perfect%20Storm%20is%20still%20the%20place%20to%20go%29%20from%20a%20declarative%20and%20agile%20perspective%20%28high-level%20programming%2C%20domain%20specific%20la" title="LinkedIn"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;title=Introducing%20Cognitive%20Consonance&amp;description=Cognitive%20Consonance%20is%20a%20spin%20off%20of%20my%20original%20blog%2C%20Perfect%20Storm.%20Cognitive%20Consonance%20is%20about%20programming%20%28for%20science%20Perfect%20Storm%20is%20still%20the%20place%20to%20go%29%20from%20a%20declarative%20and%20agile%20perspective%20%28high-level%20programming%2C%20domain%20specific%20la" title="connotea"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/connotea.png" title="connotea" alt="connotea" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Introducing%20Cognitive%20Consonance&amp;link=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F" title="FriendFeed"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Introducing%20Cognitive%20Consonance%20-%20http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F" title="Twitter"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://bookmarks.yahoo.com/toolbar/savebm?u=http%3A%2F%2Ftiago.org%2Fcc%2F2008%2F03%2F11%2Fintroducing-cognitive-consonance%2F&amp;t=Introducing%20Cognitive%20Consonance&opener=bm&amp;ei=UTF-8&amp;d=Cognitive%20Consonance%20is%20a%20spin%20off%20of%20my%20original%20blog%2C%20Perfect%20Storm.%20Cognitive%20Consonance%20is%20about%20programming%20%28for%20science%20Perfect%20Storm%20is%20still%20the%20place%20to%20go%29%20from%20a%20declarative%20and%20agile%20perspective%20%28high-level%20programming%2C%20domain%20specific%20la" title="Yahoo! Bookmarks"><img src="http://tiago.org/cc/wp-content/plugins/sociable/images/yahoomyweb.png" title="Yahoo! Bookmarks" alt="Yahoo! Bookmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tiago.org/cc/2008/03/11/introducing-cognitive-consonance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
