<?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>Scott Yang's Playground &#187; Programming</title>
	<atom:link href="http://scott.yang.id.au/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://scott.yang.id.au</link>
	<description>Faith, Technology and Randomness in Life, According to Scott</description>
	<lastBuildDate>Thu, 09 Feb 2012 09:01:12 +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>OOP is Distracting</title>
		<link>http://scott.yang.id.au/2011/03/oop-is-distracting/</link>
		<comments>http://scott.yang.id.au/2011/03/oop-is-distracting/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 08:18:58 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/?p=2038</guid>
		<description><![CDATA[Don&#8217;t Distract New Programmers with OOP. The shift from procedural to OO brings with it a shift from thinking about problems and solutions to thinking about architecture. That&#8217;s easy to see just by comparing a procedural Python program with an object-oriented one. The latter is almost always longer, full of extra interface and indentation and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://prog21.dadgum.com/93.html">Don&#8217;t Distract New Programmers with OOP</a>.</p>
<blockquote><p>The shift from procedural to OO brings with it a shift from thinking about problems and solutions to thinking about architecture. That&#8217;s easy to see just by comparing a procedural Python program with an object-oriented one. The latter is almost always longer, full of extra interface and indentation and annotations. <em>The temptation is to start moving trivial bits of code into classes and adding all these little methods and anticipating methods that aren&#8217;t needed yet but might be someday.</em></p></blockquote>
<p>Haven&#8217;t I seen that all too often on that project that I have worked on over the past 10 years?! Premature optimisation is the root of all evil. Unnecessary architecting the solution won&#8217;t be too far from that.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2011/03/oop-is-distracting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vicious Cycle of Dirty Code</title>
		<link>http://scott.yang.id.au/2010/10/vicious-cycle-of-dirty-code/</link>
		<comments>http://scott.yang.id.au/2010/10/vicious-cycle-of-dirty-code/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 01:01:46 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/?p=1984</guid>
		<description><![CDATA[Via Hacker News, Chad Austin: 10 Pitfalls of Dirty Code. Dirty code does not scale to larger teams. Dirty code reduces team morale. Dirty code makes programmers slower. Dirty code inhibits the formation of an ownership culture. If product concepts are not reflected in the code, programmers might implement features in ways that don&#8217;t make [...]]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://news.ycombinator.com/item?id=1806610">Hacker News</a>, <strong><a href="http://chadaustin.me/2008/10/10-pitfalls-of-dirty-code/">Chad Austin: 10 Pitfalls of Dirty Code</a></strong>.</p>
<ol>
<li>Dirty code does not scale to larger teams.</li>
<li>Dirty code reduces team morale.</li>
<li>Dirty code makes programmers slower.</li>
<li>Dirty code inhibits the formation of an ownership culture.</li>
<li>If product concepts are not reflected in the code, programmers might implement features in ways that don&#8217;t make sense in the product.</li>
<li>Dirty code incentivizes the business to invest in tangential revenue work rather than attacking core business problems.</li>
<li>Even with good automated test coverage, dirty code increases the risk of introducing regressions.</li>
<li>Wide or unclear dependencies reduce the quality of tests.</li>
<li>Dirty code hides real bugs.</li>
<li>Dirty code gets dirtier.</li>
</ol>
<p>And his final thought:</p>
<blockquote><p>&#8220;Well, what can I do about it?&#8221; First, try to pay attention to your code. After you finish writing some, ask yourself &#8220;Could I make this clearer?&#8221; Then ask your neighbor the same question.</p></blockquote>
<p>Only if it is as trivial! Currently working on dirty code lingered over the past 10 years, and have no opportunity to fix it, due to the fact that the company has always been pushing for products and features first. Hacks can be fixed later &#8212; well they never get fixed when you do not reserve your developers&#8217; time on refactoring.</p>
<p>Teams are messily structured that the management assumes &#8220;everyone should be able to work on anything&#8221;. That throws any code ownership out of window. That leads to reduced motivation. When I don&#8217;t get motivated to make code better &#8212; even more dirty code gets produced.</p>
<p>It&#8217;s a vicious cycle. That sucks.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2010/10/vicious-cycle-of-dirty-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Joel Spolsky and Jeff Atwood on Learning C</title>
		<link>http://scott.yang.id.au/2008/04/joel-spolsky-and-jeff-atwood-on-learning-c/</link>
		<comments>http://scott.yang.id.au/2008/04/joel-spolsky-and-jeff-atwood-on-learning-c/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 05:23:09 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[jeffatwood]]></category>
		<category><![CDATA[joelspolsky]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/?p=1741</guid>
		<description><![CDATA[Stackoverflow Podcast #2, where Joel Spolsky argued that all developers should learn C starting at around 39min. His argument is, that it is like driving with a stick and know about the mechanics, coding in C (or easy-to-use assemble) helps you to understand what&#8217;s going on under the bonnet, where Jeff does not exactly agree. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.stackoverflow.com/index.php/2008/04/podcast-2/">Stackoverflow Podcast #2, where Joel Spolsky argued that all developers should learn C</a> starting at around 39min. His argument is, that it is like driving with a stick and know about the mechanics, coding in C (or easy-to-use assemble) helps you to understand what&#8217;s going on under the bonnet, where Jeff does not exactly agree. Has he driven a <a href="http://en.wikipedia.org/wiki/Direct-Shift_Gearbox">DSG</a> where it shifts faster than manual? A lot of optimised algorithms in high level languages, garbage collection included, are actually faster than manually coded equivalent by average C coders.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2008/04/joel-spolsky-and-jeff-atwood-on-learning-c/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Google App Engine &#8211; AWS Competitor?</title>
		<link>http://scott.yang.id.au/2008/04/google-app-engine/</link>
		<comments>http://scott.yang.id.au/2008/04/google-app-engine/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 14:13:16 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/?p=1737</guid>
		<description><![CDATA[Google has just launched a preview version of Google App Engine, a development platform for your next start-up web-based application that is designed to be scalable. Looks like it is designed to compete against Amazon Web Services, and it includes the full suit of development stack, including: Web serving environment, including a Python runtime environment [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://scott.yang.id.au/file/images/google-appengine.png" width="250" height="250" class="floaty"/> Google has just <a href="http://googleappengine.blogspot.com/2008/04/introducing-google-app-engine-our-new.html">launched a preview version of Google App Engine</a>, a development platform for your next start-up web-based application that is designed to be scalable. Looks like it is designed to compete against <a href="http://www.amazonaws.com/">Amazon Web Services</a>, and it includes the full suit of development stack, including:</p>
<ul>
<li>Web serving environment, including a Python runtime environment + Django framework. Competes with Amazon&#8217;s Elastic Computing Cloud.</li>
<li>Persistent storage powered by Google BigTable and Google FS, supporting its own query language and transactions using optimistic locking (what?! no MVCC?) Competes with Amazon&#8217;s Simple Storage Service and SimpleDB.</li>
<li>API for authenticate Google users, sending emails, fetching URLs, etc.</li>
</ul>
<p>Looks much more restrictive than Amazon&#8217;s EC2 where you get your own Xen VPS. However Google also gives you 500MB storage, 200M megacycles of CPU time/day and 10GB data transfer/day for free, which is enough for any startup to prototype their next killer app. Developing for a sandbox is never fun though, but the SDK provides an emulated environment so you can do your development locally before uploading to Google App Engine.</p>
<p>Biggest winner? I think it is Python. Hopefully we will see more Python-based web applications this year.</p>
<p><b>Update</b>: TechCrunch has already <a href="http://www.techcrunch.com/2008/04/08/techcrunch-labs-our-experience-building-and-launching-app-on-google-app-engine/">coded and deployed their first HotOrNot-type application</a> on Google App Engine &#8212; and it took the RoR guy only 4 hours to sign up, figure out Python, code up the site and deploy. Too bad that it&#8217;s already too popular and ran out the quota.</p>
<p><b>Update 2</b>: Interesting response from <a href="http://www.joyeur.com/2008/04/08/let-my-people-have-root">Joyent</a>, which has already made its way into providing utility computing via its Accelerator/Solaris Container products. Basically what Joyent is saying &#8212; no root, not open! Obviously they are still stuck in the mindset of doing all the scaling themselves which is only possible when you have the admin access to the running instances. It is great when you have root &#8212; sometimes &#8212; when you want to tinker with the setup yourself. What Google is saying here is, just worry about coding around the framework, and they&#8217;ll do the scalability for you. Having &#8220;root&#8221; will only blow a hole in your foot in this case.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2008/04/google-app-engine/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Update &#8211; Permalink Redirect and ESVPopup</title>
		<link>http://scott.yang.id.au/2008/04/update-permanent-redirect-and-esvpopup/</link>
		<comments>http://scott.yang.id.au/2008/04/update-permanent-redirect-and-esvpopup/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 11:53:38 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ESV]]></category>
		<category><![CDATA[esvpopup]]></category>
		<category><![CDATA[permalink redirect]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/?p=1735</guid>
		<description><![CDATA[Two small updates on my code snippet collections. Permalink Redirect 0.8.4 I have updated Permalink Redirect plugin to 0.8.4. The main functionality of this plugin has been replaced by WordPress&#8217; redirect_canonical() function since WP 2.3, but somehow some people are still using this plugin for its remaining functions (permalink structure changes, arbitrary path redirect, etc). [...]]]></description>
			<content:encoded><![CDATA[<p>Two small updates on my <a href="http://scott.yang.id.au/code/">code snippet collections</a>.</p>
<h3 id="toc-permalink-redirect-0-8-4">Permalink Redirect 0.8.4</h3>
<p>I have updated <a href="http://scott.yang.id.au/code/permalink-redirect/">Permalink Redirect</a> plugin to 0.8.4. The main functionality of this plugin has been replaced by WordPress&#8217; <code>redirect_canonical()</code> function since WP 2.3, but somehow some people are still using this plugin for its remaining functions (permalink structure changes, arbitrary path redirect, etc). 0.8.4 fixes an issue with arbitrary path redirect when the old path is now producing 404. It has also overwritten the <code>wp_redirect</code> function (taken from WP 2.5) so 301 redirect works properly on Lighty/Nginx setups.</p>
<h3 id="toc-esvpopup-1-4">ESVPopup 1.4</h3>
<p>Don&#8217;t you love browser incompatibility?! While everyone is trying to crack <a href="http://acid3.acidtests.org/">Acid3</a>, I am still trying to figure out why <code>event.clientX</code> on Safari is different from all the other browsers.</p>
<p>Anyway. <a href="http://scott.yang.id.au/code/esvpopup/">ESVPopup</a> 1.4 should work with Safari 3.0.x now.</p>
<p>Btw, this blog has also been upgraded to <a href="http://wordpress.org/development/2008/03/wordpress-25-brecker/">WordPress 2.5</a>. Nice new dashboard and so far everything works. Finger crossed.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2008/04/update-permanent-redirect-and-esvpopup/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Java is Considered Bad for Computer Science</title>
		<link>http://scott.yang.id.au/2008/01/java-is-considered-bad-for-computer-science/</link>
		<comments>http://scott.yang.id.au/2008/01/java-is-considered-bad-for-computer-science/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 10:19:46 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2008/01/java-is-considered-bad-for-computer-science/</guid>
		<description><![CDATA[Via Reddit, Who Killed the Software Engineer? &#8220;One of the most ill-considered steps that universities took was to adopt Java as the most widely used language in introductory programming courses&#8230;&#8221; Why are the universities replacing Miranda/Haskell/Modula-2 with Java/C#? Because that&#8217;s what the IT industry uses, but not necessarily because they are good languages to learn [...]]]></description>
			<content:encoded><![CDATA[<p>Via Reddit, <a href="http://itmanagement.earthweb.com/career/article.php/11067_3722876_2">Who Killed the Software Engineer?</a> <em>&#8220;One of the most ill-considered steps that universities took was to adopt Java as the most widely used language in introductory programming courses&#8230;&#8221;</em> Why are the universities replacing Miranda/Haskell/Modula-2 with Java/C#? Because that&#8217;s what the IT industry uses, but not necessarily because they are good languages to learn about Computer Science or Software Engineering. After doing quite a few interviews last year, may I say <a href="http://www.uts.edu.au/">UTS</a> CS students are the worst&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2008/01/java-is-considered-bad-for-computer-science/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Amazon SimpleDB</title>
		<link>http://scott.yang.id.au/2007/12/amazon-simpledb/</link>
		<comments>http://scott.yang.id.au/2007/12/amazon-simpledb/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 02:09:10 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[simpledb]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2007/12/amazon-simpledb/</guid>
		<description><![CDATA[Amazon SimpleDB &#8212; released last week that provides access to a scalable storage of structured data via a REST API, which runs along side with EC2 and S3 to provide the &#8220;scalable backend&#8221; for online applications. Comments over the weekend have ranged from &#8220;it sucks&#8221; to &#8220;who needs Oracle/MSSQL/DB2?&#8221;. I personally won&#8217;t be using it. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aws.amazon.com/simpledb">Amazon SimpleDB</a> &#8212; released last week that provides access to a scalable storage of structured data via a REST API, which runs along side with <a href="http://aws.amazon.com/ec2">EC2</a> and <a href="http://aws.amazon.com/s3">S3</a> to provide the &#8220;scalable backend&#8221; for online applications. Comments over the weekend have ranged from &#8220;it sucks&#8221; to &#8220;who needs Oracle/MSSQL/DB2?&#8221;. I personally won&#8217;t be using it. It won&#8217;t scale down as much as FOSS DBs like MySQL or PostgreSQL which are virutally free with your shared hosting. It &#8220;might&#8221; scale up (which has not yet been proved), but it will soon become very expensive. 10GB/domain is a big show-stopper, latency sucks for database-intensive applications, query time limited to 5 seconds, and no inter-domain queries. Sounds like it&#8217;s no good for any serious RDBMS-replacement work. It will also force you to code your applications specifically for that platform, just like S3. Vendor lock-in anyone?</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2007/12/amazon-simpledb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Programming according to Dilbert</title>
		<link>http://scott.yang.id.au/2007/11/agile-programming-according-to-dilbert/</link>
		<comments>http://scott.yang.id.au/2007/11/agile-programming-according-to-dilbert/#comments</comments>
		<pubDate>Wed, 28 Nov 2007 11:32:39 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2007/11/agile-programming-according-to-dilbert/</guid>
		<description><![CDATA[What exactly is Agile Programming Methodology anyway? During interview for developers, we usually asked our candidates their preferred development methodology and whether they have heard of agile programming, although we are not structurally practising any of these unstructural programming methodology anyway (just that they are buzzwords these days and nothing more). Seriously, in a small [...]]]></description>
			<content:encoded><![CDATA[<p>What exactly is <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile Programming Methodology</a> anyway?</p>
<p style="text-align:center"><a href="http://www.dilbert.com/comics/dilbert/archive/dilbert-20071126.html"><img src="http://scott.yang.id.au/file/images/dilbert-agile-programming.png" width="600" height="208" alt="Dilbert: Agile Programming"/></a></p>
<p>During interview for developers, we usually asked our candidates their preferred development methodology and whether they have heard of agile programming, although we are not structurally practising any of these unstructural programming methodology anyway (just that they are buzzwords these days and nothing more). Seriously, in a small team with more work than everyone can possibly handle, with customers wanting immediate feedback continuously and a lot of things have to be done adhoc-ly &#8212; let&#8217;s just call it &#8220;agile&#8221;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2007/11/agile-programming-according-to-dilbert/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Stuck</title>
		<link>http://scott.yang.id.au/2007/05/stuck/</link>
		<comments>http://scott.yang.id.au/2007/05/stuck/#comments</comments>
		<pubDate>Mon, 28 May 2007 05:09:41 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2007/05/stuck/</guid>
		<description><![CDATA[On the left hand side, we have multiple vulnerabilities with PHP release 5.2.1 or less. Remote attackers might be able to exploit these issues in PHP applications making use of the affected functions, potentially resulting in the execution of arbitrary code, Denial of Service, execution of scripted contents in the context of the affected site, [...]]]></description>
			<content:encoded><![CDATA[<p>On the left hand side, we have <a href="http://www.gentoo.org/security/en/glsa/glsa-200705-19.xml">multiple vulnerabilities</a> with PHP release 5.2.1 or less.</p>
<blockquote><p>Remote attackers might be able to exploit these issues in PHP applications making use of the affected functions, potentially resulting in the execution of arbitrary code, Denial of Service, execution of scripted contents in the context of the affected site, security bypass or information leak.</p></blockquote>
<p>On the right hand side, we have <a href="http://www.mail-archive.com/internals@lists.php.net/msg27608.html">HTTP_RAW_POST_DATA bug in PHP 5.2.2</a>.</p>
<blockquote><p>So <code>$GLOBALS['HTTP_RAW_POST_DATA']</code> is not set. The <code>PEAR::XML_RPC</code> package actually uses <code>$HTTP_RAW_POST_DATA</code> on the receiving end, but that doesn&#8217;t appear to be set either. And the <code>always_populate_raw_post_data</code> option in php.ini doesn&#8217;t make a difference.</p></blockquote>
<p>That means, any PHP code that assumes the existence of <code>$HTTP_RAW_POST_DATA</code> will simply fail as that variable is no longer populated. With all the API, web services, etc, there are actually many applications that use raw post data, which could be XML, JSON, or any other package formats. Pingbacks simply won&#8217;t work in WordPress, although WP 2.2 has a work around on this PHP 5.2.2 bug.</p>
<p>So I basically upgraded all my servers to PHP 5.2.2 early last week. found many web services code I wrote were broken, and was forced to revert back to vulnerable PHP 5.2.1. The bug <a href="http://bugs.php.net/bug.php?id=41293">has been fixed and there&#8217;s a work around</a>, but I would rather wait for 5.2.3 to hit the street, which I hope to be sooner than later.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2007/05/stuck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mark Pilgrim&#8217;s Translation of DHH vs. Al3x</title>
		<link>http://scott.yang.id.au/2007/04/mark-pilgrims-translation-of-dhh-vs-al3x/</link>
		<comments>http://scott.yang.id.au/2007/04/mark-pilgrims-translation-of-dhh-vs-al3x/#comments</comments>
		<pubDate>Tue, 17 Apr 2007 11:48:50 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Humour]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2007/04/mark-pilgrims-translation-of-dhh-vs-al3x/</guid>
		<description><![CDATA[Mark Pilgrim took the John Gruber-style translation of DHH&#8217;s response to Al3x/Twitter&#8217;s issue with Rails&#8217; scalability. One of the funnies posts I have seen recently. &#8220;My ego is the size of Montana.&#8221; Now, if that is the size of DHH&#8217;s ego, I wonder what is the size of collective ego of the entire 37signals team? [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://diveintomark.org/archives/2007/04/16/dhh-translation">Mark Pilgrim took the John Gruber-style translation of DHH&#8217;s response to Al3x/Twitter&#8217;s issue with Rails&#8217; scalability</a>. One of the funnies posts I have seen recently. <em>&#8220;My ego is the size of Montana.&#8221;</em> Now, if that is the size of DHH&#8217;s ego, I wonder what is the size of collective ego of the entire 37signals team? But then you do wonder, whether this kind of &#8220;humour&#8221; on the net is really necessary&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2007/04/mark-pilgrims-translation-of-dhh-vs-al3x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter is Slow, but not because of Ruby</title>
		<link>http://scott.yang.id.au/2007/04/twitter-is-slow-but-not-because-of-ruby/</link>
		<comments>http://scott.yang.id.au/2007/04/twitter-is-slow-but-not-because-of-ruby/#comments</comments>
		<pubDate>Sun, 15 Apr 2007 06:03:29 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2007/04/twitter-is-slow-but-not-because-of-ruby/</guid>
		<description><![CDATA[Jeff Atwood commented on the Twitter scalability problem and blamed on Ruby&#8217;s slowness. I have quoted from Coding Horror a few times (in my other blogs as well), but I still do not get how his opinions can be so highly regarded in programming community, when he cannot even distinguish between performance and scalability. Even [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codinghorror.com/blog/archives/000838.html">Jeff Atwood commented on the Twitter scalability problem and blamed on Ruby&#8217;s slowness</a>. I have quoted from Coding Horror a few times (in my other blogs as well), but I still do not get how his opinions can be so highly regarded in programming community, when he cannot even distinguish between <em>performance</em> and <em>scalability</em>. Even he himself admitted that</p>
<blockquote><p>To be fair, it sounds like most of Twitter&#8217;s problems are database problems, so maybe it doesn&#8217;t matter what language they use&#8221;</p></blockquote>
<p>Even Alex stated it clearly in the <a href="http://www.radicalbehavior.com/5-question-interview-with-twitter-developer-alex-payne/">Twitter interview</a> that database has been the bottleneck, <strong>just like most share-nothing web development platform</strong> that was designed to be highly scalable in the first place! Ruby is slow. Python is a tad better, but in a heavily IO bounded web-based application, both will be more than fast enough. How to scale the database? It is not trivial and very domain specific, and that is what Alex is complaining about.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2007/04/twitter-is-slow-but-not-because-of-ruby/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Is Computer Science Dead?</title>
		<link>http://scott.yang.id.au/2007/03/is-computer-science-dead/</link>
		<comments>http://scott.yang.id.au/2007/03/is-computer-science-dead/#comments</comments>
		<pubDate>Wed, 14 Mar 2007 13:46:48 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2007/03/is-computer-science-dead/</guid>
		<description><![CDATA[The Age: Is computer science dead? Because things are more automated, and most tasks only require drag and click? It is like arguing mechanical engineering is dead because wheels have been invented &#8212; by no means! As mechanical engineering does not train you to just produce machines, computer science does not (and should not) train [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.theage.com.au/articles/2007/03/12/1173548107417.html">The Age: Is computer science dead?</a> Because things are more automated, and most tasks only require drag and click? It is like arguing mechanical engineering is dead because wheels have been invented &#8212; by no means! As mechanical engineering does not train you to <em>just</em> produce machines, computer science does not (and should not) train you to just be a code monkey. Unfortunately that is what many people had in mind when they enrolled into Comp Science/Engineering courses at uni &#8212; whether it will teach me how to use Java, .NET, Oracle and Cisco.  End result? <a href="http://www.halfsigma.com/2007/03/why_a_career_in.html">Career in computer programming sucks</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2007/03/is-computer-science-dead/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Solving the Fizz-Buzz Question</title>
		<link>http://scott.yang.id.au/2007/03/solving-fizzbuzz-problem/</link>
		<comments>http://scott.yang.id.au/2007/03/solving-fizzbuzz-problem/#comments</comments>
		<pubDate>Thu, 01 Mar 2007 04:21:03 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2007/03/solving-fizzbuzz-problem/</guid>
		<description><![CDATA[Coding Horror: Why Can&#8217;t Programmers.. Program?. It&#8217;s a shame you have to do so much pre-screening to have the luxury of interviewing programmers who can actually program. It&#8217;d be funny if it wasn&#8217;t so damn depressing. He quoted Irman&#8217;s FizzBuzz question, a trivial programming problem but surprisingly has stumbled many job applicants. Here is the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codinghorror.com/blog/archives/000781.html">Coding Horror: Why Can&#8217;t Programmers.. Program?</a>.</p>
<blockquote><p>It&#8217;s a shame you have to do so much pre-screening to <b>have the luxury of interviewing programmers who can actually program</b>. It&#8217;d be funny if it wasn&#8217;t so damn depressing.</p></blockquote>
<p>He quoted <a href="http://tickletux.wordpress.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/">Irman&#8217;s FizzBuzz question</a>, a trivial programming problem but surprisingly has stumbled many job applicants. Here is the requirement:</p>
<blockquote><p>Write a program that prints the numbers from 1 to 100. But for multiples of three print &#8220;Fizz&#8221; instead of the number and for the multiples of five print &#8220;Buzz&#8221;. For numbers which are multiples of both three and five print &#8220;FizzBuzz&#8221;.</p></blockquote>
<p>Here&#8217;s an example solution in Python:</p>
<pre class="code">
for i in range(1, 101):
    print ('FizzBuzz' if i % 15 == 0 else
           'Fizz'     if i % 3 == 0 else
           'Buzz'     if i % 5 == 0 else
           i)
</pre>
<p>I actually find Irman&#8217;s comment exaggerating from my own experience, when he said:</p>
<blockquote><p>Most good programmers should be able to write out on paper a program which does this in a under a couple of minutes. Want to know something scary? &#8212; <strong>the majority of comp sci graduates can&#8217;t</strong>.</p></blockquote>
<p>I am not sure where he sourced his programmers from, but it is definitely not my own experience. In fact I seriously doubt you can be a comp sci <strong>graduate</strong> without being able to solve trivial programming task such as Fizz-Buzz.</p>
<p>Over the last 6 years of hiring, we do ask our applicants to solve programming tasks. However, instead of asking them to write a 10 line program to resolve something trivial, I normally like to ask them for a sizable code chunks &#8212; something that have done in the past in a different project or something they want to spend 2-3 hours to do after the face-to-face interview &#8212; that doesn&#8217;t matter. We care more about <strong>how</strong> problems are solved, the <strong>style</strong> code is laid out, the <strong>depth of thinking</strong> putting into catching exceptions, etc, than actually solving the problem itself, as we found most programming exercises are either too trivial (does not filter out bad programmers), too difficult (too focused on optimization and problem solving) or are too big (take way too much applicants&#8217; time).</p>
<p>In an interview we had last month for example, I have the following programming task for an application to do after the interview:</p>
<blockquote>
<dl>
<dt>Description:</dt>
<dd>
<p>A command line mashup tool for Google and Alexa.</p>
</dd>
<dt>Input:</dt>
<dd>Some search keywords.</dd>
<dt>Output:</dt>
<dd>Google PageRank and Alexa Traffic Rank for the top 10 sites that match the keywords in Google Search.</dd>
<dt>Example:</dt>
<dd>
<pre class="code">
~$ myscript "programming"
1. http://en.wikipedia.org/wiki/Computer_programming
Google PageRank: 7 Alexa Rank: 12
2. http://www.programmingtutorials.com/
Google PageRank: 6 Alexa Rank: 189177
3. http://www.python.org/
Google PageRank: 9 Alexa Rank: 4076
4. http://www.cprogramming.com/
Google PageRank: 6 Alexa Rank: 42020
...
</pre>
</dd>
</dl>
</blockquote>
<p>(Note: the job is basically doing financial data mash-ups, thus the way the programming task was designed)</p>
<p>He came back later with his 150 line Perl solution that uses regexp to scrape the Google SERP, and a bit of XML to process AWS result &#8212; not too shabby in solving the problem, but then again it is the programming style we are looking for &#8212; whether code is structured well, well presented, and the problem approached at the right angle. I won&#8217;t say whether he got the job.</p>
<p>Seriously. If the majority of the job applicants can&#8217;t solve simple programming tasks, it is likely that you are using the wrong recruitment agent&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2007/03/solving-fizzbuzz-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trackback &#8216;Em All 0.1 Released</title>
		<link>http://scott.yang.id.au/2007/02/trackback-em-all-01-released/</link>
		<comments>http://scott.yang.id.au/2007/02/trackback-em-all-01-released/#comments</comments>
		<pubDate>Wed, 28 Feb 2007 07:44:53 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Atom]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2007/02/trackback-em-all-01-released/</guid>
		<description><![CDATA[I have just released Trackback &#8216;em All 0.1. It is basically an RSS/Atom feed to pingbacks/trackbacks converter. It fetches a list of RSS/Atom feeds, scan through the entries, and send pingback/trackback to all external links in the feed entries. I have actually been using it for a few months already. It basically: Speeds up your [...]]]></description>
			<content:encoded><![CDATA[<p>I have just released <a href="http://scott.yang.id.au/code/trackback-em-all/">Trackback &#8216;em All</a> 0.1. It is basically an RSS/Atom feed to pingbacks/trackbacks converter. It fetches a list of RSS/Atom feeds, scan through the entries, and send pingback/trackback to all external links in the feed entries. I have actually been using it for a few months already. It basically:</p>
<ul>
<li>Speeds up your posting (so you don&#8217;t have to wait for trackback/pingback in WordPress).</li>
<li>Ensures all linked URLs are notified.</li>
<li>Supports feeds powered by CMS&#8217;s that don&#8217;t support pingback/trackback.</li>
</ul>
<p>We all know how powerful trackbacks and pingbacks are in bringing new visitors to your site, don&#8217;t we? So I wrote this small program to make sure it works the way I wanted. <a href="http://www.python.org/">Python</a> 2.4+ and <a href="http://feedparser.org/">Universal Feedparser</a> required. You also need to have a hosting account + cron to run it effectively.</p>
<p>Grab it <a href="http://scott.yang.id.au/code/trackback-em-all/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2007/02/trackback-em-all-01-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Inner-Platform Effect</title>
		<link>http://scott.yang.id.au/2007/02/the-inner-platform-effect/</link>
		<comments>http://scott.yang.id.au/2007/02/the-inner-platform-effect/#comments</comments>
		<pubDate>Fri, 16 Feb 2007 13:02:48 +0000</pubDate>
		<dc:creator>scotty</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://scott.yang.id.au/2007/02/the-inner-platform-effect/</guid>
		<description><![CDATA[Daily WTF: The Inner Platform Effect &#8212; &#8220;The Inner-Platform Effect is a result of designing a system to be so customizable that it ends becoming a poor replica of the platform it was designed with.&#8221; Way too many examples these days. Think Java-based enterprise systems that can be configured into everything via XML files, but [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx">Daily WTF: The Inner Platform Effect</a> &#8212; <em>&#8220;The Inner-Platform Effect is a result of designing a system to be so customizable that it ends becoming a poor replica of the platform it was designed with.&#8221;</em> Way too many examples these days. Think Java-based enterprise systems that can be configured into everything via XML files, but ended up not good at anything. Well, I have also personally designed a few such systems, and have learned the hard way that an overlay customisable system is usually not a good idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://scott.yang.id.au/2007/02/the-inner-platform-effect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

