<?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>The Joy of Clojure</title>
	<atom:link href="http://joyofclojure.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://joyofclojure.com</link>
	<description>Thinking the Clojure Way</description>
	<lastBuildDate>Thu, 22 Sep 2011 12:34:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The Book</title>
		<link>http://joyofclojure.com/the-book/</link>
		<comments>http://joyofclojure.com/the-book/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 15:20:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[info]]></category>
		<category><![CDATA[1st-edition]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[toc]]></category>

		<guid isPermaLink="false">http://old.fogus.me/?p=4</guid>
		<description><![CDATA[When this book was conceived, our first instinct was to create a comprehensive com- parison between Clojure and its host language, Java. After further reflection, we reached the conclusion that such an approach would be disingenuous at best, and disastrous at worst. Granted, some points of comparison can’t be avoided, but Java is very different &#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://joyofclojure.com/wp-content/uploads/2011/07/joy-of-clojure-cover.jpg"><img src="http://joyofclojure.com/wp-content/uploads/2011/07/joy-of-clojure-cover-239x300.jpg" alt="" title="Cover" width="239" height="300" class="alignright size-medium wp-image-158" /></a>When this book was conceived, our first instinct was to create a comprehensive com- parison between <a href="http://clojure.org">Clojure</a> and its host language, Java. After further reflection, we reached the conclusion that such an approach would be disingenuous at best, and disastrous at worst. Granted, some points of comparison can’t be avoided, but Java is very different from Clojure and to try and distort one to explain the other would respect neither. Therefore, we decided that a better approach would be to focus on “The Clojure Way” of writing code.</p>

<p>We’ll work hard to guide you through the features and semantics of Clojure to help you build the mental model needed to use the language effectively. Most of the samples in this book are designed to be run in Clojure’s interactive programming environment, commonly known as the Read-Eval-Print Loop, or REPL, an extremely powerful environment for experimentation and rapid prototyping.</p>

<p>By the time you’re done with this book, the Clojure way of thinking about and solv- ing problems will be another comfortable tool in your toolbox. If we succeed, then not only will you be a better Clojure programmer, but you’ll also start seeing your pro- gramming language of choice—be it Java, C#, Python, Ruby, J, or Haskell—in an entirely different light. This reassessment of topics that we often take for granted is essential for personal growth.</p>

<p>This book isn’t a beginner’s guide to Clojure. We start fast and don’t devote much space to establishing a running Clojure environment, although there are many available online resources for use as reference, refresh, or autodidacticism:</p>

<ul>
<li><a href="http://clojure.org/api">The official Clojure API docs</a></li>
<li><a href="http://clojuredocs.org">Community-driven Clojure docs</a></li>
<li><a href="http://blackstag.com/blog.posting?id=5">Guide to Programming in Clojure for Beginners</a></li>
<li><a href="https://github.com/functional-koans/clojure-koans">Clojure Koans</a></li>
<li><a href="http://en.wikibooks.org/wiki/Clojure_Programming">Clojure Wikibook</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://joyofclojure.com/the-book/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Authors</title>
		<link>http://joyofclojure.com/the-authors/</link>
		<comments>http://joyofclojure.com/the-authors/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 15:48:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[info]]></category>

		<guid isPermaLink="false">http://old.fogus.me/?p=12</guid>
		<description><![CDATA[The Joy of Clojure was written by Michael Fogus and Chris Houser, two active members of the burgeoning Clojure community and active contributors to the language itself. Fogus is a member of Clojure/core with experience in distributed simulation, machine vision, and expert systems. He can be found on the Internet at: Twitter Blog Tumblog Some &#8230;]]></description>
			<content:encoded><![CDATA[<p><em>The Joy of Clojure</em> was written by Michael Fogus and Chris Houser, two active members of the burgeoning Clojure community and active contributors to the language itself.</p>

<p><a href="http://old.fogus.me/wp-content/uploads/2011/07/fogus.jpeg"><img class="alignright size-full wp-image-114" title="fogus" src="http://old.fogus.me/wp-content/uploads/2011/07/fogus.jpeg" alt="" width="133" height="133" /></a></p>

<p>Fogus is a member of Clojure/core with experience in distributed simulation, machine vision, and expert systems. He can be found on the Internet at:</p>

<ul>
<li><a href="http://twitter.com/fogus">Twitter</a></li>
<li><a href="http://blog.fogus.me">Blog</a></li>
<li><a href="http://fogus.tumblr.com/">Tumblog</a></li>
</ul>

<p>Some of <a href="https://github.com/fogus/">Fogus&#8217; Clojure-related side-projects</a> include:</p>

<ul>
<li><a href="https://github.com/fogus/marginalia">Marginalia</a></li>
<li><a href="https://github.com/fogus/clache">clache</a></li>
<li><a href="https://github.com/fogus/unk">unk</a></li>
<li><a href="https://github.com/fogus/trammel">Trammel</a></li>
<li><a href="https://github.com/clojure/core.unify">core.unify</a></li>
</ul>

<p><a href="http://old.fogus.me/wp-content/uploads/2011/07/chouser.jpeg"><img class="alignleft size-full wp-image-113" title="chouser" src="http://old.fogus.me/wp-content/uploads/2011/07/chouser.jpeg" alt="" width="133" height="133" style="margin-right: 3em; margin-bottom: 5em;" /></a></p>

<p>Chouser is a key contributor to Clojure who has implemented several of its features. He can be found on the Internet at:</p>

<ul>
<li><a href="http://twitter.com/chrishouser">Twitter</a></li>
<li><a href="http://blog.n01se.net">Blog</a></li>
</ul>

<p>Some of <a href="https://github.com/chouser/">Chouser&#8217;s Clojure-related side-projects</a> include:</p>

<ul>
<li><a href="https://github.com/clojure/data.xml">data.xml</a></li>
<li><a href="https://github.com/clojure/data.finger-tree">data.finger-tree</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://joyofclojure.com/the-authors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Language</title>
		<link>http://joyofclojure.com/the-language/</link>
		<comments>http://joyofclojure.com/the-language/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 16:44:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[info]]></category>

		<guid isPermaLink="false">http://old.fogus.me/?p=29</guid>
		<description><![CDATA[Clojure is a dialect of Lisp supporting1 concurrent software development using functional programming techniques, and like the Lisp described in “Beating the Averages,” provides an environment conducive to agility. Clojure fosters agility in ways that many popular programming languages can’t. Many programming languages are bewitched with most or all of the following: Verbosity Essential boilerplate &#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://clojure.org">Clojure</a> is a dialect of Lisp supporting<sup id="fnref:supp"><a href="#fn:supp" rel="footnote">1</a></sup> concurrent software development using functional programming techniques, and like the Lisp described in “Beating the Averages,” provides an environment conducive to agility. Clojure fosters agility in ways that many popular programming languages can’t. Many programming languages are bewitched with most or all of the following:</p>

<ul>
<li>Verbosity</li>
<li><strong>Essential</strong> boilerplate</li>
<li>A long thought-code-feedback loop</li>
<li>Incidental complexity</li>
<li>Difficulties in extension</li>
<li>Deficiencies in supporting crucial programming paradigms</li>
</ul>

<p>In contrast, Clojure provides a mixture of power and practicality fostering rapid development cycles. But its benefits don’t stop with its agile nature.</p>

<p>Clojure provides a unique mix of functional programming and host symbiosis—an embrace of and direct support for its host platform, in this case the Java Virtual Machine. Additionally, the simplification and often elimination of the complexities involved in coordinated state change have positioned Clojure as an important lan- guage moving forward. All software developers must eventually address these prob- lems as a matter of course, and the study, understanding, and eventual utilization of Clojure is an essential path toward conquering them. From topics such as software transactional memory to laziness to immutability, this book will guide you on your way to understanding the <strong>“why”</strong> of Clojure, in addition to the <strong>“how.”</strong></p>

<p>Clojure information, source, and official documentation is found at <a href="http://clojure.org">http://clojure.org</a>.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:supp">
<p>Clojure&#8217;s primary goal is not concurrent programming, instead its sane model for managing state provides an environment where sane concurrency is possible.&#160;<a href="#fnref:supp" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://joyofclojure.com/the-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Bibliography</title>
		<link>http://joyofclojure.com/bibliography/</link>
		<comments>http://joyofclojure.com/bibliography/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 16:26:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[info]]></category>

		<guid isPermaLink="false">http://old.fogus.me/?p=20</guid>
		<description><![CDATA[Miscellaneous resources Abadi, Martin, and Luca Cardelli. 1996. A Theory of Objects New York: Springer. Although not a mathematical concept, object-oriented programming has obtained rigor with this gem. Abelson, Harold, and Gerald Jay Sussman. 1988. “Lisp: A Language for Stratified Design.” AI Memo (MIT) 986. ———. 1996. Structure and Interpretation of Computer Programs Cambridge, MA: &#8230;]]></description>
			<content:encoded><![CDATA[<h1>Miscellaneous resources</h1>

<p>Abadi, Martin, and Luca Cardelli. 1996. <a href="http://www.amazon.com/o/asin/0387947752?tag=fogus-20">A Theory of Objects</a> New York: Springer. <em>Although not a mathematical concept, object-oriented programming has obtained rigor with this gem.</em></p>

<p><a href="http://groups.csail.mit.edu/mac/users/hal/hal.html">Abelson, Harold</a>, and <a href="http://groups.csail.mit.edu/mac/users/gjs/">Gerald Jay Sussman</a>. 1988. <a href="http://dspace.mit.edu/handle/1721.1/6064">“Lisp: A Language for Stratified Design.”</a> AI Memo (MIT) 986.</p>

<p>———. 1996. <a href="http://www.amazon.com/o/asin/0070004846?tag=fogus-20">Structure and Interpretation of Computer Programs</a> Cambridge, MA: MIT Press. <em>There is no better book for learning Scheme and the fine art of programming.</em></p>

<p>Abiteboul, Serge, Richard Hull, and Victor Vianu. 1995. <a href="http://www.amazon.com/o/asin/0201537710?tag=fogus-20">Foundations of Databases: The Logical Level</a>. Boston: Addison-Wesley. <em>Clojure’s clojure.set namespace is actually modeled more on the named conjunctive algebra, for which this book provides a great reference.</em></p>

<p>Armstrong, Joe. 2007. <a href="http://www.amazon.com/o/asin/193435600X?tag=fogus-20">Programming Erlang: Software for a Concurrent World</a>. Raleigh, NC: Pragmatic Bookshelf.</p>

<p>———. 2007. <a href="http://portal.acm.org/citation.cfm?id=1238850">“A History of Erlang.”</a>. Proceedings of the Third ACM SIGPLAN Conference on History of Programming Languages.</p>

<p>Bagwell, Phil. 2001. <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.6279">Ideal Hash Trees</a>. Technical report. Clojure’s persistent data structures owe a lot to Phil Bagwell’s paper.</p>

<p>Baker, Henry. 1993. <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.23.9999">“Equal Rights for Functional Objects or, The More Things Change, The More They Are the Same.”</a> ACM SIGPLAN OOPS Messenger 4, no. 4.</p>

<p>Beck, Kent. 2002. <a href="http://www.amazon.com/o/asin/0321146530?tag=fogus-20">Test Driven Development: By Example.</a>. Boston: Addison-Wesley.</p>

<p>Bloch, Joshua. 2008. <a href="http://www.amazon.com/o/asin/0321356683?tag=fogus-20">Effective Java</a>. Upper Saddle River, NJ: Addison-Wesley. <em>Perhaps <strong>the</strong> most essential Java book (1/3).</em></p>

<p>Boncz, Peter, Zukowski Marcin, and Niels Nes. 2005. <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.101.7834">“MonetDB/X100: Hyper-Pipelining Query Execution.”</a>. Proceedings of the CIDR Conference. <em>This paper motivated the implementation of chunked sequences.</em></p>

<p>Bratko, Ivan. 2000. <a href="http://www.amazon.com/o/asin/0321417461?tag=fogus-20">PROLOG: Programming for Artificial Intelligence</a>. New York: Addison Wesley. <em>An utterly fantastic book on Prolog.</em></p>

<p>Budd, Timothy. 1995. <a href="http://www.amazon.com/o/asin/0201820803?tag=fogus-20">Multiparadigm Programming in Leda</a>. Reading, MA: Addison-Wesley. <em>This is an expanded discussion of the complexities wrought from a mono-paradigm approach to software development.</em></p>

<p>Clinger, William. 1998. <a href="http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.4500">“Proper Tail Recursion and Space Efficiency.”</a>. Proceedings of the ACM SIGPLAN 1998 Conference on Programming Language Design and Implementation.</p>

<p>Cormen, Thomas, Charles Leiserson, Ronald Rivest, and Clifford Stein. 2009. <a href="http://www.amazon.com/o/asin/0262033844?tag=fogus-20">Introduction to Algorithms</a>. Cambridge, MA: MIT Press. <em>This is a great reference on algorithmic complexity and Big-O, and as an added bonus, you could use it to stop a charging rhinoceros.</em></p>

<p>Crockford, Douglas. 2008. <a href="http://www.amazon.com/o/asin/0596517742?tag=fogus-20">JavaScript: The Good Parts</a>. Yahoo Press.</p>

<p>Date, C.J. 2009. <a href="http://www.amazon.com/o/asin/0596523068?tag=fogus-20">SQL and Relational Theory: How to Write Accurate SQL Code</a>. Sebastopol, CA: O’Reilly.</p>

<p>Dijkstra, Edsger Wijbe. 1959. <a href="http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.165.7577">“A Note on Two Problems in Connexion with Graphs.”</a> Numerische Mathematik 1, no. 1. <em>You could change the <code>h</code> function in listing 7.9 to <code>(def dijkstra-estimate-cost (constantly 0))</code> to conform to the ideal presented in this paper.</em></p>

<p>Flanagan, David. 2006. <a href="http://www.amazon.com/o/asin/0596805527?tag=fogus-20">JavaScript: The Definitive Guide</a>. Sebastopol, CA: O’Reilly.</p>

<p>Forman, Ira, and Nate Forman. 2004. <a href="http://www.amazon.com/o/asin/1932394184?tag=fogus-20">Java Reflection in Action</a>. Greenwich, CT: Manning. <em>Although reflection provides some meta-level manipulation, it’s quite apart from the notion of functions as data.</em></p>

<p>Friedl, Jeffrey. 1997. <a href="http://www.amazon.com/o/asin/0596528124?tag=fogus-20">Mastering Regular Expressions</a>. Sebastopol, CA: O’Reilly.</p>

<p>Friedman, Daniel, Mitchell Wand, and Christopher T. Haynes. 2001. <a href="http://www.amazon.com/o/asin/0262062178?tag=fogus-20">Essentials of Programming Languages</a>. Cambridge, MA: MIT Press.</p>

<p>Gabriel, Richard, and Kent Pitman. 2001. <a href="http://www.nhplace.com/kent/Papers/Technical-Issues.html">“Technical Issues of Separation in Function Cells and Value Cells.”</a>. <em>This is a more thorough examination of the differences between Lisp-1 and Lisp-2.</em></p>

<p>Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides. 1995. <a href="http://www.amazon.com/o/asin/0201633612?tag=fogus-20">Design Patterns: Elements of Reusable Object-Oriented Software.</a>. Reading, MA: Addison-Wesley.  <em>Another essential book for Java programmers (2/3).</em></p>

<p>Ghosh, Debasish. 2010. <a href="http://www.amazon.com/o/asin/1935182455?tag=fogus-20">DSLs in Action</a>. Greenwich, CT: Manning. <em>There is a much finer level of distinction determining what constitutes whole cloth, including that between internal and external DSLs. In this book, we focus on the classical Lisp model of internal DSLs, but DSLs in Action provides a survey of many DSL-creation techniques.</em></p>

<p>Glickstein, Bob. 1997. <a href="http://www.amazon.com/o/asin/1565922611?tag=fogus-20">Writing GNU Emacs Extensions</a>. Sebastopol, CA: O’Reilly.</p>

<p>Goetz, Brian. 2006. <a href="http://www.amazon.com/o/asin/0321349601?tag=fogus-20">Java Concurrency in Practice</a>. Upper Saddle River, NJ: Addison-Wesley. <em>Why haven’t you read this yet?  Essential for Java and concurrent programmers alike (3/3).</em></p>

<p>Goldberg, David. 1991. <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.22.6768">“What Every Computer Scientist Should Know About Floating-Point Arithmetic.”</a> Computing Surveys (March). <em>More bug reports are written against the limitations of floating point numbers than anything else. Essential knowledge for all programmers.</em></p>

<p>Graham, Paul. 1993. <a href="http://www.amazon.com/o/asin/0130305529?tag=fogus-20">On Lisp</a>. Englewood Cliffs, NJ: Prentice Hall. <em>Is there any book or any author more influential to the current generation of dynamic programmers than Graham and On Lisp? (<a href="http://www.paulgraham.com/onlisp.html">free version also available</a>).</em></p>

<p>———. 1995. <a href="http://www.amazon.com/o/asin/0133708756?tag=fogus-20">ANSI Common Lisp</a>. Englewood Cliffs, NJ: Prentice Hall.</p>

<p>Gray, Jim, and Andreas Reuter. 1992. <a href="http://www.amazon.com/o/asin/1558601902?tag=fogus-20">Transaction Processing: Concepts and Techniques</a>. San Mateo, CA: Morgan Kaufmann Publishers.</p>

<p>Halloway, Stuart. 2009. <a href="http://thinkrelevance.com/blog/2009/10/19/the-case-for-clojure.html">“Clojure is a better Java than Java.”</a> Presented at the Greater Atlanta Software Symposium, Atlanta. <em>The origin of the phrase “Java.next” most likely stems from this talk by Halloway.</em></p>

<p>Hart, Peter, Nils Nilsson, and Bertram Raphael. 1968. <a href="http://academic.research.microsoft.com/Publication/1269940/a-formal-basis-for-the-heuristic-determination-of-minimum-cost-paths">“A Formal Basis for the Heuristic Determination of Minimum Cost Paths.”</a> IEEE Transactions on Systems Science and Cybernetics In Systems Science and Cybernetics 4, no. 2.</p>

<p>Hewitt, Carl, Peter Bishop, and Richard Steiger. 1973. <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.77.7898">“A Universal Modular ACTOR Formalism for Artificial Intelligence.”</a> Proceedings of the Third International Joint Conference on Artificial Intelligence.</p>

<p>Heinlein, Robert. 1966. <a href="http://www.amazon.com/o/asin/0312863551?tag=fogus-20">The Moon Is a Harsh Mistress</a>. New York: Putnam. <em>We had considered offering an implementation of Mike as an appendix, but we ran over our page count.</em></p>

<p>Herlihy, Maurice, and Nir Shavit. 2008. <a href="http://www.amazon.com/o/asin/0123705916?tag=fogus-20">The Art of Multiprocessor Programming</a>. Amsterdam; Boston: Elsevier/Morgan Kaufmann.</p>

<p>Hickey, Rich. 2009. <a href="http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey">“Are We There Yet?”</a> Presented at JVM Languages Summit. <em>This wonderful presentation made firm the popular view of Rich as Philosopher Programmer.</em></p>

<p>Hofstadter, Douglas. 1979. <a href="http://www.amazon.com/o/asin/0465026567?tag=fogus-20">Gödel, Escher, Bach: An Eternal Golden Braid</a>. New York: Basic Books. <em>See the sections “Classes and Instances,” “The Prototype Principle,” and “The Splitting-off of Instances from Classes” for more detail of the topics in section 9.2.</em></p>

<p>Hoyte, Doug. 2008. <a href="http://www.amazon.com/o/asin/1435712757?tag=fogus-20">Let Over Lambda</a>. Lulu.com. <em>This is an amazing look into the mind-bending power of Common Lisp macros that provided the motivation for the DSLs section of this book. It will blow your mind—in a good way.</em></p>

<p>Hudak, Paul. 2000. <a href="http://www.amazon.com/o/asin/0521644089?tag=fogus-20">The Haskell School of Expression: Learning Functional Programming Through Multimedia</a>. New York: Cambridge University Press.</p>

<p>Huet, Gerard. 1997. <a href="http://www.mendeley.com/research/functional-pearl-1/">“Functional Pearl: The Zipper.”</a> Journal of Functional Programming.</p>

<p>Hutton, Graham. 1999. <a href="http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.1618">“A Tutorial on the Universality and Expressiveness of fold.”</a> Journal of Functional Programming 9, no. 4.</p>

<p>Kahan, William, and Joseph Darcy. 1998. <a href="http://www.cs.berkeley.edu/~wkahan/">“How Java’s Floating-Point Hurts Everyone Everywhere.”</a> Presented at the ACM Workshop on Java for High-Performance Network Computing. <em>This paper provides more information on the cyclopian nightmares awaiting you in Java floating point.</em></p>

<p>Keene, Sonya. 1989. <a href="http://www.amazon.com/o/asin/0201175894?tag=fogus-20">Object-Oriented Programming in Common Lisp: A Programmer’s Guide to CLOS</a>. Boston: Addison-Wesley. <em>The best book on CLOS ever written.</em></p>

<p>Knuth, Donald. 1997. <a href="http://www.amazon.com/o/asin/0201896834?tag=fogus-20">The Art of Computer Programming: Volume 1 &#8211; Fundamental Algorithms</a>. Reading, MA: Addison-Wesley. <em>This book goes into exquisite detail about the primary characteristics of FIFO queues and is highly recommended reading.</em></p>

<p>———. 1998. <a href="http://www.amazon.com/o/asin/0201896850?tag=fogus-20">The Art of Computer Programming, Vol. 3: Sorting and Searching</a>. Reading, MA: Addison-Wesley. <em>Running quick-sort on a sorted sequence is an O(n<super>2</super>) operation, which for our implementation in chapter 6 completely defeats its laziness.</em></p>

<p>Koenig, Dierk, Andrew Glover, Paul King, Guilaume LaForge, and Jon Skeet. 2007. <a href="http://www.amazon.com/o/asin/1932394842?tag=fogus-20">Groovy in Action</a>. Greenwich, CT: Manning.</p>

<p>Kuki, Hirondo, and William James Cody. 1973. <a href="http://academic.research.microsoft.com/Publication/775341/a-statistical-study-of-the-accuracy-of-floating-point-number-systems">“A Statistical Study of the Accuracy of Floating Point Number Systems.”</a> Communications of the ACM 1973 16, no. 4.</p>

<p>Laddad, Ramnivas. 2003. <a href="http://www.amazon.com/o/asin/1930110936?tag=fogus-20">AspectJ in Action: Practical Aspect-Oriented Programming</a>. Greenwich, CT: Manning. <em>We do not do justice to the notion of aspects—so read this instead.</em></p>

<p>Martin, Robert. 2002. <a href="http://www.amazon.com/o/asin/0135974445?tag=fogus-20">Agile Software Development: Principles, Patterns, and Practices</a>. Upper Saddle River, NJ: Prentice Hall.</p>

<p>McCarthy, John. 1960. <a href="http://www-formal.stanford.edu/jmc/recursive.html">“Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I.”</a> Communications of the ACM. <em>This is the essay that started it all.</em></p>

<p>———. 1962. <a href="http://www.amazon.com/o/asin/0262130114?tag=fogus-20">LISP 1.5 Programmer’s Manual</a>. Cambridge, MA: MIT Press. <em>Lisp had an array type at least as early as 1962. Sadly, this fact is little known.</em></p>

<p>McConnell, Steve. 2004. <a href="http://www.amazon.com/o/asin/0735619670?tag=fogus-20">Code Complete: A Practical Handbook of Software Construction</a>. Redmond, WA: Microsoft Press.</p>

<p>Meyer, Bertrand. 1991. <a href="http://www.amazon.com/o/asin/0132479257?tag=fogus-20">Eiffel: The Language</a>. New York: Prentice Hall. <em>The programming language Eiffel relies heavily on contract-based programming methodologies, a cornerstone element of Fogus’s philosophy of <a href="http://bit.ly/defcon">Apperception-Driven Development</a>.</em></p>

<p>———. 2000. <a href="http://www.amazon.com/o/asin/0136291554?tag=fogus-20">Object-Oriented Software Construction</a>. Upper Saddle River, NJ: Prentice Hall.</p>

<p>Michie, Donald. 1968. <a href="http://academic.research.microsoft.com/Publication/1290550/memo-functions-and-machine-learning">“Memo Functions and Machine Learning.”</a> Nature 218.</p>

<p>Mooers, Calvin, and Peter Deutsch. 1965. <a href="http://academic.research.microsoft.com/Publication/1367080">“TRAC, A Text-Handling Language.”</a></p>

<p>Moseley, Ben, and Peter Marks. 2006. <a href="http://web.mac.com/ben_moseley/frp/frp.html">“Out of the Tar Pit.”</a> Presented at SPA2006.</p>

<p>Mozgovoy, Maxim. 2009. <a href="http://www.amazon.com/o/asin/0763776270?tag=fogus-20">Algorithms, Languages, Automata, and Compilers: A Practical Approach</a>. Sudbury, MA: Jones and Bartlett Publishers.</p>

<p>Noble, James, and Brian Foote. 2003. <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.59.6393">“Attack of the Clones.”</a> Proceedings of the 2002 Conference on Pattern Languages of Programs 13. <em>The <code>clone</code> function is inspired by this paper.</em></p>

<p>Norvig, Peter. 1991. <a href="http://www.amazon.com/o/asin/1558601910?tag=fogus-20">Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp</a>. San Francisco: Morgan Kaufman Publishers.</p>

<p>Odersky, Martin, Lex Spoon, and Bill Venners. 2008. <a href="http://www.amazon.com/o/asin/0981531644?tag=fogus-20">Programming in Scala: A Comprehensive Step-by-step Guide</a>. Mountain View, CA: Artima.</p>

<p>Okasaki, Chris. 1996. <a href="http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.9435">“The Role of Lazy Evaluation in Amortized Data Structures.”</a> Presented at the International Conference on Functional Programming. <em>This is a much more thorough discussion of incremental vs. monolithic computation.</em></p>

<p>———. 1999. <a href="http://www.amazon.com/o/asin/0521663504?tag=fogus-20">Purely Functional Datastructures</a>. Cambridge University Press. <em>Chris Okasaki to the rescue again! Clojure’s persistent queue implementation is based on Okasaki’s batched queue from this seminal work.</em></p>

<p>Olsen, Russ. 2007. <a href="http://www.amazon.com/o/asin/0321490452?tag=fogus-20">Design Patterns in Ruby</a>. Upper Saddle River, NJ: Addison-Wesley</p>

<p>Papadimitriou, Christos. 1986. <a href="http://www.amazon.com/o/asin/0881750271?tag=fogus-20">Theory of Database Concurrency Control</a>. New York: Computer Science Press, Inc.</p>

<p>Pierce, Benjamin. 2002. <a href="http://www.amazon.com/o/asin/0262162091?tag=fogus-20">Types and Programming Languages</a>. Cambridge, MA: MIT Press. <em>Fun fact: Representing numbers using lambda calculus is known as church encoding. The church-encoded number 9 would be represented as <code>(fn [f] (fn [x] (f (f (f (f (f (f (f (f (f x)))))))))))</code> in Clojure.</em></p>

<p>Raymond, Eric. 2003. <a href="http://www.amazon.com/o/asin/0131429019?tag=fogus-20">The Art of Unix Programming</a>. Reading, MA: Addison-Wesley Professional.</p>

<p>Rosenberg, Doug, Mark Collins-Cope, and Matt Stephens. 2005. <a href="http://www.amazon.com/o/asin/1590594649?tag=fogus-20">Agile Development with ICONIX Process: People, Process, and Pragmatism</a>. Berkeley, CA: Apress.</p>

<p>Skeel, Robert. 1992. <a href="http://www.cs.utexas.edu/users/downing/papers/">“Roundoff Error and the Patriot Missile.”</a> SIAM News 25, no. 4: 11.</p>

<p>Steele, Guy L. 1977. <a href="http://library.readscheme.org/page1.html">“Lambda: the Ultimate GOTO.”</a> ACM Conference Proceedings.</p>

<p>———. 1990. <a href="http://www.amazon.com/o/asin/1555580416?tag=fogus-20">Common LISP: The Language</a>. Bedford, MA: Digital Press. <em>This is a very witty book, in addition to being packed with information.</em></p>

<p>Steele, Guy L., and Gerald Sussman. 1978. <a href="http://library.readscheme.org/page1.html">“The Art of the Interpreter.”</a> AI Memo (MIT) 453.</p>

<p>Stewart, Ian. 1995. <a href="http://www.amazon.com/o/asin/0486284247?tag=fogus-20">Concepts of Modern Mathematics</a>. New York: Dover. <em>These Dover math books are often true gems. It would be great to see an adventurous publisher print a similar series revolving around C.S.-relevant topics—monads, category theory, lambda calculus, and so on.</em></p>

<p>Sussman, Gerald, and Guy L. Steele. 1975. <a href="http://library.readscheme.org/page1.html">“Scheme: An Interpreter for the Extended Lambda Calculus.”</a> Higher-Order and Symbolic Computation 11, no. 4. <em>This is a discussion of Scheme’s early implementation of lexical closures.</em></p>

<p>Symbolics Inc. 1986. <a href="http://smbx.org/index.php/index.php?option=com_content&amp;task=view&amp;id=39&amp;Itemid=76">Reference Guide to Symbolics Common Lisp: Language Concepts</a>. Symbolics Release 7 Doc- ument Set.</p>

<p>Thompson, Simon. 1999. <a href="http://www.amazon.com/o/asin/0201342758?tag=fogus-20">Haskell: The Craft of Functional Programming</a>. Reading, MA: Addison-Wesley.</p>

<p>Ullman, Jeffrey. 1988. <a href="http://www.amazon.com/o/asin/0716781581?tag=fogus-20">Principles of Database &amp; Knowledge-Base Systems Vol. 1: Classical Database Systems</a>.
Rockville, MD: Computer Science Press.</p>

<p>Ungar, David, and Randal Smith. 1987. <a href="https://labs.oracle.com/self/papers/self-power.html">“SELF: The power of simplicity.”</a> Presented at the Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA), Orlando. <em>The Self programming language is the greatest influence on languages based on prototypal inheritance.</em></p>

<p>Van Roy, Peter, and Seif Haridi. 2004. <a href="http://www.amazon.com/o/asin/0262220695?tag=fogus-20">Concepts, Techniques, and Models of Computer Programming</a>. Cambridge, MA: MIT Press.</p>

<p>Wadler, Philip. 1989. <a href="http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.9875">“Theorems for Free!”</a> Presented at the fourth International Conference on Func- tional Programming and Computer Architecture.</p>

<p>Wampler, Dean, and Alex Payne. 2009. <a href="http://www.amazon.com/o/asin/0596155956?tag=fogus-20">Programming Scala</a>. Sebastopol, CA: O’Reilly.</p>

<p>Whitehead, Alfred North. 1929. <a href="http://www.amazon.com/o/asin/0029345707?tag=fogus-20">Process and Reality: An Essay in Cosmology</a>. Cambridge University Press. <em>For a general overview of Whitehead, see <a href="http://www.amazon.com/o/asin/1432517473?tag=fogus-20">The Wit And Wisdom of Alfred North Whitehead</a> by A.H. Johnson (Boston, Beacon Press, 1947).</em></p>

<p>Williams, Laurie. 2002. <a href="http://www.amazon.com/o/asin/0201745763?tag=fogus-20">Pair Programming Illuminated</a>. Boston: Addison-Wesley Professional. <em>The limitations of the book format only shadow the idealistic model of pair programming.</em></p>

<h1>Online resources</h1>

<p>Braithwaite, Reginald. 2007. “Why Why Functional Programming Matters Matters.” <a href="http://weblog.raganwald.com/2007/03/why-why-functional-programming-matters.html">http://weblog.raganwald.com/2007/03/why-why-functional-programming-matters.html</a>. <em>This column discusses language-level separation of concerns.</em></p>

<p>Clementson, Bill. 2008. “Clojure could be to Concurrency-Oriented Programming what Java was to OOP.” <a href="http://bc.tech.coop/blog/081201.html">http://bc.tech.coop/blog/081201.html</a>. <em>A much deeper discussion concerning Erlang actors and Clojure agents.</em></p>

<p>Dekorte, Steve. Io. <a href="http://iolanguage.com">http://iolanguage.com</a>.</p>

<p>Fogus, Michael. Lithp. <a href="http://github.com/fogus/lithp">http://github.com/fogus/lithp</a>.</p>

<p>Fowler, Martin. 2005. “Fluent Interface.” <a href="http://martinfowler.com/bliki/FluentInterface.html">http://martinfowler.com/bliki/FluentInterface.html</a>.</p>

<p>———. 2007. “Mocks Aren’t Stubs.” <a href="http://martinfowler.com/articles/mocksArentStubs.html">http://martinfowler.com/articles/mocksArentStubs.html</a>.</p>

<p>Graham, Paul. Arc. <a href="http://www.paulgraham.com/arc.html">http://www.paulgraham.com/arc.html</a>.</p>

<p>———. 2001. “What Made Lisp Different.” <a href="http://www.paulgraham.com/diff.html">http://www.paulgraham.com/diff.html</a>. <em>As Paul Graham states, “The whole language always available” appears as a theme throughout this book and as a finale in section 13.5.</em></p>

<p>Houser, Chris. error-kit API. <a href="http://richhickey.github.com/clojure-contrib/error-kit-api.html">http://richhickey.github.com/clojure-contrib/error-kit-api.html</a>. <em>The clojure.contrib.error-kit namespace contains an open error system similar to CL conditions that don’t require recompilation when defining new error types.</em></p>

<p>Krukow, Karl. 2009. “Understanding Clojure’s PersistentVector Implementation.” <a href="http://blog.higher-order.net/2009/02/01/understanding-clojures-persistentvector-implementation/">http://blog.higher-order.net/2009/02/01/understanding-clojures-persistentvector-implementation/</a>.</p>

<p>Lindholm, Tim, and Frank Yellin. 1999. Java Virtual Machine Specification. <a href="http://java.sun.com/docs/books/jvms/">http://java.sun.com/docs/books/jvms/</a>.</p>

<p>Norvig, Peter. 1998. “Design Patterns in Dynamic Programming.” <a href="http://norvig.com/design-patterns/">http://norvig.com/design-patterns/</a>. <em>The section on design patterns was inspired by this presentation.</em></p>

<p>Tarver Mark. 2008. Functional Programming in Qi. <a href="http://www.lambdassociates.org/Book/page000.htm">http://www.lambdassociates.org/Book/page000.htm</a>. <em>Some programming languages perform partial application automatically when a function is supplied with fewer than the expected number of arguments. One such language is Qi &#8212; a truly elegant language.</em></p>

<p>———. 2009. “The Next Lisp: Back to the Future.” <a href="http://www.lambdassociates.org/blog/nextlisp(1).htm">http://www.lambdassociates.org/blog/nextlisp(1).htm</a>. <em>The notion of Lisp as a programming language genotype is explored.</em></p>

<p>_why. Shoes. <a href="http://github.com/shoes/shoes">http://github.com/shoes/shoes</a>.</p>

<p>Yegge, Steve. 2006. “Execution in the Kingdom of Nouns.” <a href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html">http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html</a>.</p>

<p>———. 2008. “The Universal Design Pattern.” <a href="http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html">http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html</a>. <em>Like many programmers of our generation, we were in many ways inspired and influenced by Steve Yegge’s work—which is why we asked him to write this book’s foreword.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://joyofclojure.com/bibliography/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

