<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
   <channel>
      <atom:link href="http://feeds.feedburner.com/codinghorror/" rel="self" type="application/rss+xml" />
      <title>Coding Horror</title>
      <link>http://www.codinghorror.com/blog/</link>
      <description>programming and human factors - Jeff Atwood</description>
      <language>en-us</language>
      <lastBuildDate>Mon, 09 Nov 2009 00:34:09 -0800</lastBuildDate>
      <pubDate>Mon, 09 Nov 2009 00:34:09 -0800</pubDate>
      <generator>http://www.movabletype.org/?v=4.25</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs>
      <image>
      <title>Coding Horror</title>
      <url>http://www.codinghorror.com/blog/images/coding-horror-official-logo-small.png</url>
      <width>100</width>
      <height>91</height>
      <description>Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved.</description>
      <link>http://www.codinghorror.com/blog/</link>
      </image>

      <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
         <title>Whitespace: The Silent Killer</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001310.html</link>
         <description><![CDATA[<p>
Ever have one of those days where <b>everything you check into source control is wrong?</b>
<p>
Also, how exactly is that day is different from any other? But seriously.
<p>
Code that is visible is <a href="http://www.codinghorror.com/blog/archives/000878.html">code that can be wrong</a>. No surprise there. But did you know that even the code you <i>can't</i> see may be wrong, too?
<p>
These are the questions that drive young programmers to madness. Take this perfectly innocent code, for example.
<p>
<img alt="code-whitespace-invisible.png" src="http://www.codinghorror.com/blog/images/code-whitespace-invisible.png" width="453" height="156" />
<p>
Looks fine, doesn't it? But hold on. Wait a second. Let's take another, closer look.
<p>
<img alt="code-whitespace-visible.png" src="http://www.codinghorror.com/blog/images/code-whitespace-visible.png" width="455" height="155" />
<p>
<i>OH. MY. <b>GOD!</b></i>
<p>
If you're not a programmer, you may be looking at these two images and wondering what the big deal is. That's fine. But I humbly submit that, well, you're not one of us. You don't appreciate what it's like to spend every freaking minute of every freaking day agonizing over the tiniest details of the programs you write. Not because we <i>want</i> to, you understand, but because the world explodes when we don't.
<p>
I mean that literally. Well, <a href="http://bugsniffer.blogspot.com/2007/11/infamous-software-failures.html">almost</a>. If one semicolon is out of place, <a href="http://www.google.com/search?q=failure+'missing+semicolon'">everything goes sideways</a>. That's how programming works. It's fun! Sometimes! I swear!
<p>
We got into this industry because, quite frankly, we are control freaks. It's who we are. It's what we do. Now to imagine, to our dismay, that there's all this stupid, useless <i>whitespace</i> at the ends of our lines. Stuff that's there, but we can't see it. Well, those are the nightmares OCD horror movies are made of. I have a full-body itchiness just talking about it.
<p>
Depending on how far down the rabbit-hole you want to go, there's any number of things you could do here:
<p>
<ul>
<li>Have a post-build step, perhaps something with a regular expression like <code>\s*?$</code> in it, that auto-cleans extra spaces checked into source control
<li>Execute a local macro which removes whitespace from ends of lines
<li>Have a special rule to highlight extra spaces
<li>Run your IDE in whitespace-always-visible mode, or toggle it frequently
</ul>
<p>
OK, fine, so maybe the world won't explode if there are a few extra bits of whitespace in my code.
<p>
But all the same, I think I'll go back and make <i>extra double plus sure</i> no more of that pesky whitespace has accumulated in my code when I wasn't looking. Just because I can't see it doesn't mean it's not out to get me.
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">JIRA 4</a> - Simplify issue tracking for everyone involved. <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">Get started</a> from $10 for 10 users.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001310.html</guid>
         <pubDate>Mon, 09 Nov 2009 00:34:09 -0800</pubDate>
      </item>

      <item>
         <title>Preserving Our Digital Pre-History</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001309.html</link>
         <description><![CDATA[<p>
I've spent a significant part of my life online. Not just on the internet, I mean, but on modems and early, primitive online communities. Today's internet is everything we couldn't have possibly dared to imagine twenty-five years ago, but there is a real risk of these early, tentative digital artifacts -- and for some, the beginnings of <a href="http://www.codinghorror.com/blog/archives/001194.html">our Hacker Odyssey</a> -- being lost forever in the relentless deluge of online progress. Sure, every single thing that happened in 2004 is documented exhaustively online. But 1994? <i>1984?</i> Not so much.
<p>
That's where <a href="http://ascii.textfiles.com/">Jason Scott</a> comes in.
<p>
You may know Jason Scott from <a href="http://www.bbsdocumentary.com/">BBS The Documentary</a>. Or, perhaps you're familiar with <a href="http://www.textfiles.com/">textfiles.com</a>, his massive (and growing) archive of what passed for blogs and forums in the earliest online era.
<p>
<blockquote>
A wonderful thing happened in the 1980s: Life started to go online. And as the world continues this trend, everyone finding themselves drawn online should know what happened before, to see where it all really started to come together and to know what went on, before it's forgotten.
<p>
When a historian or reporter tries to capture the feelings and themes that proliferated through the BBS Scene of the early 1980's, the reader nearly always experiences a mere glimpse of what went on. This is probably true of most any third-party reporting, but when the culture is your own, and when the experiences were your own, the gap between story and reality is that much wider, and it's that much harder to sit back and let the cliche-filled summary become "The Way It Was." You want to do something, anything so that the people who stumble onto the part of history that was yours know what it was like to grow up through it, to meet the people you did, to do the things you enjoyed doing. Maybe, you hope, they might even see the broader picture and the conclusions that you yourself couldn't see at the time. This is history the way the chronicled want it to be. 
</blockquote>
<p>
Jason is nothing less than <b>our generation's digital historian in residence</b>. When <a href="http://help.yahoo.com/l/us/yahoo/geocities/close/close-01.html">GeoCities went permanently offline</a> a week ago, <a href="http://ascii.textfiles.com/archives/2291">he was there</a> to help preserve it for posterity.
<p>
<a href="http://www.bbsdocumentary.com/"><img alt="bbs-documentary.png" src="http://www.codinghorror.com/blog/images/bbs-documentary.png" width="500" height="449" border="0" /></a>
<p>
BBS: The Documentary was a major milestone in his ongoing effort to document our digital pre-history. But it's only the beginning; there's also a huge documentary on text adventures, <a href="http://www.getlamp.com/">Get Lamp</a>, that's been in the works for a few years now. Unfortunately, progress has been slow. Because while being a digital historian is great, it's not exactly something you get <i>paid to do</i>.
<p>
But <b>maybe we can change that</b>. Witness <a href="http://www.kickstarter.com/projects/textfiles/the-jason-scott-sabbatical">Jason's kickstarter proposal</a>:
<p>
<blockquote>
Throughout all this, I had a day job - computer administration. It paid well, but I paid for it with my health. When my most recent employer and I parted ways, I decided I'd take this time finish some of the bigger projects I've been working on.
<p>
I suddenly thought back to Kickstarter and got this crazy idea - <b>what if I simply asked the world and fans to contribute a bit of money towards keeping me somewhat solvent, and give me the opportunity to go full-time with computer history?</b> If I was able to get all these things done over the years, what if I just asked people to subscribe or give me some patronage and in return I fill their free time with cool stuff to look at, learn from, and enjoy? 
</blockquote>
<p>
There are so many people whose online presences I greatly admire. But very few of them will go on to become part of the permanent written history of this era. I have no doubt whatsoever that Jason Scott is one of those people who <i>will</i>, thanks to his tireless efforts to preserve the flotsam and jetsam of our digital past, stuff that would otherwise be overlooked by the mainstream and lost forever.
<p>
I've pledged $100. <b>It is an honor to support his ongoing work of preserving our shared digital pre-history</b>. His history, is my history, is <i>our</i> history. A history of geeks, dorks, dweebs, nerds, and generally computer-obsessed misfits, but nonetheless -- it's something we all share. 
<p>
If this is something you believe in, I <a href="http://www.kickstarter.com/projects/textfiles/the-jason-scott-sabbatical">urge you to pledge as well</a>.
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">JIRA 4</a> - Simplify issue tracking for everyone involved. <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">Get started</a> from $10 for 10 users.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001309.html</guid>
         <pubDate>Thu, 05 Nov 2009 04:33:10 -0800</pubDate>
      </item>

      <item>
         <title>Stack Overflow Careers: Amplifying Your Awesome</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001308.html</link>
         <description><![CDATA[<p>
That <a href="http://www.codinghorror.com/blog/archives/001101.html">Stack Overflow thing we launched a year ago</a>? It's been <a href="http://blog.stackoverflow.com/2009/08/us-versus-hyphen/">going pretty well</a> so far. 
<p>
Of course, everyone knows you could code Stack Overflow in a long weekend. <a href="http://www.codinghorror.com/blog/archives/001284.html">It's trivial</a>. Assembling a worldwide community of smart, engaged software developers? <i>That's</i> a whole different ball of wax. Stack Overflow is a site by programmers, for programmers; it's only as good as the programmers who <a href="http://blog.stackoverflow.com/2008/11/stack-overflow-is-you/">choose to participate</a>.
<p>
<blockquote>
Stack Overflow isn't about me. Or anybody else on the Stack Overflow team for that matter.
<p>
<b>Stack Overflow is <i>you</i>.</b>
<p>
This is the scary part, the great leap of faith that Stack Overflow is predicated on: trusting your fellow programmers. The programmers who choose to participate in Stack Overflow are the "secret sauce" that makes it work. You are the reason I continue to believe in developer community as the greatest source of learning and growth. You are the reason I continue to get so many positive emails and testimonials about Stack Overflow. I can't take credit for that. But you can.
<p>
I learned the collective power of my fellow programmers long ago writing on Coding Horror. The community is far, far smarter than I will ever be. All I can ask &ndash; all any of us can ask &ndash; is to help each other along the path.
</blockquote>
<p>
I am continually humbled by the skill and expertise of the programmers who volunteer time to Stack Overflow. These programmers graciously donate tiny slivers of their day to help us -- and themselves -- become better programmers. These 5 and 10 minute slices of effort, across hundreds of thousands of questions and answers, become a permanently archived (and <a href="http://blog.stackoverflow.com/2009/06/stack-overflow-creative-commons-data-dump/">creative commons wiki licensed</a>) bread crumb content trail for future programmers to follow, edit, and contribute to themselves over time.
<p>
I'm thrilled to see Stack Overflow working so well for both askers and answerers; the "pay it forward" model of programmers helping their peers is <i>exactly</i> what we were shooting for. We'll never change the world, but it sure is nice to be able to improve our small corner of it just a little bit. Remember: bad code that isn't written, is bad code that another poor programmer won't have to debug. If we don't reach out to <s>slap</s>help new programmers and teach them the lessons we learned the hard way, who will? I'm only exaggerating a little when I say that <i>the future of our entire profession depends on it.</i>
<p>
If you're actively participating on Stack Overflow, we now have another way to convert those slices of effort into something that actively furthers your professional goals &ndash; <a href="http://careers.stackoverflow.com/">Stack Overflow Careers</a>.
<p>
<a href="http://careers.stackoverflow.com/"><img src="http://careers.stackoverflow.com/content/cso/img/logo.png" width="363" height="64" alt="Stack Overflow Careers" border="0"></a>
<p>
What is <a href="http://careers.stackoverflow.com/">careers.stackoverflow.com</a>? It's a few things:
<p>
<ul>
<li>a <b>completely free, public CV hosting service for programmers</b>, to share the cool stuff you've coded and created with the world.
<li>a way to explicitly <b>link your Stack Overflow profile</b> with your CV, to provide concrete examples of your communication skills and individual expertise to anyone who is interested.
<li>a better way to <b>connect great programmers with the best programming jobs</b>, for those who opt into the small annual listing fee.
</ul>
<p>
In short, Stack Overflow Careers <b>amplifies your awesome</b>.
<p>
I won't lie to you. This is also a business. That's why there are nominal opt-in listing fees for those programmers interested in seeking employment, and <i>substantial</i> fees for hiring managers who want to tap into the smart developers who grok Stack Overflow.
<p>
<font color="red">update:</font> I apologize if I wasn't clear. It is 100% free, forever, to create a public CV, put whatever HTML content you want in it, and link it to your Stack Overflow profile. Like so:
<p>
<ul>
<li><a href="http://careers.stackoverflow.com/klmr">http://careers.stackoverflow.com/klmr</a>
<li><a href="http://careers.stackoverflow.com/jongalloway">http://careers.stackoverflow.com/jongalloway</a>
<li><a href="http://careers.stackoverflow.com/brandan">http://careers.stackoverflow.com/brandan</a>
<li><a href="http://careers.stackoverflow.com/brentkeller">http://careers.stackoverflow.com/brentkeller</a>
<li><a href="http://careers.stackoverflow.com/mfoord">http://careers.stackoverflow.com/mfoord</a>
</ul>
<p>
These are of course freely indexable and searchable on the web. 
<p>
Beyond the free public component, there is a private (and completely optional) subscription component. For those programmers actively seeking employment, a small annual subscription fee allows inclusion in a private employer search UI. This is also explained in the <a href="http://careers.stackoverflow.com/faq">faq</a> and <a href="http://careers.stackoverflow.com/about">about</a>.
<p>
That said, we're also trying to do something a bit different here. Something better than the endless, mind-numbing acronym sea of monster.com, dice.com, et al. Joel and I believe <b>current hiring practices for programmers are incredibly broken</b>. We think we can do better.
<p>
<a href="http://www.dilbert.com"><img alt="dilbert-interview.png" src="http://www.codinghorror.com/blog/images/dilbert-interview.png" width="600" height="205" border="0" /></a>
<p>
We love our work, and so should you. Our goal isn't to put warm bodies in front of interviewers. <b>Our goal is to create love connections.</b> Instead of avid programmers pursuing disinterested and distracted companies, it's the other way around -- savvy companies who understand the competitive advantages of having the best programmers will pursue <i>you</i>. We connect smart, engaged hiring managers who "get it" with top programmers who love to code.
<p>
<img alt="computer-engineers-number-puzzle.jpg" src="http://www.codinghorror.com/blog/images/computer-engineers-number-puzzle.jpg" width="600" height="450" />
<p>
If you love to code, too, I encourage you to <a href="http://careers.stackoverflow.com/">create your own Stack Overflow CV</a>. Keep it private, or make it public via the URL of your choice -- it's completely free either way. If you think you might be actively looking for a job in the next 3 years, take advantage of <b>our <i>outrageously</i> low promotional pricing of $29 for a 3 year filing</b>. That way, at any point in those 3 years, you can flip a switch and become visible to hiring managers. Or not. It's totally up to you.
<p>
(also, if you're hiring, and your company appreciates top software engineers -- and you think you can convince our tough audience of that -- <a href="mailto:careers@stackoverflow.com">email us</a>)
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">JIRA 4</a> - Simplify issue tracking for everyone involved. <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">Get started</a> from $10 for 10 users.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001308.html</guid>
         <pubDate>Tue, 03 Nov 2009 01:07:43 -0800</pubDate>
      </item>

      <item>
         <title>Revisiting "The Fold"</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001307.html</link>
         <description><![CDATA[<p>
After I posted my blog entry on <a href="http://www.codinghorror.com/blog/archives/001306.html">Treating User Myopia</a> I got a lot of advice. Some useful, some not so useful. But the one bit of advice I hadn't anticipated was that we were not making good use of the area "above the fold". This surprised me. <b>Does the fold still matter?</b>
<p>
The fold refers to the border at the bottom of the browser window at the user's default screen resolution. Like so:
<p>
<img alt="the-fold-nytimes.png" src="http://www.codinghorror.com/blog/images/the-fold-nytimes.png" width="650" height="427" style="border: 1px solid silver;"/>
<p>
Way back in the dark ages of 1996, it was commonly thought that <a href="http://www.codinghorror.com/blog/archives/000376.html">users didn't know how to scroll a web page</a>.
<p>
<blockquote>
On the Web, the inverted pyramid becomes even more important since we know from several user studies that users don't scroll, so they will very frequently be left to read only the top part of an article. 
</blockquote>
<p>
Thus, it was critically important to <b>cram in as much content in as possible above that fold</b>, as anything below it was invisible to a huge number of users. They didn't know how to scroll, so they would never find it. Jacob Neilsen, renowned usability expert, is the author of the above quote. But he recanted his position in 2003:
<p>
<blockquote>
In 1996, I said that "users don't scroll." This was true at the time: many, if not most, users only looked at the visible part of the page and rarely scrolled below the fold. The evolution of the Web has changed this conclusion. As users got more experience with scrolling pages, many of them started scrolling.
</blockquote>
<p>
Scrolling is an example <a href="http://www.codinghorror.com/blog/archives/000376.html">usability versus learnability</a>. It was always my belief that users quickly learned to scroll, otherwise they were permanently crippled as web citizens. If you can't learn to scroll within an hour or so of using the web, you're going to have an awfully stunted experience -- so much so that you're probably better off not using it at all. In short, if you use the web, <i>you know how to scroll</i>, almost by definition. It is a fundamental skill.
<p>
Even today, people will <b>cite the ancient, irrelevant rule of The Fold</b> as if it's still law. In fact, I was just talking to a friend of mine who expressed his frustration at dealing with a middle manager who was using the "content must be above the fold" rule as a weapon, and demanding that all page content appear above the fold. It's terribly misguided.
<p>
Although thoroughly debunked, there are <b>still some hidden dangers from the fold</b>, and subtlety to how users react to it. As documented by <a href="http://www.cxpartners.co.uk/thoughts/the_myth_of_the_page_fold_evidence_from_user_testing.htm">a recent usability study on the fold</a>, there are three specific pitfalls to watch out for:
<p>
<ol>
<li><b>Don't cram everything in above the fold.</b> Users will explore and find your content -- as long as the page "looks" scrollable.
<li><b>Watch out for stark, horizontal lines that happen to line up with the fold.</b> This is the only factor that causes users to stop scrolling, because the page looks done and complete. Instead, have a small amount of content just visible, poking up above the fold. This encourages scrolling.
<li><b>Avoid in-page scroll bars</b>. The standard browser scrollbar is an indicator of the amount of content on the page that users learn to rely on. Placing &lt;iframe&gt; and other elements with scroll bars on the page can break this convention -- and may lead to users not scrolling.
</ol>
<p>
These are excellent guidelines, <a href="http://www.cxpartners.co.uk/thoughts/the_myth_of_the_page_fold_evidence_from_user_testing.htm">backed by actual eye tracking and experimental results</a>. You know, <i>science!</i> But how do they apply to me? First, I established where the fold actually was. Per Google Analytics, <b>about 25% of our users are using screen resolutions where the page fold is at about 700 or 800 pixels of height</b>. And remember, browsers have a lot of horizontal chrome that tends to squander that height -- toolbars, status bars, tabs, etcetera. The fold is probably much closer than you think it is.
<p>
Next, I looked at the advice I had been given regarding the top of the page. Sure enough, we had a bunch of irrelevant UI at the top that didn't really matter: things like redundant page titles, and two line title entry. <b>We were wasting critical real estate at the top of the page!</b> For the 25% of users who have a 700 or 800 pixel fold, items were pushed down far enough that they might not actually be visible. Worse still, the strong bottom border of the text entry area with the drag slider <i>could</i> possibly align with the page fold itself -- leading the user to believe that nothing is below there and failing to scroll.
<p>
It's not only a basic rule of writing, it's also a basic rule of the web: put the most important content at as close to the top of the page as you can. This isn't new advice, but it's so important that it never hurts to revisit it periodically in your own designs.
<p>
 In treating user myopia, it's not enough to place important stuff directly in the user's eyepoint. You also need to ensure that you've placed the absolute <i>most important stuff</i> at the top of the page -- and haven't created any accidental barriers to scrolling, so they can find the rest of it. The fold is far less important than it used to be, but it isn't quite as mythical as Bigfoot and the Loch Ness Monster quite yet.
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">JIRA 4</a> - Simplify issue tracking for everyone involved. <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">Get started</a> from $10 for 10 users.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001307.html</guid>
         <pubDate>Mon, 26 Oct 2009 15:25:05 -0800</pubDate>
      </item>

      <item>
         <title>Treating User Myopia</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001306.html</link>
         <description><![CDATA[<p>
I try not to talk too much about the <a href="http://blog.stackoverflow.com/2009/05/the-stack-overflow-trilogy/">trilogy</a> here, because there's <a href="http://blog.stackoverflow.com/">a whole other blog</a> for that stuff. But some of the lessons I've learned in the last year while working on them really put into bold relief some of my earlier blog entries on usability and user behavior.
<p>
One entry in particular that I keep coming back to is <a href="http://www.codinghorror.com/blog/archives/000114.html">Teaching Users to Read</a>. That was specific to dialog boxes, which not only <a href="http://www.codinghorror.com/blog/archives/000676.html">stop the proceedings with idiocy</a>, but are their own delightful brand of user interface poison. Fortunately, you don't see dialogs in web apps much, but this sort of modal dialog lunacy is, sadly, becoming more popular in today's AJAX-y world of web 2.5. Those who can't learn from history are <a href="http://en.wikiquote.org/wiki/George_Santayana">doomed to repeat it</a>, I guess.
<p>
Having five more years of development experience under my belt, I no longer believe that classic Larson strip is specific to dialog boxes.
<p>
<img src="http://www.codinghorror.com/blog/images/larson_what_dogs_hear.jpg" width="400" height="492" alt="What Dogs Hear">
<p>
The plain fact is <b>users will not read <i>anything</i> you put on the screen</b>.
<p>
What we're doing with the trilogy is not exactly rocket surgery. At its core, we run Q&A websites. And the most basic operation of any Q&A website is &hellip; asking a question. Something any two year old child knows how to do.
<p>
When we launched <a href="http://superuser.com">superuser.com</a>, that was our <s>third</s>fourth Q&A website. This one is for power users, and it's the broadest to date, topic-wise: anything dealing with computer software or hardware (that isn't gaming) is allowed.
<p>
<a href="http://superuser.com"><img src="http://sstatic.net/su/img/logo.png" width="250" height="60" alt="superuser.com" border="0"></a>
<p>
We've been at this for over a year now, doing nothing but relentlessly polishing and improving our Q&A engine based on community feedback. We're not particularly good, but we do try very, very hard not to suck. I thought surely, <i>surely</i> we must have something as simple as <b>the ask question form</b> down by now.
<p>
How foolish I was.
<p>
Let's take a look at one recent superuser question. I'm presenting it here as it would have been seen by the user who asked the question, while they were entering it on the ask question form.
<p>
<img alt="su-ask-resized.png" src="http://www.codinghorror.com/blog/images/su-ask-resized.png" width="750" height="495" style="border:1px solid silver" />
<p>
Immediately, there's a problem. <b>The question formatting is completely wrong!</b> It's one big jumble of text.
<p>
Our formatting rules aren't complicated. You can get a lot done with a bunch of simple paragraphs. <a href="http://www.codinghorror.com/blog/archives/001116.html">We use Markdown</a>, which offers basic formatting conventions that ape ASCII conventions. On top of that, we offer a <b>real-time preview</b> of how your question will look once submitted, directly under the question entry area. But none of that seemed to work for this particular asker, who, apparently, was totally satisfied with obviously broken formatting -- even though a few choice carriage returns would have worked wonders, and been immediately visible in the live preview.
<p>
Yes, yes, it inevitably gets whipped into shape through the collective efforts of our legions of community editors -- but that's not the point. It's best if the original asker gets the question formatted right to start with, and it is our job as UI designers to make that outcome as statistically likely as we can.
<p>
To that end, we've put a bunch of helpful tools on the ask question page to help users get the formatting right. <b>As UI designers, here's how we see the ask question page</b>:
<p>
<img alt="su-ask-what-we-want-the-user-to-see.png" src="http://www.codinghorror.com/blog/images/su-ask-what-we-want-the-user-to-see.png" style="border: 1px solid silver;" width="750" height="495" alt="how we see the ask question page" />
<p>
We've provided a toolbar with a <i>neon pink</i> help button above the question body, and to the right of the question body, we've provided a handy formatting quick reference with a link to the full formatting reference (which opens in a tab / new window by default).
<p>
But none of that matters, because <b>here's how the user sees the ask question page</b>:
<p>
<img alt="su-ask-what-the-user-sees.png" src="http://www.codinghorror.com/blog/images/su-ask-what-the-user-sees.png" width="750" height="495" style="border: 1px solid silver;" />
<p>
Or rather, here's everything the user <i>doesn't</i> see. 
<p>
When I said users don't read anything you put on the screen, I was lying. Users do read. But <b>users will only read the <i>absolute minimum</i> amount of text on the screen necessary to complete their task</b>. I can't quite explain it, but this kind of user myopia is epidemic. It's the same problem, everywhere I turn.
<p>
How do we treat user myopia? How do we reach these users? The ask question page is already dangerously close to cluttered with helpful tips, but apparently these helpful buttons, links, and text are all but invisible to a large segment of the user population. Sure, you could argue that <a href="http://superuser.com/">Super User</a> tends to attract less sophisticated users, but I see the exact same problem with programmers on <a href="http://stackoverflow.com">Stack Overflow</a>. As new users, a significant percentage of them can't figure out how to format code, even though there's not only a toolbar button that does it for you, but help text on the right explicitly describing how to do it manually. (Just indent 4 spaces. Spoiler alert!)
<p>
More and more, I'm thinking we need to put the formatting help -- for new users only -- <b>directly in their line of sight</b>. That is, pre-populate the question entry area with some example formatting that is typical of the average question. Nothing complicated. But at least then it'd be in the one -- and apparently the <i>only</i> one -- place myopic users are willing to look. Right in front of their freakin' faces.
<p>
The next time you're designing a UI, consider user myopia. You might be surprised just how myopic your users can be. Think long and hard about placing things <i>directly</i> in front of them, where they are not just visible, but <i>unavoidable</i>. Otherwise they might not be seen at all.
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">JIRA 4</a> - Simplify issue tracking for everyone involved. <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">Get started</a> from $10 for 10 users.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001306.html</guid>
         <pubDate>Thu, 22 Oct 2009 23:59:59 -0800</pubDate>
      </item>

      <item>
         <title>The Interview With The Programmer</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001305.html</link>
         <description><![CDATA[<p>
If the internet has perfected anything, it's the art of the crappy, phoned-in, half-assed email "interview". For all those who have bemoaned the often pathetic state of internet journalism, when it comes to interviews, you're largely correct. The purpose of most of these interviews is quick and dirty content filler with semi-famous folk spouting off whatever random thoughts they happen to have in their head at that exact moment. <a href="http://en.wikipedia.org/wiki/The_Nixon_Interviews">The Nixon Interviews</a>, it ain't.
<p>
That's why I'm normally not a huge fan of interview books, because interviews take an enormous amount of time and an enormous amount of legitimate, skilled journalistic effort to get right. Almost nobody does.
<p>
Imagine my surprise when <a href="http://www.amazon.com/dp/1430219483/?tag=codinghorror-20">Coders at Work: Reflections on the Craft of Programming</a> turns out to be that wonderfully rare intersection of uncommonly skilled interviewing and 15 of the most influential programmers to ever touch a keyboard.
<p>
<a href="http://www.amazon.com/dp/1430219483/?tag=codinghorror-20"><img alt="coders-at-work.png" src="http://www.codinghorror.com/blog/images/coders-at-work.png" width="300" height="442" border="0" /></a>
<p>
Yes, this is the same book Joel recently recommended in his controversial <a href="http://www.joelonsoftware.com/items/2009/09/23.html">Duct Tape Programmer</a> entry, which is why I was all the more skeptical. But he's dead on. I could (and probably will, knowing me) fill a year worth of blog posts just with the thought provoking quotes and two-paragraph insights revealed in these interviews. It's astonishingly good. If, after reading what these brilliant programmers have to say, you aren't motivated to research some programming topic mentioned inside, pack it in, because you aren't even <i>trying</i> any more.
<p>
I also realized Coders at Work can potentially serve as a job interview filter. If the next programmer you interview can't identify at least <i>one</i> of the programmers interviewed in <a href="http://www.amazon.com/dp/1430219483/?tag=codinghorror-20">Coders at Work</a> and tell you roughly what they're famous for &hellip;
<p>
<table width=450>
<tr><td>Frances Allen</td><td>Joe Armstrong</td><td>Joshua Bloch</td></tr>
<tr><td>Bernie Cosell</td><td>Douglas Crockford</td><td>L. Peter Deutsch</td></tr>
<tr><td>Brendan Eich</td><td>Brad Fitzpatrick</td><td>Dan Ingalls</td></tr>
<tr><td>Simon Peyton Jones</td><td>Donald Knuth</td><td>Peter Norvig</td></tr>
<tr><td>Guy Steele</td><td>Ken Thompson</td><td>Jamie Zawinski</td></tr>
</table>
<p>
&hellip; I'd say that's an immediate no-hire.
<p>
Incidentally, I saw the first Stack Overflow user reference on page 265, in the interview with Simon Peyton Jones, who mentions one <a href="http://www.cs.tufts.edu/~nr/">Norman Ramsey</a>. Hmm, I thought, that name sounds awfully familiar. And indeed <a href="http://stackoverflow.com/users/41661/norman-ramsey">it was</a>!
<p>
I would be remiss if I did not mention that the author, Peter Seibel, was <a href="http://www.codersatwork.com/">directly inspired</a> by Susan Lammers' classic 1986 book <a href="http://www.amazon.com/dp/1556152116/?tag=codinghorror-20">Programmers at Work: Interviews With 19 Programmers Who Shaped the Computer Industry</a>. 
<p>
<a href="http://www.amazon.com/dp/1556152116/?tag=codinghorror-20"><img alt="programmers-at-work.png" src="http://www.codinghorror.com/blog/images/programmers-at-work.png" width="300" height="374"  border="0" /></a>
<p>
This is one of my absolute favorite musty old computer books for many of the same reasons. As sources of inspiration go, this one is particularly &hellip; er, inspired. <a href="http://www.amazon.com/dp/1556152116/?tag=codinghorror-20">Programmers at Work</a> isn't just <i>the</i> archetypal programmer interview book -- it also holds up amazingly well for a book that is over twenty years old. It is a testament to the timelessness of not just code, but the art of coding, as exemplified by these 19 programmers. I believe Peter has legitimately crafted a modern remake that will be relevant for another twenty years. And I hope I don't have to tell you how extraordinarily rare that is among technical books.
<p>
(Some -- but not all from what I can tell -- key interviews from Programmers at Work were <a href="http://programmersatwork.wordpress.com/">placed online</a> last year by the author. So if you want to get a flavor of the book, check it out.)
<p>
Another notable recent collection of interviews is <a href="http://www.amazon.com/dp/0596515170/?tag=codinghorror-20">Masterminds of Programming: Conversations with the Creators of Major Programming Languages</a>. 
<p>
<a href="http://www.amazon.com/dp/0596515170/?tag=codinghorror-20"><img alt="masterminds-of-programming.png" src="http://www.codinghorror.com/blog/images/masterminds-of-programming.png" width="300" height="394" border="0" /></a>
<p>
Although I definitely enjoyed this book, there's something about the focus on programming languages and interview style that didn't quite grab me as forcefully as Coders at Work did. Also, if we're going to do languages, I'd like to see a bit broader representation -- perhaps a Volume II with Smalltalk, Ada, Pascal and so on?
<p>
These books are a potent reminder that computers are mostly a reflection of the people using them. In the art of software development, studying code isn't enough: <b>you have to study the people behind the software, too</b>. 
<table>
<tr><td class="welovecodinghorror">
[advertisement] <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">JIRA 4</a> - Simplify issue tracking for everyone involved. <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">Get started</a> from $10 for 10 users.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001305.html</guid>
         <pubDate>Sun, 18 Oct 2009 22:00:00 -0800</pubDate>
      </item>

      <item>
         <title>The State of Solid State Hard Drives</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001304.html</link>
         <description><![CDATA[<p>
I've seen a lot of people play <a href="http://www.codinghorror.com/blog/archives/001235.html">The Computer Performance Shell Game</a> poorly. They overinvest in a fancy CPU, while pairing it with limited memory, a plain jane hard drive, or a generic video card. For most users, that fire-breathing quad-core CPU is sitting around twiddling its virtual thumbs most of the time. Computer performance is typically limited by the <i>slowest</i> part in your system. You'd get better overall performance by building a balanced system and removing bottlenecks. 
<p>
One of those key bottlenecks -- and in my experience, the one typical users are most likely to underestimate -- is the hard drive. I've been a long time <a href="http://www.codinghorror.com/blog/archives/000800.html">advocate of having a small, fast 10,000 RPM boot drive</a> for your OS and key applications, and a larger, slower secondary drive for storage. The two drive approach is a smart strategy, regardless of your budget.
<p>
Hard drives may not be particularly sexy bits of hardware, but we're on the verge of a <b>major transition point in storage hardware</b> -- from physical, magnetic platters to solid state memory. I was an early solid state (SSD) drive adopter with <a href="http://www.codinghorror.com/blog/archives/000927.html">my last laptop purchase</a>, and it was a profound disappointment. Those first and second generation SSD drives turned out to be <i>slower</i> than their magentic equivalents, despite the eager promises of vendors. On top of that, they were incredibly expensive, and of limited capacity. Running Windows Vista on an early 32 gigabyte SSD was an exercise in pain and frustration on so many levels. What's not to love? A lot.
<p>
I eventually sold that SSD and replaced it with a traditional hard drive. I had grown deeply disillusioned with SSD drives. That is, until I read <a href="http://torvalds-family.blogspot.com/2008/10/so-i-got-one-of-new-intel-ssds.html">Linus Torvalds' report on the Intel X-25 SSD</a>:
<p>
<blockquote>
I can't recall the last time that a new tech toy I got made such a dramatic difference in performance and just plain usability of a machine of mine.
<p>
The whole thing just rocks. Everything performs well. You can put that disk in a machine, and suddenly you almost don't even need to care whether things were in your page cache or not. Firefox starts up pretty much as snappily in the cold-cache case as it does hot-cache. You can do package installation and big untars, and you don't even notice it, because your desktop doesn't get laggy or anything.
<p>
So here's the deal: right now, don't buy any other SSD than the Intel ones, because as far as I can tell, all the other ones are pretty much inferior to the much cheaper traditional disks, unless you never do any writes at all (and turn off 'atime', for that matter).
</blockquote>
<p>
At that moment, SSD drives came of age. And by that I mean, <b>they began to justify their hefty price premium at last</b>. But that was almost a year ago, and even the Intel drives -- as great as they were -- had <a href="http://hardware.slashdot.org/article.pl?sid=09/02/13/2337258">some teething problems</a>. Not to mention that price and capacity were still ongoing concerns.
<p>
But when Intel introduced the <a href="http://techreport.com/articles.x/17269/1">second generation, mainstream X25-M drives</a>, that's when I knew SSDs were poised to go mainstream. Now, those drives are still anything but <i>cheap</i>, at <b>$289 for 80 GB</b> and <b>$609 for 160 GB</b>. But they offer more performance than the original X25-E that Linus reviewed, at about half the price, with hardware fixes to address the fragmentation issue that plagued the original model.
<p>
Intel was the only game in town for about a year, but fortunately for us consumers, the competition finally caught up. The new Indilinx controller models, such as this <a href="http://www.anrdoezrs.net/click-2338938-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16820148319%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Solid%2BState%2BDisk-_-Crucial%2BTechnology-_-20148319&cjsku=N82E16820148319">Crucial 128 GB SSD</a>, are just as fast as the X25-M. And, best of all, they're <i>cheaper</i>, while also offering a not-insubstantial bump to 128 GB of storage!
<p>
<a href="http://www.anrdoezrs.net/click-2338938-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16820148319%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Solid%2BState%2BDisk-_-Crucial%2BTechnology-_-20148319&cjsku=N82E16820148319"><img alt="crucial-ssd-128gb-ct128m225.jpg" src="http://www.codinghorror.com/blog/images/crucial-ssd-128gb-ct128m225.jpg" width="520" height="442" border="0" /></a>
<p>
I picked this model up for <b>$325</b> plus tax and shipping. And, frankly, I was <b>blown away by the performance difference</b> compared to the 300 GB Velociraptor I had in my system before. That drive is not exactly chopped liver; it's incredibly fast by magnetic platter drive standards. But it's <i>beyond</i> slow next to the latest SSDs. See for yourself:
<p>
<a href="http://www.bjorn3d.com/read.php?cID=1651&pageID=7405"><img alt="ssd-vs-magnetic-graph.png" src="http://www.codinghorror.com/blog/images/ssd-vs-magnetic-graph.png" width="590" height="320" border="0"  /></a>
<p>
This is just an excerpt, <a href="http://www.google.com/search?q=crucial+CT128M225+ssd+review">browse the reviews</a> for more detail, but I was astonished how often this drive (based on the Indilinx Barefoot controller) topped the charts. Suffice it to say, <b>the performance increase is not subtle</b>. All those little pauses while your system pulls some chunk of data off the hard drive? They simply <i>cease to exist</i>.
<p>
How much do I like this drive? I like it so very much I bought one for every member of the Stack Overflow team, as a small gesture of thanks for enduring <a href="http://blog.stackoverflow.com/2009/10/introducing-stack-overflow-careers/">new feature crunch mode</a>. I couldn't sell my old Velociraptor on eBay fast enough.
<p>
In my humble opinion, $200 - $300 for a SSD is <i>easily</i> <b>the most cost effective performance increase you can buy</b> for a computer of anything remotely resembling recent vintage. Whether you prefer the <a href="http://www.jdoqocy.com/click-2338938-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16820167016%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Solid%2BState%2BDisk-_-Intel-_-20167016&cjsku=N82E16820167016">80 GB X25-M SSD</a> or the <a href="http://www.anrdoezrs.net/click-2338938-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16820148319%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Solid%2BState%2BDisk-_-Crucial%2BTechnology-_-20148319&cjsku=N82E16820148319">128 GB Crucial SSD</a>, it's money well invested for people like us who are obsessive about how their computer performs.
<p>
Trust me, you <i>will</i> feel the performance difference of a modern SSD in day to day computing. That's <b>far more than I can say for most of today's CPU and memory upgrades</b>. The transition from magnetic storage to solid state storage is nothing less than a breakthrough. It's already transformative; I can only imagine how fast, cheap, and large these drives are going to be in a few years. So, if you've ever wondered what performance would be like if everything was in RAM all the time -- well, we just got one giant step closer to that.
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">JIRA 4</a> - Simplify issue tracking for everyone involved. <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source=codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">Get started</a> from $10 for 10 users.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001304.html</guid>
         <pubDate>Tue, 13 Oct 2009 23:59:59 -0800</pubDate>
      </item>

      <item>
         <title>The Xanadu Dream</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001303.html</link>
         <description><![CDATA[<p>
Links are the <a href="http://www.codinghorror.com/blog/archives/000985.html">fundamental building blocks of the web</a>. And every time I click on one, I can't help recalling the odd visionary who came up with the original idea of clickable links in text, aka <a href="http://en.wikipedia.org/wiki/Hypertext">hypertext</a>, in 1963 -- <a href="http://en.wikipedia.org/wiki/Ted_Nelson">Ted Nelson</a>.
<p>
Ted Nelson is, shall we say, a <i>character</i>. He has gone on record many times with the four maxims that guide his life. He isn't shy about sharing them with anyone he meets:
<p>
<ol>
<li>most people are fools
<li>most authority is malignant
<li>God does not exist
<li>everything is wrong
</ol>
<p>
And that, in a nutshell, is pretty much everything you need to know about Ted Nelson. He is <b>the archetypal borderline autistic, non-conformist, free-thinking technologist</b>. Any resemblance between Ted and your average programmer is, I'm sure, completely coincidental. That's why his story is so fascinating to me. It hits close to home.
<p>
Like most programmers, Ted's reach often exceeded his grasp. Ted's vision of hypertext was far more grandiose than the motley assortment of links that is today's web. His vision was (and is) a bit of computer history lore that has become the stuff of legend: <a href="http://en.wikipedia.org/wiki/Project_Xanadu">Project Xanadu</a>.
<p>
<blockquote>
Xanadu, a global hypertext publishing system, is the longest-running vaporware story in the history of the computer industry. It has been in development for more than 30 years. This long gestation period may not put it in the same category as the Great Wall of China, which was under construction for most of the 16th century and still failed to foil invaders, but, given the relative youth of commercial computing, Xanadu has set a record of futility that will be difficult for other companies to surpass. The fact that Nelson has had only since about 1960 to build his reputation as the king of unsuccessful software development makes Xanadu interesting for another reason: the project's failure (or, viewed more optimistically, its long-delayed success) coincides almost exactly with the birth of hacker culture. Xanadu's manic and highly publicized swerves from triumph to bankruptcy show a side of hackerdom that is as important, perhaps, as tales of billion-dollar companies born in garages.
<p>
<a href="http://www.imdb.com/title/tt0081777/"><img alt="xanadu-movie.jpg" src="http://www.codinghorror.com/blog/images/xanadu-movie.jpg" width="417" height="241" border="0"  /></a>
<p>
Among people who consider themselves insiders, Nelson's Xanadu is sometimes treated as a joke, but this is superficial. Nelson's writing and presentations inspired some of the most visionary computer programmers, managers, and executives - including Autodesk Inc. founder John Walker - to pour millions of dollars and years of effort into the project. Xanadu was meant to be a universal library, a worldwide hypertext publishing tool, a system to resolve copyright disputes, and a meritocratic forum for discussion and debate. By putting all information within reach of all people, Xanadu was meant to eliminate scientific ignorance and cure political misunderstandings. And, on the very hackerish assumption that global catastrophes are caused by ignorance, stupidity, and communication failures, Xanadu was supposed to save the world. 
</blockquote>
<p>
The above text is excerpted from <a href="http://www.wired.com/wired/archive//3.06/xanadu_pr.html">the definitive 1995 Wired article on Project Xanadu</a>, which is still as electrifying to read today as it was then. The hubris and sheer scale of the Xanadu dream are at turns both inspiring and desperately, hopelessly out of touch.
<p>
Xanadu has 17 rules defining its behavior. As you're reading through this list, ask yourself <b>how many of these rules are satisfied by the current world wide web</b>, even in part:
<p>
<ol>
<li>Every Xanadu server is uniquely and securely identified.
<li>Every Xanadu server can be operated independently or in a network.
<li>Every user is uniquely and securely identified.
<li>Every user can search, retrieve, create and store documents.
<li>Every document can consist of any number of parts each of which may be of any data type.
<li>Every document can contain links of any type including virtual copies ("transclusions") to any other document in the system accessible to its owner.
<li>Links are visible and can be followed from all endpoints.
<li>Permission to link to a document is explicitly granted by the act of publication.
<li>Every document can contain a royalty mechanism at any desired degree of granularity to ensure payment on any portion accessed, including virtual copies ("transclusions") of all or part of the document.
<li>Every document is uniquely and securely identified.
<li>Every document can have secure access controls.
<li>Every document can be rapidly searched, stored and retrieved without user knowledge of where it is physically stored.
<li>Every document is automatically moved to physical storage appropriate to its frequency of access from any given location.
<li>Every document is automatically stored redundantly to maintain availability even in case of a disaster.
<li>Every Xanadu service provider can charge their users at any rate they choose for the storage, retrieval and publishing of documents.
<li>Every transaction is secure and auditable only by the parties to that transaction.
<li>The Xanadu client-server communication protocol is an openly published standard. Third-party software development and integration is encouraged.
</ol>
<p>
It is instructive, then, to consider the primary ways in which the modern web is functionally broken:
<p>
<ul>
<li><b>Link rot</b>. The odds of a hyperlink working are inversely proportional to the age of that hyperlink. Old links frequently break, because the server hosting the content disappears for any number of reasons over time. I've gotten to the point where I dread clicking on links from old web pages, because the per-click success rate is so abysmally low.
<li><b>Every website has unique usernames and passwords</b>. There is almost no <a href="http://www.codinghorror.com/blog/archives/001121.html">reliable centralized form of identity on the internet</a>, and those few that do exist are often poisoned by explicit commercial affiliation, such as Facebook Connect and Microsoft Passport. This is why curated anonymous, lightweight participation dominates the net -- best illustrated by Wikipedia.
<li><b>No redundancy</b>. If content is driven offline by temporary high traffic levels or, worse, catastrophic data loss, there may not be any way to recover that content. I know that Digg has services which auto-mirror highly rated links because Digg traffic can be so toxic to the destination links. (Ironically, all duggmirror.com links redirect to amazon.com now, which illustrates how ephemeral all this stuff tends to be.) I suppose if you're lucky the <a href="http://www.archive.org/">wayback machine</a> will eventually pick up a historical copy of the content, or the <a href="http://www.googleguide.com/cached_pages.html">Google cache</a> will hold a copy for some unknown amount of time while the site is offline. You'd probably have better odds praying for missing content to reappear.
</ul>
<p>
Let's put aside the more ambitious parts of Project Xanadu for the moment. <b>The current world wide web does basically <i>one</i> thing: simple, stupid, mindless hyperlinks</b>. But even that alone was enough to build a functional and useful internet for the world. And Google was able to build a <a href="http://www.codinghorror.com/blog/archives/001132.html">zillion dollar algorithm</a> out of discovering the relationship between those dumb hyperlinks.
<p>
All that, when the most fundamental building block of the web, the hyperlink, <i>barely works at all</i>. Hyperlinks are fraught with peril and pitfalls even under the best of conditions. The current state of hyperlinking is almost literally the stupidest thing we could build that works. Frankly, the current system sucks beyond belief, as Ted himself notes:
<p>
<blockquote>
HTML is precisely what we were trying to <i>prevent</i> -- ever-breaking links, links going outward only, quotes you can't follow to their origins, no version management, no rights management.
</blockquote>
<p>
The next time you're about to embark on a grandiose, glorious software Xanadu Dream of your own, <a href="http://www.25hoursaday.com/weblog/2009/09/27/DuctTapeProgrammersAndTheCultureOfComplexityInSoftwareProjects.aspx">take Dare's advice</a>.
<p>
<blockquote>
The bottom line is that a lot of the time it's OK to create a solution that solves 80% of the problem. Always remember that shipping is a feature.
</blockquote>
<p>
Consider the reality of what's actually possible, what people can understand, and what us all too human programmers can practically implement. It might not be the Xanadu you dreamed of -- heck, it might even <i>suck</i> -- but it'll at least have a fighting chance of <b>existing in reality rather than fantasy</b>.
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] <a href="http://www.atlassian.com/software/jira/?s_kwcid=codinghorror&utm_source= codinghorror&utm_medium=referral&utm_campaign=footer_link&utm_content=jira4_from_10" rel="nofollow">JIRA 4</a> now available - full featured version starting from $10.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001303.html</guid>
         <pubDate>Mon, 12 Oct 2009 02:38:33 -0800</pubDate>
      </item>

      <item>
         <title>Email: The Variable Reinforcement Machine</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001302.html</link>
         <description><![CDATA[<p>
How often do you check your email per day?
<p>
Does checking your email make you more productive or less productive?
<p>
Oh, sure, we delude ourselves into <i>thinking</i> we're being extra-productive by obsessively checking and responding to our email, but in reality we're attending too frequently to our own desire for gratification and sabotaging our own productivity in the process.
<p>
As Dan Ariely explains in a postscript to <a href="http://www.amazon.com/dp/0061854549/?tag=codinghorror-20">Predictably Irrational</a>, he smells a rat, and so should you:
<p>
<blockquote>
Skinner distinguished between fixed-ratio schedules of reinforcement and variable-ratio schedules of reinforcement. Under a fixed schedule, a rat received a reward of food after it pressed the lever a fixed number of times -- say 100 times. Under the variable schedule, the rat earned a food pellet after it pressed the lever a <i>random</i> number of times. Sometimes it would receive the food pellet after pressing 10 times, and sometimes after pressing 200 times. 
<p>
Under the variable schedule of reinforcement, the arrival of the reward is unpredictable. On the face of it, one might expect that the fixed schedules of reinforcement would be more motivating and rewarding because the rat can learn to predict the outcome of his work. Instead, Skinner found that the variable schedules were actually <i>more</i> motivating. The most telling result was that <b>when the rewards ceased, the rats who were under the fixed schedule stopped working almost immediately, but those under the variable schedules kept working for a very long time.</b>
</blockquote>
<p>
If this reminds you of gambling,  that's because <b>gambling explicitly works under the very same schedule of variable reinforcement</b>. 
<p>
<a href="http://headrush.typepad.com/creating_passionate_users/2007/03/is_twitter_too_.html"><img alt="messaging-as-slot-machine.jpg" src="http://www.codinghorror.com/blog/images/messaging-as-slot-machine.jpg" width="475" height="396" border="0" /></a>
<p>
Go ahead, pull the "new email' lever. Take a chance. Most of the time you'll end up a loser, the proud recipient of yet another spam email, a press release you don't care about, or some irrelevant conversation someone has cc:ed you into. But not always. There are those rare few times when you'll hit the jackpot: you'll get an important bit of information you needed, or tentative contact from a long lost friend or associate, or other good news.
<p>
We're so ecstatic to get that single useful email out of hundreds that we can't keep ourselves from compulsively pressing the new email lever over and over and over, hoping it will happen again soon, like the caged rats in Skinners' experiments.
<p>
We desperately need to ask ourselves, and those around us, to <b>revisit the purpose of email</b>. Given what we know about <a href="http://softwarenation.blogspot.com/2009/01/importance-of.html">the importance of flow to productive work</a>, and how <a href="http://www.codinghorror.com/blog/archives/000691.html">multi-tasking is largely a myth</a>, is it worth the constant stream of minor interruptions?
<p>
We've overloaded email with so many meanings that it has imploded as a communication medium. Need an urgent answer to your question within a few minutes? Fire off a quick email and demand a response! Want to have a long back and forth discussion with several people? Email everyone! Do you have a new theory that you desperately want to explain to someone? Send it to them via email! Got a funny joke or picture you're dying to share? Email it to the office alias!
<p>
When we treat email as the kitchen sink of communication, appropriate for everything, <a href="http://www.codinghorror.com/blog/archives/001191.html">it simply ceases to work at all</a>.
<p>
Kathy Sierra was <a href="http://headrush.typepad.com/creating_passionate_users/2007/03/is_twitter_too_.html">concerned that Twitter had the same variable reinforcement problem</a>, but I think Twitter is in fact part of the <i>answer</i> to the problem.
<p>
<h1>Stop. Sending. Email.</h1>
<p>
Instead of abusing email as a "one size fits all" conduit for communication, be smart. <a href="http://www.codinghorror.com/blog/archives/001064.html">Know when to escalate your communication</a> to the right medium for the particular message you're trying to deliver:
<p>
<ul>
<li>Broad kudos? Post it on a feedback forum or your blog.
<li>Need an urgent, immediate answer? Pick up the phone and call.
<li>Got something that needs a lot of touchy feely discussion? Set up a face to face meeting.
<li>Discussing a particular topic or product? Post it on a public message board.
<li>Is this more of a friendly, social thing? Try using a social network like Twitter or Facebook.
<li>Business proposal? Perhaps it would be smart to approach indirectly, through soliciting recommendations of business associates.
</ul>
<p>
The real solution here is to move people beyond email silos wherever and whenever possible. Some amount of email is still inevitable, though. What steps can we take to turn our email from a dangerous variable reinforcement machine to something more &hellip; sane? Predictable, even?
<p>
<ul>
<li>Turn off all notification and interruption features in your email client.
<li>Only check your email at regular, scheduled intervals.
<li>Set up your email client to automatically highlight those emails from friends and business associates who are historically known to send you useful email.
</ul>
<p>
Before you send that next email -- or press the "retrieve mail" button again -- ask yourself: <i>do I smell a rat?</i>
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] Interested in <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>? See how a world-leading software vendor is practicing <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001302.html</guid>
         <pubDate>Mon, 28 Sep 2009 02:00:32 -0800</pubDate>
      </item>

      <item>
         <title>9 Ways Marketing Weasels Will Try to Manipulate You</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001301.html</link>
         <description><![CDATA[<p>
I recently read <a href="http://www.amazon.com/dp/0061854549/?tag=codinghorror-20">Predictably Irrational</a>. 
<p>
<a href="http://www.amazon.com/dp/0061854549/?tag=codinghorror-20"><img alt="predictably-irrational-book-cover.png" src="http://www.codinghorror.com/blog/images/predictably-irrational-book-cover.png" width="325" height="500" border="0" style="border:1px solid silver"  /></a>
<p>
It's a fascinating examination of why human beings are wired and conditioned to react irrationally. We human beings are a selfish bunch, so it's all the more surprising to see how easily we can be manipulated to behave in ways that run counter to our own self-interest. 
<p>
This isn't just a "gee-whiz" observation; understanding how and why we behave irrationally is important. If you don't understand how these irrational behaviors are triggered, <b>the marketing weasels will use them against you.</b>
<p>
In fact, it's already happening. Witness <a href="http://www.seomoz.org/blog/10-irrational-human-behaviors-how-to-leverage-them-to-improve-web-marketing">10 Irrational Human Behaviors and How to Leverage Them to Improve Web Marketing</a>. Don't say I didn't warn you.
<p>
Let's take a look at the various excerpts presented in that article, and consider <b>how we can avoid falling into the rut of predictably irrational behavior</b> -- and defend ourselves from those vicious marketing weasels.
<p>
<h2>1. Encourage false comparisons</h2>
<p>
<blockquote>
When Williams-Sonoma introduced bread machines, sales were slow. When they added a "deluxe" version that was 50% more expensive, they started flying off the shelves; the first bread machine now appeared to be a bargain
<p>
When contemplating the purchase of a $25 pen, the majority of subjects would drive to another store 15 minutes away to save $7. When contemplating the purchase of a $455 suit, the majority of subjects would not drive to another store 15 minutes away to save $7. The amount saved and time involved are the same, but people make very different choices. Watch out for relative thinking; it comes naturally to all of us.
</blockquote>
<p>
<ul>
<li>Realize that some premium options exist as decoys -- that is, they are there only to make the less expensive options look more appealing, because they're easy to compare. Don't make binding decisions solely based on how easy it is to compare two side-by-side options from the same vendor. Try comparing all the alternatives, even those from other vendors.
<li>Don't be swayed by relative percentages for small dollar amounts. Yes, you saved 25%, but how much effort and time did you expend on that seven bucks?
</ul>
<p>
<h2>2. Reinforce Anchoring</h2>
<p>
<blockquote>
Savador Assael, the Pearl King, single-handedly created the market for black pearls, which were unknown in the industry before 1973. His first attempt to market the pearls was an utter failure; he didn't sell a single pearl. So he went to his friend, Harry Winston, and had Winston put them in the window of his 5th Avenue store with an outrageous price tag attached. Then he ran full page ads in glossy magazines with black pearls next to diamonds, rubies, and emeralds. Soon, black pearls were considered precious.
<p>
Simonsohn and Loewenstein found that people who move to a new city remain anchored to the prices they paid in their previous city. People who move from Lubbock to Pittsburgh squeeze their families into smaller houses to pay the same amount. People who move from LA to Pittsburgh don't save money, they just move into mansions.
</blockquote>
<p>
<ul>
<li>Scale your purchases to your needs, not your circumstances or wallet size. What do you actually use? How much do you use it, and how frequently?
<li>Try to objectively measure the value of what you're buying; don't be tricked into measuring relative to similar products or competitors. How much does buying this save you or your company? How much benefit will you get out of it? Attempt to measure that benefit by putting a concrete dollar amount on it.
</ul>
<p>
<h2>3. It's "Free"!</h2>
<p>
<blockquote>
Ariely, Shampanier, and Mazar conducted an experiment using Lindt truffles and Hershey's Kisses.  When a truffle was $0.15 and a kiss was $0.01, 73% of subjects chose the truffle and 27% the Kiss. But when a truffle was $0.14 and a kiss was <i>free</i>, 69% chose the kiss and 31% the truffle.
<p>
According to standard economic theory, the price reduction shouldn't have lead to any behavior change, but it did.
<p>
Ariely's theory is that for normal transactions, we consider both upside and downside. But when something is free, we forget about the downside. "Free" makes us perceive what is being offered as immensely more valuable than it really is. Humans are loss-averse; when considering a normal purchase, loss-aversion comes into play. But when an item is free, there is no visible possibility of loss
</blockquote>
<p>
<ul>
<li>You will tend to overestimate the value of items you get for free. Resist this by viewing free stuff skeptically rather than welcoming it with open arms. If it was really that great, why would it be free? 
<li>Free stuff often comes with well hidden and subtle strings attached. How will using a free service or obtaining a free item influence your future choices? What paid alternatives are you avoiding by choosing the free route, and why?
<li>How much effort will the free option cost you? Are there non-free options which would cost less in time or effort? How much is your time worth?
<li>When you use a free service or product, you are implicitly endorsing and encouraging the provider, effectively beating a path to their door. Is this something you are comfortable with?
</ul>
<p>
<h2>4. Exploit social norms</h2>
<p>
<blockquote>
The AARP asked lawyers to participate in a program where they would offer their services to needy employees for a discounted price of $30/hour. No dice. When the program manager instead asked if they'd offer their services for free, the lawyers overwhelmingly said they would participate
</blockquote>
<p>
<ul>
<li>Companies may appeal to your innate sense of community or public good to convince you to do their work at zero pay. Consider carefully before choosing to participate; what do <i>you</i> get out of contributing your time and effort? Is this truly a worthy cause? Would this be worth doing if it was a paid gig? 
<li>When it comes to the web, make sure you aren't being turned into <a href="http://www.codinghorror.com/blog/archives/001295.html">a digital sharecropper</a>.
</ul>
<p>
<h2>5. Design for Procrastination</h2>
<p>
<blockquote>
Ariely conducted an experiment on his class.  Students were required to write three papers.  Ariely asked the first group to commit to dates by which they would turn in each paper.  Late papers would be penalized 1% per day.  There was no penalty for turning papers in early.  The logical response is to commit to turning all three papers in on the last day of class. The second group was given no deadlines; all three papers were due in the last day of class. The third group was directed to turn their papers in on the 4th, 8th, and 12th weeks.
<p>
The results? Group 3 (imposed deadlines) got the best grades. Group 2 (no deadlines) got the worst grades, and Group 1 (self-selected deadlines) finished in the middle. Allowing students to pre-commit to deadlines improved performance. Students who spaced out their commitments did well; students who did the logical thing and gave no commitments did badly.
</blockquote>
<p>
<ul>
<li>Steer clear of offers of low-rate trial periods which auto-convert into automatic recurring monthly billing. They know that most people will procrastinate and forget to cancel before the recurring billing kicks in.
<li>Either favor fixed-rate, fixed-term plans -- or become meticulous about cancelling recurring services when you're not using them. 
</ul>
<p>
<h2>6. Utilize the Endowment Effect</h2>
<p>
<blockquote>
Ariely and Carmon conducted an experiment on Duke students, who sleep out for weeks to get basketball tickets; even those who sleep out are still subjected to a lottery at the end.  Some students get tickets, some don't. The students who didn't get tickets told Ariely that they'd be willing to pay up to $170 for tickets. The students who did get the tickets told Ariely that they wouldn't accept less than $2,400 for their tickets.
<p>
There are three fundamental quirks of human nature. We fall in love with what we already have. We focus on what we might lose, rather than what we might gain. We assume that other people will see the transaction from the same perspective as we do.
</blockquote>
<p>
<ul>
<li>The value of what you've spent so far on a service, product, or relationship -- in effort or money -- is probably far less than you think. Be willing to walk away.
<li>Once you've bought something, never rely on your internal judgment to assess its value, because you're too close to it now. Ask other people what they'd pay for this service, product, or relationship. Objectively research what others pay online.
</ul>
<p>
<h2>7. Capitalize on our Aversion to Loss</h2>
<p>
<blockquote>
Ariely and Shin conducted an experiment on MIT students. They devised a computer game which offered players three doors: Red, Blue, and Green. You started with 100 clicks. You clicked to enter a room. Once in a room, each click netted you between 1-10 cents. You could also switch rooms (at the cost of a click). The rooms were programmed to provide different levels of rewards (there was variation within each room's payoffs, but it was pretty easy to tell which one provided the best payout).
<p>
Players tended to try all three rooms, figure out which one had the highest payout, and then spend all their time there. (These are MIT students we're talking about). Then, however, Ariely introduced a new wrinkle: Any door left unvisited for 12 clicks would disappear forever.  With each click, the unclicked doors shrank by 1/12th.
<p>
Now, players jumped from door to door, trying to keep their options open.They made 15% less money; in fact, by choosing any of the doors and sticking with it, they could have made more money.
<p>
Ariely increased the cost of opening a door to 3 cents; no change--players still seemed compelled to keeping their options open. Ariely told participants the exact monetary payoff of each door; no change. Ariely allowed participants as many practice runs as they wanted before the actual experiment; no change. Ariely changed the rules so that any door could be "reincarnated" with a single click; no change.
<p>
Players just couldn't tolerate the idea of the loss, and so they did whatever was necessary to prevent their doors from closing, even though disappearance had no real consequences and could be easily reversed. We feel compelled to preserve options, even at great expense, even when it doesn't make sense.
</blockquote>
<p>
<ul>
<li>If your choices are artificially narrowed, don't passively get funneled towards the goal they're herding you toward. Demand choice, even if it means switching vendors or allegiances.
<li>Don't pay extra for options, unless you can point to hard evidence that you <i>need</i> those options. Some options exist just to make you doubt yourself, so you'll worry about not having them.
</ul>
<p>
<h2>8. Engender Unreasonable Expectations</h2>
<p>
<blockquote>
Ariely, Lee, and Frederick conducted yet another experiment on MIT students. They let students taste two different beers, and then choose to get a free pint of one of the brews.  Brew A was Budweiser.  Brew B was Budweiser, plus 2 drops of balsamic vinegar per ounce.
<p>
When students were not told about the nature of the beers, they overwhelmingly chose the balsamic beer. When students were told about the true nature of the beers, they overwhelmingly chose the Budweiser. If you tell people up front that something might be distasteful, the odds are good they'll end up agreeing with you--because of their expectations.
</blockquote>
<p>
<ul>
<li>Whatever you've heard about a brand, company, or product -- there's no substitute for your own hands-on experience. Let your own opinions guide you, not the opinions of others.
<li>Just because something is labelled "premium" or "pro" or "award-winning" doesn't mean it is. Research these claims; don't let marketing set your expectations. Rely on evidence and facts.
</ul>
<p>
<h2>9. Leverage Pricing Bias</h2>
<p>
<blockquote>
Ariely, Waber, Shiv, and Carmon made up a fake painkiller, Veladone-Rx. An attractive woman in a business suit (with a faint Russian accent) told subjects that 92% of patients receiving VR reported significant pain relief in 10 minutes, with relief lasting up to 8 hours.
<p>
When told that the drug cost $2.50 per dose, nearly all of the subjects reported pain relief. When told that the drug cost $0.10 per dose, only half of the subjects reported pain relief. The more pain a person experienced, the more pronounced the effect. A similar study at U Iowa showed that students who paid list price for cold medications reported better medical outcomes than those who bought discount (but clinically identical) drugs.
</blockquote>
<p>
<ul>
<li>Price often has nothing to do with value. Expensive is not synonymous with quality. Investigate whether the price is justified; never accept it at face value.
<li>Don't fall prey to the "moneymoon"; just because you paid for something doesn't mean it's automatically worthwhile. Not everything we pay money for works well, or was even worth what we spent for it. We all make mistakes when buying things, but we don't want to admit it.
</ul>
<p>
What I learned from <a href="http://www.amazon.com/dp/0061854549/?tag=codinghorror-20">Predictably Irrational</a> is that <b>everyone is irrational sometimes, and that's OK</b>. We're not perfectly logical Vulcans, after all. The trick is training yourself to know when you're <i>most likely</i> to make irrational choices, and to resist those impulses.
<p>
If you aren't at least aware of our sad, irrational human condition, well ... that's exactly where the marketing weasels want you.
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] Interested in <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>? See how a world-leading software vendor is practicing <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001301.html</guid>
         <pubDate>Thu, 10 Sep 2009 10:51:36 -0800</pubDate>
      </item>

      <item>
         <title>If It Looks Corporate, Change It</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001300.html</link>
         <description><![CDATA[<p>
Are you familar with <a href="http://www.codinghorror.com/blog/archives/000163.html">happy talk</a>?
<p>
<blockquote>
If you're not sure whether something is happy talk, there's one sure-fire test: if you listen very closely while you're reading it, you can actually hear a tiny voice in the back of your head saying "Blah blah blah blah blah...."
<p>
A lot of happy talk is the kind of self-congratulatory promotional writing that you find in badly written brochures. Unlike good promotional copy, it conveys no useful information, and focuses on saying how great we are, as opposed to delineating what makes us great. 
</blockquote>
<p>
Happy talk is the kudzu of the internet; the place is lousy with the stuff.
<p>
And then there's the visual equivalent of happy talk. Those cloying, meaningless stock photos of happy users doing ... <i>something</i> ... with a computer. 
<p>
<img alt="stock-photo-happy-users.jpg" src="http://www.codinghorror.com/blog/images/stock-photo-happy-users.jpg" width="600" height="400" /></form>
<p>
What is going on here? Given the beatific expressions, you'd think they were undergoing some kind of nerd rapture. Maybe they're getting a sneak preview of <a href="http://en.wikipedia.org/wiki/Technological_singularity">the singularity</a>, I don't know.
<p>
It's unclear to me why companies (and even some individuals) think they need happy talk, stock photos of multicultural computer users, or the occasional <a href="http://www.headsethotties.com/">headset hottie</a>. Jason Cohen <a href="http://blog.asmartbear.com/blog/youre-a-little-company-now-act-like-one.html">provides an explanation</a>:
<p>
<blockquote>
Even before I had a single customer, I "knew" it was important to look professional. My website would need to look and feel like a "real company." I need culture-neutral language complimenting culturally-diverse clip-art photos of frighteningly chipper co-workers huddled around a laptop, awash with the thrill and delight of configuring a JDBC connection to SQL Server 2008.
<p>
It also means adopting typical "marketing-speak," so my "About Us" page started with:
<p>
<blockquote>
Smart Bear is the leading provider of enterprise version control data-mining tools. Companies world-wide use Smart Bear's Code Historian software for risk-analysis, root-cause discovery, and software development decision-support.
</blockquote>
<p>
"Leading provider?" "Data mining?" I'm not even sure what that means. But you have to give me credit for an impressive quantity of hyphens.
<p>
That's what you're supposed to do, right? That's what other companies do, so it must be right. Who am I to break with tradition? 
</blockquote>
<p>
I'm not sure where we got our ideas about this stuff, but it is true that some large companies promote a kind of doublespeak "professionalism". <a href="http://headrush.typepad.com/creating_passionate_users/2005/09/dignity_is_dead.html">Kathy Sierra describes her experiences at Sun</a>:
<p>
<blockquote>
By the time I got to Sun, using the word "cool" in a customer training document was enough to warrant an entry in your annual performance eval. <i>And not in a good way.</i>
<p>
I cannot count the times I heard the word "professionalism" used as justification for why we couldn't do something. But I can count the few times I heard the word "passion" used in a meeting where the goal was to get developers to adopt our newest Java technologies. What changed? 
<p>
Some argue that by maintaining strict professionalism, we can get the more conservative, professional clients and thus grow the business. Is this true? Do we really need these clients? Isn't it possible that we might even grow more if we became braver?
</blockquote>
<p>
It's a shame that this misguided sense of professionalism is sometimes used as an excuse to put up weird, Orwellian communication barriers between yourself and the world. At best it is a facade to hide behind; at worst it encourages us to emulate so much of what is wrong with large companies. Allow me to paraphrase the <a href="http://www.codinghorror.com/blog/archives/000516.html">simple advice of Elmore Leonard</a>:
<p>
<blockquote>
If it looks corporate, change it.
</blockquote>
<p>
The next time you find yourself using <i>professional</i> text, or <i>professional</i> stock images, consider the value of this "professionalism". Is it legitimately helping you communicate? Or is it getting in the way?
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001300.html</guid>
         <pubDate>Wed, 02 Sep 2009 23:59:59 -0800</pubDate>
      </item>

      <item>
         <title>Have You Met Your Dog, Patches?</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001299.html</link>
         <description><![CDATA[<p>
The Gamasutra article <a href="http://www.gamasutra.com/view/feature/4111/dirty_coding_tricks.php">Dirty Coding Tricks</a> is a fantastic read. One part of it in particular rang true for me.
<p>
<blockquote>
Consider the load of pain I found myself in when working on a conversion of a 3D third person shooter from the PC to the original PlayStation.
<p>
Now, the PS1 has no support for floating point numbers, so we were doing the conversion by basically recompiling the PC code and overloading all floats with fixed point. That actually worked fairly well, but were it fell apart was in collision detection.
<p>
The level geometry that was supplied to us worked reasonably well in the PC version of the game, but when converted to fixed point, all kinds of seams, T-Junctions and other problems were nudged into existence by the microscopic differences in values between fixed and floats. This problem would manifest itself by the main character (called "Damp") simply falling through those tiny holes, into the abyss below the level.
<p>
We patched the holes we found, tweaking the geometry until Damp no longer fell through. But then the game went into test at the publisher, and suddenly a flood of "falling off the world" bugs were delivered to us. Every day a fresh batch of locations were found with these little holes that Damp could slip through. We would fix that bit of geometry, then the next day they would send us ten more. This went on for several days. The publisher's test department employed one guy whose only job was to jump around the world for ten hours a day, looking for places he could fall through.
<p>
<b>The problem here was that the geometry was bad.</b> It was not tight and seamless geometry. It worked on the PC, but not on the PS1, where the fixed point math vastly magnified the problems. The ideal solution was to fix the geometry to make it seamless.
<p>
However, this was a vast task, impossible to do in the time available with our limited resources, so we were relying on the test department to find the problem areas for us.
</blockquote>
<p>
There's never time to do it right, but there's always time to do it over. If this sounds familiar, you're not alone. I have at times found myself slipping into this pattern, continually patching the same code over and over. It's the kind of code that, when submitted for code review, you're tempted to self-deprecatingly introduce as <b>have you met my dog, patches?</b>
<p>
<img alt="our dog, patches" src="http://www.codinghorror.com/blog/images/our-dog-patches.jpg" width="510" height="488" class="mt-image-none" style="" />
<p>
While "patchiness" isn't always a bad thing -- the venerable Apache HTTP Server is testament to that -- it's <a href="http://en.wikipedia.org/wiki/Apache_HTTP_Server#History_and_name">probably an exception</a>.
<p>
<blockquote>
the original FAQ on the Apache Server project's website, from 1996 to 2001, claimed that "The result after combining [the NCSA httpd patches] was a patchy server."
</blockquote>
<p>
Reading the Gamasutra article shamed me into to attacking a section of extra-patchy Stack Overflow code. Code which I constantly had to tweak in various ongoing ways to get it to work right. But first, I had to <a href="http://www.codinghorror.com/blog/archives/000123.html">get over my fear</a>. Fear. That's what led to all the patching in the first place. It was obvious this was <a href="http://www.codinghorror.com/blog/archives/001230.html">working code which had become crufty over time</a>, but it <i>was working</i>. And it's one of the core bits of functionality in the site. In those circumstances, it's easy to mentally justify "just this small change, just this once" rather than the fundamental rewrite you really need.
<p>
When you finally realize you've spent the last six months telling yourself the same "just this small change, just this once" lie, then <b>you've met your dog patches, too</b>. 
<p>
Now what are you going to do about that rascally scamp?
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] Interested in <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>? See how a world-leading software vendor is practicing <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001299.html</guid>
         <pubDate>Thu, 27 Aug 2009 23:59:59 -0800</pubDate>
      </item>

      <item>
         <title>That Means It's Working</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001298.html</link>
         <description><![CDATA[<p>
We may kid ourselves into thinking we're writing out of some sense of public good, or to create connections, or contribute some small bit of knowledge to the world. But let's face it. Most of us blog because <b>we're raving egomaniacs</b>. We not only love to hear ourselves talk, we're incredibly eager to hear other people talk about <i>us</i>, and the more the better. I think <a href="http://www.codinghorror.com/blog/archives/000752.html">Dale Carnegie put it best</a>.
<p>
<blockquote>
Nothing is sweeter to someone's ears than their own name.
</blockquote>
<p>
So it should come as no surprise that I have an automatic Google ego search set up for my name. Nothing special about that. It is considered neighborly to have your ear to the ground (within reason), and to politely comment on relevant articles mentioning you and your "stuff". All very standard, banal, ego-fluffing stuff.
<p>
But of all the mentions I've gotten, nobody has utterly nailed it in <a href="http://tncrocks.com/log/2009/03/10/ive-come-to-the-realization-t/">the way that Brian Gianforcaro has</a>.
<p>
<a href="http://www.codinghorror.com/blog/images/atwood-blog-post.png"><img src="http://www.codinghorror.com/blog/images/atwood-blog-post-quote.png" alt="I've come to the realization that everything I hate about Jeff Atwood, is also something I hate about my self" width="464" height="283" style="border:1px solid silver"></a>
<p>
Right on. That's one thing you and I have in common, burny.
<p>
As a software developer, <a href="http://www.codinghorror.com/blog/archives/000878.html">you are your own worst enemy</a>. The sooner you realize that, the better off you'll be. In fact, that's the tipping point between amateurs and professionals in our industry: the professionals realize <a href="http://www.codinghorror.com/blog/archives/001020.html">everything they write sucks</a>.
<p>
So, to the extent that I can become a conduit for other programmers to have that same epiphany in their <i>own</i> programming careers, <b>that means it's working.</b>
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] Interested in <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>? See how a world-leading software vendor is practicing <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001298.html</guid>
         <pubDate>Mon, 24 Aug 2009 23:59:59 -0800</pubDate>
      </item>

      <item>
         <title>The Only Truly Failed Project</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001297.html</link>
         <description><![CDATA[<p>
Do you remember <a href="http://en.wikipedia.org/wiki/Microsoft_Bob">Microsoft Bob</a>? If you do, you probably remember it as an intensely marketed but laughable failure -- what some call <a href="http://www.microsoft-watch.com/content/operating_systems/bill_gates_legacy_microsofts_top_10_flops.html">the "number one flop" at Microsoft</a>.
<p>
<a href="http://img237.imageshack.us/img237/9201/bobfrontlargero7.jpg"><img alt="Microsoft Bob, front" src="http://www.codinghorror.com/blog/images/bob-front-small.png" width="300" height="363" border="0" style="border:1px solid silver;"/></a>
<a href="http://img241.imageshack.us/img241/9260/bobbacklargehs7.jpg"><img alt="Microsoft Bob, back" src="http://www.codinghorror.com/blog/images/bob-back-small.png" width="300" height="361" border="0" style="border:1px solid silver;"/></a>
<p>
There's no <i>question</i> that Microsoft Bob was nothing short of an unmitigated disaster. But that's the funny thing about failures -- <b>they often lead to later successes</b>. Take it from someone who <a href="http://www.techflash.com/microsoft/Innovation_The_lessons_of_Bob_53605837.html">lived and breathed the Bob project</a>:
<p>
<blockquote>
I was the one who sent Bill Gates email at the height of the positive Bob-mania that said we were likely to face a horrible backlash. Tech influentials had started telling me that they were going to bury Bob. They not only didn't like it, they were somehow angry that it had even been developed. It was personal.
<p>
And that's exactly what happened. Bob got killed. But first, it was ridiculed and stomped.
<p> 
For Microsoft, it was a costly mistake. For the people who worked on it, Bob taught many lessons. Lessons that came into play for subsequent products that made a big impact, both at Microsoft and beyond.
<p>
How many people know that the lead developer for Bob 2.0 was also the <a href="http://en.wikipedia.org/wiki/Gabe_Newell">co-founder of Valve</a> and the development lead for Half-Life, which became an industry phenomenon, winning more than 50 Game of the Year awards and selling more than 10 million copies?
<p>
Or that Darrin Massena - development lead for Bob 1.0, most recently named Technical Innovator of the Year here in Washington State - and Valve co-founder Mike Harrington are the co-founders and partners behind <a href="http://en.wikipedia.org/wiki/Picnik">Picnik</a> - which is now the world's leading online photo editor, attracting almost 40 million visits a month and a million unique users a day.
</blockquote>
<p>
And then, of course, I'd be remiss if I didn't mention that Melinda French -- Bill Gates' <a href="http://en.wikipedia.org/wiki/Melinda_Gates">future wife</a> -- managed the Microsoft Bob project at one point. Bob was the first Microsoft consumer project that <a href="http://www.post-gazette.com/businessnews/19990523bob6.asp">Bill Gates personally had a hand in launching</a>. Well, at least he got a wife out of it.
<p>
Yes, Bob was an obvious, undisputed and epic failure. We can point and laugh at Bob. But to me, <b>Bob is less of a comic figure than a tragic one</b>.
<p>
Unless you're an exceptionally lucky software developer, you've probably worked on more projects that failed than projects that succeeded. Failure is <a href="http://www.codinghorror.com/blog/archives/000588.html">de rigeur in our industry</a>. Odds are, you're working on a project that will fail <i>right now</i>. Oh sure, it may not seem like a failure yet. Maybe it'll fail in some completely unanticipated way. Heck, maybe your project will buck the odds and even succeed.
<p>
But I doubt it.
<p>
I <a href="http://www.codinghorror.com/blog/archives/000770.html">own a boxed copy of Microsoft Bob</a>. I keep it on my shelf to remind me that these kinds of relentless, inevitable failures aren't the crushing setbacks they often appear from the outside. On the contrary; I believe it's <a href="http://www.codinghorror.com/blog/archives/000300.html">impossible to succeed without failing</a>.
<p>
<blockquote>
Charles Bosk, a sociologist at the University of Pennsylvania, once conducted a set of interviews with young doctors who had either resigned or been fired from neurosurgery-training programs, in an effort to figure out what separated the unsuccessful surgeons from their successful counterparts.
<p>
He concluded that, far more than technical skills or intelligence, <b>what was necessary for success was the sort of attitude that Quest has -- a practical-minded obsession with the possibility and the consequences of failure</b>. "When I interviewed the surgeons who were fired, I used to leave the interview shaking," Bosk said. "I would hear these horrible stories about what they did wrong, but the thing was that they didn't know that what they did was wrong. In my interviewing, I began to develop what I thought was an indicator of whether someone was going to be a good surgeon or not. It was a couple of simple questions: Have you ever made a mistake? And, if so, what was your worst mistake? The people who said, 'Gee, I haven't really had one,' or, 'I've had a couple of bad outcomes but they were due to things outside my control' -- invariably those were the worst candidates. And the residents who said, 'I make mistakes all the time. There was this horrible thing that happened just yesterday and here's what it was.' They were the best. They had the ability to rethink everything that they'd done and imagine how they might have done it differently." 
</blockquote>
<p>
I recently watched the documentary <a href="http://www.amazon.com/dp/B000OV967S/?tag=codinghorror-20">Tilt: The Battle to Save Pinball</a>.
<p>
<object width="400" height="300">	<param name="allowfullscreen" value="true" />	<param name="allowscriptaccess" value="always" />	<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1232459&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" />	<embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1232459&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p>
It's a gripping story of a pinball industry in crisis. In order to save it, the engineers at Williams -- the only remaining manufacturer of pinball machines in the United States -- were given a herculean task: invent a new form of pinball <i>so compelling</i> that it makes all previous pinball machines seem obsolete. I don't want to spoil the whole documentary, so I'll gloss over exactly how that happened, but astoundingly enough -- they succeeded.
<p>
And then were promptly laid off en masse, as Williams shut down its pinball operations.
<p>
Unlike Microsoft Bob, the Williams engineers built an almost revolutionary product that was both critically acclaimed and sold well -- but <b>none of that mattered</b>. It's sobering to watch the end reel of Tilt, as the engineers involved mournfully discuss the termination of their bold and seemingly successful project.
<p>
<blockquote>
Everyone was in awe. They couldn't understand why it happened. Here we'd just done this thing that from all we could tell was a total success. Why would they do that?
<p>
We succeeded. Management gave us an impossible goal, and we sat there and we actually did what they thought we couldn't do.
<p>
You know, we didn't really win... we lost. I gave it everything I had. I think that those fifty guys that worked on it, they also passionately did everything that they could.
</blockquote>
<p>
Sometimes, <b>even when your project succeeds, you've failed</b>. Due to forces entirely beyond your control. It's depressing, but it's reality.
<p>
The trailout isn't all doom and gloom. It also documents the ways in which these talented pinball engineers went on to practice their craft after being laid off. Most of them still work in the video game or pinball industry. Some freelance. Others formed their own companies. A few went on to work at Stern Pinball, which figured out how to make a small number of pinball machines and still turn a profit.
<p>
These two stories, these two projects -- the abject failure of Microsoft Bob, and the aborted success of Pinball 2000 -- have something in common beyond mere failure. All the engineers involved <b>not only survived these failures, but often went on to greater success afterwards</b>. Possibly as a direct result of their work on these "failures".
<p>
Failure is a wonderful teacher. But there's no need to seek out failure. It will find you. Whatever project you're working on, consider it an opportunity to learn and practice your craft. <a href="http://www.codinghorror.com/blog/archives/001207.html">It's worth doing because, well, it's worth doing</a>. The journey of the project should be its own reward, regardless of whatever happens to lie at the end of that journey.
<p>
The only truly <i>failed</i> project is <b>the one where you didn't learn anything along the way</b>.
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] Interested in <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>? See how a world-leading software vendor is practicing <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001297.html</guid>
         <pubDate>Wed, 19 Aug 2009 23:59:59 -0800</pubDate>
      </item>

      <item>
         <title>All Programming is Web Programming</title>
         <dc:creator>Jeff Atwood</dc:creator>
         <link>http://www.codinghorror.com/blog/archives/001296.html</link>
         <description><![CDATA[<p>
Michael Braude <a href="http://michaelbraude.blogspot.com/2009/05/why-ill-never-be-web-guy.html">decries the popularity of web programming</a>:
<p>
<blockquote>
<b>The reason most people want to program for the web is that they're not smart enough to do anything else</b>.  They don't understand compilers, concurrency, 3D or class inheritance.  They haven't got a clue why I'd use an interface or an abstract class.  They don't understand: virtual methods, pointers, references, garbage collection, finalizers, pass-by-reference vs. pass-by-value, virtual C++ destructors, or the differences between C# structs and classes.  They also know nothing about process.  Waterfall?  Spiral?  Agile?  Forget it.  They've never seen a requirements document, they've never written a design document, they've never drawn a UML diagram, and they haven't even heard of a sequence diagram.
<p>
But they do know a few things: they know how to throw an ASP.NET webpage together, send some (poorly done) SQL down into a database, fill a dataset, and render a grid control.  This much they've figured out.  And the chances are good it didn't take them long to figure it out.
<p>
So forgive me for being smarmy and offensive, but I have no interest in being a 'web guy'. And there are two reasons for this.  First, it's not a challenging medium for me.  And second, because the vast majority of Internet companies are filled with bad engineers - precisely because you don't need to know complicated things to be a web developer.  As far as I'm concerned, the Internet is responsible for a collective dumbing down of our intelligence.  You just don't have to be that smart to throw up a webpage.
<p>
I really hope everybody's wrong and everything doesn't "move to the web."  Because if it does, one day I will either have to reluctantly join this boring movement, or I'll have to find another profession.
</blockquote>
<p>
Let's put aside, for the moment, the absurd argument that web development is not challenging, and that it attracts sub-par software developers. Even if that was true, it's irrelevant.
<p>
I hate to have to be the one to break the bad news to Michael, but for an increasingly large percentage of users, <a href="http://www.codinghorror.com/blog/archives/000883.html">the desktop application is already dead</a>. Most desktop applications typical users need have been replaced by web applications for years now. And more are replaced every day, as web browsers evolve to become more robust, more capable, more powerful.
<p>
You <i>hope</i> everything doesn't "move to the web"? Wake the hell up! <b>It's already happened!</b> 
<p>
Any student of computing history will tell you that the dominance of web applications is  <a href="http://www.codinghorror.com/blog/archives/000913.html">exactly what the principle of least power predicts</a>:
<p>
<blockquote>
Computer Science spent the last forty years making languages which were as powerful as possible. <b>Nowadays we have to appreciate the reasons for picking not the most powerful solution but the least powerful.</b> The less powerful the language, the more you can do with the data stored in that language. If you write it in a simple declarative from, anyone can write a program to analyze it. If, for example, a web page with weather data has RDF describing that data, a user can retrieve it as a table, perhaps average it, plot it, deduce things from it in combination with other information. At the other end of the scale is the weather information portrayed by the cunning Java applet. While this might allow a very cool user interface, it cannot be analyzed at all. The search engine finding the page will have no idea of what the data is or what it is about. The only way to find out what a Java applet means is to set it running in front of a person.
</blockquote>
<p>
The web is the very embodiment of <a href="http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html">doing the <s>stupidest</s>simplest thing that could possibly work</a>. If that scares you -- if that's disturbing to you -- then I humbly submit that you have no business being a programmer.
<p>
Should <i>all</i> applications be web applications? Of course not. There will continue to be important exceptions and classes of software that have nothing to do with the web. But these are minority and specialty applications. Important niches, to be sure, but niches nonetheless.
<p>
If you want your software to be <b>experienced by as many users as possible</b>, there is absolutely no better route than a web app. The web is the most efficient, most pervasive, most immediate distribution network for software ever created. Any user with an internet connection and a browser, anywhere in the world, is two clicks away from interacting with the software you wrote. The audience and reach of even the <i>crappiest</i> web application is astonishing, and getting larger every day. That's why I coined Atwood's Law.
<p>
<blockquote>
<b><a href="http://www.codinghorror.com/blog/archives/000913.html">Atwood's Law</a></b>: any application that <i>can</i> be written in JavaScript, <i>will</i> eventually be written in JavaScript.
</blockquote>
<p>
Writing Photoshop, Word, or Excel in JavaScript makes zero engineering sense, but it's inevitable. It will happen. In fact, it's already happening. Just look around you.
<p>
As a software developer, <b>I am happiest writing software <a href="http://www.codinghorror.com/blog/archives/000773.html">that gets used</a></b>. What's the point of <a href="http://www.codinghorror.com/blog/archives/001288.html">all this craftsmanship</a> if your software ends up locked away in a binary executable, which has to be <i>purchased</i> and <i>licensed</i> and <i>shipped</i> and <i>downloaded</i> and <i>installed</i> and <i>maintained</i> and <i>upgraded</i>? With all those old, traditional barriers between programmers and users, it's a wonder the software industry managed to exist at all. But in the brave new world of web applications, those limitations fall away. There are no boundaries. Software can be everywhere.
<p>
Web programming is far from perfect. It's <b>downright kludgy</b>. It's true that any J. Random Coder can plop out a terrible web application, and 99% of web applications are absolute crap. But this also means the truly <i>brilliant</i> programmers are now getting their code in front of hundreds, thousands, maybe even millions of users that they would have had absolutely no hope of reaching pre-web. There's nothing sadder, for my money, than code that dies unknown and unloved. Recasting software into web applications empowers programmers to get their software in front of <i>someone</i>, somewhere. Even if it sucks.
<p>
If the audience and craftsmanship argument isn't enough to convince you, <a href="http://www.skrenta.com/2007/07/fletchers_angry_list_of_startu.html">consider the business angle</a>.
</a>
<blockquote>
You're doing a web app, right? This isn't the 1980s. Your crummy, half-assed web app will still be more successful than your competitor's most polished software application.
</blockquote>
<p>
Pretty soon, <b>all programming will be web programming.</b> If you don't think that's a cause for celebration for the average working programmer, then maybe you <i>should</i> find another profession.
<p>
<table>
<tr><td class="welovecodinghorror">
[advertisement] Interested in <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>? See how a world-leading software vendor is practicing <a href="http://www.atlassian.com/agile" rel="nofollow">agile</a>.
</td></tr>
</table>
<p>]]></description>         
         <guid>http://www.codinghorror.com/blog/archives/001296.html</guid>
         <pubDate>Fri, 14 Aug 2009 03:57:24 -0800</pubDate>
      </item>

   </channel>
</rss>
