<?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>ihumanable &#187; philosophy</title>
	<atom:link href="http://ihumanable.com/blog/tag/philosophy/feed/" rel="self" type="application/rss+xml" />
	<link>http://ihumanable.com/blog</link>
	<description>usable in any place a human can be used</description>
	<lastBuildDate>Wed, 11 May 2011 15:10:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>finite</title>
		<link>http://ihumanable.com/blog/2010/02/04/finite/</link>
		<comments>http://ihumanable.com/blog/2010/02/04/finite/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 18:14:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[philosophy]]></category>
		<category><![CDATA[death]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://ihumanable.com/blog/?p=687</guid>
		<description><![CDATA[Here&#8217;s something unpleasant to think about, you are finite. Think about it deeply, drink it in, sit with it, feel like you&#8217;ve come to understand it, then wake up in a cold sweat thinking about it some more. There is only one certainty in this life, it will end. It gets worse, your time, your [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_689" class="wp-caption alignright" style="width: 310px"><img src="http://ihumanable.com/blog/wp-content/uploads/2010/02/tombstone-300x213.jpg" alt="santa claus&#039; tombstone with child crying" title="tombstone" width="300" height="213" class="size-medium wp-image-689" /><p class="wp-caption-text">all that eggnog caught up to him... the cocaine addiction didn't help either.</p></div>
<p>Here&#8217;s something unpleasant to think about, you are finite.  Think about it deeply, drink it in, sit with it, feel like you&#8217;ve come to understand it, then wake up in a cold sweat thinking about it some more.  There is only one certainty in this life, it will end.  It gets worse, your time, your effort, your experiences, they are all finite.  It&#8217;s one of those big huge things in life that is too inconvenient to think about, so we don&#8217;t.  This is the core reason why most religions exist, coming to terms with one&#8217;s own limited nature is terrifying.  I&#8217;ve always been an Atheist, intimately connected to this notion that one day the unique thing that is me will be no more, just as for billions of years before I popped into existence I wasn&#8217;t yet.  It&#8217;s something I tell myself I have come to terms with, but it is a daunting challenge and one that must be revisited from time to time.</p>
<p><em>As an aside: although I&#8217;m more than happy to discuss my personal spiritual beliefs I attempt to keep such charged matters off of this blog, if you would like to chat about it just post a short comment indicating so and I will contact you.  I am an Atheist but I respect others&#8217; belief systems and don&#8217;t intend to offend anyone.</em></p>
<p>I was driving home the other day and <a href="http://www.npr.org/templates/story/story.php?storyId=122322542">an interesting story</a> came up on the radio.  The main point being that as we age we sense that time is moving faster and faster.  This is the spark that has led me to revisit one of the least comfortable aspects of our shared humanity.  I&#8217;ve been pondering it for the last few days, thinking about my very real finiteness and trying to evaluate if I&#8217;m acting like a man with an expiration date.  It was a mixed evaluation, in some ways I am, in others I am not, not a terrible fate by any stretch.</p>
<p>In my personal life I feel like I&#8217;m running full steam ahead.  It might be the last week or so of 14 hour days working on getting my new house ready to move into. (After years of snacking and typing my body isn&#8217;t as suited to the tasks of tearing up carpets and fixing walls as it once was).  I&#8217;ve set real goals in terms of building skills, building relationships, and creating code I can be proud of, and I&#8217;m exceeding my expectations.  I finally feel like my wheels have caught solid ground and <a href="http://ihumanable.com/blog/2009/11/spinning-wheels/">aren&#8217;t just spinning anymore</a>.</p>
<p>There are still some areas I&#8217;m not happy with, I&#8217;m taking stock and taking action to address these.  On the whole though, I feel like I&#8217;m spending my limited time here the right way for now.  There are a thousand and one clich&eacute;s about this subject: live each day like it could be your last, what would you do if you knew you would die tomorrow, etc.  The problem is that they all take an outlook that is far too limited.  No one could live each day like it could be your last, that&#8217;s fucking stupid.  If I knew I was going to die I&#8217;d spend all my money and live with complete abandon, you can&#8217;t do that everyday of your life.  It is the routine of life that makes this so difficult.</p>
<p>Life is finite but there is also a whole big pile of it.  We like to think that we can wait and do something next week, month, year, etc.  This is where all that &#8220;I always thought we&#8217;d have more time together&#8221; thing comes from.  Want to open a bakery, learn to play the drums, fight a bear, there&#8217;s no time like the present.   If <strong>you</strong> are unhappy, <strong>you</strong> have to fix that.  Other people that aren&#8217;t <strong>you</strong> are probably going to tell you that you are foolish for trying to fight a bear, well those people can waste <strong>their</strong> lives while you&#8217;re out punching Yogi in the mouth.</p>
<p>Don&#8217;t let anything stand in your way, take it personally because nothing could be more personal.  This is your precious finite life and its ticking away.  If you are unhappy or feel like it&#8217;s being wasted, do something about it.  Nothing could be more important.  It&#8217;s not comfortable, and it can be frightening, but take stock of your life today and the whole time keep in mind, I only have so many days left, is this how I want to spend them.</p>
]]></content:encoded>
			<wfw:commentRss>http://ihumanable.com/blog/2010/02/04/finite/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>stupid ideas</title>
		<link>http://ihumanable.com/blog/2010/02/02/stupid-ideas/</link>
		<comments>http://ihumanable.com/blog/2010/02/02/stupid-ideas/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 16:41:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[philosophy]]></category>
		<category><![CDATA[gtd]]></category>

		<guid isPermaLink="false">http://ihumanable.com/blog/?p=670</guid>
		<description><![CDATA[I want to be honest with you for a minute, I have lots of stupid ideas. I have them all day, in the shower, while eating a sandwich, while writing my blog posts, stupid ideas come streaming into my head. I used to just ignore them, &#8220;No one needs a peanut powered lawnmower&#8221; I would [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_671" class="wp-caption alignleft" style="width: 273px"><a href="http://ihumanable.com/blog/wp-content/uploads/2010/02/stupid-burn.jpg"><img src="http://ihumanable.com/blog/wp-content/uploads/2010/02/stupid-burn-263x300.jpg" alt="stupid burn" title="stupid-burn" width="263" height="300" class="size-medium wp-image-671" /></a><p class="wp-caption-text">No caption needed</p></div>
<p>I want to be honest with you for a minute, I have lots of stupid ideas.  I have them all day, in the shower, while eating a sandwich, while writing my blog posts, stupid ideas come streaming into my head.  I used to just ignore them, &#8220;No one needs a peanut powered lawnmower&#8221; I would tell myself.  The interesting turn was when I started writing these stupid ideas down.</p>
<p>Some stupid ideas will always remain stupid ideas, some though will change over time.  That dumb idea might actually just be so brilliant it looks stupid.  It might be so big and scary that you&#8217;ve convinced yourself it&#8217;s stupid.  It might not be a bad idea at all, after some careful reflection.  It might even be a wonderful idea.</p>
<p>Why do we throw away our stupid ideas?  Is it because we don&#8217;t have time for them, bah, that can&#8217;t be it, you are currently wasting precious time reading the stupid things I have to say.  Is it because we are so swamped with brilliant ideas that we have to prioritize, probably not, or else you&#8217;d be sipping margaritas next to your perpetual motion machine.  No, the answer is much simpler, its because we are afraid or failing.  Stupid ideas are failure babies, a dumb idea grows up to be a hairy ugly failure, and we have learned in the school of life that failures are bad, so we avoid them.</p>
<p>Have you ever talked to a 4 year old?  I have on various occasions, interesting little buggers those 4 year olds.  They will tell you every little thought that bounces into their overly energetic little brains, no matter how wrong or foolish.  They don&#8217;t mind failing over and over again, they will insist the moon is made of mashed potatoes and not feel bad at all when you tell them the truth.  And most importantly they learn a ton of information.</p>
<p>Now don&#8217;t take this the wrong way, I don&#8217;t think you should just go around like some half-cocked lunatic spouting off every little thing that pops into your head.  There was a time for that and if you go into the board room now insisting the moon is made of mashed potatoes you will be roundly mocked and rightfully so.  What I am advocating is the preservation and analysis of your stupid ideas.  Let&#8217;s take a look at some stupid ideas quickly to see why this is useful.</p>
<ul>
<li>Idea #1: A blanket that has arm holes and you wear it backwards or something&#8230; yea like a backwards robe!  Pretty fucking stupid, but better known as the Snuggie, which has become a huge success and sold tons.</li>
<li>Idea #2: Instead of executing the code on this machine, let&#8217;s build another machine that doesn&#8217;t actually exist and have that fake machine live on the real machine and have code execute on the fake machine&#8230;.  What?  What are you rambling about Jenkins, get out of my office!  Jenkins just invented the Virtual Machine architecture that power things like Java&#8217;s JVM and .Net&#8217;s CLR.</li>
<li>Idea #3: Wouldn&#8217;t it be awesome if you could tape together 4 iPhones and have like a really big iPhone.  I&#8217;m sorry, did you just smoke a bunch of peyote?!  That&#8217;s dumb&#8230;.  Or its the new iPad.</li>
</ul>
<p>You get the picture I&#8217;m trying to paint here.  A lot of the amazing things we take for granted and depend upon everyday, things that seem like great ideas now, all had a moment in time when they were some far-fetched pie-in-the-sky dream.  Most ideas start off as stupid ideas.  Stupid ideas are important and valuable, not all of them, but there will be some diamonds in those dirt clods.  You just have to be smart enough to sift through them.</p>
<p>My advice to you is to jot down those stupid ideas you normally throw by the wayside.  Revisit them every once and a while, re-evaluate their &#8220;stupidness.&#8221;  Sometimes you will find a diamond in the rough, sometimes a stupid idea can be the spark needed to have a brilliant idea, and sometimes you will just get a good laugh out of the stupid things you think up.</p>
]]></content:encoded>
			<wfw:commentRss>http://ihumanable.com/blog/2010/02/02/stupid-ideas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>api</title>
		<link>http://ihumanable.com/blog/2010/01/25/api/</link>
		<comments>http://ihumanable.com/blog/2010/01/25/api/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 18:26:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[none]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://ihumanable.com/blog/?p=617</guid>
		<description><![CDATA[I remember being a young lad preparing myself for university I was given a gift from my mother, &#8220;C++ for dummies.&#8221; The vote of confidence on my status as a &#8220;dummy&#8221; aside, I read the book with great interest. There was an analogy the author used to explain the idea of classes and what functions [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_618" class="wp-caption alignright" style="width: 152px"><img src="http://ihumanable.com/blog/wp-content/uploads/2010/01/samsung-microwave.jpeg" alt="samsung microwave" title="samsung-microwave" width="142" height="82" class="size-full wp-image-618" /><p class="wp-caption-text">oh creator of hot pockets, we praise thee!</p></div>
<p>I remember being a young lad preparing myself for university I was given a gift from my mother, &#8220;C++ for dummies.&#8221;  The vote of confidence on my status as a &#8220;dummy&#8221; aside, I read the book with great interest.  There was an analogy the author used to explain the idea of classes and what functions they should expose, I&#8217;m going to shamelessly steal it (paraphrasing as I don&#8217;t have the book with me).</p>
<p>Imagine your son comes up to you and says he wants to make some nachos.  You tell him that its fine by you, just go cook them in the microwave, and there is nothing controversial about this statement.  Microwaves are actually boxes full of high energy radiation being produced by <a href="http://en.wikipedia.org/wiki/Microwave_oven#Design>a high voltage power source and a cavity magnetron</a>.  What are you mad?!  Who would let their child use such dangerous devices, what if he gets shocked or irradiated?</p>
<p>Being a sensible person though, you know that there is relatively little danger in letting them use a microwave, because they don&#8217;t need to know any of the gory details about <a href="http://en.wikipedia.org/wiki/Cavity_magnetron">cavity magnetrons</a> or <a href="http://en.wikipedia.org/wiki/Waveguide_%28electromagnetism%29">waveguides</a>, to the end user, the microwave is just a magic warming box.  It exposes a very simple interface, some buttons that allow you to enter the amount of time you want to cook something.</p>
<p>This is the essence of an <a href="http://en.wikipedia.org/wiki/Api">API (Application Programming Interface)</a>, wrapping up something complex and possibly dangerous in something safe and easy to interact with.  When building code that you intend other people to use someday, it is the part that is most important part, and the part that is easiest to overlook.  The problem is that we are often too close to something and too concerned with <strong>our</strong> use case.  If you want to design code for others to use, it requires significant time and effort, and even then you probably still won&#8217;t get it right.</p>
<p><a href="http://prosper-lib.com">Prosper</a> is still undergoing active development, I&#8217;m currently agonizing over how I want to expose various execution modes.  The solution, no matter what I pick, is trivial to implement, but the api is the most important part.  A great api exposes a consistent concept, something that is easily grasped and allows the end user of the api to declare what they want to do without having to worry about how its going to get done.  Since <a href="http://www.codinghorror.com/blog/archives/000152.html">good programmers write good code and great programmers steal great code</a>, I&#8217;ve modeled the api for prosper extensively off of <a href="http://jquery.com">jQuery</a>.  And why not, let&#8217;s take a look at two different APIs, the browser dom api and jquery.</p>
<pre class="brush: jscript; title: ;">
  //Let's barber pole a list by coloring every other element blue
  var list = document.getElementById('the_list');
  var highlight = false;
  for(var i = 0; i &amp;lt; list.children.length; i++) {
    if(highlight) {
      list.children[i].style['backgroundColor'] = '#FF0000';
    }
    highlight = !highlight;
  }
</pre>
<p>Fairly straightforward implementation, but it concerns itself heavily with the &#8220;how&#8221; of what its doing.  Manually traversing to pick the elements it wants, eww.</p>
<pre class="brush: jscript; title: ;">
//Same thing using jquery
$(&amp;quot;ul#the_list li:odd&amp;quot;).css(&amp;quot;background-color&amp;quot;, &amp;quot;#FF0000&amp;quot;);
</pre>
<p>jQuery is definitely magic, but this code is great because it let&#8217;s you focus on the &#8220;what&#8221; of what you are doing.  How does jQuery go about selecting the right elements and all that?  I don&#8217;t care, and the great thing is I don&#8217;t have to care, and if in the next version of jQuery they find a way to do it faster, I win without having to do anything.</p>
<p>Writing a great api is difficult, you have to divorce yourself from the concrete problem you are solving and look at it in the abstract.  Put yourself into the shoes of someone trying to figure out how the api works, and then ask the questions they are going to ask.</p>
<ul>
<li>Why do I need to build up this context thing and pass it in?</li>
<li>How come there isn&#8217;t a sensible default for these arguments?</li>
<li>What dumbass made this thing?</li>
</ul>
<p>Answer those questions, and keep working at it, strive for elegance and consistency, because then it will be easy for people to learn and use.  If your code is easy to learn and use, people are going to want to use it more, and they are going to want to tell their friends about it.  Then you can get some lucrative ad campaigns with Nike because of the boffo library you write in FoxPro.</p>
<p>There is a more subtle lesson in all of this though.  Any code you write is exposing an api to someone else.  &#8220;But only I am ever going to use this code!&#8221; I hear the naysayers warming up their keyboards for the comments section.  This may be true now, but the six-months-from-now-you is going to look back at the you-of-today and wonder what the hell he was thinking.</p>
<p>Get in the habit of making your code easy to use, and expose a nice api.  This will endear you to your fellow programmers and help make maintenance easy.  Strive to be that guy on the team that writes functions and classes people want to use.  Make life easier for your fellow developers and even if they don&#8217;t return the favor, maybe they will take you out for a beer.  People notice over time that your code is the best to work with, they internalize it, and they start to think of you as a <em>great</em> programmer.  That&#8217;s a pretty great api to expose to the world.</p>
]]></content:encoded>
			<wfw:commentRss>http://ihumanable.com/blog/2010/01/25/api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>hustle</title>
		<link>http://ihumanable.com/blog/2010/01/22/hustle/</link>
		<comments>http://ihumanable.com/blog/2010/01/22/hustle/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 18:57:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[philosophy]]></category>
		<category><![CDATA[realization]]></category>

		<guid isPermaLink="false">http://ihumanable.com/blog/?p=612</guid>
		<description><![CDATA[A realization has been dawning on me as of late, one that I&#8217;ve always known, but that is easy to forget, easy to misplace, easy to neglect. The best way to learn anything is to do it, to struggle through, to forge on, to fight and gnash teeth and curse at. There is no knowledge [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_613" class="wp-caption alignright" style="width: 309px"><a href="http://ihumanable.com/blog/wp-content/uploads/2010/01/do-the-hustle.jpg"><img src="http://ihumanable.com/blog/wp-content/uploads/2010/01/do-the-hustle-299x300.jpg" alt="do the hustle" title="do-the-hustle" width="299" height="300" class="size-medium wp-image-613" /></a><p class="wp-caption-text">That time was so much more glamorous</p></div>
<p>A realization has been dawning on me as of late, one that I&#8217;ve always known, but that is easy to forget, easy to misplace, easy to neglect.  The best way to learn anything is to do it, to struggle through, to forge on, to fight and gnash teeth and curse at.  There is no knowledge as highly regarded as that which you have to work for.</p>
<p>I&#8217;m not even particularly certain how this all came about, it seems to have been a culmination of things.  I didn&#8217;t intend to but somehow I ended up putting on my plate a bunch of new stuff to learn around the same time.  Git, ruby, rails, blogging, prosper, hosting my own domain, and testing (Testing being a decidedly late addition).  This blog was the genesis of a lot of it, that and just being curious.</p>
<p>I had my <a href="http://ihumanable.com/blog/2009/10/ruby-koans/">first post</a> back on October 2nd of last year, as of writing this 112 days ago.  At that point I didn&#8217;t really know anything about the 7 topics above, I started the blog using Google&#8217;s Blogger platform, it was an easy onramp.</p>
<p>After a month or so, I was encourage by some friends to move the blog to my own domain, which you are now at.  I also kicked off the <a href="http://prosper-lib.com">prosper</a> project around the same time as starting this blog.  I played around with ruby and <a href="http://facility9.com">a crazy friend</a> convinced me to try out rails.  I moved prosper to <a href="http://github.com/ihumanable/prosper-lib">GitHub</a> and began learning git.  Now prosper supports 19 backends and has gained over 100 unit tests in the last few days.</p>
<p>Here&#8217;s the kicker though, I don&#8217;t know what I&#8217;m doing.  I never really did, I just started doing stuff, and have been running ever since.  There have been days when I&#8217;ve gotten 5,000+ hits on this site, several days with several hundreds of hits and I&#8217;ve been steadily increasing the daily reader count.  I don&#8217;t know how I did that, I just kept writing, I liked it, I promoted it over twitter and hacker news if I thought I had written something insightful, and I guess that is working.  The same thing with prosper, I saw a need for something that didn&#8217;t exist, I had a vague idea of how to make it, and I started coding.  I&#8217;ve rewritten and refactored it piece by piece to the point that it supports all kinds of things I never thought it would.  It&#8217;s due for another architectural change after I finish these unit tests.</p>
<p>If there is one key thing I could convey to anyone reading this is to <strong>hustle</strong>.  You will never be prepared for the things you are capable of doing.  You will achieve your greatest accomplishments not by building up a grand framework of skill and then deftly creating something glorious, but by starting small and persevering in making it better and better.  It is never an easy road and you will gain a grand framework of skills, but you have to push your boundaries to grow.</p>
<p>This came together for me last night, I was working on a rather tricky bit of rails and broke something.  I hadn&#8217;t gone too far into it and so I typed <tt>rake db:rollback</tt> and <tt>git reset head --hard</tt> and was back to a working application.  I stopped myself for a second and thought about what I had just done, how improbable it all was from where I was just a month ago.  I then thought about what I was doing in rails, and thought about how earlier in the day I was wrapping up prosper functionality in unit tests and finding regressions, and how I would have to write some cucumber tests for what I was doing, and I realized that 112 days ago I didn&#8217;t have the vaguest idea of any of this.</p>
<p>I would love to put a triumphant &#8220;I&#8217;m just so damned smart and talented and handsome&#8221; paragraph here, but that&#8217;s not the case.  I just steeped myself in this stuff, I worked in git daily, I read about it, watched screencasts, I bought agile web development in rails, I got design patterns in ruby, I <strong>hustled</strong>.  And you can do it too, take the first step today.</p>
<p>The first step that you should take is to invest yourself in something non-trivially.  Want to learn rails, then go buy agile web development in rails, want to learn github, move an active project out there, want to learn linux, reformat your machine so that&#8217;s all you have.  You have to invest yourself, it plays a trick on your brain that makes it want to not waste that &#8220;investment&#8221; by quitting.  If you can burn your boats (<a href="http://en.wikipedia.org/wiki/Hern%C3%A1n_Cort%C3%A9s">Hern&aacute;n Cort&eacute;s</a> reference) all the better.  I had no choice but to learn git or else I couldn&#8217;t keep working on my project, and as a side bonus I got the joy (and frustration) of working in git everyday.</p>
<p>Get out there and <strong>hustle</strong>, learn something new, do something that scares you, reach beyond your grasp.</p>
]]></content:encoded>
			<wfw:commentRss>http://ihumanable.com/blog/2010/01/22/hustle/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>climbing a mountain</title>
		<link>http://ihumanable.com/blog/2009/11/06/climbing-a-mountain/</link>
		<comments>http://ihumanable.com/blog/2009/11/06/climbing-a-mountain/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 19:56:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[philosophy]]></category>

		<guid isPermaLink="false">http://ihumanable.com/blog/?p=66</guid>
		<description><![CDATA[I&#8217;ve been done with my last big project for about a month now, waiting on the customer to make up their minds on some enhancements. It&#8217;s one of those positions that seem enviable until you&#8217;re a month deep in it, sitting around trying to find something to do. So I&#8217;ve filled my work time tackling [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been done with my last big project for about a month now, waiting on the customer to make up their minds on some enhancements.  It&#8217;s one of those positions that seem enviable until you&#8217;re a month deep in it, sitting around trying to find something to do.  So I&#8217;ve filled my work time tackling whatever tasks have come by, writing up documentation, working on and completing two smaller projects, and reading up on technology.  It passes the days but sometimes can be a bit of a bore, and the real challenge is trying to figure out how not to waste my company&#8217;s time, trying to make value without a project can be hard.</p>
<div id="attachment_67" class="wp-caption alignright" style="width: 310px"><img src="http://ihumanable.com/blog/wp-content/uploads/2009/11/stratego-box-300x190.jpg" alt="Stratego... similar to strategy" title="stratego-box" width="300" height="190" class="size-medium wp-image-67" /><p class="wp-caption-text">Stratego... similar to strategic</p></div>
<p>Then my boss told me that I would be working on a new project.  Huzzah!  I&#8217;m leaving behind .Net back to the land of Java, thus keeping my streak alive of never working in the same language 2 projects in a row.  The project position has been described to me as a strategic technical challenge.  Let&#8217;s break that down real quick.</p>
<p><strong>Strategic</strong> &#8211; That&#8217;s a fun word, what does it mean, dictionary.com defines it (after a great deal of military definitions) as</p>
<blockquote><p>Highly important to an intended objective</p></blockquote>
<p>So this is an important position, one which is necessary for intended objectives.  From what I&#8217;ve gathered of the work I&#8217;ll be doing, this is an apt definition</p>
<p><strong>Technical</strong> &#8211; Nothing touchy feely here, no user interaction, no pretty style sheets, no fancy jQuery magic, just straight CS4xx type algorithms and number crunching.  I&#8217;m have a feeling I&#8217;m going to have to dust off that Math degree sitting in the corner.</p>
<p><strong>Challenge</strong> &#8211; This is the word I love, the thing I live for, a good challenge.  I&#8217;ve been working on enough quick one week, one off, hit-it and quit-it projects as of late, I&#8217;ve missed the thrill of a good challenge.</p>
<p>I don&#8217;t know how much I&#8217;m at liberty to share about the project which is why this post so far has sounded a little bit like a riddle.  The one point of information I&#8217;ll share is that the task I&#8217;m going to be taking on was sent out for quotes and the number that came back was&#8230; <strong>10,000+ man-hours</strong>.  You aren&#8217;t misreading, and I triple checked that I wasn&#8217;t mistyping.  In case you aren&#8217;t familiar with what 10,000 man-hours means I&#8217;ll take a quick detour to explain it.</p>
<div id="attachment_70" class="wp-caption alignleft" style="width: 206px"><img src="http://ihumanable.com/blog/wp-content/uploads/2009/11/the-mythical-man-month-196x300.jpg" alt="The Mythical Man-Month" title="the-mythical-man-month" width="196" height="300" class="size-medium wp-image-70" /><p class="wp-caption-text">The Mythical Man-Month</p></div>
<p>In one day, one programmer puts in 8 hours of work, that is 8 man-hours.  One week is 40 man-hours.  Assuming you get two weeks vacation, one year of development is 2,000 man-hours.  That means that 10,000 man-hours of work is 5 straight years of development, half a decade of work.  Of course, throwing some more resources at it you could hit 10000 man-hours with a 5 man team in just 1 year, more or less.  The problem though is that this reduction in time is non-linear, you can&#8217;t just throw 10,000 developers at the problem for an hour, this is pretty well discussed in <a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1257536143&#038;sr=8-1-spell">The Mythical Man-Month</a>.</p>
<p>In less technical terms that means that there is approximately a metric shit ton of work to do.  And not grunt work mind you, complex problem solving work.  This is a mountain of work.  There are a few things that you can do when a mountain blocks your path.</p>
<ol>
<li>You can turn around and go home</li>
<li>You can rent a helicopter</li>
<li>You can ready your climbing gear</li>
</ol>
<p>Going home isn&#8217;t an option in this case, the task can&#8217;t be overlooked and other things can&#8217;t happen until we are up and over the mountain.  The outside quote was a helicopter, it costs some cash but is easy and relatively painless for you.  Well we can&#8217;t wait around a year to get this thing done.  So that only leaves us with one option, so I&#8217;m gathering up some rope and pitons.  I&#8217;m dusting off the part of my brain that remembers how Java works, remembering that strings can only be compared with .equals(), and fondly remembering the joy that is Eclipse after the ghetto of Visual Studio (holy war can begin now, be sure to insult my mother).</p>
<p>I&#8217;m preparing myself for what will be the biggest technical challenge of my career, and it fills me with happiness.  It reminds me that I love this profession, that I&#8217;m stupid lucky to get paid to do it, and that I&#8217;m going to go in there and climb that mountain.  From the little information I have, I&#8217;m sure the climb is going to be arduous, but I&#8217;m determined to plant my flag at the top, and I know that that will be amazing.</p>
<p>I want to challenge you to look around for your own personal mountains, its easy to avoid them, to walk away, go home, or rent a copter.  You should instead commit yourself to the climb, because when you are at the top of a mountain, all the other problems are pretty small.</p>
]]></content:encoded>
			<wfw:commentRss>http://ihumanable.com/blog/2009/11/06/climbing-a-mountain/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>the power of nothing</title>
		<link>http://ihumanable.com/blog/2009/11/04/the-power-of-nothing/</link>
		<comments>http://ihumanable.com/blog/2009/11/04/the-power-of-nothing/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 19:16:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://ihumanable.com/blog/?p=54</guid>
		<description><![CDATA[Sometimes you get a bright idea, or you are given a difficult task, and you want to start working on it. It&#8217;s intoxicatingly easy to dream up feature upon feature for a new project, or build a giant architecture to solve a problem, all of these things look powerful. The other problem that we run [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes you get a bright idea, or you are given a difficult task, and you want to start working on it.  It&#8217;s intoxicatingly easy to dream up feature upon feature for a new project, or build a giant architecture to solve a problem, all of these things look powerful. The other problem that we run into is that with software <em>anything</em> is possible with enough code, and the people that write code like to work on interesting complex problems.  This leads to conversations like this.</p>
<ul>
<li><strong>First Dev:</strong> I want this new project to seamlessly integrate with eBay, digg, and amazon</li>
<li><strong>Second Dev:</strong> Those seem arbitrary, maybe we should define some sort of data import protocol</li>
<li><strong>First Dev:</strong> Yea, then we just need a scraper piece that uses the adapter pattern to translate various websites into the standard import protocol and feed the project</li>
<li><strong>Second Dev:</strong> I&#8217;ll start defining a dtd and you can start writing up some xslt for eBay and digg and amazon as a proof-of-concept</li>
<li><strong>First Dev:</strong> Great, then we just need to get the exchange support and the poor man&#8217;s cron jobs running, to send out the periodic updates</li>
<li><strong>Second Dev:</strong> Should we integrate with Twitter?</li>
<li><strong>First Dev:</strong> I don&#8217;t see why not</li>
<li><strong>Third Dev (interrupting):</strong> Wait, what are we developing?</li>
<li><strong>First Dev:</strong> Todo list</li>
<li><strong>Third Dev:</strong> Maybe we should get it to store and delete todo list items first</li>
<li><strong>Second Dev:</strong> That&#8217;s the easy part, the multitouch integration is going to be the hard part</li>
<li><strong>Third Dev:</strong> &#8230;</li>
</ul>
<div id="attachment_57" class="wp-caption alignright" style="width: 310px"><img src="http://ihumanable.com/blog/wp-content/uploads/2009/11/6a00d8354abaaa53ef0120a5c9ae84970c-800wi-300x225.jpg" alt="nothing todo list" title="nothing todo list" width="300" height="225" class="size-medium wp-image-57" /><p class="wp-caption-text">the dream</p></div>
<p>Before we get the product to do something simple, something any moron could code up, we want to start slapping on features and bells and whistles and whizbangs.  This is all fun, because whizbangs are fun things to think about and code and its all well and good until you realize you have coded up a great feed reader, but one hell of a lousy todo list.  Focusing on <em>least viable product</em> in the beginning gives you a concrete base to start applying whizbangs, based off of real world feedback and grounded in reality.  Incrementally building up value off of an existing product is easier and makes more sense than building a giant all-in-one application that can do everything but butter your toast that no one wants to use.</p>
<p>So this leads me to the best way forward in my estimation and experience, <strong>nothing</strong>.  Nothing is incredibly powerful, tremendously liberating, and allows you to get something up and running in least viability mode or to solve a complex issue.</p>
<p>I can hear it already, what the hell are you talking about you mentally unstable person?!  Let&#8217;s look at some tools that exemplify nothing and how you can go from nothing to something quickly and incrementally, but only if you start with nothing.</p>
<p>Mock-ups. What is a mock-up, nothing really, just a fancy picture of what you want an interface to look like.  There are many great tools for making mock-ups, a new one that just hit beta is <a href="http://gomockingbird.com/">mockingbird</a>, a more seasoned veteran in this game is the excellent <a href="http://www.balsamiq.com/">Balsamiq</a>.  These shouldn&#8217;t help, we all know what a todo-list looks like, why would mocking one up help us?  Because, even though we are capable of abstract thinking it is much easier if we have a concrete model to wrap our heads around.  Like I said in <a href="http://ihumanable.com/blog/2009/10/tool-roundup/">tool roundup</a></p>
<blockquote><p>
[talking about a sweet visualization I made] &#8230;but it is a much better reference when working with this particular part of the system than looking at the database table and trying to assemble parts of it in my brain as the situation demands.
</p></blockquote>
<p>If we don&#8217;t have a concrete model we force our brains to construct one on the fly, taking us out of our work and into a conceptualization, having a concrete model frees up precious processor cycles in our brain.  A mock-up is also great because it allows us to take nothing, a simple functionless mockup, and quickly turn it into an actual interface.  What does that button do? Nothing!  What about that one? Nothing!!!  Then we can slowly but surely add functionality to our interface until we have a functional least viable product.  The way we got there was by understanding that we start with nothing and work our way gradually to something.  Sure we could have sat down at the keyboard and pounded away code for a day or two and then run the thing, but the faster we can get it on the screen and start iterating over it, the better.</p>
<p>The second way that nothing can be useful is when tackling a huge problem, lets look at the contrived feed reader problem from up above.  How in the world do we go about solving that?!  Well we employ are good friend nothing, and we build from there.  What&#8217;s would the simplest possible solution be?</p>
<pre class="brush: php; title: ;">
$feed = FeedReader::read(&amp;quot;http://www.digg.com&amp;quot;);
</pre>
<p>We can throw that in our program, now we need to deal with the FeedReader class</p>
<pre class="brush: php; title: ;">
class FeedReader {
  static function read($url) {
    return '';
  }
}
</pre>
<p>Nothing to the rescue, we just defined our super simple API, but we aren&#8217;t quite to functional yet, but we have a foothold now to iterate from.</p>
<pre class="brush: php; title: ;">
class FeedReader {
  static $readers = array('http://www.ebay.com' =&amp;gt; new EbayReader(),
    'http://www.digg.com' =&amp;gt; new DiggReader(),
    'http://www.amazon.com' =&amp;gt; new AmazonReader)); 

  static function read($url) {
    $reader = self::get_reader($url);
    if($reader) {
      return $reader-&amp;gt;process();
    }
  }

  static function get_reader($url) {
    return self::$readers[$url];
  }
}
</pre>
<p>Wow look we are almost all the way to functionality, amazing!!!  Thank you nothing (that&#8217;s what EbayReader, DiggReader, and AmazonReader do).  Now its the simple task of implementing those, which each by themselves is a somewhat complicated task and outside the scope of this blog post.</p>
<p>This sort of top down design though can be very helpful, you need to solve a problem, just pretend that you have an API that already solves it and start calling it, stub out those functions (stub is a fancy computer science term for &#8220;make it do nothing&#8221;), and watch the power of nothing first hand.  Then you fill in the blanks, allowing yourself to have more nothing functions, you successfully break up your huge monster task into simple solvable tasks.</p>
<p>When we combine the first technique with the second we can get truly awesome results, we normally call this Rapid Application Development (or the much cooler 1980&#8242;s name, RAD).  RAD can get us to something faster than almost anything, using the power of nothing.</p>
]]></content:encoded>
			<wfw:commentRss>http://ihumanable.com/blog/2009/11/04/the-power-of-nothing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

