<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Unmaintainable &#187; scheme</title>
	<atom:link href="http://unmaintainable.wordpress.com/category/scheme/feed/" rel="self" type="application/rss+xml" />
	<link>http://unmaintainable.wordpress.com</link>
	<description>Scripting, Software Engineering and Stuff in Between</description>
	<lastBuildDate>Sun, 22 Nov 2009 09:05:47 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='unmaintainable.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/6f90ae5619dfc90140df401ac60575d2?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Unmaintainable &#187; scheme</title>
		<link>http://unmaintainable.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://unmaintainable.wordpress.com/osd.xml" title="Unmaintainable" />
		<item>
		<title>Ruby? Scala? Scheme!</title>
		<link>http://unmaintainable.wordpress.com/2008/03/02/ruby-scala-scheme/</link>
		<comments>http://unmaintainable.wordpress.com/2008/03/02/ruby-scala-scheme/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 17:14:11 +0000</pubDate>
		<dc:creator>mafr</dc:creator>
				<category><![CDATA[scheme]]></category>
		<category><![CDATA[opinion]]></category>

		<guid isPermaLink="false">http://unmaintainable.wordpress.com/?p=48</guid>
		<description><![CDATA[As a programmer you should learn a new programming language once in a while to keep yourself flexible and open to new ideas. After lots of Java coding at work, it was time for me to take a step back and try something new. There were quite a few languages to consider, but after a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=unmaintainable.wordpress.com&blog=586265&post=48&subd=unmaintainable&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As a programmer you should learn a new programming language once in a while to keep yourself flexible and open to new ideas. After lots of Java coding at work, it was time for me to take a step back and try something new. There were quite a few languages to consider, but after a brief evaluation phase I ended up with Scheme, much to my own surprise.</p>
<p><span id="more-48"></span></p>
<h4>The Establishment</h4>
<p>I&#8217;ve come across a lot of programming languages over the years, not just the well-established ones. Like most people with a computer science background, I can pick up a language quickly &#8211; and forget all about it two weeks later. Some languages make a permanent impression, however, and I continue to use them.</p>
<p>Here are the ones that made it; some stayed for their qualities, others because there was simply no way to avoid them:</p>
<ul>
<li><strong>C</strong> taught me about pointers, system-level programming and the Unix lifestyle in general. I learned about memory leaks, segfaults, and that you don&#8217;t have to aim carefully to shoot yourself in the foot.</li>
<li><strong>Perl</strong> was my introduction to the world of scripting languages. It showed me the power of regular expressions, that beauty is in the eye of the beholder and that a programmer can get used to <em>anything</em>.</li>
<li><strong>Python</strong> proved to me that a dynamically typed language can be both productive and elegant. It also demonstrated that language evolution is possible without having to start from scratch.</li>
<li><strong>Java</strong> is the language I used for learning object oriented programming and design. It showed me that a language doesn&#8217;t have to be exciting as long as its environment is rich and well-designed.</li>
<li>From <strong>C++</strong> I learned that language design is an art that is better not left to amateurs.</li>
</ul>
<p>A good language changes the way you think. It helps to get a new perspective and has an impact on how you work with other languages: the ones you know already and those you learn in the future. For example, some object oriented techniques found their way into my C code, and I look for regular expression support and functions as first-level objects in every new language.</p>
<h4>The Contenders</h4>
<p>I was trying to find an interesting, <em>special</em> language that was different from the ones I already knew. My language of choice had to be somewhat minimal in syntax and concepts, lean, elegant and a pleasure to use. However, it should still be expressive enough to get work done although it didn&#8217;t have to be immediately useful for my job or open source projects.</p>
<p>Fortunately, there were many contenders:</p>
<ul>
<li><strong>Ruby</strong> is certainly interesting: Truly object oriented with functional features, in some aspects even more elegant than Python. I didn&#8217;t choose Ruby because it&#8217;s not different enough from Python and Ruby on Rails has lost its appeal recently.</li>
<li><strong>Scala</strong> has received a lot of hype lately and might in fact be a way to get life back into the Java world. I&#8217;ll keep an eye on it, but if it does have its breakthrough some day I&#8217;ll learn it anyway.</li>
<li><strong>Groovy</strong> seems to be a &quot;me too&quot; language, with features stolen from Java, Python, Ruby, Smalltalk and probably others. I fail to see the things that make it special. Its syntax is certainly not minimal.</li>
<li><strong>C#</strong>? Well, no .NET-based languages for me. Not for fun anyway.</li>
<li><strong>Erlang</strong> is famous for its concurrency features, but it feels a bit too much like a niche product, even for me. There aren&#8217;t many books to choose from, and that was essentially the knock-out criterion.</li>
<li><strong>Haskell</strong> and languages from the <strong>ML family</strong>, like <strong>OCaml</strong> were all tough competitors. At university I had some exposure to <strong>Gopher</strong> (a Haskell dialect) but wasn&#8217;t impressed too much.</li>
<li>The <strong>Lisp family</strong> of languages with <strong>Common Lisp</strong> and <strong>Scheme</strong> has always been a mystery to me, ever since I tried to learn <strong>Emacs Lisp</strong> and failed miserably. I simply wasn&#8217;t ready back then and didn&#8217;t know lambda calculus.</li>
</ul>
<h4>The Winner</h4>
<p>The choice was a difficult one. Most languages I considered had something special about them and I even started to learn a bit of Ruby because its elegance got to me. Then I read about Scala during the Java closures debate and realized that my understanding of functional programming concepts wasn&#8217;t exactly solid.</p>
<p>Sure, I use a few concepts in other languages like Python (see <a class="reference" href="http://docs.python.org/dev/howto/functional.html">Functional Programming HOWTO for Python</a>). However, in multi-paradigm languages you tend to fall back to the programming paradigm you&#8217;re most familiar with, so I wanted a pure functional language to avoid diversions.</p>
<p>I chose Scheme because it&#8217;s more minimal than Common Lisp and there are great books: <a class="reference" href="http://www.ccs.neu.edu/home/matthias/BTLS/">The Little Schemer</a> teaches Scheme in a series of questions and answers &#8211; a truly unique approach that works surprisingly well. I&#8217;m about half through and had a lot of fun so far. And there&#8217;s <a class="reference" href="http://www.scheme.com/tspl3/">The Scheme Programming Language</a> which is available online in full text.</p>
<p>Knowing Scheme itself will probably never be immediately useful. But hey, that&#8217;s not the point! What I want at the moment is a deeper understanding of functional concepts. I&#8217;m sure I can transfer that knowledge to other languages.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/unmaintainable.wordpress.com/48/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/unmaintainable.wordpress.com/48/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/unmaintainable.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/unmaintainable.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/unmaintainable.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/unmaintainable.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/unmaintainable.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/unmaintainable.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/unmaintainable.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/unmaintainable.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/unmaintainable.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/unmaintainable.wordpress.com/48/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=unmaintainable.wordpress.com&blog=586265&post=48&subd=unmaintainable&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://unmaintainable.wordpress.com/2008/03/02/ruby-scala-scheme/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/59c9677a3b9569af44561adab6c2a980?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mafr</media:title>
		</media:content>
	</item>
	</channel>
</rss>