<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Please back off the startups</title>
	<atom:link href="http://zahnster.com/rant/please-back-off-the-startups/feed" rel="self" type="application/rss+xml" />
	<link>http://zahnster.com/rant/please-back-off-the-startups</link>
	<description>my name's jade. i'm a child of the internet.</description>
	<lastBuildDate>Thu, 25 Feb 2010 19:30:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Robert K.</title>
		<link>http://zahnster.com/rant/please-back-off-the-startups/comment-page-1#comment-1276</link>
		<dc:creator>Robert K.</dc:creator>
		<pubDate>Sat, 10 Jan 2009 16:07:55 +0000</pubDate>
		<guid isPermaLink="false">http://zahnster.com/?p=132#comment-1276</guid>
		<description>Jade, I&#039;m not trying to hold your feet to the fire on the tumbler post (well, not too much anyway).  I just found the contrast in tone between your two posts, made within hours of each other, to be too tempting to not point out.

I&#039;ve been holding off on getting into a semi-religious debate about code style, but I might as well give my $.02 at this point.

You say, &quot;Code needs to be easily human readable&quot;, which I absolutely agree with.  However, this does not always mean &quot;variable names totally need to have meaning&quot;.

When I grade code on it&#039;s readability, variable naming is actually at the very bottom of my list of things to care about, which looks like this:

  An overview comment that provides describes what the file/class/module does at a high level, what requirements it has, and that gives an example of how the API is used.
  Public Method and Var docs that describe method behavior, and inputs/outputs, and what generally what state is accessible through the API
  Inline comments that provide a pseudo-code level description of what the code is doing.
  Descriptive variable names


I put far more weight on #1 and #2 than I do on #3 and #4.  As long as there are good doc-comments that accurately describe the public API, I&#039;m not going to get too bent out of shape about the rest.  The only time #3 and #4 are important are when you have to dive into the code implementation to figure out what exactly is happening.  If the developer has done a good job with the first two, that shouldn&#039;t be necessary (too often... for stable code... that doesn&#039;t have bugs... that you don&#039;t need to port or adapt. Hmm, okay, maybe it&#039;s sorta important. :-) )

Where variable names are concerned specifically, the problem is that sometimes there simply isn&#039;t a good descriptive name.  This is particularly true in abstract problem spaces like cryptography and, surprise, geometry and math.  You often have variables that hold interim state for which there simply is no good description.  Check out &lt;a href=&quot;http://en.wikipedia.org/wiki/MD5#Pseudocode&quot; rel=&quot;nofollow&quot;&gt;the pseudo-code for the MD5 algorithm&lt;/a&gt; for an example.  I&#039;m pretty sure this is what we&#039;re seeing in the JS graphics file.

Obviously this is less often the case with variables that appear as part of a public API.  Those variables are more likely to have a concise semantic meaning and their name should reflect that, of course.  But when it comes to what&#039;s inside the &quot;{...}&quot;s of a method, insisting on descriptive names can actually be counter-productive.  You&#039;ll end up with real head-scratchers like, &quot;rotatingHashAccumulator3&quot;, which aren&#039;t &lt;em&gt;actually&lt;/em&gt; any more readable, and just blow out what should be a single line of code across a half-dozen lines (making things less readable, not more so!)

This is why I personally emphasize inline comments over variable names.  They are &lt;strong&gt;much&lt;/strong&gt; more effective at making code readable, and they give you more latitude to use names that suit your coding style, whatever that may be.  They can also be a useful productivity tool - I&#039;ll often write these comments first to &quot;plan&quot; what my implementation is going to be, and then fill in the source code.

So there you have it.  In the case of the JS graphics file, it has good introductory comments, but it lacks the method-level documentation that I think pretty much all public libraries should have.  It would also benefit from inline comments that explain the various algorithmic behavior, something longer variable names probably wouldn&#039;t do much for.

(P.S. Short var names don&#039;t have a significant impact on code size when JS files are gzip&#039;ed.  And if yo&#039;re not gzip&#039;ing, you&#039;ve got bigger problems than var names.)</description>
		<content:encoded><![CDATA[<p>Jade, I&#8217;m not trying to hold your feet to the fire on the tumbler post (well, not too much anyway).  I just found the contrast in tone between your two posts, made within hours of each other, to be too tempting to not point out.</p>
<p>I&#8217;ve been holding off on getting into a semi-religious debate about code style, but I might as well give my $.02 at this point.</p>
<p>You say, &#8220;Code needs to be easily human readable&#8221;, which I absolutely agree with.  However, this does not always mean &#8220;variable names totally need to have meaning&#8221;.</p>
<p>When I grade code on it&#8217;s readability, variable naming is actually at the very bottom of my list of things to care about, which looks like this:</p>
<p>  An overview comment that provides describes what the file/class/module does at a high level, what requirements it has, and that gives an example of how the API is used.<br />
  Public Method and Var docs that describe method behavior, and inputs/outputs, and what generally what state is accessible through the API<br />
  Inline comments that provide a pseudo-code level description of what the code is doing.<br />
  Descriptive variable names</p>
<p>I put far more weight on #1 and #2 than I do on #3 and #4.  As long as there are good doc-comments that accurately describe the public API, I&#8217;m not going to get too bent out of shape about the rest.  The only time #3 and #4 are important are when you have to dive into the code implementation to figure out what exactly is happening.  If the developer has done a good job with the first two, that shouldn&#8217;t be necessary (too often&#8230; for stable code&#8230; that doesn&#8217;t have bugs&#8230; that you don&#8217;t need to port or adapt. Hmm, okay, maybe it&#8217;s sorta important. <img src='http://zahnster.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p>Where variable names are concerned specifically, the problem is that sometimes there simply isn&#8217;t a good descriptive name.  This is particularly true in abstract problem spaces like cryptography and, surprise, geometry and math.  You often have variables that hold interim state for which there simply is no good description.  Check out <a href="http://en.wikipedia.org/wiki/MD5#Pseudocode" rel="nofollow">the pseudo-code for the MD5 algorithm</a> for an example.  I&#8217;m pretty sure this is what we&#8217;re seeing in the JS graphics file.</p>
<p>Obviously this is less often the case with variables that appear as part of a public API.  Those variables are more likely to have a concise semantic meaning and their name should reflect that, of course.  But when it comes to what&#8217;s inside the &#8220;{&#8230;}&#8221;s of a method, insisting on descriptive names can actually be counter-productive.  You&#8217;ll end up with real head-scratchers like, &#8220;rotatingHashAccumulator3&#8243;, which aren&#8217;t <em>actually</em> any more readable, and just blow out what should be a single line of code across a half-dozen lines (making things less readable, not more so!)</p>
<p>This is why I personally emphasize inline comments over variable names.  They are <strong>much</strong> more effective at making code readable, and they give you more latitude to use names that suit your coding style, whatever that may be.  They can also be a useful productivity tool &#8211; I&#8217;ll often write these comments first to &#8220;plan&#8221; what my implementation is going to be, and then fill in the source code.</p>
<p>So there you have it.  In the case of the JS graphics file, it has good introductory comments, but it lacks the method-level documentation that I think pretty much all public libraries should have.  It would also benefit from inline comments that explain the various algorithmic behavior, something longer variable names probably wouldn&#8217;t do much for.</p>
<p>(P.S. Short var names don&#8217;t have a significant impact on code size when JS files are gzip&#8217;ed.  And if yo&#8217;re not gzip&#8217;ing, you&#8217;ve got bigger problems than var names.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Zahnster</title>
		<link>http://zahnster.com/rant/please-back-off-the-startups/comment-page-1#comment-1271</link>
		<dc:creator>Zahnster</dc:creator>
		<pubDate>Fri, 09 Jan 2009 18:01:38 +0000</pubDate>
		<guid isPermaLink="false">http://zahnster.com/?p=132#comment-1271</guid>
		<description>Ha! Touché.

When in development, variable names totally need to have meaning. There&#039;s no way around this - you develop code with short vars, 6 months later you don&#039;t know if &#039;rw&#039; means &#039;right wing&#039; or &#039;right window&#039;. Code needs to be easily human readable.

Now, compressing code on a production server is a best practice, and a very important one, but that&#039;s what things like &lt;a href=&quot;http://dean.edwards.name/packer/&quot; rel=&quot;nofollow&quot;&gt;Dean Edwards&#039; Packer&lt;/a&gt; is for, or the &lt;a href=&quot;http://synthesis.sbecker.net/pages/asset_packager&quot; rel=&quot;nofollow&quot;&gt;Asset Packages&lt;/a&gt; I blogged about before.

That&#039;s why you&#039;ll notice many of the popular open source libraries (like jQuery) have different compressions of the code you can download, depending on your purposes. That&#039;s open-source that rocks it.</description>
		<content:encoded><![CDATA[<p>Ha! Touché.</p>
<p>When in development, variable names totally need to have meaning. There&#8217;s no way around this &#8211; you develop code with short vars, 6 months later you don&#8217;t know if &#8216;rw&#8217; means &#8216;right wing&#8217; or &#8216;right window&#8217;. Code needs to be easily human readable.</p>
<p>Now, compressing code on a production server is a best practice, and a very important one, but that&#8217;s what things like <a href="http://dean.edwards.name/packer/" rel="nofollow">Dean Edwards&#8217; Packer</a> is for, or the <a href="http://synthesis.sbecker.net/pages/asset_packager" rel="nofollow">Asset Packages</a> I blogged about before.</p>
<p>That&#8217;s why you&#8217;ll notice many of the popular open source libraries (like jQuery) have different compressions of the code you can download, depending on your purposes. That&#8217;s open-source that rocks it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: solnic</title>
		<link>http://zahnster.com/rant/please-back-off-the-startups/comment-page-1#comment-1270</link>
		<dc:creator>solnic</dc:creator>
		<pubDate>Fri, 09 Jan 2009 17:51:03 +0000</pubDate>
		<guid isPermaLink="false">http://zahnster.com/?p=132#comment-1270</guid>
		<description>...actually short var names in JS libs are a good thing (less kb)...just my 2 cents :)</description>
		<content:encoded><![CDATA[<p>&#8230;actually short var names in JS libs are a good thing (less kb)&#8230;just my 2 cents <img src='http://zahnster.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Zahnster</title>
		<link>http://zahnster.com/rant/please-back-off-the-startups/comment-page-1#comment-1269</link>
		<dc:creator>Zahnster</dc:creator>
		<pubDate>Fri, 09 Jan 2009 16:43:38 +0000</pubDate>
		<guid isPermaLink="false">http://zahnster.com/?p=132#comment-1269</guid>
		<description>There&#039;s just a few things:

1) My tumblr blog should not be taken seriously.

2) I wasn&#039;t bashing the idea of open source code or even directly criticizing that jQuery plugin in particular (kind of surprised you figured out the plugin from the short code screenshot I posted). I was criticizing bad programming style, and I think I have every right to.

I never program anything without doing everything I can to help maintainability. There is a style to code and it should be open to critique - nobody should program with one letter variables because it&#039;s bad practice. (just ask &lt;a href=&quot;http://en.wikipedia.org/wiki/Programming_style#Appropriate_variable_names&quot; rel=&quot;nofollow&quot;&gt;wikipedia&lt;/a&gt;) It&#039;s the same as saying nobody should design a professional site with Comic Sans, or drive on the wrong side of the highway. Standards help everyone think on the same page, and having meaningful variables is one of the strongest programming conventions in existence. Things like whitespace can be overlooked - variable names really can&#039;t be.

To answer your first point, the Canvas class I&#039;ve been writing has been started from scratch, and it&#039;s been a solid 2 months of crazy changing evolution as I scale up the functionality. I&#039;m sure I could have wrote things better, I&#039;m far from being the best programmer in the universe. However, I do maintain proper style in my code, and I do take pride in that.

I&#039;m not implying that the jQuery plugin code is &#039;broken&#039; and that it should be fixed. Sure, I can go in there and decypher the variable names to give them meaning and return the code to them, but - why? I just took a look at the code to see how other people were using Canvas. The only reason I ranted was because of the programming practice, not that I hated the actual plugin.</description>
		<content:encoded><![CDATA[<p>There&#8217;s just a few things:</p>
<p>1) My tumblr blog should not be taken seriously.</p>
<p>2) I wasn&#8217;t bashing the idea of open source code or even directly criticizing that jQuery plugin in particular (kind of surprised you figured out the plugin from the short code screenshot I posted). I was criticizing bad programming style, and I think I have every right to.</p>
<p>I never program anything without doing everything I can to help maintainability. There is a style to code and it should be open to critique &#8211; nobody should program with one letter variables because it&#8217;s bad practice. (just ask <a href="http://en.wikipedia.org/wiki/Programming_style#Appropriate_variable_names" rel="nofollow">wikipedia</a>) It&#8217;s the same as saying nobody should design a professional site with Comic Sans, or drive on the wrong side of the highway. Standards help everyone think on the same page, and having meaningful variables is one of the strongest programming conventions in existence. Things like whitespace can be overlooked &#8211; variable names really can&#8217;t be.</p>
<p>To answer your first point, the Canvas class I&#8217;ve been writing has been started from scratch, and it&#8217;s been a solid 2 months of crazy changing evolution as I scale up the functionality. I&#8217;m sure I could have wrote things better, I&#8217;m far from being the best programmer in the universe. However, I do maintain proper style in my code, and I do take pride in that.</p>
<p>I&#8217;m not implying that the jQuery plugin code is &#8216;broken&#8217; and that it should be fixed. Sure, I can go in there and decypher the variable names to give them meaning and return the code to them, but &#8211; why? I just took a look at the code to see how other people were using Canvas. The only reason I ranted was because of the programming practice, not that I hated the actual plugin.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robert K.</title>
		<link>http://zahnster.com/rant/please-back-off-the-startups/comment-page-1#comment-1268</link>
		<dc:creator>Robert K.</dc:creator>
		<pubDate>Fri, 09 Jan 2009 13:00:42 +0000</pubDate>
		<guid isPermaLink="false">http://zahnster.com/?p=132#comment-1268</guid>
		<description>You make a good point about startup adoption rate being unpredictable, and I think you are right to defend startups for this. But I wouldn&#039;t call this a &quot;fundamental difference&quot;.  In the same way startups don&#039;t know how many people will use their service, developers don&#039;t know how many people will use their code.  Both parties have to make trade-offs when deciding how much energy to expend preparing their &quot;product&quot; for an unknown audience.  Is polishing documentation for code that nobody uses good practice... or just a waste of time?

The copyright notices in &lt;a href=&quot;http://plugins.jquery.com/files/jquery.draw.js_2.txt&quot; rel=&quot;nofollow&quot;&gt;the code in question&lt;/a&gt; show exactly how it&#039;s audience changed unexpectedly.  It&#039;s a jQuery port done by one person, of code that was written by someone else years before jQuery was created.  How big an audience was there _really_ for a JavaScript fillEllipse function back in 2000-2004?  This is the beauty of opensource: it allows something that was probably a small weekend experiment by someone years ago to become an important part of a high-profile project today.

I would be remiss to not point out that these two cases are fundamentally different in a different respect.  Startups often go to great lengths to attract and entice users, which invites a certain justifiable expectation of support and performance on the users&#039; part.  Startups also benefit tremendously from said users adopting their service and coming to rely on it. (This is, after all, often what determines whether a startup succeeds or fails).  In contrast, vast majority of opensource developers act out of simple altruism, a desire to help other developers avoid wasting time reproducing their efforts, with little in the way of compensation or reward.

    &quot;Here&#039;s what I&#039;ve done so far. &#039;Hope you find it useful.&quot;

Here are a few questions to ponder:

- How long would it have taken you to write that graphics library from scratch? Given the demands on your time, could you have done any better?

- Who should fix the problems you&#039;re criticizing? You have access to the code repository after a; by not fixing it yourself, are you implicitly saying your time is worth more than the code author&#039;s?</description>
		<content:encoded><![CDATA[<p>You make a good point about startup adoption rate being unpredictable, and I think you are right to defend startups for this. But I wouldn&#8217;t call this a &#8220;fundamental difference&#8221;.  In the same way startups don&#8217;t know how many people will use their service, developers don&#8217;t know how many people will use their code.  Both parties have to make trade-offs when deciding how much energy to expend preparing their &#8220;product&#8221; for an unknown audience.  Is polishing documentation for code that nobody uses good practice&#8230; or just a waste of time?</p>
<p>The copyright notices in <a href="http://plugins.jquery.com/files/jquery.draw.js_2.txt" rel="nofollow">the code in question</a> show exactly how it&#8217;s audience changed unexpectedly.  It&#8217;s a jQuery port done by one person, of code that was written by someone else years before jQuery was created.  How big an audience was there _really_ for a JavaScript fillEllipse function back in 2000-2004?  This is the beauty of opensource: it allows something that was probably a small weekend experiment by someone years ago to become an important part of a high-profile project today.</p>
<p>I would be remiss to not point out that these two cases are fundamentally different in a different respect.  Startups often go to great lengths to attract and entice users, which invites a certain justifiable expectation of support and performance on the users&#8217; part.  Startups also benefit tremendously from said users adopting their service and coming to rely on it. (This is, after all, often what determines whether a startup succeeds or fails).  In contrast, vast majority of opensource developers act out of simple altruism, a desire to help other developers avoid wasting time reproducing their efforts, with little in the way of compensation or reward.</p>
<p>    &#8220;Here&#8217;s what I&#8217;ve done so far. &#8216;Hope you find it useful.&#8221;</p>
<p>Here are a few questions to ponder:</p>
<p>- How long would it have taken you to write that graphics library from scratch? Given the demands on your time, could you have done any better?</p>
<p>- Who should fix the problems you&#8217;re criticizing? You have access to the code repository after a; by not fixing it yourself, are you implicitly saying your time is worth more than the code author&#8217;s?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Zahnster</title>
		<link>http://zahnster.com/rant/please-back-off-the-startups/comment-page-1#comment-1267</link>
		<dc:creator>Zahnster</dc:creator>
		<pubDate>Fri, 09 Jan 2009 02:16:29 +0000</pubDate>
		<guid isPermaLink="false">http://zahnster.com/?p=132#comment-1267</guid>
		<description>So, I was a bit harsh in my tumblr post, and for that I do apologize (I&#039;m a pottymouth), but there&#039;s a fundamental difference in the two scenarios, and in my mind, a very important one. 

I defend startups because the problems that tend to happen with them aren&#039;t really predictable or controllable by the people who create them. Mark Zuckerberg started Facebook for his college friends - now it has over 150 million *active* users. Even the best teams can only scale their app so fast, and the expectation of people to have a service at their disposal whenever and however they want is a bit too high. Without wanting to oversimplify, web services are a privilege, not a right (unless you&#039;re a paying member).

The reason I get openly frustrated with bad programming habits is because they&#039;re completely under the control of the developer. I would never release a piece of open source code without making every possible attempt to make sure the people who adopt it can understand how it works. Code is art, how you craft it is very important, and when someone doesn&#039;t take the care and effort to do so it comes off as lazy. I can&#039;t stand lazy, it&#039;s a huge pet peeve of mine.

Hopefully that&#039;ll satisfy the hypocrisy police.</description>
		<content:encoded><![CDATA[<p>So, I was a bit harsh in my tumblr post, and for that I do apologize (I&#8217;m a pottymouth), but there&#8217;s a fundamental difference in the two scenarios, and in my mind, a very important one. </p>
<p>I defend startups because the problems that tend to happen with them aren&#8217;t really predictable or controllable by the people who create them. Mark Zuckerberg started Facebook for his college friends &#8211; now it has over 150 million *active* users. Even the best teams can only scale their app so fast, and the expectation of people to have a service at their disposal whenever and however they want is a bit too high. Without wanting to oversimplify, web services are a privilege, not a right (unless you&#8217;re a paying member).</p>
<p>The reason I get openly frustrated with bad programming habits is because they&#8217;re completely under the control of the developer. I would never release a piece of open source code without making every possible attempt to make sure the people who adopt it can understand how it works. Code is art, how you craft it is very important, and when someone doesn&#8217;t take the care and effort to do so it comes off as lazy. I can&#8217;t stand lazy, it&#8217;s a huge pet peeve of mine.</p>
<p>Hopefully that&#8217;ll satisfy the hypocrisy police.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robert K.</title>
		<link>http://zahnster.com/rant/please-back-off-the-startups/comment-page-1#comment-1266</link>
		<dc:creator>Robert K.</dc:creator>
		<pubDate>Thu, 08 Jan 2009 23:37:19 +0000</pubDate>
		<guid isPermaLink="false">http://zahnster.com/?p=132#comment-1266</guid>
		<description>So am I allowed to laugh, gloat a little even, by pointing out that on the same day you wrote this, you also wrote this little nugget:
http://rauenzahner.tumblr.com/post/69169588

One could argue that the relationship between a startup and their users is much the same as that between a person who writes a piece of [opensource] code and the developers who benefit from it.  

*ahem*

That stomping noise you hear is, I believe, the sound of the Hypocracy Cops, in their metal-toed boots, beating a path to your door.</description>
		<content:encoded><![CDATA[<p>So am I allowed to laugh, gloat a little even, by pointing out that on the same day you wrote this, you also wrote this little nugget:<br />
<a href="http://rauenzahner.tumblr.com/post/69169588" rel="nofollow">http://rauenzahner.tumblr.com/post/69169588</a></p>
<p>One could argue that the relationship between a startup and their users is much the same as that between a person who writes a piece of [opensource] code and the developers who benefit from it.  </p>
<p>*ahem*</p>
<p>That stomping noise you hear is, I believe, the sound of the Hypocracy Cops, in their metal-toed boots, beating a path to your door.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
