<?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>The Bloj &#187; Ideas</title>
	<atom:link href="http://blog.strafenet.com/category/product-design/ideas/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.strafenet.com</link>
	<description>is a GLOBAL mission focused, values based and demographics driven organization.</description>
	<lastBuildDate>Tue, 10 Aug 2010 04:27:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Idea: Treat comments like articles</title>
		<link>http://blog.strafenet.com/2008/09/08/idea-treat-comments-like-articles/</link>
		<comments>http://blog.strafenet.com/2008/09/08/idea-treat-comments-like-articles/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 04:41:30 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[Ideas]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/?p=721</guid>
		<description><![CDATA[QDB already does this, but quotes aren&#8217;t comments. So we could make a new one.
]]></description>
			<content:encoded><![CDATA[<p>QDB already does this, but quotes aren&#8217;t comments. So we could make a new one.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2008/09/08/idea-treat-comments-like-articles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Idea #3: dontfeedthetrolls dot net</title>
		<link>http://blog.strafenet.com/2007/12/22/idea-3-dontfeedthetrolls-dot-net/</link>
		<comments>http://blog.strafenet.com/2007/12/22/idea-3-dontfeedthetrolls-dot-net/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 07:33:18 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Product Design]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2007/12/22/idea-3-dontfeedthetrolls-dot-net/</guid>
		<description><![CDATA[Want to rant against a troll? Do it on our board!
Citation:
http://www.informationweek.com/showArticle.jhtml?articleID=199600005
]]></description>
			<content:encoded><![CDATA[<p>Want to rant against a troll? Do it on our board!</p>
<p>Citation:</p>
<p>http://www.informationweek.com/showArticle.jhtml?articleID=199600005</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2007/12/22/idea-3-dontfeedthetrolls-dot-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Put your money where your mouth is.</title>
		<link>http://blog.strafenet.com/2007/12/14/put-your-money-where-your-mouth-is-2/</link>
		<comments>http://blog.strafenet.com/2007/12/14/put-your-money-where-your-mouth-is-2/#comments</comments>
		<pubDate>Sat, 15 Dec 2007 03:10:27 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Business/The Software Industry]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[General/Misc.]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Product Design]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2007/12/14/put-your-money-where-your-mouth-is-2/</guid>
		<description><![CDATA[The problem with any review site that has the slightest business connection to the products it reviews is obvious. You can&#8217;t criticize games and put in ads for them without running into a conflict of interest.

One of the best ways to force people to review games correctly is to make it in their best economic [...]]]></description>
			<content:encoded><![CDATA[<p>The problem with any review site that has the slightest business connection to the products it reviews is obvious. You can&#8217;t criticize games and put in ads for them without running into a conflict of interest.</p>
<p><a href="http://blog.strafenet.com/wp-content/uploads/2007/12/crappygame1.png" title="Are you thinking what I’m thinking?"><img src="http://blog.strafenet.com/wp-content/uploads/2007/12/crappygame1.png" alt="Are you thinking what I’m thinking?" /></a></p>
<p>One of the best ways to force people to review games correctly is to make it in their best economic interests to do so.</p>
<p><a href="http://blog.strafenet.com/wp-content/uploads/2007/12/moneymouth.png" title="Are you thinking what I’m thinking?"><img src="http://blog.strafenet.com/wp-content/uploads/2007/12/moneymouth.png" alt="Are you thinking what I’m thinking?" height="156" width="483" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2007/12/14/put-your-money-where-your-mouth-is-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An idea is not an egg</title>
		<link>http://blog.strafenet.com/2007/11/21/an-idea-is-not-an-egg/</link>
		<comments>http://blog.strafenet.com/2007/11/21/an-idea-is-not-an-egg/#comments</comments>
		<pubDate>Wed, 21 Nov 2007 16:48:04 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Business/The Software Industry]]></category>
		<category><![CDATA[Chris]]></category>
		<category><![CDATA[General/Misc.]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Liu's Reviews]]></category>
		<category><![CDATA[Product Design]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2007/11/21/an-idea-is-not-an-egg/</guid>
		<description><![CDATA[An Idea is Not an Egg: You Don&#8217;t Just Sit On it Until it Hatches
A smart idea sounds great when it&#8217;s in your head. Even before it&#8217;s made, we can imagine how great it will be&#8211;there would be no iPod, no PC, and no Super Mario Bros. without imagination.
But just because you can already see [...]]]></description>
			<content:encoded><![CDATA[<h2>An Idea is Not an Egg: You Don&#8217;t Just Sit On it Until it Hatches</h2>
<p>A smart idea sounds great when it&#8217;s in your head. Even before it&#8217;s made, we can imagine how great it will be&#8211;there would be no iPod, no PC, and no Super Mario Bros. without imagination.</p>
<p>But just because <em>you </em>can already see the finished idea, don&#8217;t think that the steps in between &#8220;smart idea&#8221; and &#8220;transformed future&#8221; are insignificant. They eat most smart ideas before they hatch.</p>
<p>The next time you hear that someone &#8220;stole&#8221; someone else&#8217;s idea, look at the in between first, and ask: how much of that&#8211;the business strategy, the way the product was built&#8211;was <em>really </em>stolen?</p>
<p><span id="more-367"></span></p>
<h2>Blatant theft? Or recognizing a smart idea?</h2>
<p><a href="http://www.apple.com/macosx/features/dashboard/" title="Dashboard">http://www.apple.com/macosx/features/dashboard/</a><br />
<a href="http://widgets.yahoo.com/" title="Formerly known as konfabulator."> http://widgets.yahoo.com/</a><br />
<a href="http://microsoftgadgets.com/" title="MS!"> http://microsoftgadgets.com/</a></p>
<p><strike>Three</strike> Four companies, one idea.</p>
<p>Here is a timeline of the gory details:</p>
<ul>
<li><strong>1984 </strong>- The original Macintosh, featuring widget-like desk accessories, is released. [<a href="http://daringfireball.net/2004/06/dashboard_vs_konfabulator">0</a>] [<a href="http://en.wikipedia.org/wiki/Desk_accessories">1</a>]</li>
<li><strong>1998 </strong>- Arlo Rose comes up with concept for Konfabulator, after looking at a skinnable MP3 player, according to his account.</li>
<li><strong>2001 </strong>- Microsoft releases a paper on UI design that discusses &#8220;Peripheral Awareness of Important Information&#8211;&#8221; a foundation for later &#8220;widget&#8221; development. [<a href="http://microsoftgadgets.com/blogs/gadgetnews/archive/2005/09/15/181.aspx">2</a>]</li>
<li><strong>February 10, 2003</strong> &#8211; With the help of Perry Clarke, Arlo releases the first version of Konfabulator.</li>
<li><strong>November 8, 2004</strong> &#8211; Konfabulator releases its widgets for Windows.</li>
<li><strong>April 29, 2005</strong> &#8211; Apple releases Mac OS X 10.4, which features Dashboard, a widget hosting system. [<a href="http://en.wikipedia.org/wiki/Dashboard_%28software%29">3</a>] [<a href="http://en.wikipedia.org/wiki/Mac_OS_X#History">4</a>] [<a href="http://www.apple.com/macosx/features/dashboard/">5</a>]</li>
<li><strong>July 25, 2005</strong> &#8211; Yahoo buys Konfabulator. [<a href="http://en.wikipedia.org/wiki/Yahoo%21_Widgets#History">6</a>]</li>
<li><strong>Also 2005 </strong>- Microsoft Gadgets is announced and unveiled in Vista.</li>
</ul>
<p>Does it really matter if Yahoo stole the idea from Apple, or MS stole from Arlo Rose?</p>
<p>Not really. I&#8217;m sure that most of the people involved in each of these projects would have been able to come up with widgets on their own; MS, Yahoo, and planet Earth are all full of innovative and capable engineers *(and I would hate to see a patent war kill widgets).</p>
<p>What really matters, though, is this; how much have they learned from the past? Yes, that&#8217;s right;<em> perhaps all these gadgetmakers <strong>should </strong>be looking at their competition.</em></p>
<h2>Assertion 1: Making a good product is not the result of creating something new; most often it is the result of doing something well.</h2>
<p>The widget is a relatively simple idea. Instead of having to visit a webpage every time you want to check the weather, why not have a widget that&#8217;s always there? Less distracting and yet always available. This would save space on the screen and yet keep little bits of useful information always accessible.</p>
<p>A bright idea doesn&#8217;t make a product though. Once you have the inspiration, it&#8217;s still nothing more than a paper tiger. Anyone can come up with bright ideas.</p>
<p>As one good example of an innovative idea that flopped, look at PDAs before Palm. People developed the technology and lots of people were <em>thinking</em> about handheld computers, but it was only when a team took the ideas and made them simple that the technology took off. [<a href="http://siliconuser.com/?q=node/17" title="Expose on the history of Palm">7</a>] [<a href="http://www.access-company.com/developers/documents/docs/zenofpalm/Enlightenment.html" title="How can a gorilla learn to fly?">8</a>: How can a gorilla learn to fly?]</p>
<p><img src="http://www.access-company.com/developers/documents/docs/zenofpalm/images/Enlightenment5.gif" title="Sometimes, less is more." alt="Sometimes, less is more." style="background-color: white" height="222" width="291" /></p>
<p><font size="2"><br />
Fig 1. Put too much in a palm device, and you make a mistake made by many before you.</font></p>
<p>Think back to Edison&#8211;1% inspiration, 99% perspiration. Bright ideas are incredibly cheap to produce, but taking them and putting together an actual market is hard work and hard thinking. That&#8217;s where the $ is.</p>
<h2>Assertion 2: Simply copying an idea == copying all the mistakes of that idea.</h2>
<p>Up unto the Palm, every pocket mobile device tried to be too ambitious. Newton, anyone?</p>
<p>If that doesn&#8217;t sound familiar, let&#8217;s try a more well recognized example:</p>
<p><img src="http://upload.wikimedia.org/wikipedia/commons/b/bc/IPod_Line.png" title="You can't beat this for simple." alt="You can't beat this for simple." style="background-color: white" height="158" width="317" /><br />
<br clear="all" /><br />
There were plenty of products before the iPod. The Rio shipped three years earlier. [<a href="http://en.wikipedia.org/wiki/Mp3_players#History" title="I swear they were first!">9</a>] <em>In both cases, the difference was that the new product was far simpler than its predecessors and its competition.</em></p>
<p><strong>If you copy a product that hasn&#8217;t succeeded before, you will run into the same problems that others had before. </strong>Not just making it simpler. There are business problems, design problems, and engineering problems.</p>
<h2>Assertion 3: Making a successful market isn&#8217;t about having the best engineering.</h2>
<p>The original idea for a mouse driven interface wasn&#8217;t created at Apple or at Microsoft. As computer history buffs will tell you, the original Graphical User Interface (or at least, the mouse part of it) was created at the XEROX Palo Alto Research Center [<a href="http://en.wikipedia.org/wiki/Palo_Alto_Research_Center#Accomplishments">10</a>] Nevertheless, nowadays, we don&#8217;t buy our operating systems from the company with the most innovative engineering.</p>
<p>Then, the Mac came along, and made a <em>new idea</em> into a <strong>great product</strong>. The original Mac was an exciting, innovative device, and you could buy it in a store. It took 6 years for Microsoft to come up with a product approaching it. [<a href="http://en.wikipedia.org/wiki/Windows_3.0" title="Argue what you want.">11</a>]</p>
<p>So why are we using Windows now?</p>
<p>Look at assertion 3 again.</p>
<p><strong>Making a successful market isn&#8217;t about having the best engineering.</strong></p>
<p>Windows took a no longer new idea, modeled it after a great product, and turned that into a <em><strong>profitable business</strong></em>.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>It&#8217;s not romantic to build a distribution network that will warehouse your new toy so it doesn&#8217;t sell out right after it hits stores in downtown Manhattan. It&#8217;s not romantic to make your product compatible with version 1 of a huge corporate customer&#8217;s obsolete operating system. It&#8217;s not romantic to figure out how your brand new shiny social network that is, by the way, sooo much better than that other social network that everyone still uses for some reason, will get customers.</p>
<p>But you still have to do it.</p>
<p>Remember that before laying the egg.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2007/11/21/an-idea-is-not-an-egg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Puzzles galore, and new idea #4</title>
		<link>http://blog.strafenet.com/2006/09/05/puzzles-galore-and-new-idea-4/</link>
		<comments>http://blog.strafenet.com/2006/09/05/puzzles-galore-and-new-idea-4/#comments</comments>
		<pubDate>Wed, 06 Sep 2006 02:45:37 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[General/Misc.]]></category>
		<category><![CDATA[Ideas]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2006/09/05/puzzles-galore-and-new-idea-4/</guid>
		<description><![CDATA[
http://home.planet.nl/~Qwyzzle
http://www.try2hack.nl
http://www.deathball.net/notpron

I&#8217;m still working on the e-mail ticket idea. Basically I just need to spec it out and implement it (hah).
]]></description>
			<content:encoded><![CDATA[<ul>
<li><a title="Qwyzzle" href="http://home.planet.nl/~Qwyzzle">http://home.planet.nl/~Qwyzzle</a></li>
<li><a title="try2hack" href="http://www.try2hack.nl">http://www.try2hack.nl</a></li>
<li><a title="The Hardest Riddle on the Internet" href="http://www.deathball.net/notpron">http://www.deathball.net/notpron</a></li>
</ul>
<p>I&#8217;m still working on the e-mail ticket idea. Basically I just need to spec it out and implement it (hah).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2006/09/05/puzzles-galore-and-new-idea-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The New Programming (Part II): Functional Object-Oriented Programming (FOOP)</title>
		<link>http://blog.strafenet.com/2006/08/29/the-new-programming-part-ii-functional-object-oriented-programming-foop/</link>
		<comments>http://blog.strafenet.com/2006/08/29/the-new-programming-part-ii-functional-object-oriented-programming-foop/#comments</comments>
		<pubDate>Tue, 29 Aug 2006 04:09:16 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Semantic Unit Architecture]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2006/08/29/the-new-programming-part-ii-functional-object-oriented-programming-foop/</guid>
		<description><![CDATA[In my last post, I issued a longish essay that proved that I am equally incompetent in my comprehension of functional and object-oriented programming. We created the notion of a unit, an entity that behaves somewhat like an object&#8211;it can be stateful, it defines a space which belongs to it&#8211;and somewhat like a function&#8211;well, it [...]]]></description>
			<content:encoded><![CDATA[<p>In my last post, I issued a longish essay that proved that I am equally incompetent in my comprehension of functional and object-oriented programming. We created the notion of a <em>unit</em>, an entity that behaves somewhat like an object&#8211;it can be stateful, it defines a space which belongs to it&#8211;and somewhat like a function&#8211;well, it doesn&#8217;t really.</p>
<p>Or does it? Hopefully the example we choose will clarify some aspects of how this method differs from standard development techniques.</p>
<p><span id="more-470"></span></p>
<p><strong>The Human Unit</strong></p>
<p>One of the quirky parts of programming is dealing with humans. This is no surprise&#8211;programming languages aren&#8217;t human oriented. It&#8217;s easy to sort a list of items in most languages. However in most programs, there is an awkward moment where we call the program into existance. In C, it&#8217;s called main. In Python, there&#8217;s a whole blog <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=4829" title="Python main() functions">entry</a> by the creator of Python dedicated to it.</p>
<p>With a graphical UI, the challenges seemingly multiply. Computer programming is (typically) a sequential art; things work simplest when one thing follows another. In a (good) graphical UI, the user never waits for the computer to finish; output can come in many forms at many times.</p>
<p>A Human unit is a rather versatile unit to connect to. It works well in the unit scheme because we can connect it to other entities rather simply, in some cases. If we connect &#8220;Hello, World!,&#8221; a Text unit, to the Human, the output would appear on their screen. If we connect an MP3, the Human would hear the MP3.</p>
<p><img src="http://blog.strafenet.com/wp-content/uploads/2006/08/Example.png" alt="Connections diagram" id="image476" /><br />
How would the system know how to handle connections to Human? This would be a matter of the system understanding the connected unit on a semantic level. We could imagine a semantic attribute being assigned to all values that defines its human interaction.</p>
<p><strong>A Matter of Semantics</strong></p>
<p>Semantic attributes would also allow us a measure of freedom in attaching objects to each other. If we attach a Printer to a Web Browser, we don&#8217;t need to tell the Printer to print the web page and not the address of the page it&#8217;s currently on.</p>
<p><strong>Is a connection forever?</strong></p>
<p>The previous Printer example seems to suggest that connections don&#8217;t remain the same in time. Would we want to script connections to open and close? This is one of the many ridiculous challenges I seem to have written myself into.</p>
<p><strong>Is this a useful method of getting people involved in programming, or just a useful way of visualizing architecture?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2006/08/29/the-new-programming-part-ii-functional-object-oriented-programming-foop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The New Programming (Part I): Functional Object-Oriented Programming (FOOP)</title>
		<link>http://blog.strafenet.com/2006/08/28/the-new-programming-part-i-functional-procedural-object-oriented-programming-fpoop/</link>
		<comments>http://blog.strafenet.com/2006/08/28/the-new-programming-part-i-functional-procedural-object-oriented-programming-fpoop/#comments</comments>
		<pubDate>Mon, 28 Aug 2006 22:02:50 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Chris]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Semantic Unit Architecture]]></category>
		<category><![CDATA[semantic]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2006/08/28/the-new-programming-part-i-functional-procedural-object-oriented-programming-fpoop/</guid>
		<description><![CDATA[In my last post, &#8220;Free as in speech, not as in beer,&#8221; I made the rather outlandish claim that open source software will not truly live up to its arrogant claims of freedom until there is freedom for everyone; that everyone with the wit and ambition would be able to understand how software was constructed [...]]]></description>
			<content:encoded><![CDATA[<p>In my last post, &#8220;<a href="http://blog.strafenet.com/2006/08/26/free-as-in-speech-not-as-in-beer/" title="Free as in speech, not as in beer">Free as in speech, not as in beer</a>,&#8221; I made the rather outlandish claim that open source software will not truly live up to its arrogant claims of freedom until there is freedom for <em>everyone</em>; that everyone with the wit and ambition would be able to understand how software was constructed and even be able to manipulate the code themselves. Now you may argue with me that making software architecture this simple is downright impossible when <a href="http://www.codinghorror.com/blog/archives/000635.html" title="Separating Programming Sheep from Non-Programming Goats">30-60% of university students fail their first programming course</a>. And you may be right; I didn&#8217;t set a goal based on its achievability.</p>
<p>But it would be silly to give up on a goal with such a wide potential. In fact, I&#8217;m going to go ahead and tool a new paradigm of software architecture. To some extent, we have the pieces we need; all that&#8217;s needed is a bit (lot) of imagination and hard work.</p>
<p>We can summarize this in three main points:</p>
<ol>
<li>Programs should be made of individual components that can be easily understood.</li>
<li>Components should be able to function independently; we should not have to guide them. Instead, they should have well-defined behaviors.</li>
<li>Components should be able to handle all sorts of input.</li>
</ol>
<p><span id="more-469"></span></p>
<h2>1. You may not know why the phosphors glow&#8230;but you can change the channels.</h2>
<p>A program is made up of a set of working components, much like televisions, cars and any other man made object.</p>
<p>Most of us don&#8217;t know exactly how TVs work. We don&#8217;t know how to build a cathode ray tube. But we know it&#8217;s in there, we know how to change the channels, we know that it has a standard plug that can hook up to any cable outlet.</p>
<p><strong>This is what&#8217;s missing in an average computer program.</strong></p>
<blockquote><p>Run a web browser. The browser is one seamless block of code; you can&#8217;t say exactly which part is displaying the page, or which part is retrieving it. If you think this is silly/wrong, think about this; many average computer users don&#8217;t even understand that there&#8217;s a browser at all. They just think of it as the &#8220;internet.&#8221; This is lexical nonsense!</p>
<p>But we don&#8217;t build software so that the concepts programmers see are also clear to the user.</p></blockquote>
<h2>2. Functional Object-Oriented Programming (FOOP)</h2>
<p>When we talk about <em>object oriented programming</em>, we&#8217;re usually referring to a programming language like Java or Smalltalk. In Java, <em>objects </em>are individual entities that all follow the behavior of the class that spawned them. For example, we can create many Waiter objects based on a Waiter <em>class</em>. The Waiter class tells us that Waiter objects can take orders and remember them. You might imagine a Waiter object having these methods, as dictated to the Waiter by the class:</p>
<blockquote><p>1. takeOrder(x) //This means, &#8220;Waiter, please get us x!&#8221;</p>
<p>2. getStatus(x) //This means, &#8220;Waiter, tell us how our x is doing. Is it ready?&#8221;</p></blockquote>
<p>Each of these takes an input (that&#8217;s called x) and gives us a response. Every Waiter object responds to these method calls.</p>
<p>Now in a way, this model is very intuitive; we can picture an imaginative 9 year old thinking of Waiters as Waiter objects. He or she could read through the Waiter&#8217;s 2 methods and call them, making the Waiter takeOrders for every food imaginable until the table was full. The reason this method works well is that it revolves around an object &#8211; a Waiter &#8211; for which we have a good cognitive model; we know what waiters are and how they function.</p>
<p>What we really want, however, is a more advanced idea of an object. If you give a Waiter an order, they should know what to do with it. <em>We shouldn&#8217;t have to call takeOrder at all</em>. This may sound silly, but <em>in the real world we expect not to clear the hurdles of going through a Waiter&#8217;s <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#method_summary" title="Javadoc madness">javadoc</a> and figuring out exactly which method of two hundred to call</em>. In order to have truly intuitive programming, we shouldn&#8217;t have to be aware of this extraneous information&#8211;passing a Waiter an order should just be that.</p>
<h2>Make Objects Know What to Do on Their Own!</h2>
<p>In order for this to be, we can replace the idea of an object with something more akin to functions in functional programming. While so far we have made objects the primary unit of programming, now we will examine the use of &#8220;functions.&#8221;</p>
<p>Gas <a href="http://blog.strafenet.com/2005/12/20/the-beauty-of-anonymous-methods-aka-lambda-expressions/" title="Tim's take on lambda">discusses</a> this when he referred to the concept of <a href="http://en.wikipedia.org/wiki/Lambda_calculus" title="Lambda calculus">lambda calculus</a> and functions as first order values. (You may be more familiar with Joel on Software&#8217;s <a href="http://www.joelonsoftware.com/items/2006/08/01.html" title="Can Your Programming Language Do This?">example</a>.) We&#8217;re not going to go into lambda calculus, so you can ignore this and read the following:</p>
<blockquote><p>A function doesn&#8217;t have to be <em>told</em> what to do when given an input; instead, it <em>knows.</em> Unlike objects, functions are defined by the output they produce for a particular input.</p></blockquote>
<p>The basic <em>unit </em>I&#8217;m developing here is neither a true object nor a traditional function. A traditional object offers more than one way to process data; ours simply accepts data in any form. True functional programming, on the other hand, does not have objects with state (think waiting algorithm, not waiter); its functions are immutable, while we potentially allow units to remember things by having state.</p>
<h2>3. Polymorphism: The Universal Translator</h2>
<p><a href="http://en.wikipedia.org/wiki/Polymorphism_(computer_science)" title="Polymorphism">Polymorphism</a>, for us, basically means that our unit can understand any sort of input it is given.  When you think in a language like C, you generally restrict the input you can process. A function called add in C would be able to add only what it was defined to add. If it was defined for integers, it wouldn&#8217;t be able to add fractions or strings, and vice versa.</p>
<p>To create units that anyone would be able to combine in a way that made sense to them, we would have to make this distinction <em>entirely </em>invisible to the user. This is the reason that in Javascript, you can add &#8220;abc&#8221; and 123 to get &#8220;abc123&#8243;&#8211;addition in JS is polymorphic, able to handle different types.</p>
<p>Now, in order for our unit to be able to handle being thrown all sorts of strange data, we must give that unit some sort of understanding of what the data is. An image, for example, is just a number when we store it on a computer; however that does not mean that when we add two images together we just want to add the two underlying numbers!</p>
<p>This is an extremely challenging problem, and there are two main ways we can tackle it; give each unit the ability to handle all new types of data, or encode in each piece of data some sort of semantic meaning. In the end we may find that both are important; this is a challenge I will address in more detail in Part III.</p>
<p>In Part II, we&#8217;ll talk about a concrete example of this unit architecture and also show how we might get a human involved in this process.</p>
<h2>Conclusions</h2>
<p>If you just look at the rules of the system, without looking at the overarching goals, you might confuse the system I have just devised with a sort of lawless type-unsafe Javascript. In a way, I&#8217;m not too unhappy with that definition; if you ask the average math student to add two numbers, they won&#8217;t return an error if you give them a fraction and a complex function as the two things to add. (and if they do, they probably won&#8217;t make it past their sophomore year.) <strong>The point of erasing all these arbitrary distinctions is to remove the unnecessary burdens with which the average person is encumbered when learning to program.</strong></p>
<p>If I took an experienced programmer, and faced them with the implications of my strange unit system, they would likely stick to Lisp or Java or C, and that&#8217;s fine. <strong>The goal here is to show the average person how to produce useful software without thinking about syntax, type safety, or error handling, even once. Remember the TV!</strong> Hopefully, if this becomes clear, then FOOP might demonstrate its worth to power users.</p>
<p>[Ideas with similar visual modeling have made it into big company research projects - see <a href="http://www.jumpcut.com/fullscreen?id=594F555C568011DC9D24000423CEF5B0&amp;type=movie">here</a>!]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2006/08/28/the-new-programming-part-i-functional-procedural-object-oriented-programming-fpoop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Idea No. 3: iPod Police</title>
		<link>http://blog.strafenet.com/2006/07/26/idea-no-3-ipod-police/</link>
		<comments>http://blog.strafenet.com/2006/07/26/idea-no-3-ipod-police/#comments</comments>
		<pubDate>Wed, 26 Jul 2006 20:59:26 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General/Misc.]]></category>
		<category><![CDATA[Ideas]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2006/07/26/idea-no-3-ipod-police/</guid>
		<description><![CDATA[The NYPD should have a special program where they put out decoy iPods with tracking devices so they can find thieves. Apparently this is already done with cars in other locations.
-Where this came from 
]]></description>
			<content:encoded><![CDATA[<p>The NYPD should have a special program where they put out decoy iPods with tracking devices so they can find thieves. Apparently this is already done with cars in other locations.</p>
<p>-<a title="Don't get your iPod stolen" href="http://www.engadget.com/2006/07/26/methods-for-escaping-robbery-with-your-ipod/">Where this came from </a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2006/07/26/idea-no-3-ipod-police/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protected: Day Four of the Mission: Google vs. Microsoft</title>
		<link>http://blog.strafenet.com/2006/07/17/google-vs-microsoft/</link>
		<comments>http://blog.strafenet.com/2006/07/17/google-vs-microsoft/#comments</comments>
		<pubDate>Mon, 17 Jul 2006 07:41:10 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Business/The Software Industry]]></category>
		<category><![CDATA[Chris]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Product Design]]></category>
		<category><![CDATA[Tim]]></category>

		<guid isPermaLink="false">http://blog.strafenet.com/2006/07/17/google-vs-microsoft/</guid>
		<description><![CDATA[There is no excerpt because this is a protected post.]]></description>
			<content:encoded><![CDATA[<form action="http://blog.strafenet.com/wp-pass.php" method="post">
<p>This post is password protected. To view it please enter your password below:</p>
<p><label for="pwbox-447">Password:<br />
<input name="post_password" id="pwbox-447" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="Submit" /></p></form>
]]></content:encoded>
			<wfw:commentRss>http://blog.strafenet.com/2006/07/17/google-vs-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.391 seconds -->
