<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Ezra&apos;s Research</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/" />
    <link rel="self" type="application/atom+xml" href="http://ezrakilty.net/research/atom.xml" />
   <id>tag:ezrakilty.net,2010:/research/9</id>
    <link rel="service.post" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9" title="Ezra&#39;s Research" />
    <updated>2010-03-07T05:27:45Z</updated>
    <subtitle>Programming languages. Ezra Cooper.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.33</generator>
 
<entry>
    <title>What ARE anamorphisms</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2010/03/what_are_anamorphisms.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1487" title="What ARE anamorphisms" />
    <id>tag:ezrakilty.net,2010:/research//9.1487</id>
    
    <published>2010-03-07T05:26:56Z</published>
    <updated>2010-03-07T05:27:45Z</updated>
    
    <summary>So I got sucked into editing the wikipedia page for anamorphisms, which was a mess: it didn&apos;t define the concept itself, except to say that it&apos;s a generalization of unfolds, and allude to category theory; it had duplicated code, but...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Programming Languages" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>So I got sucked into editing the wikipedia page for <a href="http://en.wikipedia.org/wiki/Anamorphism">anamorphisms</a>, which was a mess: it didn't define the concept itself, except to say that it's a generalization of unfolds, and allude to category theory; it had duplicated code, but treated the duplicates as different, and was generally jargon-heavy and not very helpful.</p>

<p>But while fixing it, I got stuck on a puzzle: what exactly <em>is</em> an anamorphism?</p>

<p>Is an anamorphism a higher-order unfold operator? Or is it any function which is defined by partially applying such an operator? Or a function that is defined using a certain syntactic pattern, corresponding to an unfold operator? Or any function at all that <em>could</em> be so defined?</p>

<p>In the almighty "Programming with Bananas, Lenses, Envelopes and Barbed Wire," they seem to use "anamorphism" to refer to a function defined by a certain syntactic pattern. It's a question of interpretation, but they don't seem to define it as a higher-order function, exactly: the text posits some pre-existing operators and then the code sample, which takes just one argument (the "seed" value to unfold from), uses those posited operators.</p>

<p>It seems natural to me to use "anamorphism" to refer to the (unique) unfold operator for a given ADT, and likewise for "catamorphism" and fold. We still have the plural "anamorphisms," since we have many types with such operators. And, I'm not sure to what extent a function is intrinsically "an anamorphism" in Meijer, et al.'s sense. Of course, it is intrinsic whether a function can or cannot be defined that way; but when we start using the whole bag of bananas, lens, envelopes and barbed wire, I think we get multiple ways to define many functions, so it's less intrinsic.</p>

<p>I'd like to hear what others think: What <em>are</em> anamorphisms? Please comment!</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Simply adding lambda won&apos;t make your rewrites diverge</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2010/03/simply_adding_lambda_wont_make.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1481" title="Simply adding lambda won&#39;t make your rewrites diverge" />
    <id>tag:ezrakilty.net,2010:/research//9.1481</id>
    
    <published>2010-03-01T02:54:15Z</published>
    <updated>2010-03-01T03:03:42Z</updated>
    
    <summary>I&apos;ve been working on trying to extend a result from my thesis, having to do with strong normalization of a certain higher-order rewrite system, but its proof is very complicated, so I&apos;ve been working on simplifying it. Along the way...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Programming Languages" />
            <category term="Research Writing" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>I've been working on trying to extend a result from my thesis, having to do with strong normalization of a certain higher-order rewrite system, but its proof is very complicated, so I've been working on simplifying it.</p>

<p>Along the way I found a paper by Mitsuhiro Okada from 1989 which proves strong normalization for the combination of STLC with any first-order term-rewriting system. But this paper is hard to read because it has strange notations and concepts and says things like, "If a part s[*/x1, ..., */xn, */y] of t belongs to the cap then the part s[*/x1, ..., */xn, */y] also belongs to the cap." Say what?</p>

<p>I knew I could prove the same result using the Tait-Girard method (the same basic approach Okada takes) in a more straightforward way—at least to me. So I did, and here it is for future reference: "<a href="http://ezrakilty.net/pubs/sntlctrs.pdf">Simply adding lambda won't make your rewrites diverge</a>."</p>]]>
        
    </content>
</entry>
<entry>
    <title>Krugman</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2010/02/krugman.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1479" title="Krugman" />
    <id>tag:ezrakilty.net,2010:/research//9.1479</id>
    
    <published>2010-02-27T04:02:15Z</published>
    <updated>2010-02-28T18:26:45Z</updated>
    
    <summary>Economist Paul Krugman, as portrayed in this week&apos;s New Yorker profile, reminds me a lot of a computer scientist. MacFarquhar explains one of Krugman&apos;s economic ideas, namely that locations specialize economically—cars in Detroit and chips in Silicon Valley—and reports this...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>Economist Paul Krugman, as portrayed in <a href="http://www.newyorker.com/reporting/2010/03/01/100301fa_fact_macfarquhar">this week's <cite>New Yorker</cite> profile</a>, reminds me a lot of a computer scientist. MacFarquhar explains one of Krugman's economic ideas, namely that locations specialize economically—cars in Detroit and chips in Silicon Valley—and reports this interesting reaction to it:</p>

<blockquote>'I explained this basic idea to a non-economist friend, who replied in some dismay, "Isn't that pretty obvious?" And of course it is.' Yet, because it had not been well modelled, the idea had been disregarded by economists for years.<br />
(MacFarquhar, "The Deflationist." <cite>The New Yorker</cite>, March 1, 2010.)</blockquote>

<p>Much of what we academics do (in computer science and, apparently, in economics) is to take an intuitive idea and make it precise—modelling it, if you will. Those who simply think intuitively may have already absorbed the idea and treat it as old hat—but the model, by making it more precise, illuminates it further and more securely and can lead to new inspirations.</p>

<p>MacFarquhar adds another interesting idea here:</p>

<blockquote>
His friend Craig Murphy, a political scientist at Wellesley, had a collection of antique maps of Africa. ... Sixteenth-century maps of Africa were misleading in all kinds of ways, but they contained quite a bit of information about the continent's interior—the River Niger, Timbuktu. Two centuries later, mapmaking had become much more accurat, but the interior of Africa had become a black. As standards for what counted as a mappable fact rose, knowledge that didn't meet those standards—secondhand travellers' reports, guess hazarded without compasses or sextants—was discarded and lost. Eventually, the higher standards paid off—by the nineteenth century the maps were filled in again—but for a while the sharpening of technique caused loss as well as gain.
</blockquote>

<p>I'm intrigued by this idea that higher standards of precision can cause us to 'forget' disciplinary knowledge, material that no longer meets the standards. Of course, the higher standards are all about eliminating 'knowledge' that isn't actually correct. But some of it, perhaps, is correct, and anyway there's an outer shape to the knowledge that is useful: after all, there was still a River Niger even if the mapmakers didn't know exactly where it flowed.</p>

<p>This might happen in computer science, too. I think of Don Knuth's penchant for reading antique sources describing algorithms from pre-modern times.</p>

<p>There might be inspiration in the older, less-precise knowledge of one's field: it might be a source of ideas to be modelled.</p>]]>
        
    </content>
</entry>
<entry>
    <title>What I&apos;m doing now</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2010/02/what_im_doing_now.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1470" title="What I&#39;m doing now" />
    <id>tag:ezrakilty.net,2010:/research//9.1470</id>
    
    <published>2010-02-16T00:09:39Z</published>
    <updated>2010-02-16T00:18:17Z</updated>
    
    <summary>So what I do lately is I work for a company in Cambridge, MA that has a big XQuery engine for searching &quot;semi-structured&quot; databases. That is, we use language technology to allow people to write nifty searches. I had some...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Working" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>So what I do lately is I work for a company in Cambridge, MA that has a big XQuery engine for searching "semi-structured" databases. That is, we use language technology to allow people to write nifty searches.</p>

<p>I had some other interesting job offers, but I took this one because (a) it was in the Boston area, which is where I wanted to be at the time and (b) I wanted to get behind one central product and contribute some programming-language knowledge to it. I was surprised to discover a company that would let me do both.</p>

<p>As part of what how we're improving the product just now, we're building a parallelizing compiler for relational algebra—roughly the sort of stuff that titilates me as a langauge engineer, and tangentially (at least) related to some of my thesis work.</p>

<p>Since it's a company trying to compete against others, I probably won't be blogging much about what I'm doing at work, but I still hope to keep this blog active and post researchy notes here.</p>]]>
        
    </content>
</entry>
<entry>
    <title>Time-saving proposal to improve the reviewing process</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2010/01/timesaving_proposal_to_improve.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1440" title="Time-saving proposal to improve the reviewing process" />
    <id>tag:ezrakilty.net,2010:/research//9.1440</id>
    
    <published>2010-01-07T03:53:51Z</published>
    <updated>2010-01-07T03:59:59Z</updated>
    
    <summary>Proposal: As an academic reviewer, you should always vote to publish a paper, without reading it, even if it is a tedious waste of time. The time-saving benefit of this strategy is subtle to grasp but significant. You see, only...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Research Writing" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>Proposal: As an academic reviewer, you should always vote to publish a paper, without reading it, even if it is a tedious waste of time.</p>

<p>The time-saving benefit of this strategy is subtle to grasp but significant. You see, only the reviewers of a paper "must" read it, while everyone else will discard it if it's boring. By voting to publish, you waste no one else's time—but the time you save is your own. If every reviewer did this, the time saved would allow us all to do far more research!</p>]]>
        
    </content>
</entry>
<entry>
    <title>Function calls are not stack frames</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/11/function_calls_are_not_stack_frames.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1410" title="Function calls are not stack frames" />
    <id>tag:ezrakilty.net,2009:/research//9.1410</id>
    
    <published>2009-11-03T17:29:13Z</published>
    <updated>2009-11-04T20:12:14Z</updated>
    
    <summary>Tim Bray is spreading more misinformation about tail recursion. He describes it this way: It looks like a subroutine call, but in the case where it occurs as the last thing in the routine, it magically, silently, and automatically gets...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Constructive Criticism" />
            <category term="Programming Activity" />
            <category term="Programming Languages" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>Tim Bray is spreading more <a href="http://www.tbray.org/ongoing/When/200x/2009/10/27/Recur">misinformation about tail recursion</a>. He describes it this way:</p>

<blockquote>
  <p>It looks like a subroutine call, but in the case where it occurs as the last thing in the routine, it magically, silently, and automatically gets turned into, now how did I put it? “A highly controlled and structured GOTO.”</p>
</blockquote>

<p>A tail-call <em>is</em> a subroutine call. The efficient implementation does not magically transformed into something else; if it doesn't create a stack frame on such a call, it's because one simply isn't relevant.</p>

<p>The essential observation behind the efficient-tail-call implementation (not "optimization"—more on which in a moment) is as follows: For most programming languages, a stack frame is needed not for a subroutine call but only for an <em>argument evaluation</em>, that is, an evaluation whose result is temporary and needs further processing. Calls in the middle of a procedure are "argument" evaluations, because their results need further processing. It's really the temporary, non-final natural of the result that forces us to do the book-keeping that remembers where to come back to.</p>

<p>Another confusion is between semantics and cost model:</p>

<blockquote>
  <p>Call me old-fashioned, but it just seems wrong when the semantics of two identical function invocations vary wildly as a function of whether there’s an executable statement between the invocation and the function exit.</p>
</blockquote>

<p>The semantics of the call doesn't change; the result and the side-effects are the same (that's what's usually meant by "semantics" anyway). The <em>cost</em>, on the other hand, might be quite different depending on whether a stack frame is needed. </p>

<p>Unfortunately, efficient tail recursion has often been described as a transparent "optimization," so that it might or might not be efficient and the programmer can't tell in advance.</p>

<p>Efficient tail calls (or space-consuming ones) really <em>should</em> be part of the official "cost model" of the language, something that goes along with the semantics, as a peer to the semantics, in fact. The cost model tells you how expensive you can expect things to be, but should be a little less binding than the semantics, since language implementors should have some freedom to do additional optimizations.</p>

<p>The idea that stack frames should correspond directly to the call structure is just odd. Maybe we want to know the call structure at runtime; in that case, we should capture that as debugging information, or as a reflection feature of the runtime system, but not as a core language design. Let the language implementation use the stack as efficiently as possible!</p>

<p>To summarize:</p>

<ul>
<li>"Tail-call optimization" is a terrible misnomer.</li>
<li>The programmer should have assurance as to whether tail-calls have a cost.</li>
<li>Most languages have no reason to use up space on every function call; only calls whose result will be fed to another expression need to use space.</li>
</ul>
]]>
        

    </content>
</entry>
<entry>
    <title>Re-running</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/09/rerunning.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1386" title="Re-running" />
    <id>tag:ezrakilty.net,2009:/research//9.1386</id>
    
    <published>2009-09-12T15:28:22Z</published>
    <updated>2009-09-12T16:02:07Z</updated>
    
    <summary>I&apos;d wondered before why &quot;recursion,&quot; a thing defined in terms of its lesser selves, is the word that it is. I learned today from this NY Times article about handwriting that the root of &quot;cursive&quot; is the Latin currere, &quot;to...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="History" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>I'd wondered before why "recursion," a thing defined in terms of its lesser selves, is the word that it is. </p>

<p>I learned today from <a href="http://www.nytimes.com/interactive/2009/09/04/opinion/20090908_opart.html">this NY Times article</a> about handwriting that the root of "cursive" is the Latin currere, "to run."</p>

<p>Recursion, then, is just running again.</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Thesis submitted</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/07/so_ive_been_rather_busy.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1354" title="Thesis submitted" />
    <id>tag:ezrakilty.net,2009:/research//9.1354</id>
    
    <published>2009-07-07T19:46:19Z</published>
    <updated>2009-11-01T19:28:34Z</updated>
    
    <summary>So I&apos;ve been rather busy. The first bit of news is, I submitted a thesis. Warning: it has not been examined and may be full of errors, inaccuracies, omissions, or ill-advised conclusions. The thesis turned out better than I&apos;d hoped,...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="History" />
            <category term="Links" />
            <category term="Programming Languages" />
            <category term="Research Writing" />
            <category term="Working" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>So I've been rather busy. The first bit of news is, I <a href="http://ezrakilty.net/pubs/thesis.pdf">submitted a thesis</a>. Warning: it has not been examined and may be full of errors, inaccuracies, omissions, or ill-advised conclusions.</p>

<p>The thesis turned out better than I'd hoped, in the sense that all four major pillars of the work were also accepted to conferences (the papers are "<a href="http://ezrakilty.net/pubs/links-fmco.pdf">Links: Web Programming without Tiers</a>," "<a href="http://ezrakilty.net/pubs/formlets.pdf">The Essence of Form Abstraction</a>," "<a href="http://ezrakilty.net/pubs/located.pdf">A Located Lambda Calculus</a>," and "<a href="http://ezrakilty.net/pubs/dbpl-sqlizability.pdf">The Script-writer's Dream: How to Write Great SQL in Your Own Language and Be Sure It Will Succeed</a>").</p>

<p>The night I printed it, I was elated, walking to the printer to collect my final copy, knowing I had done it—created some programming language features, written a 180-page thesis, persevered. In a couple of months I'll defend it, warts and all, and then perhaps I'll be completely finished. But it's downhill from here. I think.</p>

<p><b>Update:</b> The final version has now been submitted, and the above link points to the latest version.</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Dept. of Wheel Reinvention</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/06/dept_of_wheel_reinvention.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1342" title="Dept. of Wheel Reinvention" />
    <id>tag:ezrakilty.net,2009:/research//9.1342</id>
    
    <published>2009-06-12T17:39:55Z</published>
    <updated>2009-06-14T18:14:31Z</updated>
    
    <summary> From the brief on Apple&apos;s new concurrency framework, Grand Central Dispatch: Blocks are a simple extension to C (as well as Objective-C and C++) that make it easy for you to define self-contained units of work. A block in...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Concurrency" />
            <category term="Programming Languages" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>
From the brief on Apple's new concurrency framework, <a href="http://images.apple.com/macosx/technology/docs/GrandCentral_TB_brief_20090608.pdf">Grand Central Dispatch</a>:
</p>

<blockquote>
<p>
Blocks are a simple extension to C (as well as Objective-C and C++) that make it easy for you to define self-contained units of work. A block in code is denoted by a caret at the beginning of a function. For example, you could declare a block and assign it to x by writing:
<pre>
    x = ^{ printf("hello world\n"); }
</pre>
This turns the variable x into a way of calling the function so that calling <code>x( );</code> in the code would print the words <em>hello world</em>.
</p>

<p>
What’s really powerful about blocks is that they enable you to wrap much more complex functions—as well as their arguments and data—in a way that can be easily passed around in a program, much as a variable can be easily referenced and passed.
</p>
</blockquote>

<p>
Underneath this is a diagram showing that a block is like a function with some associated data.
</p>

<p>
I think I've seen this idea before somewhere. :-)
</p>

<p>
Ah, but a closure by any other name would smell as sweet...
</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Big Numbers</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/06/big_numbers.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1341" title="Big Numbers" />
    <id>tag:ezrakilty.net,2009:/research//9.1341</id>
    
    <published>2009-06-08T20:21:25Z</published>
    <updated>2009-06-09T00:14:22Z</updated>
    
    <summary>This is a good essay about big numbers by Scott Aaronson....</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Complexity" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p><a href="http://www.scottaaronson.com/writings/bignumbers.html">This is a good essay about big numbers</a> by Scott Aaronson.</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Quick beard note</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/06/quick_beard_note.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1338" title="Quick beard note" />
    <id>tag:ezrakilty.net,2009:/research//9.1338</id>
    
    <published>2009-06-01T21:39:59Z</published>
    <updated>2009-07-07T23:48:34Z</updated>
    
    <summary>Ahem. It is not every 31-year-old who, in a first government job, finds himself dismantling General Motors and rewriting the rules of American capitalism. ... “He’s got this beard that appears and disappears,” says Steven Rattner, one of the leaders...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Working" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>Ahem.</p>

<blockquote>
It is not every 31-year-old who, in a first government job, finds himself dismantling General Motors and rewriting the rules of American capitalism. ... “<em>He’s got this beard that appears and disappears</em>,” says Steven Rattner, one of the leaders of President Obama’s automotive task force.
<div>
—<a href="http://www.nytimes.com/2009/06/01/business/01deese.html">"The 31-Year-Old in Charge of Dismantling G.M.," New York <cite>Times</cite>, 31&nbsp;May&nbsp;09.</a>
</div>
</blockquote>

<p>Emphasis mine.</p>]]>
        
    </content>
</entry>
<entry>
    <title>Discovering the platform, and the problem</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/05/discovering_the_platform_and_t.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1335" title="Discovering the platform, and the problem" />
    <id>tag:ezrakilty.net,2009:/research//9.1335</id>
    
    <published>2009-05-20T17:50:38Z</published>
    <updated>2009-05-20T18:11:37Z</updated>
    
    <summary>I appreciated Dan Weinreb&apos;s comment on why MIT switched from Scheme to Python in teaching freshman programming: [C]omputer engineering was [once] based on starting with clearly-defined things (primitives or small programs) and using them to build larger things that ended...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Programming Activity" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>I appreciated Dan Weinreb's comment on why MIT switched from Scheme to Python in teaching freshman programming:</p>

<blockquote>
  <p>[C]omputer engineering was [once] based on starting with clearly-defined things (primitives or small programs) and using them to build larger things that ended up being clearly-defined.  Composition of these fragments was the name of the game. However, nowadays, a real engineer is given a big software library, with a 300-page manual that’s full of errors.  He’s also given a robot, whose exact behavior is extremely hard to characterize (what happens when a wheel slips?). The engineer must learn to perform scientific experiments to find out how the software and hardware actually work, at least enough to accomplish the job at hand.</p>
</blockquote>

<p>It's very perceptive, this idea that a programmer's job is, in part, to work out how an existing system really behaves--through "scientific experiments." It flies in the face of the mathematical approach to programming, where we compose perfect units to accomplish our well-defined goal.</p>

<p>What's more, many programming tasks don't have a clearly-defined goal. You might instead want to explore a certain area by slapping things together. Or the goal may shift as you discover the problem terrain through coding.</p>

<p>None of this is incompatible with functional languages--but it might suggest an argument against purity: it might be very valuable for a language to have back doors, which allow you to do something improper, at least for a time, while you're poking around at the system or the domain.</p>

<p>But "back doors" are also an argument in favor of <em>orthogonal</em> language design. Being able to put functions anywhere, for example, allows you to code routines that are extremely unreadable--truly a vice. But when you're bodging around, it's very handy to be able to plop in a function where there once was a value, or the like. Functional languages win here, since they nearly always take orthogonality much further than imperative ones. (By this measure, though, Perl rates as a functional language!) Hopefully, after discovering what you needed to discover, you'll rewrite the code in a clear way, without very deep nesting of constructs, for example.</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Apologies</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/05/apologies.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1332" title="Apologies" />
    <id>tag:ezrakilty.net,2009:/research//9.1332</id>
    
    <published>2009-05-09T12:56:05Z</published>
    <updated>2009-05-09T21:33:16Z</updated>
    
    <summary>It&apos;s very disappointing when someone gets up to do a talk and starts with an apology about the quality of the slides, or even the work itself. In the audience, we expect to see the presenter&apos;s best. A talk is,...</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Constructive Criticism" />
            <category term="Working" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>It's very disappointing when someone gets up to do a talk and starts with an apology about the quality of the slides, or even the work itself. In the audience, we expect to see the presenter's best. A talk is, in many ways, a final outcome of the research work, not an intermediate state, and so it needs to be, simply, the best you can do.</p>

<p>You never tune in to your favorite TV show to see a disclaimer like this scroll across the screen:</p>

<blockquote>
  <p>Tonight's show is not going to be very funny and includes lots of shots of the outside of the house. That's because the writer was hung over all week and one of the actors turned up an hour late because the car wouldn't start—you know how that is!! We're really sorry and we promise that next week's show will be better.</p>
</blockquote>

<p>TV shows, like academic talks, are performances, and final products—rather than working products—of the work that went in to produce them.</p>

<p>"The best you can do" doesn't have to be the best thing ever. There's a range in every community, and that's part of life. If someone gives a mediocre presentation one day and a better one another day, we'd say he or she improved. But we never adjust our estimation of someone's work because of excuses.</p>

<p>When you know you've done suboptimal work, or you're not fully prepared, it's best just to press on and give the best performance you can. Maybe your slides are crap—either skip some, or clarify them in words, or redraw them on a whiteboard, or something. Don't just apologize and expect the audience to swallow something bitter-tasting. It may be important to characterize what you've done modestly, for example, being clear about what problems you have and haven't solved, but that's quite different from an apology. You might give a talk where you say, "We tried to solve these three problems but we haven't really solved any of them." And maybe this failure is even because of desultory work; it still might be worth giving a talk and passing on what you've learned. "Here's why these problems are hard," you could say.</p>

<p>Apologies are important, in general, to signal that you know you've made a mistake. In a relationship of trust, when you've messed up, you need to acknowledge it; otherwise your confidantes may think the bad behavior was typical of you, or that you would do it again in the same situation. Such a relationship might be an intimate one—say you forgot your lover's birthday—or it could be a working relationship—the writer on the sitcom, above, who showed up for work hung over, was trusted by his co-workers to give a strong effort on the show. That he turned in dodgy work, causing the show to come out crap, is a mistake worthy of an apology. The apology allows you to regain trust, and of course many mistakes are forgivable. An apology signals that you learned something from the mistake, and so others can risk trusting you again. </p>

<p>Contrariwise, TV viewers are not in a relationship of trust with the production team. They want a damn good show with no buts about it. Anything else will simply drive them elsewhere—likewise, the audiences of technical and academic talks.</p>
]]>
        

    </content>
</entry>
<entry>
    <title>Bon mot</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/05/bon_mot.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1330" title="Bon mot" />
    <id>tag:ezrakilty.net,2009:/research//9.1330</id>
    
    <published>2009-05-06T16:24:36Z</published>
    <updated>2009-05-06T16:25:31Z</updated>
    
    <summary>It is important, and difficult too, to be unsnobbish when passing on a sense of taste....</summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Constructive Criticism" />
            <category term="Research Writing" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>It is important, and difficult too, to be unsnobbish when passing on a sense of taste.</p>]]>
        
    </content>
</entry>
<entry>
    <title>Embarrassingly Oblique</title>
    <link rel="alternate" type="text/html" href="http://ezrakilty.net/research/2009/03/embarrassingly_oblique.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://ezrakilty.net/mt/mt-atom.cgi/weblog/blog_id=9/entry_id=1310" title="Embarrassingly Oblique" />
    <id>tag:ezrakilty.net,2009:/research//9.1310</id>
    
    <published>2009-03-17T20:12:57Z</published>
    <updated>2009-04-22T23:55:25Z</updated>
    
    <summary><![CDATA[I'm writing a thesis; parts of it are a big mess just now &amp; I spend a lot of time stuck and wondering what to do next. So today I reached for an Oblique Strategy and got this: Look closely...]]></summary>
    <author>
        <name>Ezra elias kilty Cooper</name>
        
    </author>
            <category term="Research Writing" />
    
    <content type="html" xml:lang="en" xml:base="http://ezrakilty.net/research/">
        <![CDATA[<p>I'm writing a thesis; parts of it are a big mess just now &amp; I spend a lot of time stuck and wondering what to do next.</p>

<p>So today I reached for an <a href="http://music.hyperreal.org/artists/brian_eno/oblique/oblique.html">Oblique Strategy</a> and got this:</p>

<blockquote>
  <p><em>Look closely at the most embarrassing details &amp; amplify them.</em></p>
</blockquote>

<p>So that's what I'm doing tonight: making it messier.</p>
]]>
        

    </content>
</entry>

</feed> 

