<?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>Alarming Development</title>
	<atom:link href="http://alarmingdevelopment.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://alarmingdevelopment.org</link>
	<description>Dispatches from the Programmer Liberation Front</description>
	<lastBuildDate>Tue, 20 Jul 2010 23:17:32 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Emerging Languages Camp</title>
		<link>http://alarmingdevelopment.org/?p=446</link>
		<comments>http://alarmingdevelopment.org/?p=446#comments</comments>
		<pubDate>Tue, 20 Jul 2010 22:21:23 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=446</guid>
		<description><![CDATA[Slides are at [PPT][PDF]. I will probably only have time to present a subset of these slides.
]]></description>
			<content:encoded><![CDATA[<p>Slides are at <a href="http://coherence-lang.org/EmergingLangs.ppt">[PPT]</a><a href="http://coherence-lang.org/EmergingLangs.pdf">[PDF]</a>. I will probably only have time to present a subset of these slides.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=446</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Vulcans vs. Apes</title>
		<link>http://alarmingdevelopment.org/?p=440</link>
		<comments>http://alarmingdevelopment.org/?p=440#comments</comments>
		<pubDate>Wed, 02 Jun 2010 19:47:25 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=440</guid>
		<description><![CDATA[The biggest problem with programming is that we don&#8217;t agree on what the problem is. The comments on the previous posts reveal fundamentally incompatible views. I am equally shocked by the opinions held by some distinguished academics and leading practitioners. Our views of programming are so at odds that it&#8217;s almost as if we were [...]]]></description>
			<content:encoded><![CDATA[<p>The biggest problem with programming is that we don&#8217;t agree on what the problem is. The comments on the previous posts reveal fundamentally incompatible views. I am equally shocked by the opinions held by some distinguished academics and leading practitioners. Our views of programming are so at odds that it&#8217;s almost as if we were from different planets. Wait &#8211; that&#8217;s it! It all makes sense now&#8230; <span id="more-440"></span></p>
<p>I suspect that many programmers and computer scientists are Vulcans. You see, on Vulcan, programming is a form of applied mathematics. All software is precisely specified using logic and mathematics. What&#8217;s more, these formal specifications rarely change. So programming is like proving a theorem, and Vulcan programming languages are like mathematics. Vulcans prize elegant programs, and because the specs don&#8217;t change they can refine and polish their programs to perfection. Adding a level of abstraction is always worthwhile if it shortens the program. Vulcans don&#8217;t use debuggers, because errors are a sign of a flaw in reasoning, and it is better to puzzle out the root mistake than to make ad hoc fixes. Dijkstra must have been a high priest or something back on Vulcan.</p>
<p>Vulcans are renowned throughout the galaxy for their compilers and algorithm libraries. You would be crazy to use a non-Vulcan regular expression engine. But they are equally as famous for their terrible user interfaces, where they lack objective metrics to optimize. And don&#8217;t ask them to build something without first having a precise and complete specification, unless you&#8217;re into that nerve pinch thing. Luckily for the galactic software industry, there is an even larger community of programmers who originated on the Planet of the Apes.</p>
<p>The Apes aren&#8217;t into mathematics and logic. Instead their passion is for socio-economic-grooming systems of unrivaled intricacy. Galactic anthropologists are baffled by the incredible complexity of Ape society. There are no written rules, and the rules are continually evolving, yet Apes can simultaneously fulfill a dozen different roles without breaking their rules. On top of this, the Apes have integrated software throughout their society. All sorts of automated systems play central roles: communication, entertainment, accounting, manufacturing, distribution, you name it. All these systems exist primarily to interact with Apes in their informal shifting social games. So there are no formal specifications, nor can there be any. As a result the Apes have developed a style of programming inconceivable to Vulcans.  Their software is constantly being redesigned, so they make it as lightweight and clear-cut as possible. The Apes can&#8217;t prove their software is correct, and they seem puzzled by the very idea, as if they were being asked to prove correct a chair. However they design amazing user interfaces that harmoniously blend cognitive, artistic, and emotional significance. Much like the Apes themselves do. Their systems are imperfect and provisional, but they are forever fixing and improving and transforming them at a furious pace. For these qualities, Ape programmers are highly prized throughout the galaxy. If the purpose of your system is to interact with sentients in a social or economic context, you get an Ape to program it. Using Vulcan tools.</p>
<p>The Vulcans and the Apes despise each other. The Vulcans believe the Apes are too stupid to think abstractly, which is the essence of programming. The Apes believe the Vulcans are crippled at communication, which is is the essence of programming. My doom is to be torn between these irreconcilable opposites. For I am Vulcan, and was raised Vulcan, but I married an Ape, and made her planet my home. I will not know peace until I find a way to combine the best of both worlds.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=440</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>Mea Culpa</title>
		<link>http://alarmingdevelopment.org/?p=422</link>
		<comments>http://alarmingdevelopment.org/?p=422#comments</comments>
		<pubDate>Thu, 27 May 2010 21:04:51 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=422</guid>
		<description><![CDATA[Reflecting upon my previous post, I am wondering why LISP triumphalists like Paul Graham annoy me so much? Perhaps it is because I used to be one myself, in spirit if not in syntax. And also because I now see them as a major symptom of what ails programming.
It is an easy trap to fall [...]]]></description>
			<content:encoded><![CDATA[<p>Reflecting upon my <a href="http://alarmingdevelopment.org/?p=392">previous post</a>, I am wondering why LISP triumphalists like Paul Graham annoy me so much? Perhaps it is because I used to be one myself, in spirit if not in syntax. And also because I now see them as a major symptom of what ails programming.<span id="more-422"></span></p>
<p>It is an easy trap to fall into. Programming requires a certain kind of analytical intelligence. Being more intelligent in that way increases your programming ability exponentially. It is emotionally satisfying to think of yourself as a different species from the average programmer. Programming becomes a demonstration of your superior intellect. Surely such powers shouldn&#8217;t be wasted on mundane chores, but instead applied to timeless works of brilliant inspiration, to be admired by the common programmer only through protective eyewear. What a load of self-indulgent adolescent crap. In programming as in the rest of life, <em>attitude </em>trumps intelligence. I had to learn that the hard way.</p>
<p>My road to perdition was the seemingly noble cause of doing computer science research in the real world. It is in the crucible of practical problems that great new ideas can form. Unfortunately the result was a strange brew of triumph and disaster. I built some systems that were uniquely powerful and far ahead of their time. Yet they were also wildly idiosyncratic, and deeply flawed in some practical aspects. I inflicted a legacy of pain upon the programmers who had to work with my misbegotten creations for decades afterwards. I too was afflicted. I spent those decades debugging the Frankenstein. In the OS crash debugger. In hex. Because wasn&#8217;t it oh so clever and efficient to build a radically new kind of database with extreme reliability requirements as a highly multithreaded kernel extension to the OS?</p>
<p>What may have saved my soul is that I did not sell the company and walk away from my mess. I stuck with it for 20 years, and eventually cleaned up the mess as best I could with a massive migration to a new framework. That experience taught me a lot about what really matters in programming. It is not about solving puzzles and being the brightest kid in the class. It is about realizing that the complexity of software dwarfs even the most brilliant human; that cleverness cannot win. The only weapons we have are simplicity and convention. Tattoo that on your forehead in reverse so that you always see it reflected in the screen. What is truly decisive on the battlefield are attitudes: hard work, responsibility, and paying attention to reality instead of the voiceover in your head.</p>
<p>Programming is an embarrassment compared to other fields of engineering and design. Our mainstream culture is one of adolescent self-indulgence. It is like something from Gulliver&#8217;s Travels, with the curly-bracketeers vs. the indentationites vs. the parenthesesophiles. The only thing that everyone seems to agree upon is how stupid all the other programmers are. Try googling &#8220;stupid programmers&#8221;. We have met the enemy, and he is us.</p>
<p>Programming will not grow up until our culture grows up. We can only patiently and persistently do our part to elevate the level of discourse, and share what wisdom we have gained. </p>
<p>P.S. I deleted a bunch of the cursing, but I think I&#8217;ll let the rest stay as a testament to my point. </p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=422</wfw:commentRss>
		<slash:comments>125</slash:comments>
		</item>
		<item>
		<title>The Myth of the Super Programming Language</title>
		<link>http://alarmingdevelopment.org/?p=392</link>
		<comments>http://alarmingdevelopment.org/?p=392#comments</comments>
		<pubDate>Wed, 12 May 2010 02:15:30 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[AgitProp]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=392</guid>
		<description><![CDATA[I just read yet another recycling of the old myth of how some esoteric programming language (often Lisp or Haskell) is the secret weapon that allowed a team to outperform expectations by an order of magnitude. Paul Graham has strongly encouraged this myth (see Beating the Averages), but it has been circulating for ages. It [...]]]></description>
			<content:encoded><![CDATA[<p>I just read yet another <a href="http://googlecode.blogspot.com/2010/05/better-performance-in-app-engine-with.html">recycling </a>of the old myth of how some esoteric programming language (often Lisp or Haskell) is the secret weapon that allowed a team to outperform expectations by an order of magnitude. Paul Graham has strongly encouraged this myth (see <a href="http://www.paulgraham.com/avg.html">Beating the Averages</a>), but it has been circulating for ages. It is totally false. Worse, it reinforces the intellectual elitism that is the bane of our field.<span id="more-392"></span></p>
<p>The objective evidence we have is that the differences in programming performance are almost entirely due to the individual cognitive differences of programmers. It doesn&#8217;t matter what language a great programmer uses &#8211; they will still be an order of magnitude more productive than an average programmer, also regardless of what that programmer uses.</p>
<p>The anecdotal benefits of esoteric languages are a <strong>selection effect</strong>. Here is a common scenario. Lots of really smart programmers think they are too good to waste their talents doing mere application programming. But they also love esoteric languages that show off how smart they are. So you can get them to do application programming by letting them use their beloved smarty-pants languages. Presto, amazing results. But the ubermensch aren&#8217;t about to stoop to maintenance programming. Once the fun development is done, they are gone. When you bring in professional programmers to take care of things, they are dumbfounded by the towering monument to mental masturbation. The system gets thrown out and rewritten in a normal programming language using normal techniques that normal people understand. The super programmers blame it on the stupidity of the new hires, further confirming their sense of superiority.</p>
<p>There are no super programming languages, only super programmers. And they tend to be super jerks. I should know &#8211; I used to be one. What would really make a programming language be super powered is the ability to be used by normal people.</p>
<p>P.S. I seem to have hit a nerve with this! Methinks they doth protest too much. I responded to some points in this <a href="http://alarmingdevelopment.org/?p=392&#038;cpage=1#comment-58354">comment</a>. The final paragraph bears repeating:</p>
<p>These kinds of claims are just thinly veiled bragging about how smart Lisp/Haskell programmers are. I actually agree that they are smarter. But ascribing it to the language is a form of tribalism: our language (country/race/sports team) is better than yours, so we are better than you. Language tribalism is a pernicious affliction on our profession and our art. Grow up, everyone.</p>
<p>P.P.S. I guess I was a little intemperate, and got it back ten-fold. Publicly calling out cherished myths and immature behavior is not going to win me many converts. I also probably overstated the science, which is old and ambiguous. Still, my experience is that when people talk about how great their language is, they are really talking about how great it makes them <em>feel</em>. That&#8217;s fine, programmers should use the language that makes them happy, and being happy could very well make them more productive. But programmers who dislike the language will probably be equally disadvantaged. And in any case, the effects are small compared to the differences between programmers. But it does raise some interesting questions: what are the factors that make languages more amenable to programmers? Can we identify specific cognitive styles or personality types and map them to specific language design decisions?</p>
<p>I am re-opening comments, so long as the discussion remains reasonable.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=392</wfw:commentRss>
		<slash:comments>97</slash:comments>
		</item>
		<item>
		<title>The Greater Apple Co-Prosperity Sphere</title>
		<link>http://alarmingdevelopment.org/?p=380</link>
		<comments>http://alarmingdevelopment.org/?p=380#comments</comments>
		<pubDate>Tue, 11 May 2010 01:13:37 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=380</guid>
		<description><![CDATA[Much has been written lately about Apple restricting iPhone and iPad apps to only use Apple programming languages and libraries. This is indeed an alarming development for the future of programming. 
Opinion is split as to whether this decision shows Steve Jobs to be a visionary hero seeking only to improve the quality of the [...]]]></description>
			<content:encoded><![CDATA[<p>Much has been written lately about Apple restricting iPhone and iPad apps to only use Apple programming languages and libraries. This is indeed an alarming development for the future of programming. </p>
<p>Opinion is split as to whether this decision shows Steve Jobs to be a visionary hero seeking only to improve the quality of the user experience, or that he is a megalomaniac Fascist. But I think people are missing what this is really about. It&#8217;s about the money. The <strong>Ad</strong> money.</p>
<p>App Ads are potentially a Google-scale cash flow, and Jobs wants it. He wants to sell ads and inject them into apps on the iPhone/iPad/iDesk, just like Google injects ads into web pages. He can&#8217;t do that unless all the apps are using his libraries. If he lets Flash apps in, then Adobe would be able to sell the ads instead. That is why section 3.3.9 of the new developer agreement says &#8220;the use of third party software in Your Application to collect and send Device Data to a third party for processing or analysis is expressly prohibited&#8221;. Like, for example, Ad networks.</p>
<p>Help me, Google; you&#8217;re my only hope.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=380</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Coherent Binding</title>
		<link>http://alarmingdevelopment.org/?p=376</link>
		<comments>http://alarmingdevelopment.org/?p=376#comments</comments>
		<pubDate>Mon, 10 May 2010 01:36:50 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=376</guid>
		<description><![CDATA[Abstract for my talk at Emerging Languages Camp:
We cannot evolve beyond imperative programming until we solve the problem of coordinating changes to state. Functional programming and transactions segregate the problem, but don&#8217;t solve it. I am exploring a new kind of language, inspired by modern &#8220;Model-View-Binding&#8221; application frameworks. The language uses bidirectional data binding as [...]]]></description>
			<content:encoded><![CDATA[<p>Abstract for my talk at Emerging Languages Camp:</p>
<p>We cannot evolve beyond imperative programming until we solve the problem of coordinating changes to state. Functional programming and transactions segregate the problem, but don&#8217;t solve it. I am exploring a new kind of language, inspired by modern &#8220;Model-View-Binding&#8221; application frameworks. The language uses bidirectional data binding as its fundamental mechanism, generalized into arbitrary change-triggered actions. Bindings propagate changes <em>coherently</em>: execution order is determined automatically based on the interdependencies between bindings. The programmer does not have to worry about execution order. A side benefit is the automatic discovery of parallelism. Unfortunately coherence doesn&#8217;t work in a conventional heap of objects with arbitrary dynamic pointers to each other. I propose a data model in which objects and collections of objects are nested to form trees. Pointers are replaced with <em>cursors </em>constrained within a collection. This richer structure permits coherent and deterministic execution of bindings. Coherent binding offers the simplicity of declarative programming while maintaining complex dynamic state.</p>
<p>Comments? The idea is to use data binding as a metaphor that many programmers are already familiar with. Can I assume people will get what &#8220;Model-View-Binding&#8221; is, even though I just invented the term?</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=376</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Haskell damage</title>
		<link>http://alarmingdevelopment.org/?p=366</link>
		<comments>http://alarmingdevelopment.org/?p=366#comments</comments>
		<pubDate>Mon, 26 Apr 2010 15:54:08 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=366</guid>
		<description><![CDATA[Per Vognsen suggests a Haskell version of the damage function from my Schematic Tables talk:

data Attack = Magic &#124; Melee
hit surprise defense attack = damage
  where effectiveness = power * (if surprise then 3 else 2)
      (power, damage) = case attack of
        [...]]]></description>
			<content:encoded><![CDATA[<p>Per Vognsen suggests a Haskell version of the damage function from my Schematic Tables talk:</p>
<pre>
data Attack = Magic | Melee
hit surprise defense attack = damage
  where effectiveness = power * (if surprise then 3 else 2)
      (power, damage) = case attack of
                        Magic -> (5, max 0 (effectiveness - defense))
                        Melee -> (4, 2 * effectiveness / defense)
</pre>
<p>This passes pairs of values (power, damage) through conditionals. That allows the conditionals to multiplex more than one value, rather than being repeated. I suspect I could stymie that approach with more complex data flows, but I am happy to acknowledge that Haskell does OK on this example. Thanks, Per.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=366</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Emerging Languages Camp</title>
		<link>http://alarmingdevelopment.org/?p=364</link>
		<comments>http://alarmingdevelopment.org/?p=364#comments</comments>
		<pubDate>Wed, 07 Apr 2010 02:25:47 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=364</guid>
		<description><![CDATA[I have been invited to the Emerging Languages Camp. Sounds like fun. Let&#8217;s meet up.
]]></description>
			<content:encoded><![CDATA[<p>I have been invited to the <a href="http://emerginglangs.com/">Emerging Languages Camp</a>. Sounds like fun. Let&#8217;s meet up.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=364</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Bubbles</title>
		<link>http://alarmingdevelopment.org/?p=361</link>
		<comments>http://alarmingdevelopment.org/?p=361#comments</comments>
		<pubDate>Fri, 12 Mar 2010 15:43:49 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=361</guid>
		<description><![CDATA[Check out the cool demo of Code Bubbles. This is some very nice, fresh thinking. As Gilad Bracha says, standard IDE&#8217;s look like the console of a B-52. I look forward to reading the details, which they are embargoing until their papers are presented. I wonder what UI they used? I see zooming, transparent overlays, [...]]]></description>
			<content:encoded><![CDATA[<p>Check out the cool<a href="http://www.cs.brown.edu/people/acb/codebubbles_site.htm"> demo of Code Bubbles</a>. This is some very nice, fresh thinking. As Gilad Bracha says, standard IDE&#8217;s look like the console of a B-52. I look forward to reading the details, which they are embargoing until their papers are presented. I wonder what UI they used? I see zooming, transparent overlays, and animation. I am guessing Silverlight.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=361</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Typed Subtext</title>
		<link>http://alarmingdevelopment.org/?p=358</link>
		<comments>http://alarmingdevelopment.org/?p=358#comments</comments>
		<pubDate>Mon, 01 Mar 2010 20:17:59 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=358</guid>
		<description><![CDATA[The last several months I have been trying to make coherence deterministic, using what PL theoreticians call a type and effect system. The effect system is telling me to return to the tree data model of Subtext (which I had set aside as too complex), but with static types. Therefore I am redefining Subtext as [...]]]></description>
			<content:encoded><![CDATA[<p>The last several months I have been trying to make coherence deterministic, using what PL theoreticians call a type and effect system. The effect system is telling me to return to the tree data model of Subtext (which I had set aside as too complex), but with static types. Therefore I am redefining Subtext as a statically typed language, with classes and inheritance and so on. I have sketched this out, and it seems to magically resolve many of the complexities that were stumping me before.<span id="more-358"></span></p>
<p>Why didn&#8217;t I see this before? Maybe I drank too much of the Self kool-aid. Subtext has always been a prototypical language like Self. That is an elegant idea, but static classes really are a handy way to impose structure on the chaos. That structure is needed to guarantee deterministic parallelism, and it also comes in handy in a lot of other places where you want to impose constraints.</p>
<p>My next step is a precise description of typed Subtext, focusing on the data model. I may start off with a normal imperative semantics and add coherence in the subsequent step. I am going to use a textual syntax, since that is what people need and expect. Subtextuality manifests in that the syntax will require an IDE to be easily editable, since it is actually just a pretty-printing of an underlying code meta-model.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=358</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
