<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Seconds &#38; pixels</title>
	<atom:link href="http://www.anothem.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.anothem.net</link>
	<description>&#34;This is our last dance. This is ourselves. Under pressure.&#34;</description>
	<lastBuildDate>Sun, 16 Jun 2013 16:42:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>The makers and the breakers</title>
		<link>http://www.anothem.net/archives/2013/05/30/makers-breakers/</link>
		<comments>http://www.anothem.net/archives/2013/05/30/makers-breakers/#comments</comments>
		<pubDate>Thu, 30 May 2013 21:53:14 +0000</pubDate>
		<dc:creator>Alex Florescu</dc:creator>
				<category><![CDATA[Random firings of neurons]]></category>
		<category><![CDATA[icpc]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.anothem.net/?p=895</guid>
		<description><![CDATA[When I was coaching students]]></description>
				<content:encoded><![CDATA[<p>When I was coaching students for <a title="ACM ICPC" href="http://icpc.baylor.edu/" target="_blank">ICPC</a>, I would tell them to always assume that their code is not working until proven otherwise.</p>
<p>You see&#8230;in the ICPC, when you think your program is done, you submit your code to be judged and it can take a while for you to get back a response. During peak times it can be up to 30 minutes, which in a 5 hour competition is an eternity. To top it up, there&#8217;s only computer per team (of three), so, if after the wait the result that comes back is not &#8220;Accepted&#8221;, you have to stop a teammate who is already coding a solution for the next problem and sit down at the keyboard to debug your old code with no idea what&#8217;s wrong. If you&#8217;ve already mentally moved on to the next problem, it&#8217;s even more difficult.</p>
<p>As a result, one piece of advice for our teams would be to print out the code (I know, I cringed also&#8230; but it&#8217;s a competition, you play by the rules and make the best of what&#8217;s there) and start debugging it as soon as they hit the submission button. Consider it broken at all times, unless officially confirmed that it isn&#8217;t. The protest was always: but how do I know what&#8217;s wrong? Truth is you don&#8217;t&#8230; but you won&#8217;t know almost anything more from the judge&#8217;s response either! Except for crashes and time-limits, everything else usually comes back as a &#8220;Wrong answer&#8221;. You are not told what the input or output was. How useful is that! So you may as well assume it came in as a wrong answer and get started early.</p>
<p>Regardless, the biggest problem has nothing to do with not knowing what&#8217;s wrong. The problem here is getting yourself in the mindset that your code is broken. It&#8217;s very difficult, because if you genuinely believed that, you wouldn&#8217;t be submitting it in the first place! While you may agree to play this game and run through some scenarios, you *know* that your code works. The problem is done, finished, resolved. Ok, you&#8217;ll do a bit of this &#8220;fake&#8221; testing and debugging, since we all agreed to do it beforehand, but deep inside you know it&#8217;s pointless. You just built this thing, you&#8217;re in the <strong>maker&#8217;s mindset</strong>. Forcing yourself to assume that it&#8217;s broken requires you to be a different person, it requires you to be in a <strong>breaker&#8217;s mindset</strong>. And switching from one to the other, when it comes to something you&#8217;ve built, is far from easy. That&#8217;s why at ICPC, having another team member write test cases for your problem is sometimes a good idea.</p>
<p>The concepts transition unchanged from ICPC to real world commercial software development. Even with test-oriented developers and TDD (which everyone should be doing), you need &#8220;breakers&#8221;. You need people who were not directly involved in building the system that are motivated to try and break it. People that &#8220;know&#8221; that the system is broken and just need to figure out where and how. If you care about quality, you need a team of breakers.</p>
<p>Because as anyone that has ever written code knows&#8230; it&#8217;s always still a bit broken.</p>
<hr />
<p><small>© anothem for <a href="http://www.anothem.net">Seconds &amp; pixels</a>, 2013. |
<a href="http://www.anothem.net/archives/2013/05/30/makers-breakers/">Permalink</a> |
<a href="http://www.anothem.net/archives/2013/05/30/makers-breakers/#comments">No comment</a> |
<br/>
Post tags: <a href="http://www.anothem.net/archives/tag/icpc/" rel="tag">icpc</a>, <a href="http://www.anothem.net/archives/tag/qa/" rel="tag">qa</a>, <a href="http://www.anothem.net/archives/tag/tdd/" rel="tag">tdd</a>, <a href="http://www.anothem.net/archives/tag/testing/" rel="tag">testing</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.anothem.net/archives/2013/05/30/makers-breakers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
