<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Enfranchised Mind » Brian Hurt</title>
	
	<link>http://enfranchisedmind.com/blog</link>
	<description>programming, politics, &amp; other religious issues</description>
	<lastBuildDate>Sun, 22 Aug 2010 23:18:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
<!-- podcast_generator="Blubrry PowerPress/1.0.9" mode="advanced" entry="simple" -->
	<itunes:summary>programming, politics, &amp; other religious issues</itunes:summary>
	<itunes:author>Enfranchised Mind</itunes:author>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://enfranchisedmind.com/blog/wp-content/plugins/powerpress/itunes_default.jpg" />
	<itunes:subtitle>programming, politics, &amp; other religious issues</itunes:subtitle>
	<image>
		<title>Enfranchised Mind » Brian Hurt</title>
		<url>http://enfranchisedmind.com/blog/wp-content/plugins/powerpress/rss_default.jpg</url>
		<link>http://enfranchisedmind.com/blog</link>
	</image>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/em-brian" /><feedburner:info uri="em-brian" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>em-brian</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>So soon we forget</title>
		<link>http://feedproxy.google.com/~r/em-brian/~3/-AL-rMk3KVI/</link>
		<comments>http://enfranchisedmind.com/blog/posts/so-soon-we-forget/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 21:44:23 +0000</pubDate>
		<dc:creator>Brian Hurt</dc:creator>
				<category><![CDATA[Classic]]></category>
		<category><![CDATA[Politics]]></category>

		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=2547</guid>
		<description><![CDATA[The first thing to remember is that the main difference between what we did to Hiroshima and Nagasaki and what we did to Tokyo, or what Japan did to China (see "The Rape of Nanking") or the Philippines, or what we did to Dresden, or what Germany did to Coventry or Leningrad or Moscow, or what Russia did to Berlin, etc., etc. was how <EM>cheap</EM> it was.]]></description>
			<content:encoded><![CDATA[<p>I need to respond to <A HREF="http://scienceblogs.com/pharyngula/2010/08/6_august_1945.php">PZ Meyer&#8217;s blog post on this, the anniversary of the Hiroshima bombing</A>.</p>
<p>The first thing to remember is that the main difference between what we did to Hiroshima and Nagasaki and what we did to Tokyo, or what Japan did to China (see &#8220;The Rape of Nanking&#8221;) or the Philippines, or what we did to Dresden, or what Germany did to Coventry or Leningrad or Moscow, or what Russia did to Berlin, etc., etc. was how <EM>cheap</EM> it was.  One plane.  One bomb.  Prior to that time it tooks thousands of men to utterly destroy a city and kill all or most of inhabitants.  Dresden, for example, took 1,300 heavy bombers, many of whom didn&#8217;t make it back.  But despite the cost, Tokoyo and Dresden and Nanking and Coventry and Leningrad and all the rest happened anyways.  It was a time of horrors.</p>
<p>And maybe Japan would have seen reason, had we nuked a mountaintop instead, say, or an atoll (as PZ Meyer suggested).  Or, perhaps <EM>not</EM>.   We can look back now, with out comfortable seat here in the 21st century, and say with perfect hindsight that Japan should have immediately realized the consequences and implications of nuclear weapons.  My experience is that people don&#8217;t learn that fast.  A miscalculation on the Japanese response to a demonstration means either we end up vaporizing more cities or we invade Japan- which would millions of American dead, who knows how many Japanese dead.</p>
<p>Yes, there is blood on America&#8217;s hands.  Hiroshima and Nagasaki were great crimes.  But this is the first thing we forget- <EM>that is what war is</EM>.  A great crime.  Innocents get killed, generally in even greater numbers than the guilty are killed.  Blood is spilled.  It is not noble.  It is not heroic.  The only times it is remotely justifiable is when the greater crime is to not fight the war.  <EM>At it&#8217;s best</EM>, at it&#8217;s most righteous, most clean cut, most honorable, it is the decision whether or not to kill hundreds of thousands of people to avoid the possibility of having to kill millions.  There is no good here, only varying degrees of bad and worse.</p>
<p>Part of the problem is scale- one person dead is a tragedy, a million dead is a statistic.  So narrow the focus down, from the statistic down to the personal again.  This is what it means to go to war: There is an eight year old girl.  Picture her.  Big eyes, dark hair, she loves her doll, her comfy blanket, and sweets.  And oh yeah, Mommy and Daddy.  She thinks boys are icky, and isn&#8217;t sure about school (she&#8217;s somewhat shy).  War means she&#8217;s going to have her guts blown blown out.  She&#8217;s going to die in excruciating agony, her dying gurgle chocked off by blood.  And her father is going to get to hold the bloody hamburger that was his daughter, in the burnt out ruins that were their home.</p>
<p>That is war.  Fix that image in your mind.  That girl, she lived in Hiroshima.  And Tokyo, and Dresden, and London, and Berlin, and Leningrad, and Moscow.  And Korea and Viet Nam and Afghanistan and Iraq.  In every war humans have ever fought, back to the dawn of time, little innocent eight year old girls died.  And boys, and women, and old people, and innocents of every stripe.  This is the cost of war, and it&#8217;s true nature.</p>
<p>So, on this date, the anniversary of an act of war only significant because of a technological advance, I hear the war drums starting again.  When you tell me &#8220;we must go war&#8221;, this is what you are advocating- you are saying &#8220;we must kill that innocent eight year old girl.&#8221;  This time it is Iran, last time it was Iraq.  The only thing changing is which eight year old is killed.  I must ask- is the goal we seek worth the cost?  Is there no other way to achieve that goal other than ending an eight year old girl&#8217;s life in a paroxysm of blood and pain?  Sometimes the answer is yes (I think Hiroshima was one of those times).  But most of the time, all most all of the time, I find the answer is a definitive no.</p>
<p>&#8220;Never again&#8221;- I like the sound of that.  But &#8220;never again&#8221; will only become a possibility once we start to remember the true nature of war.  By singling out Hiroshima as something exceptional and noteworthy, as opposed to normal for war, he is (unintentionally, I&#8217;m sure) encouraging the very amnesia which allows for the crime to be replicated.  All we have to do, according to this logic, is not nuke Tehran, and going to war isn&#8217;t that big of a crime.  No, Mr. Meyers, it is.  That eight year old girl, and her father holding her bloody remains, do not care if the bomb was nuclear or conventional.  <EM>The technology does not matter.</EM></p>
<p>So, by all means let us take this day, August 6th, to remember the true cost of war.  And also Feburary 13th (Dresden), and December 13th (Nanking), and&#8230;</p>
<hr /><h2>Comments</h2><ul><li><a href="http://enfranchisedmind.com/blog/posts/so-soon-we-forget/#comment-37796">August 8, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: The basis of integrative power (<i>nee</i> principled nonviolence) is bringing the truth of the situation&mdash;most especially, the truth of violence&mdash;to the fore.  Astoundingly, confronting people with the truth of the situation works to stop violence.  This is why you have groups like <a href="http://nonviolentpeaceforce.org/" rel="nofollow">Nonviolent Peaceforce</a> who do third-party nonviolent intervention: it works quite well, and it is more lasting and cheaper than the violent alternatives.

Part of the proof about how well integrative power works is the secrecy which war requires.  War, at least in a democracy, requires the civilians to not be able to see the consequences.  We can't see broken soldiers in our streets.  We can't see coffins coming home.  We can't see military plans or military actions.  We can't see the people we are attacking.  We can't even talk to them.  Because if we did, the illusion of the abstract war would collapse, and it would be all over.

The question that bothers me is why, since we have seen this proven out integrative power in conflicts big and small, we are still left in the dichotomy of doing nothing or going to violent war.  Why are the only choices presented to us lose and lose?</li></ul><hr />
This post was by <a href="http://enfranchisedmind.com/blog/posts/author/bhurt-aw/">Brian Hurt</a>, written on August 6, 2010.<br />
Comment on this post: <a href="http://enfranchisedmind.com/blog/posts/so-soon-we-forget/#respond">http://enfranchisedmind.com/blog/posts/so-soon-we-forget/#respond</a><br />
Public Permalink: <a href="http://enfranchisedmind.com/blog/posts/so-soon-we-forget/">http://enfranchisedmind.com/blog/posts/so-soon-we-forget/</a>
<hr /><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png" /></a><br />This article was a post on <a href="http://enfranchisedmind.com/blog">the EnfranchisedMind blog</a>.  <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/InteractiveResource" property="dc:title" rel="dc:type">EnfranchisedMind Blog</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://enfranchisedmind.com/blog/" property="cc:attributionName" rel="cc:attributionURL">Robert Fischer, Brian Hurt, and Other Authors</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons Attribution-Share Alike 3.0 United States License</a>.<p style="display:none;">(Digital Fingerprint: bcecb67d74ab248f06f068724220e340 (74.125.156.81) )</p></small><img src="http://feeds.feedburner.com/~r/em-brian/~4/-AL-rMk3KVI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://enfranchisedmind.com/blog/posts/so-soon-we-forget/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://enfranchisedmind.com/blog/posts/so-soon-we-forget/</feedburner:origLink></item>
		<item>
		<title>Steve Yegge is an idiot</title>
		<link>http://feedproxy.google.com/~r/em-brian/~3/Ec29WUjw1uo/</link>
		<comments>http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 23:42:41 +0000</pubDate>
		<dc:creator>Brian Hurt</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming Language Punditry]]></category>

		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=2538</guid>
		<description><![CDATA[And to think, I used to have respect for the man.  Then he goes and posts <A HREF="http://steve-yegge.blogspot.com/2010/07/wikileaks-to-leak-5000-open-source-java.html">this pile of fetid dingo kidneys</A>. I'm going to explain in detail why ditching private (and, by extension, public) is <EM>bad</EM>.  Obviously this needs to be spelled out, because a lot of programmers- including Steve Yegge - don't get it.]]></description>
			<content:encoded><![CDATA[<p>And to think, I used to have respect for the man.  Then he goes and posts <A HREF="http://steve-yegge.blogspot.com/2010/07/wikileaks-to-leak-5000-open-source-java.html">this pile of fetid dingo kidneys</A>.</p>
<p>I&#8217;m going to explain in detail why ditching private (and, by extension, public) is <EM>bad</EM>.  Obviously this needs to be spelled out, because a lot of programmers- including Steve Yegge &#8211; don&#8217;t get it.</p>
<p><span id="more-2538"></span></p>
<p>Consider a software project that is large enough that a) more than one person is working on it, b) code maintenance is ongoing, and c) large enough that no one has the whole program in their head all at once.  Person A writes hunk of code (function/module/class/whatever) X.  Then person B comes along and writes hunk of code Y that calls hunk of code X.  Then person A comes back around and changes hunk of code X, breaking hunk of code Y in the process.  Who&#8217;s fault is it?  Person B can claim that since their code worked with the older version of X, it&#8217;s person A&#8217;s fault.  But person A can claim that module Y should never have depended upon that particular behavior in the first place.</p>
<p>Every time you have one piece of code calling another, there is a contract between the two pieces of code.  The contract may not be automatically enforced, may not be spelled out, may not even be articulated, may just arise out of convention, but it&#8217;s there all right.  The contract is what determines, in the above example, who fixes their code- person A, or person B. Unless that is resolved by invective duels at thirty feet.  </p>
<p>Renegotiating the contract is possible, but is often expensive if the called code wants to change it&#8217;s behavior or API.  This is because all the code that might call the changing code has to be found, inspected, and probably fixed to support the new behavior or API.</p>
<p>This is where the whole private thing comes in.  It&#8217;s explicitly spelling out what is, or is not, in the contract.  A function marked private in Java means that there is no guarantee that the function will have the current behaviors, or current arguments, or even still exist, in future changes to the code.  If you call the function from your code, your code will break.  It&#8217;s a question of when, not if.  And when it does break, you will get no sympathy from me.</p>
<p>Note that it is possible to have contracts without (computational) enforcement.  It is possible to write working, maintainable code in languages without a compiler-enforced private.  But this just means that the contract is expressed in other ways.  </p>
<p>In fact, most contracts are not expressible as automatically enforced in most languages, even languages with advanced and powerful contract checkers (aka type systems) like Ocaml and Haskell.  There is a subtle difference between accidents of implementations and guaranteed behaviors.  Consider, for example, a function that goes out to a database and fetches a list of strings.  Now, due to the nature of the data in the database, and how the database decides to execute the query, current the strings are being returned in sorted order- but is this an actual behavior guaranteed to continue to be true, or is it just an accident of this implementation, and in a different circumstance (different data, different query plan), the list of strings might be returned in a different order?  I could easily see the answer being yes (how hard is it to drop an order by onto the query?) and equally see the answer being no (the extra sort phase has a significant cost and serves no purpose for most uses of the data, and how hard is it to throw a sort call around the result of the function in those cases that need it to be sorted?).</p>
<p>As a side note, this is the reason I disbelieve that you don&#8217;t need comments.  Even unit testing doesn&#8217;t help here.  All unit tests tell you is that suddenly the list of strings is coming back unsorted, and thus someone&#8217;s code is broken.  It doesn&#8217;t tell you whose.  The only real solution here is for the developers involved to get together and work out which it will be, and then <EM>write the decision down</EM>.  If you don&#8217;t write it down, it didn&#8217;t happen (&#8220;That&#8217;s not what I remember&#8230;&#8221;).  Oh, and if you&#8217;re unwilling to up arrow a couple of lines and fix the comment while you&#8217;re changing the code, what other dependencies are you not maintaining?  Maybe telling other programmers that you broke their code?  Or checking and fixing their code for them?  But that would require editing a <EM>completely different file</EM>, and we&#8217;ve already established that you&#8217;re unwilling to fix something half a dozen lines up in the file you&#8217;re already editing.</p>
<p>So not all contracts can be expressed and checked automatically.  But why on earth would you not use the features of the language you do have to check the contracts you can check?  The answer, I think, is quite clear- Steve Yegge doesn&#8217;t believe in contracts.  Or at least doesn&#8217;t want them to apply to <EM>him</EM>.  </p>
<p>There is an attraction to coding without contracts, to just hauling off and writing or changing code, without caring about the consequences.  Short term, it greatly increases (perceived) productivity.    Long term, however, that productivity drops off enormously.  So, I&#8217;m writing code with Steve Yegge.  And, to eliminate some code duplication and make some other code easier to read, I create a function.  This function really isn&#8217;t for public consumption, just something internal.  But now that I&#8217;ve created it, it&#8217;s part of the API.  If I change how it behaves or even want to remove it later, I have to carefully check all of Yegge&#8217;s code.  Because, dammit, if I didn&#8217;t want him calling the function I shouldn&#8217;t have written it.</p>
<p>We have names for people who don&#8217;t care about consequences, or don&#8217;t think long (or even medium) term.  We call them &#8220;immature&#8221;, even &#8220;childish&#8221;.  We also have names for code bases that are hard to change because of uncontrolled dependencies between modules- we call them &#8220;brittle&#8221;, or even &#8220;unmaintainable&#8221;.  The end result of an utter lack of contracts is <A HREF="http://www.laputan.org/mud/">the big ball of mud</A>.</p>
<p>There are projects where this isn&#8217;t a problem.  Small, short projects with limited life spans, and few developers (or just one).  But then there projects, lots of projects, which aren&#8217;t this way.</p>
<p>I&#8217;d also like to take this moment to mention that there is nothing in this whole discussion special about open source.  You are free to fork any open source project you want, and remove all the private specifications you want.  But the original project maintainers don&#8217;t have to accept your changes back into their version.  And they probably wont, and maybe there&#8217;s a damned good reason for this.  If anything, this problem is more pronounced in the commercial, non-open world.  An open source project is always free to decline an offering of code, and often does.  A commercial project finds it much harder to reject code contributions from </p>
<p>There is an old programmers joke, which goes like this: programming is like sex.  One mistake, and you&#8217;re supporting it for life.  Steve Yegge doesn&#8217;t believe in (software) condoms- he doesn&#8217;t use them, and thinks you shouldn&#8217;t either.  At which point, the only conclusion I can draw is <EM>don&#8217;t use Yegge&#8217;s code, and don&#8217;t let him use your code</EM>.</p>
<hr /><h2>Comments</h2><ul><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37731">July 28, 2010</a>, David Clark wrote: So if you are writing Java code, are you also going to unilaterally disallow reflection (since it can access private stuff)?  If not you are still going to have to go through the code to look for reflection based access of your code.  You are also going to have to disallow groovy from ever touching your Java code because that can also access private stuff.  There's probably at least 6 other ways of doing this.

Private is nothing more than an comment which says, "Don't use me unless you are going to take full responsibility for what happens now and in the future."  And that's Steve's point, we're adults and we can figure that out for ourselves based on our own particular use cases and ability levels.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37732">July 28, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Note that removing the @Deprecated tags, which Yegge makes fun of, is super crappy.  If you want to use a deprecated API, then you should be happy for @Deprecated---those @Deprecated tags exist so that the library STILL WORKS FOR YOUR CODE.  If it weren't for deprecated tags, the API would be broke sooner and you wouldn't have been able to upgrade to the newer version of the library without going through all your code and fixing the ways the calls work.  How about a little gratitude for the work saved by API stability?

As for "private" methods: if you want to call that open source "private" method so badly, go copy-paste it into your own code somewhere.  It's open source, so nothing is stopping you.  Yes, copy-paste has a bad rep, but guess what: when the library goes and changes its implementation or API, you'll still have a version of the call that works.  And they <em>will</em> be changing their implementation or API, because <em>that is why it is private in the first place</em>.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37733">July 28, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Are you saying that "private" is bad, and everything should just be "public"?  If so, how would you figure out what's subject to change and what isn't without some kind of marker?</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37735">July 28, 2010</a>, <a href='http://lovehateubuntu.blogspot.com/' rel='external nofollow' class='openid_link url'>Rob</a> wrote: I'm making a guess here, but I think that Yegge's post was meant to be a joke.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37736">July 29, 2010</a>, <a href='http://billmill.org' rel='external nofollow' class='url'>Bill Mill</a> wrote: &gt; And to think, I used to have respect for the man. Then he goes and posts this pile of fetid dingo kidneys.

1. When you've respected a writer for a while, then you read something he writes that seems <em>totally</em> wrong, perhaps you should wonder if you missed the point.

&gt; Consider a software project that is large enough that {blah blah blah reason for why "private" exists}

2. Do you truly think that Yegge couldn't write out the case for private in this manner if he wanted to? Do you think you're introducing new information into this debate?

&gt; In fact, most contracts are not expressible as automatically enforced in most languages, even languages with advanced and powerful contract checkers (aka type systems) like Ocaml and Haskell.

3. Have you considered that perhaps Yegge knows this, and thinks it's a better idea not to have "this method is private" contracts enforced by the compiler? Your tone of arrogance is out of the ordinary.

(My response's tone of arrogance is a response, for which I apologize but will not change)

&gt; Steve Yegge doesn’t believe in (software) condoms- he doesn’t use them, and thinks you shouldn’t either.

You have mistaken the part for the whole; Yegge's disbelief in <em>one particular type</em> of "software condom", as you so delicately put it, does not mean that he believes there should be no contract enforcement by programming languages.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37738">July 29, 2010</a>, <a href='http://martin.jambon.free.fr/' rel='external nofollow' class='url'>Martin Jambon</a> wrote: I don't care much about what the author thinks or whether I approve his life choices, but I like the idea of keeping things simple by default.

The author was specifically targeting Java, which consists in forcing the programmer to declare properties that are superfluous 95% of the time and just clutter up the source code.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37740">July 29, 2010</a>, Richard Vowles wrote: @BillMill - Steve compares software to a house - he deserves all the slapping he gets everywhere around the web and more. I suppose when Steve says design by contract is a bad idea you are going to say "hooray" to that as well. 

Try not to drink the koolaid - I generally find Robert gets a bit too antsy in his postings but he is right on the money here. Yegge deserves a good kicking.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37741">July 29, 2010</a>, <a href='http://github.com/raganwald/' rel='external nofollow' class='url'>Reg Braithwaite</a> wrote: Speaking as someone who respects your POV as well as Steve's, I feel that the tone of this particular point doesn't mesh well with the tone of Steve's post. Steve's post is humour. It takes an extremist stance, but most humour has to do that to make you laugh, and then think.

Does Steve not wear condoms? I dunno, it could be that he doesn't sleep around. It could be that he uses other techniques to create encapsulation. It could be that he uses private members and simply wants the reader to appreciate the fact that private is not "free" and the benefits should be weighed against the costs for the generations of maintainers to follow.

:-)</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37742">July 29, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: To everyone who is saying, "Hey, it's just a joke!"  — yes, it is.  But it's a joke which argues for a particular position and satirizes its detractors.  Jokes can be arguments, too.  I mean, <a href="http://enfranchisedmind.com/blog/posts/ruby-is-the-future/" rel="nofollow">this certainly was a joke and pretty much in the same way</a>, but people (rightly) saw the argument within it.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37743">July 29, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: For the record, this is Brian's post, not mine.    Although we both are basically coming from the same place in this point.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37744">July 29, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: There's a joke in here somewhere about software condoms and taking all the fun out of it...</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37745">July 29, 2010</a>, Aaron Davis wrote: Did you actually read the article? It reads like an Onion article. The content is completely absurd.

Everything you say about `private` and `@Deprecated` is correct, but this article is the definition of attacking a Strawman.  But then, maybe you know this, and this post is meant as a joke as well.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37746">July 29, 2010</a>, <a href='http://www.jroller.com/mindcrime/' rel='external nofollow' class='openid_link url'>Philip Rhodes</a> wrote: I took Yegge's post more as satire directed at Wikileaks, than as satire directed at "private" and "@Deprecated."   </li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37747">July 29, 2010</a>, dan wrote: Whooooosh!

Wow.. did you hear that? The sound of Yegge's article going waaaay over your head!

I'll spell it out for you: J. O. K. E.

Yegge was poking fun at open source, at java and at people like iphone (selling you a house with doors marked "employees only").</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37748">July 29, 2010</a>, Joe wrote: Wow... I guess you Steve shouldn't joke... some of his readers lack a sense of humour.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37750">July 29, 2010</a>, Judd wrote: No, he's saying that "private" IS the marker.  You just have to see it as such and not mis-construe it as some barrier that will reliably prevent third-party code from calling it.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37751">July 29, 2010</a>, <a href='http://www.jerf.org/' rel='external nofollow' class='openid_link url'>Jeremy Bowers</a> wrote: Here's the thing: Of the dozens of languages in current common use, quite a few of them do not spell out private and public and so on. All of them have been used to write large projects and indeed entire sub-ecosystems, which have most assuredly had to solve many software engineering problems just to exist.

If you don't know the answer to that question, you're not in a position to be lecturing anyone on the pros and cons of this technique vs. the techniques you apparently don't even know about, so how can you possibly explain the pros and cons?</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37752">July 29, 2010</a>, Alex Gordon wrote: <blockquote>But it’s a joke which argues for a particular position and satirizes its detractors.</blockquote>

That is pretty much the <em>definition</em> of satire.

I'm pretty sure Steve Yegge knows why access modifiers exist in Java. All this article proves is that he's <em>really good</em> at satire.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37753">July 29, 2010</a>, Patrick wrote: While I will decline to comment on Yegge, I believe you are muddying the issue by mapping public vs. private onto contracted vs. uncontracted. 

You're mapping a desired result onto an existing keyword with little regard to the intent of the keyword. There are more reasons to make a method public than to make it contractual. For instance, you may simply have another object in your code that needs to call it. I suppose one could argue that this is an inter-object contract, but you seem to be talking more about API level contracts which is usually where things break down when code breaks between programmers.

Perhaps we need an annotation that means contracted? But then what does that really mean? It comes down to documentation.

I know of at least one project that did this. They had a published "public" API that they contracted would not change and then another "private" API which was use-at-your-own-risk. They did this independent of object level visibility. In fact, their documentation generating tool hooked into their annotations and only published the public API to users.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37754">July 29, 2010</a>, Jeremy wrote: :) Thank you for writing. 

I don't like your first example.

<blockquote>Consider a software project that is large enough that a) more than one person is working on it, b) code maintenance is ongoing, and c) large enough that no one has the whole program in their head all at once. 
</blockquote>
Ok I am envisioning this project.
I am also envisioning it has 
- Project Design Docs
- Logical Layout
- Diagrams and Models
- At least Class level Documentation
- Revision Control
- Testing
- Automated Builds

<blockquote>
Person A writes hunk of code (function/module/class/whatever) X. Then person B comes along and writes hunk of code Y that calls hunk of code X. Then person A comes back around and changes hunk of code X, breaking hunk of code Y in the process.
</blockquote>

Oops! 

<blockquote> Who’s fault is it?</blockquote>

It depends, but it's not about blame. 
Person A's Fault
- If He changed his public interface. Ya know, the one that was documented and spec'd out. 
- If he ran the test suite, saw failures, and still checked in his code.

Person B's Fault
- If he used undocumented features ( this includes playing with the private vars ).
- If he made ASSumptions that were not in Person A's documentation... like the order of the returned data.
- If he wrote bad tests, or heaven forbid didn't write any tests.

<blockquote> Person B can claim that since their code worked with the older version of X, it’s person A’s fault. But person A can claim that module Y should never have depended upon that particular behavior in the first place.
</blockquote>

I never want to work with a team where the blame game is acceptable.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37755">July 29, 2010</a>, steven wrote: i thought the removal of private markers was a joke? your telling me he was serious?!</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37757">July 30, 2010</a>, James wrote: Yes, Steve's article was written in a jocular fashion.

But you people berating Robert for not getting the "joke" post are missing the implication of what Steve wrote: That hiding too much implementation in private state or behavior is something he considers harmful.

And Robert is disagreeing with that.

Reading comprehension. Hard, I know.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37758">July 30, 2010</a>, Donal wrote: The title of your article does you no favours. Does the guy really deserve to be called an idiot just because he wrote one (obviously tongue-in-cheek) article that you disagree with.

Considering his entire body of work, do you <i>really</i> think Yegge is an idiot. I don't, and I don't think you do either. If you want to troll, try 4chan.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37759">July 30, 2010</a>, <a href='http://christianromney.com' rel='external nofollow' class='url'>Christian Romney</a> wrote: &gt; Who’s fault is it?

The one who didn't write good tests.

&gt; The contract is what determines, in the above example, who fixes their code- person A, or person B.

I don't like developing software in your world. On my planet, we believe in collective code ownership. Oh, yeah, and we *talk*. 

&gt; As a side note, this is the reason I disbelieve that you don’t need comments. 

The distinction between
function fetch_sorted_names() vs. 
function fetch_names() seems pretty clear to me, without comments.

&gt; Even unit testing doesn’t help here.

Actually, it does. If the strings are supposed to be sorted I sure hope you have a test that expresses that. Otherwise, you're right - you're relying on happy chance.

&gt; If I change how it behaves or even want to remove it later, I have to carefully check all of Yegge’s code. 

No, the broken tests do that for you.

&gt; Because, dammit, if I didn’t want him calling the function I shouldn’t have written it.

Exactly. So, you're advocating that two functions in the same class shouldn't reuse internal methods of that class when they both need its exact output? It this anti-refactoring?</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37761">July 30, 2010</a>, Scott wrote: Arguing that using "private"- a built in language feature- is heavy-handed and instead code should simply be documented and tested to the ninth degree paradoxically implies that coders too whiny to use "private" will document and test code to the ninth degree.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37762">July 30, 2010</a>, Michael wrote: "So if you are writing Java code, are you also going to unilaterally disallow reflection."

y-e-s.

And there is also the middle ground where you don't allow _unsafe_ reflection.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37764">July 30, 2010</a>, <a href='http://www.profeval.com' rel='external nofollow' class='url'>Derrick</a> wrote: With that said... I can't stand it when people use private when they really should not, just because they were taught they always should! When you're writing high performance apps, such as games, which need to access x and y coordinates a LOT, you are DEFINITELY better off leaving them public.

If you have 
<pre lang="Java">
  private Integer x;
  private Integer y;
</pre>

with public getters/setter which do nothing but set the value:

<pre lang="Java">
public Integer getX(){ return x; }

public void setX(Integer x){
   this.x = x;
}
</pre>

You're doing absolutely nothing but adding a LOT of overhead.  In a minute of gameplay, at 60 FPS, you've just added 7200 function calls worth of overhead.

I see people do this same stupid thing in AS3/Flash based games.  

There's a BIG difference between an API, and a contract, and a simple sprite with an x,y.  Generalizing, and saying that everything should be "private" is also just as silly.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37766">July 30, 2010</a>, Mike Jennings wrote: "If I buy you a house and put the title in your name, but I mark some of the doors 'Employees Only', then you're not allowed to open those doors, even though it's your house. Because it's really my house, even though I gave it to you to live in."

Actually, no. It's more like, if I build a house and then give it to you, and if I built the house well, you won't have 220V wires sticking out of the walls. Nor will the ABS pipes that transfer the shit from the toilet be visible from your breakfast table (nor will they be transparent). I am well aware that there is a black, 3" ABS pipe shuttling turds 3 feet from my breakfast table, I put it there. But I like the ABSTRACTION of "I shit upstairs and the shit goes somewhere". Yes, I could have a clear pipe visible from my breakfast table - it would show me if there are any blockages, it might even give me a hint if someone in the house has serious medical difficulties or if someone has flushed a kitten down the bog. Further, it would allow me to easily hook up a "Y" from that pipe if need be, cuz everything's accessible, but someone with a slightly more refined aesthetic sense, like my wife, might object.  

Abstraction is a game of make-believe; I might have some code that takes an InputStream but all I ever pass to it is a FileInputStream, so why fuck around with InputStream? You know that it's a FileInputStream, so why not call a spade a spade? The reason is this, most programmers don't have very much discipline. If you change your code to accept a FileInputStream, there will be an almost irresistible temptation to use stuff that only a FileInputStream has. Now you can never use that code on an URLInputStream or a ServletInputStream or any other InputStream; you've broken the abstraction, when you didn't need to.

Although Steve is probably joking about not understanding the need for access modifiers, that's my own opinion on the matter.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37770">August 2, 2010</a>, Chau wrote: Wow.  Just, wow.

First, I didn't see anywhere in there where Yegge said he was against all such forms of communication.  In fact, he pointed out how Python has a convention for indicating this *without adding any syntax for it*.  It works *really* well.

Second, if programming is like sex, then trying to get the compiler to enforce everything is like preaching abstinence: it sounds like it should yield perfect results, but in practice it ends up being far worse than giving people good tools and teaching them to be responsible for what they do.

The static-typing people love to think the compiler can catch anything.  (Including bugs, often!  Ha!)  In a dynamically typed language, when's the last time I had an interface change such that it compiled but didn't work?  I write code in dynamic languages every day and I can't remember the last time this happened to me.  When's the last time I wanted to get around a "private" declaration?  I also write in statically-typed languages, and the answer is: a couple times this morning, already.

I've even had (a week or two ago) a library change implementation without changing interface, thus causing statically compiled code to stop working.

Of all the things that can go wrong when 2 pieces of code meet, things the compiler can catch (having the method names and types line up, and only using methods marked "public") are responsible for *way less* than 1% of problems.  When you grab the new version of that library, you still have to test, and you still have to read the docs -- and if you're doing that, then what good does it do that the compiler tells you something is marked "private"?

"But why on earth would you not use the features of the language you do have to check the contracts you can check?"

Because they cost more than 1% of my coding time, and the payback is way less than 1%.  It's the same reason you don't spend all day writing your own *extra* lint-like tools to find potential errors (and I have written such tools, and found bugs with them): again, they take more time to write than just testing the damn program normally, or getting your coworker to give it a 2-minute code review.  Inefficiency.

It says far more about you than it does about Yegge that the only response to this you can think of involves calling him "childish" and "immature".</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37772">August 2, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Uh, again, it's not my post.  It's Brian's.

I need to start putting the author's name in <code>H1</code> tags or something...</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37773">August 2, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Not sure if you're responding to my comment or Brian's original post, but here are my thoughts.

A lot of languages use other kinds of markers (e.g. <code>_foo</code>).  They have long-established conventions.  And if you want to have a language with such a convention, that's fine: in that case, you're in buyer-beware territory if you reach into the code marked by those conventions.  And that's okay, I suppose.

Simply ripping <code>private</code> out of Java code is a problem, though, because you're dealing with a language without a convention for communicating that information.  And ragging on <code>@Deprecated</code> seems somewhat bizarre.

As a further comment, in languages like you have described, I have encountered substantial and annoying difficulties in upgrading libraries with surprising changes to the API—or even not even being clear what is or isn't part of the API.  perl (and by that, I mean CPAN) deals with this by having a culture of obsessive documentation.  Ruby's been a source of some frustration for me on this point.  This is also true of some Grails plugins, and I've had people raise that issue about my own plugins.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37774">August 2, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Oh, sure.  If the security of your system depends on not calling <code>private</code> methods, you're toast.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37775">August 2, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Yeah, there's a lot Java needs to do to make code cleaner.  Why it doesn't have a C#-style (or even a Groovy style) properties syntax is beyond me.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37776">August 2, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Sure.  So it's not unreasonable to respond to the target of satire, in that it is arguing for a particular position.  Brian's original post may be a bit more harsh than I'd probably go for it—and certainly Brian's got a stronger take on the compiler's role in enforcing code contracts—but responding to the implicit argument of the satire seems very reasonable.  Even if it is a joke.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37777">August 2, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Have you actually tried those out on the JVM?  I bet if you're doing 7200 calls, the HotSpot compiler has optimized them to within an inch of their life, and so the actual cost is probably minimal.

That said, Java desperately needs a saner way to deal with properties.  It's just so much ceremony for so little reward.  Tuples would also be sweet.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37779">August 2, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Okay, most of your points are good, but the dig on static typing was lame.  The elimination of null pointer exceptions alone means that static typing can catch at least <em>some</em> bugs.  Details over at <a href="http://enfranchisedmind.com/blog/posts/useful-things-about-static-typing/" rel="nofollow">7 Actually Useful Things You Didn’t Know Static Typing Could Do: An Introduction for the Dynamic Language Enthusiast</a>.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37780">August 4, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Like.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37782">August 5, 2010</a>, <a href='http://www.profeval.com' rel='external nofollow' class='url'>Derrick</a> wrote: Actually, Yes.

Mapping 65,000 objects from a JDBC call takes 447 milliseconds using getters/setters, and  440 milliseconds without them.  Granted, it's not a lot in the scheme of things, but the overall operation (including the jdbc call) took 978 ms.

That was just a sample that I had access to tinker with.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37783">August 6, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Yeah, I'd call 7ms, or 0.7% the cost of the call, pretty minimal.  I suppose it <em>is</em> a speed-up of 1.6%, which sounds like something.

What we're really looking for is tuples.  Although I suppose a final class with public fields is basically a Java coder's tuple.  Except, y'know, that's evil and against corporate coding policy and stuff.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37784">August 6, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: To everyone who thinks you don't need comments: how am I to know what <a href="http://www.ruby-doc.org/core/classes/REXML/Light/Node.html#M005117" rel="nofollow">this method</a> does and what it returns?</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37786">August 6, 2010</a>, <a href='http://blaisorbladeprog.blogspot.com/' rel='external nofollow' class='openid_link url'>Blaisorblade</a> wrote: The problem with having a public attribute is that you lose the freedom to change it later. As already explained, those calls are inlined during JIT-compilation. I agree that C# properties are much better though - Java is a son of C++, which is scarily complicated, so simplifying the language has been an (excessive) concern. If you don't agree about C++, try solving http://www.gotw.ca/gotw/056.htm, especially question no. 3.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37788">August 6, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Setting aside run-time code generation (which conflates compile-time and run-time), the side effects of JIT compilation don't impact compile-time decisions about how things are organized.  It does make life difficult for Java people compiling against my code if I decide it really should be a getter-/setter-driven property later: they then have to change all their <code>foo.x</code> to <code>foo.getX()</code> to get their code to compile.

So the issue is one of backwards compatibility.  However, if the class is a simple enough data container (think "tuple"), is backwards compatibility really that much of a concern?

To put it slightly more bluntly, what percentage of <code>getX()</code> and <code>setX(x)</code> are <em>ever</em> converted from simple attribute wrappers to a more complicated implementation?  If that percentage is small (and  it is, in my experience), then there's just a lot of noise in the code for little benefit, and the syntax should favor the common case.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37791">August 6, 2010</a>, <a href='http://christianromney.com' rel='external nofollow' class='url'>Christian Romney</a> wrote: I have to confess I don't get you shit/pipe analogy at all, but I think I agree with your point about layered abstractions. In fact, I'd go so far as to say the abstractions don't always  end at the public/private boundary. That's precisely why I disagree with the author when he says private methods should never be invoked. I think what he might have meant to say was client code should respect the private boundary, but he went a bit astray implying that private means private to the programmer, not private to the class. 

Of course, all of this is very abstract. There's a lot of public code I'd hate to call (let alone private), after having seen it. But if we assume a well-written, non-trivial piece of library code, I can see (have seen) someone wanting to use a lower-level function from a higher level function for something the author didn't give me the ability to do. And here, private sucks. 

A good analogy (albeit a program, not a library) is Git's porcelain vs. plumbing. Porcelain is at a higher level of abstraction, but I can use the plumbing to create more porcelain. The great thing about this analogy: it's all "public" because they're all available for the end user.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37792">August 7, 2010</a>, <a href='http://lovehateubuntu.blogspot.com/' rel='external nofollow' class='openid_link url'>Rob</a> wrote: How many times did you run it? That 7ms might not actually be statistically significant.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37797">August 10, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Notably, I encountered <a href="http://jira.codehaus.org/browse/GRADLE-1100" rel="nofollow">this bug</a> earlier today which is precisely a typing error.  Even Java's lame type system would have caught it.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37798">August 11, 2010</a>, Rusty wrote: If you think NullPointerException has been eliminated, I have some swamp land and a bridge you will be very interested in.

Java programmers have a deservedly bad rep for being API monkeys because they NEED the compiler to rewrite their inefficient code and they need it to tell them when they made an error.

Problem is, properly written code is easier for a runtime environment to optimize.

Programmers that depend on the compiler to catch bugs need to be banned from the field for all eternity.

Java encourages code bloat and allows under-qualified people to write code.

The kingdom of nouns is an ugly ghetto.</li><li><a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#comment-37806">August 17, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Wow.  You totally epitomize the mistaken viewpoint that I'm trying to correct in that blog post.</li></ul><hr />
This post was by <a href="http://enfranchisedmind.com/blog/posts/author/bhurt-aw/">Brian Hurt</a>, written on July 28, 2010.<br />
Comment on this post: <a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#respond">http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/#respond</a><br />
Public Permalink: <a href="http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/">http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/</a>
<hr /><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png" /></a><br />This article was a post on <a href="http://enfranchisedmind.com/blog">the EnfranchisedMind blog</a>.  <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/InteractiveResource" property="dc:title" rel="dc:type">EnfranchisedMind Blog</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://enfranchisedmind.com/blog/" property="cc:attributionName" rel="cc:attributionURL">Robert Fischer, Brian Hurt, and Other Authors</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons Attribution-Share Alike 3.0 United States License</a>.<p style="display:none;">(Digital Fingerprint: bcecb67d74ab248f06f068724220e340 (74.125.156.81) )</p></small><img src="http://feeds.feedburner.com/~r/em-brian/~4/Ec29WUjw1uo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		<feedburner:origLink>http://enfranchisedmind.com/blog/posts/steve-yegge-is-an-idiot/</feedburner:origLink></item>
		<item>
		<title>Dear deficit “hawks”: bite me</title>
		<link>http://feedproxy.google.com/~r/em-brian/~3/zO5Vx4zU-Yw/</link>
		<comments>http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 14:18:18 +0000</pubDate>
		<dc:creator>Brian Hurt</dc:creator>
				<category><![CDATA[Politics]]></category>

		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=2528</guid>
		<description><![CDATA[Here's the problem I have with the recent furor over the deficit and the debt: my long term memory still works. ]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s the problem I have with the recent furor over the deficit and the debt: my long term memory still works.  See, I remember George W. Bush.  I know it was a long time ago (eighteen months), and for those with the memories of fruit flies, let me remind you: the debt philosophy of the Bush administration, as articulated by vice president Dick Cheney, was &#8220;Reagan proved deficits don&#8217;t matter&#8221;.  And they lived by this philosophy.  The debt in 2001 (Bush&#8217;s first budget) stood at $5.8 trillion- by 2009 (Obama&#8217;s first budget), it stood at <A HREF="http://www.treasurydirect.gov/govt/reports/pd/histdebt/histdebt_histo5.htm">$11.9 trillion</A>, and increase of over $6 trillion.  Over 8 years.  That&#8217;s an <EM>average</EM> of $750 billion in new debt every year W was president.  And, outside of the liberal blogsphere and Paul Krugman, I don&#8217;t remember anyone saying a god damned thing about the deficit.  For eight years.</p>
<p>But then, some time in 2009, something changed.  The deficit &#8220;hawks&#8221;, who had spent eight years silent, suddenly awoke to the massive danger the debt posed, and took up their abandoned positions yet again.  Now, all of a sudden, we&#8217;re treated to daily broadsides on the danger of the debt, and the need to eliminate the deficit immediately.  Which leads me to ask: why now?</p>
<p><span id="more-2528"></span></p>
<p>A word on Occam&#8217;s razor, as it will come up- Occam&#8217;s razor only applies between two theories that explain (&#8220;fit&#8221;) <EM>all</EM> the data.  If a theory doesn&#8217;t explain all the facts, the fact that it&#8217;s simpler is irrelevant.  So the plaintive cry that we can&#8217;t keep deficit spending doesn&#8217;t explain why you (and everyone else) were silent during the Bush years (if you were not silent, please post links- and the following comments don&#8217;t apply to you).</p>
<p>The one theory I&#8217;ve come up with that fits all the facts is that it&#8217;s not the deficit that matters- but what the deficit is spent on.  Spend the deficit on wars and tax cuts, and that&#8217;s OK- but spending the deficit helping the poor, the sick, the unemployed, the hungry- what the heck do you think this is, a Christian nation?  The ruling ideology around these parts is Darwinism- Social Darwinism, to be precise.</p>
<p>This theory is especially accurate in predicting the deficit &#8220;hawks&#8221; response to current budgetary items.  Even if you accept that <EM>now</EM> the deficit is a problem in a way it wasn&#8217;t eighteen months ago, doesn&#8217;t it make sense <EM>now</EM> to allow the Bush tax cuts to expire, and to end the wars in Afghanistan and Iraq sooner rather than later, on the grounds that we can&#8217;t afford them?  And wouldn&#8217;t it make sense, as a deficit hawk, to support legislation that saves more money than it costs?  Take, for example, health care reform- which yes, costs $900 billion over the next 10 years, but saves $1.1 trillion (for a net savings of $200 billion), as <A HREF="http://www.ama-assn.org/amednews/2010/07/19/gvsb0719.htm">the health care bill did</A>.  Granted, that&#8217;s a small savings, but as a deficit hawk, doesn&#8217;t every little bit help?</p>
<p>This theory also explains why, according the Republicans, <A HREF="http://tpmdc.talkingpointsmemo.com/2010/07/its-unanimous-gop-says-pay-for-unemployment-benefits-not-tax-cuts-for-the-rich.php">extensions to the unemployment  benefits must be fully paid for- but extending Bush&#8217;s tax cuts don&#8217;t</A>.  The alternative theory I have- that deficits are OK if a Republican is President, but not OK if a Democrat is President, doesn&#8217;t explain the deficit &#8220;hawk&#8221; stands on these current issues.</p>
<p>Note that it can make perfect sense to have opposed the Bush deficits at the time, and support the Obama deficits now, and not be just a Democratic partisan (&#8220;deficits are OK if a Democrat is President&#8221;).  The theory here is to save for a rainy day, but that if it&#8217;s raining, now is the time to spend the money you have been saving.  And it&#8217;s economically raining cats and dogs right now- the highest unemployment rate since the great depression is predicted to continue to be high for years, and we&#8217;re up against the zero bound (the Fed can&#8217;t lower interest rates below 0%), so conventional monetary policy (lower interest rates to stimulate the economy) doesn&#8217;t work.  So now is a really good time for some Kenynesian stimulus spending, with the understanding that when the good times return, we pay off/down the the debt.  </p>
<p>A school administrator once explained to me, when I asked why I was being punished for being attacked, that it wasn&#8217;t a fight until I hit back.  By this definition, what the deficit &#8220;hawks&#8221; are doing is not class warfare.  After all, it&#8217;s not a class war until the other side fights back.  But this does explain why my reaction to these so-called deficit hawks is the same as my reaction that administrator, years ago.</p>
<p>Bite me.</p>
<hr /><h2>Comments</h2><ul><li><a href="http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/#comment-37722">July 26, 2010</a>, <a href='https://hartsock.blogspot.com/' rel='external nofollow' class='url'>Shawn Hartsock</a> wrote: When you are rich and powerful and want to justify holding your social position using Darwinism it's called "Social Darwinism", when you want to use Theism it's called "Divine Right", and when you want to use Christianity it's called "Prosperity Doctrine". 

No matter what the basic belief system is, underneath it all the fundamental motivation is still basically a form of <i>tribalism</i> that is trying to justify why when "we" want something it is "right and good" but when "they" want the exact same thing it is "wrong and evil." The truth is (in this case at least) there is no <i>us</i> and <i>them</i> there is only "<i>we the people</i>."</li><li><a href="http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/#comment-37723">July 26, 2010</a>, Dianne Fischer wrote: When we look to deficits you need to look  back, beyond the past administration that has been demonized even by it's own party.  Bush senior inherited some messy finances.  he was in the process of turning things around when he left office.  All Clinton had to do was not screw it up. Being a very bright man he chose to screw things other than the economy. W came on the scene and here came the good ole boys to protect their interests. (A very dark time to be a Republican) Probably would have worked if the country hadn't been attacked and a war broke out.  Wars have always caused huge deficits.

Be careful quoting the health care package as paying for itself.  It too is a case of cronyism (sp?) and the insurance companies will be huge winners.  Government guarantee to increase their customer base and 5 years to rev up their prices to cover it.  And , oh, by the way even the GAO admits it doesn't attribute all the costs to the health care bill.  it omitted payments to doctors. Most likely a tidy sum that will increase as there are no cost cutting measures in this bill.  And it didn't include all the ongoing costs of the many, many new government agencies being created in this bill. 

Did you know the one place in the nation not suffering from the recession is Washington DC?

So why all the current interest in the deficit?  Purely political fluff.  A play to the 24/7 talking heads that dominate what we call the news today.  Also, the ultra conservative Republicans are losing their moderate base and now are turning their attention to fiscal matter and trying to push away from the social reforms they have pushed in the last decade. all this in hopes of not being tossed out on their greedy little ears.

Of course, if you want to pay your part of the deficit all you have to do is cough up over $45,000 for every man, woman and child in the US.  At some point, whether its current hype or not, that has to get paid.</li><li><a href="http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/#comment-37724">July 26, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: It's unfair to say that nobody except Krugman and the liberal blogs got into this.  The overspending by Bush was criticized quite a bit by fiscal conservatives and it was one of the things that made space for Ron Paul's run.  Here's some cites: <a href="http://www.cato-at-liberty.org/2007/09/24/bush-the-budget-warrior/" rel="nofollow">CATO</a> and <a href="http://www.washingtontimes.com/news/2007/jun/13/20070613-113141-5354r/" rel="nofollow">Washington Times</a> (see the paragraph beginning "With a Republican-controlled Congress offering little resistance").  If a blogger posts in a conservative blog and Brian isn't there to hear it, it's still posted.

The fact that the Republican party is suddenly talking about budget controls is the same reason the Democrats aren't talking civil liberties anymore: political game-playing.  And remember when Democrats talked about reigning in spending and fiscal control when slamming Bush?  Where'd that talk go?</li><li><a href="http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/#comment-37725">July 26, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: I'm not sure we have to talk outright tribalism to explain this.  It's much more simple, I think: when you start with the conclusion, then the only arguments that are valid are those arguments supporting your conclusion.  As a politician, you check your polls and your party, and you say, "X is popular/a party plank/my cash cow.  Therefore, I am for X.  If Y is an argument for X, then Y is what I believe."  Note that consistency has no basis in this calculation, because nobody cares to remember.</li><li><a href="http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/#comment-37726">July 26, 2010</a>, <a href='http://clubjuggler.com/' rel='external nofollow' class='url'>Tanner Lovelace</a> wrote: Back in 2001 I advocated paying down our debt rather than giving people tax cuts.  It would have made sense to save during years with budget surpluses so that we wouldn't have  any problems borrowing during lean/crisis years.

It looks like Asia figured this out: http://krugman.blogs.nytimes.com/2010/07/24/keynes-in-asia/

So, why can't we?</li><li><a href="http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/#comment-37727">July 26, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: <a href="http://twitter.com/psnively/statuses/19583151687" rel="nofollow">Paul Snively on Twitter</a> notes that <a href="http://porkbusters.org/" rel="nofollow">PorkBusters.org</a> was also very active during the Bush admin.</li></ul><hr />
This post was by <a href="http://enfranchisedmind.com/blog/posts/author/bhurt-aw/">Brian Hurt</a>, written on July 26, 2010.<br />
Comment on this post: <a href="http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/#respond">http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/#respond</a><br />
Public Permalink: <a href="http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/">http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/</a>
<hr /><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png" /></a><br />This article was a post on <a href="http://enfranchisedmind.com/blog">the EnfranchisedMind blog</a>.  <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/InteractiveResource" property="dc:title" rel="dc:type">EnfranchisedMind Blog</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://enfranchisedmind.com/blog/" property="cc:attributionName" rel="cc:attributionURL">Robert Fischer, Brian Hurt, and Other Authors</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons Attribution-Share Alike 3.0 United States License</a>.<p style="display:none;">(Digital Fingerprint: bcecb67d74ab248f06f068724220e340 (74.125.156.81) )</p></small><img src="http://feeds.feedburner.com/~r/em-brian/~4/zO5Vx4zU-Yw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://enfranchisedmind.com/blog/posts/dear-deficit-hawks-bite-me/</feedburner:origLink></item>
		<item>
		<title>Today’s Thought</title>
		<link>http://feedproxy.google.com/~r/em-brian/~3/woH2fEQsFsE/</link>
		<comments>http://enfranchisedmind.com/blog/posts/todays-thought/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 02:13:48 +0000</pubDate>
		<dc:creator>Brian Hurt</dc:creator>
				<category><![CDATA[Programming Language Punditry]]></category>

		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=2516</guid>
		<description><![CDATA["Great tools are what you get when your language sucks."]]></description>
			<content:encoded><![CDATA[<p>Great tools are what you get when your language sucks.  </p>
<p>The tools are developed to work around short comings in the language itself.  If the language didn&#8217;t have those short comings, you wouldn&#8217;t need the tools, and they wouldn&#8217;t get developed.  The best language would be just fine with just notepad and a compiler.  So bragging about how great the tools are for your language is bragging about how your language sucks, and needs significant amounts of help to make development in it tolerable.</p>
<hr /><h2>Comments</h2><ul><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37674">July 8, 2010</a>, <a href='http://blog.barrkel.com/' rel='external nofollow' class='url'>Barry Kelly</a> wrote: With respect, that's an asinine thought. Smalltalk has had some of the best tools for the longest times, but that's because of the unity and regularity of the language and its runtime, not in spite of it. And conversely, C++ has historically had poor tools not because it's a great language - frankly, it sucks - but because its poor design made it so hard to tool.</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37675">July 8, 2010</a>, <a href='http://blog.barrkel.com/' rel='external nofollow' class='url'>Barry Kelly</a> wrote: I want to add further. Tools are developed when there's a market for them. Primarily that means that the language has adoption. Every large application, no matter what language it's written in, can benefit from certain generic kinds of tooling: code completion over modules, documentation popups in the editor for API calls, code navigation based on symbols invoked (but that isn't fooled by naming coincidences, like simple-minded - or even lexically aware - greps). These all help because large apps don't fit in every team member's head in their entirety. Tools that provide these basic functions add to any language that represents itself as text. (But graphical languages cannot be programmed without tools.)

Bragging about the tools for your language indicates that (a) your language has an excellent design and is easily tooled, or (b) your language has widespread adoption and is a mature and reliable fixture in the programming landscape, or (c) both. Of course, the lack of tools doesn't necessarily mean the opposite.</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37680">July 9, 2010</a>, <a href='http://muellerware.org/' rel='external nofollow' class='openid_link url'>Patrick Mueller</a> wrote: It's not just large applications that benefit from those sorts of generic tools that Barry mentions.  Even small applications can benefit from these tools if you have a large library of code to deal with.  Python is a good example here; I often write short little python programs, but constantly refer back to the web-based doc to figure out what functions to use.  Which is, frankly, painful.

I will, on the other hand, admit that I'm a reformed Smalltalker.</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37681">July 9, 2010</a>, <a href='http://d.hatena.ne.jp/jartur/' rel='external nofollow' class='url'>jartur</a> wrote: LISP in many of its forms and, say, Erlang have Emacs with great integration -- one of the best tools available. LISP used to have things like OpenGenera -- something modern tools can not even come close to for other languages. But dare you actually say that LISP is that awful?</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37682">July 9, 2010</a>, <a href='http://slobodanblazeski.blogspot.com/' rel='external nofollow' class='url'>Slobodan Blazeski</a> wrote: Not true, Lisp and Smalltalk are perfect counter examples.</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37683">July 9, 2010</a>, Scot wrote: I won't comment about Lisp or Smalltalk as I've never really used them, but Java and some of Java's surrounding technologies are perfect examples of this.  I wouldn't want to code much in Java without an IDE, but JVM languages like Groovy are such an improvement on Java that I can happily use nothing but a text editor and a command line.

I remember when Java Server Faces came out there were comments about how tooling would eventually be created that would take care of all the painful bits. After using it without the tooling I'm never going back to JSF if I can help - even if it does have tooling by now (no idea if it does or not - there are easier technologies to use).  So it's not just languages that tend to suck if they need heavy tooling to be of any use, frameworks that need tooling have a tendency to suck as well.

Question for the Smalltalk fans - how easy is Smalltalk to use without tooling?</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37685">July 9, 2010</a>, Michael O. Church wrote: Interesting thought, but I actually disagree strongly. I think that the strength of tools reflects on the size and power of a programming language's community. I don't think that tools are built to overcome shortcomings of the language so much as they are built to increase the quality and productivity of the programming experience, which can be improved dramatically no matter how great the language is. 

For example, Ocaml and Haskell are awesome languages, but as compiled languages, you still have nasty build-system problems (Makefiles) that emerge on large projects... and this is in no way a fault of the language itself. Hence, tools are built to deal with this. 

On the comment that a great language is "just fine" with an ordinary notepad, I'd agree, but Haskell is "just fine", of course, with a notepad and compiler; but the fact is that even when the language is awesome, it's not so awesome as to make better tools unnecessary. 

Of course, the languages that tend to have the best tools right now are those that have the largest communities, which tend also to be mediocre languages (Java, C++). That's not because of an causal link between poor language and great tools, but other factors entirely-- namely, the enormous number of mediocre programmers who are afraid to learn newer and better languages.</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37686">July 9, 2010</a>, <a href='http://perl.scaffidi.net' rel='external nofollow' class='url'>Hercynium</a> wrote: Just my  $0.02... Perl is an oft-maligned language - and sure, it sucks in a lot of ways, but the thing that keeps me coming back to it over and over are the quality of the tools. With CPAN as the keystone, one can install just about any of these tools as easy as can be.


examples: Devel::NYTProf, Perl::Tidy, Perl::Critic, local::lib, CPAN::Mini, perlbrew, Devel::REPL, all the Test::* stuff, and many many more...


The fact that the language itself is so insanely malleable also tends to be a big plus - many of the add-ons I use give Perl some very convenient and advanced capabilities. 


examples: Moose, Devel::Declare, Try::Tiny, perl5i, and so on.

So, one could argue that Perl sucks big time, but IMO, its tools more than make up for it, and I end up feeling deprived every time I code in other languages.</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37687">July 9, 2010</a>, Steven wrote: Congratulations on finding a counterexample to a generalization.  You may be the first ones in all of history.</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37688">July 9, 2010</a>, <a href='http://kablambda.org/blog' rel='external nofollow' class='url'>Tom Davies</a> wrote: You really need some examples to indicate what you are thinking.

Take Java, which has great tools (e.g. Intellij IDEA's refactoring support). This tools is made possible by Java's static typing -- which I'd argue is a great language feature. Are you arguing that Java has a deficiency which makes refactoring tools necessary?</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37695">July 12, 2010</a>, <a href='http://p10q.com' rel='external nofollow' class='url'>Tom Harada</a> wrote: I agree with the claim. But only with tools that solve problems which the language can also equally solve by being improved. There are some problems that both tools and language can solve, but with unequal levels of effectiveness. 

Language improvements that make up in concision what they might lack in flexibility and specific, thorough solving of the entire problem (compared to tools) are worthwhile.

But yeah, I think the claim of the post is correct. Language tools and language are somewhat inversely related because they compete over the same space. But the other point (as perhaps some make) is that language tools also open up possibilities for new design, etc. So there's really two competing relationships. 

It's sort of like a general and a scout. Really good scouts might be signs of a weak general. I think that's Brian's point. But it is possible to have both be really good in certain circumstances. Or to have both be really bad, etc.

Also, when people think about examples and counterexamples, it's maybe important to remember that 'language' is a very fluid concept. It's maybe better to think about 'language' in terms of a language hierarchy (or hierarchy of abstractions). There are little languages in syntax, in high level design, in modules, in interfaces -- everywhere there is abstraction. It's language all the way down. So if your tools (which also form a language set -- mostly for solving the higher-level problem of doing actual development logistically) are top heavy that means there's an inelegant quality to the hierarchy. You've got a tree branch which is unusually large. Sometimes this isn't bad (a huge set of libraries like CPAN, etc.) -- but arguably it prevents other parts of the tree from properly developing, etc.</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37697">July 16, 2010</a>, Angelo Pesce wrote: I do understand the spirit of this post (i guess) and i do think that indeed many tools are bad patches to fundamental flaws. A big example would be debuggers. I would any day prefer to use no debugger in a interactive language (live coding) than a debugger in a statically linked one (c++). But i would love even more both, an interactive langage with a graphical debugger i.e. A good langage supports tools, like c#. A bad language doens, and still neds them to be half decent, i.e. C</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-thought/#comment-37710">July 21, 2010</a>, ChriS wrote: A blog post with an interesting perspective on languages v.s. tools
http://osteele.com/archives/2004/11/ides</li></ul><hr />
This post was by <a href="http://enfranchisedmind.com/blog/posts/author/bhurt-aw/">Brian Hurt</a>, written on July 8, 2010.<br />
Comment on this post: <a href="http://enfranchisedmind.com/blog/posts/todays-thought/#respond">http://enfranchisedmind.com/blog/posts/todays-thought/#respond</a><br />
Public Permalink: <a href="http://enfranchisedmind.com/blog/posts/todays-thought/">http://enfranchisedmind.com/blog/posts/todays-thought/</a>
<hr /><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png" /></a><br />This article was a post on <a href="http://enfranchisedmind.com/blog">the EnfranchisedMind blog</a>.  <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/InteractiveResource" property="dc:title" rel="dc:type">EnfranchisedMind Blog</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://enfranchisedmind.com/blog/" property="cc:attributionName" rel="cc:attributionURL">Robert Fischer, Brian Hurt, and Other Authors</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons Attribution-Share Alike 3.0 United States License</a>.<p style="display:none;">(Digital Fingerprint: bcecb67d74ab248f06f068724220e340 (74.125.156.81) )</p></small><img src="http://feeds.feedburner.com/~r/em-brian/~4/woH2fEQsFsE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://enfranchisedmind.com/blog/posts/todays-thought/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://enfranchisedmind.com/blog/posts/todays-thought/</feedburner:origLink></item>
		<item>
		<title>Today’s busines idea someone else should do</title>
		<link>http://feedproxy.google.com/~r/em-brian/~3/esxky0Hp4KI/</link>
		<comments>http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 20:06:40 +0000</pubDate>
		<dc:creator>Brian Hurt</dc:creator>
				<category><![CDATA[Software Business]]></category>

		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=2498</guid>
		<description><![CDATA[The thought that just occurred to me was that someone needs to apply the hard lessons learned in internet social media, especially aggregation sites like Slashdot, Reddit, and Digg, to scientific publishing.]]></description>
			<content:encoded><![CDATA[<p>So, I recently reread <A HREF="http://www.amazon.com/Faster-Than-Speed-Light-Speculation/dp/B000EXYZLI/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1277493890&#038;sr=1-1">Faster than the speed of light</A>.  By the way, I highly recommend this book (even if it&#8217;s central theory is wrong), if for no other reason than for it&#8217;s explanations of relativity and cosmology.  But anyways, a large hunk of the book is Joao&#8217;s fight with the scientific publishing world to get his theory even published.  The thought that just occurred to me was that someone needs to apply the hard lessons learned in internet social media, especially aggregation sites like Slashdot, Reddit, and Digg, to scientific publishing.</p>
<p>The idea goes like this: a working definition of what, say, physics is, is that it&#8217;s what physicists do.  It&#8217;s not perfect, but it works, and it&#8217;s much easier to measure.  So you have this site, and you can get an account if you&#8217;re a physics researcher at an accredited research institution (this is answering the question &#8220;who is a physicist&#8221; by plugging into the existing infrastructure of defining who is a physicist- accreditation).  Having an account means you can do three things- upload papers, vote on papers, and comment on papers.   Everyone, including the public, can see all the papers that have been uploaded, and their comments, but only accredited physicists get to upload papers (if you&#8217;re not an accredited physicist, you have to get at least one accredited physicist to upload your paper- the papers the physicists upload don&#8217;t have to be theirs- they&#8217;re just claiming that they consider the papers to be physics).  And they&#8217;re time stamped so that priority is preserved.  </p>
<p>Once the paper is uploaded, physicists can vote for them.  Each physicist gets only one vote per paper, and every month the N papers with the top number of votes which haven&#8217;t already been published get published in the paper journal.  And yes, the votes accumulate, so a paper that&#8217;s been slowly garnering a vote a month for the last five years (and thus has 60 votes) beats out the paper that got uploaded yesterday and has already garnered 59 votes (although that paper will likely make it next month).  There might be an English major on staff to make sure everything is spelled correctly and is grammatical, but that&#8217;s optional.</p>
<p>I might allow down votes (allowing physicists to say &#8220;this paper isn&#8217;t physics, or isn&#8217;t worthy of being published&#8221;), but they would only count in the case of a tie (if two papers both have 100 up votes, and only one can be published, publish the one that has fewer down votes).   You might also have multiple journals, and allow the physicists to vote on which journal a paper should be in (&#8220;This paper really belongs in the Journal of String Theory, not in the Journal of Loop Quantum Gravity&#8221; for example).</p>
<p>I would make the list of who voted, both for and against, various papers public, for two reasons.  First of all, this helps discourage people from engaging in personal vendettas, or at least makes it more obvious that they do, and second, this allows the heavy weights to influence the selection process (&#8220;if both Leonard Susskind and Stephen Hawking are voting for this paper, that&#8217;s good enough for me!&#8221;).</p>
<p>This is a couple of weeks of work for a competent Ruby on Rails hacker.  The biggest coding problem will be handling the multitude of different file formats the papers will come in (word, latex, etc) and making them look more or less uniform.  The real problem will be marketing to the physics community itself.  Physical Review D is an important journal to the physics community because a lot of important papers are published there, because a lot of important papers are submitted there, because it&#8217;s an important journal.  Everyone buys IBM because everyone buys IBM.  Except everyone doesn&#8217;t buy IBM anymore- change can happen.</p>
<hr /><h2>Comments</h2><ul><li><a href="http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/#comment-37634">June 25, 2010</a>, <a href='http://elehack.net/michael/' rel='external nofollow' class='openid_link url'>Michael Ekstrand</a> wrote: The coding problem is easily fixed with policy - provide a template and require all submissions to be text-extractable PDFs. That's (almost) how some CS conferences work.

As far as the social impact - it is interesting to consider.  I don't know what it would be, or how scientific publication would be affected for better or worse. Worth pondering, though!</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/#comment-37640">June 27, 2010</a>, <a href='http://enfranchisedmind.com/blog/posts/author/candide/' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: Requiring it to be in LaTeX works fine, too.</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/#comment-37698">July 16, 2010</a>, Roland Kaufmann wrote: What incentive would accredited physicists have to publish papers that is not their own to the site?</li><li><a href="http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/#comment-37824">August 27, 2010</a>, <a href='http://www.robertcfischer.com' rel='external nofollow' class='openid_link url'>Robert Fischer</a> wrote: <a href="http://newcreationarts.blogspot.com/2010/08/scholars-test-web-alternative-to-peer.html" rel="nofollow">Check This Out</a> - it looks like something's already cooking that way.</li></ul><hr />
This post was by <a href="http://enfranchisedmind.com/blog/posts/author/bhurt-aw/">Brian Hurt</a>, written on June 25, 2010.<br />
Comment on this post: <a href="http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/#respond">http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/#respond</a><br />
Public Permalink: <a href="http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/">http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/</a>
<hr /><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png" /></a><br />This article was a post on <a href="http://enfranchisedmind.com/blog">the EnfranchisedMind blog</a>.  <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/InteractiveResource" property="dc:title" rel="dc:type">EnfranchisedMind Blog</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://enfranchisedmind.com/blog/" property="cc:attributionName" rel="cc:attributionURL">Robert Fischer, Brian Hurt, and Other Authors</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons Attribution-Share Alike 3.0 United States License</a>.<p style="display:none;">(Digital Fingerprint: bcecb67d74ab248f06f068724220e340 (74.125.156.81) )</p></small><img src="http://feeds.feedburner.com/~r/em-brian/~4/esxky0Hp4KI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://enfranchisedmind.com/blog/posts/todays-busines-idea-someone-else-should-do/</feedburner:origLink></item>
	</channel>
</rss>
