<?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>Vincent Gable's Blog &#187; Complexity</title>
	<atom:link href="http://vgable.com/blog/tag/complexity/feed/" rel="self" type="application/rss+xml" />
	<link>http://vgable.com/blog</link>
	<description>my weblog.</description>
	<lastBuildDate>Tue, 29 Nov 2011 22:20:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Big Freaking Systems</title>
		<link>http://vgable.com/blog/2009/09/17/big-freaking-systems/</link>
		<comments>http://vgable.com/blog/2009/09/17/big-freaking-systems/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 09:03:05 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Quotes]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Complexity]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[School]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=395</guid>
		<description><![CDATA[A programming language is a tool for handling design complexity. That&#8217;s what all of computer science is, really &#8212; languages, libraries, type systems, garbage collectors, everything you learn about programming. They&#8217;re ways to build more and more complex designs without losing your grip. The way you manage complexity is to be able to ignore it. [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>A programming language is a tool for handling design complexity. That&#8217;s what all of computer science is, really &#8212; languages, libraries, type systems, garbage collectors, <strong>everything you learn about programming. They&#8217;re ways to build more and more complex designs without losing your grip.</strong></p>
<p>The way you manage complexity is to be able to ignore it. A good programming tool lets you forget about some part of the problem, so that you can focus on some other part. And it ensures that when you return to the parts you forgot, you haven&#8217;t accidentally broken them.
</p></blockquote>
<p>&#8211;<a href="http://eblong.com/zarf/essays/rule-based-if/">Andrew Potkin</a></p>
<p>Years ago, When I was taking to programmers about what college I wanted to attend, I had in interesting conversation about how Computer Science education is an <em>utter failure</em> at preparing students for real-world programming. Outside of Software Development, no technical field accepts (sometimes prefers) candidates with &#8220;N years of experience&#8221; in place of a degree. I&#8217;m not sure I know why CS education fails so badly and universally. But my current best guess is that it&#8217;s because <strong>school never exposes you to enough complexity</strong>. Projects have to end in a semester. You never have to deal with a multimillion-line program, written by hundreds of co-workers, dozens of which you need to collaborate with, at unexpected times, for surprising reasons.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/09/17/big-freaking-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build Dumb Interfaces to Smart Brains</title>
		<link>http://vgable.com/blog/2009/07/10/build-dumb-interfaces-to-smart-brains/</link>
		<comments>http://vgable.com/blog/2009/07/10/build-dumb-interfaces-to-smart-brains/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 05:27:19 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Quotes]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Complexity]]></category>
		<category><![CDATA[Jeff Raskin]]></category>
		<category><![CDATA[Mencius Molbug]]></category>
		<category><![CDATA[Monotony]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=351</guid>
		<description><![CDATA[…control interfaces must not be intelligent. Briefly, intelligent user interfaces should be limited to applications in which the user does not expect to control the behavior of the product. If the product is used as a tool, its interface should be as unintelligent as possible. Stupid is predictable; predictable is learnable; learnable is usable. &#8211;Mencius [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
…<strong>control interfaces must not be intelligent</strong>. Briefly, <strong>intelligent user interfaces should be limited to applications in which the user does not expect to control the behavior of the product</strong>. If the product is used as a tool, its interface should be as unintelligent as possible. <strong>Stupid is predictable; predictable is learnable; learnable is usable</strong>.</p></blockquote>
<p>&#8211;<a href="http://unqualified-reservations.blogspot.com/2009/07/wolfram-alpha-and-hubristic-user.html">Mencius Molbug</a></p>
<p>Jeff Raskin calls this principle it <strong>monotony</strong>, and explains it comprehensively in <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&#038;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0201379376%2F&#038;tag=vincgabl-20&#038;linkCode=ur2&#038;camp=1789&#038;creative=9325"><cite>The Humane Interface</cite></a>.</p>
<p>I&#8217;ve always felt a little uneasy about the idea. Computers are supposed to free us from tedium and repetition, by doing things for us. A fluid interface is unnatural yes, but the goal of computing should be to exceed what&#8217;s possible in the corporal word, not to copy it imperfectly.</p>
<p>But fundamentally, I think Raskin and Molbug are more right than wrong. Paradoxically, <strong>dumb interfaces beat smart interfaces</strong> most of the time.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/07/10/build-dumb-interfaces-to-smart-brains/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simplifying by Adding Features</title>
		<link>http://vgable.com/blog/2009/02/16/simplifying-by-adding-features/</link>
		<comments>http://vgable.com/blog/2009/02/16/simplifying-by-adding-features/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 06:10:50 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Quotes]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Coda]]></category>
		<category><![CDATA[Complexity]]></category>
		<category><![CDATA[Jeff Raskin]]></category>
		<category><![CDATA[The Humane Interface]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/2009/02/16/simplifying-by-adding-features/</guid>
		<description><![CDATA[One of the oldest canards in the interface business is the one that says &#8220;Maximizing functionality and maintaining simplicity work against each other in the interface&#8221; (Microsoft 1995, p.8). What is true is that adding ad hoc features works against simplicity. But that&#8217;s just bad design. It is often, but not always, possible to increase [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>One of the oldest canards in the interface business is the one that says &#8220;Maximizing functionality and maintaining simplicity work against each other in the interface&#8221; (Microsoft 1995, p.8).  What is true is that adding ad hoc features works against simplicity.  But that&#8217;s just bad design.  It is often, but not always, possible to <strong>increase functionality without increasing difficulty at a greater rate</strong>.  Often, added functionality can be had without any added interface complexity; note the difference between interface complexity and task complexity.  <b>If the added functionality unifies what had previously been disparate features, the interface can get simpler.</b></p></blockquote>
<p>&#8211; Jeff Raskin,  <em><a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&#038;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0201379376%2F&#038;tag=vincgabl-20&#038;linkCode=ur2&#038;camp=1789&#038;creative=9325">The Humane Interface</a><img src="http://www.assoc-amazon.com/e/ir?t=vincgabl-20&amp;l=ur2&amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></em> (page 201)</p>
<p>Examples of this are the exception, not the rule.  Usually, more features means more complexity.</p>
<p>The best example I can think of is <a href="http://www.panic.com/coda/">Coda</a>, an award-winning web development <a href="http://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a>. </p>
<blockquote><p>
text editor + file transfer + svn + css + terminal + books + more = <em>whoah</em>.</p>
<h3>The story of Coda.</h3>
<p>So, we code web sites by hand.  And one day, it hit us: <em>our web workflow was wonky</em>.  We&#8217;d have our text editor open, with <a href="http://www.panic.com/transmit/">Transmit</a> open to save files to the server. We&#8217;d be previewing in Safari, adjusting SQL in a Terminal, using a CSS editor and reading references on the web.  <em>&#8220;This could be easier,&#8221;</em> we declared.  <em>&#8220;And much cooler.&#8221;</em></p>
</blockquote>
<p>(To really get a sense of Coda you should <a href="http://www.panic.com/coda/">check out the website, or try it for free</a>).</p>
<p>Even though Coda&#8217;s interface is more complicated because it does more then just edit code, it simplifies the task of web-design, by unifying tasks that used to be done in different applications with different interfaces.</p>
<p><strong>What other examples of things becoming simpler through added functionality can you think of?</strong>  Please share in the comments below.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/02/16/simplifying-by-adding-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Most Memorable Thing a CS Professor Ever Told Me About Software Engineering</title>
		<link>http://vgable.com/blog/2008/12/06/the-most-memorable-thing-a-cs-professor-ever-told-me-about-software-engineering/</link>
		<comments>http://vgable.com/blog/2008/12/06/the-most-memorable-thing-a-cs-professor-ever-told-me-about-software-engineering/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 00:45:07 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Quotes]]></category>
		<category><![CDATA[Complexity]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Scale]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/2008/12/06/the-most-memorable-thing-a-cs-professor-ever-told-me-about-software-engineering/</guid>
		<description><![CDATA[The first semester of my sophomore year, I took CS 337: Theory in Programming Practice from Jaydev Misra. On the last day of class, he talked about computer science in general, took questions, and let us out early. And on thing he said really made an impression on me. I&#8217;m quoting from what I remember [...]]]></description>
			<content:encoded><![CDATA[<p>The first semester of my sophomore year, I took CS 337: Theory in Programming Practice from <a href="http://www.cs.utexas.edu/~misra/">Jaydev Misra</a>.  On the last day of class, he talked about computer science in general, took questions, and let us out early.  And on thing he said really made an impression on me.  <strong>I&#8217;m quoting from what I remember today</strong>, I didn&#8217;t write the exact quote down, so this could very well be embellished or incorrect in some detail,</p>
<blockquote><p>Even if we had the fast computers we have today in the 1960&#8242;s, and even if we had the internet, we could not have built a modern web-browser, because we did not understand enough about building programs of that complexity.</p></blockquote>
<p>It&#8217;s amazing how young software development is as a discipline.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2008/12/06/the-most-memorable-thing-a-cs-professor-ever-told-me-about-software-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Complexity Is the Enemy</title>
		<link>http://vgable.com/blog/2008/09/06/complexity-is-the-enemy/</link>
		<comments>http://vgable.com/blog/2008/09/06/complexity-is-the-enemy/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 23:50:43 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Quotes]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Complexity]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/2008/09/06/complexity-is-the-enemy/</guid>
		<description><![CDATA[Complexity is the worst enemy of security; as systems become more complex, they get less secure. &#8211;Bruce Schneier]]></description>
			<content:encoded><![CDATA[<blockquote><p>Complexity is the worst enemy of security; as systems become more complex, they get less secure.</p></blockquote>
<p>&#8211;<a href="http://www.schneier.com/crypto-gram-0003.html#8">Bruce Schneier</a></p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2008/09/06/complexity-is-the-enemy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NP-Complete is Often Easy</title>
		<link>http://vgable.com/blog/2008/07/03/np-complete-is-often-easy/</link>
		<comments>http://vgable.com/blog/2008/07/03/np-complete-is-often-easy/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 00:55:13 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Quotes]]></category>
		<category><![CDATA[Complexity]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[NP-Complete]]></category>
		<category><![CDATA[NP-Hard]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/2008/07/03/np-complete-is-often-easy/</guid>
		<description><![CDATA[There are a lot of problems that are, in theory, incredibly difficult &#8211; but because the difficult cases are very rare and rather contrived, they&#8217;re actually very easy to solve. Two examples of this that I find particularly interesting are both NP complete. Type checking in Haskell is one of them: in fact, the general [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p> There are a lot of problems that are, in theory, incredibly difficult &#8211; but because the difficult cases are very rare and rather contrived, they&#8217;re actually very easy to solve. Two examples of this that I find particularly interesting are both NP complete. Type checking in Haskell is one of them: in fact, the general type inference in Haskell is worse that NP complete: the type validation is NP-complete; type inference is NP-hard. But on real code, it&#8217;s effectively approximately linear. The other one is a logic problem called 3-SAT. I once attended a great talk by a guy named Daniel Jackson, talking about a formal specification language he&#8217;d designed called Alloy. Alloy reduces its specification checking to 3-SAT. Dan explained this saying: &#8220;The bad news is, analyzing Alloy specifications is 3-SAT, so it&#8217;s exponential and NP-complete. But the good news is that analyzing Alloy specifications is 3-SAT, so we can solve it really quickly</p></blockquote>
<p>&#8211;<a href="http://scienceblogs.com/goodmath/2008/05/linear_programming.php">Mark Chu-Carroll (aka MarkCC</a></p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2008/07/03/np-complete-is-often-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

