<?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>刘未鹏 &#124; Mind Hacks &#187; 编程</title>
	<atom:link href="http://mindhacks.cn/topics/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://mindhacks.cn</link>
	<description>思维改变生活</description>
	<lastBuildDate>Sun, 21 Mar 2010 08:00:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>编程的首要原则(s)是什么？</title>
		<link>http://mindhacks.cn/2009/03/09/first-principles-of-programming/</link>
		<comments>http://mindhacks.cn/2009/03/09/first-principles-of-programming/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 07:12:00 +0000</pubDate>
		<dc:creator>刘未鹏</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://mindhacks.cn/2009/03/09/first-principles-of-programming/</guid>
		<description><![CDATA[半年前，JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久，我兴冲冲地跑过去扔了一个问题：

你们认为编程的首要原则是什么？ 

作为我的学习原则的一个实践： 

8. 学习一项知识，必须问自己三个重要问题：1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。

5个月过去了，这个问题到现在还有人回复，我得到了一大堆有意思的答案，忍不住翻译过来与大家分享：]]></description>
			<content:encoded><![CDATA[<p>半年前，JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久，我兴冲冲地跑过去扔了一个问题：</p>
<p><strong>你们认为编程的首要原则是什么？ </strong></p>
<p>作为我的<a href="http://mindhacks.cn/2008/07/08/learning-habits-part1/">学习原则</a>的一个实践：<a href="http://mindhacks.cn/wp-content/uploads/2009/03/important.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="important" border="0" alt="important" align="right" src="http://mindhacks.cn/wp-content/uploads/2009/03/important-thumb.png" width="160" height="183" /></a> </p>
<blockquote><p>8. 学习一项知识，必须问自己三个重要问题：1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。</p>
</blockquote>
<p>5个月过去了，这个问题到现在还有人回复，我得到了一大堆有意思的答案，忍不住翻译过来与大家分享：</p>
<p>1. 获得<strong>最多认同的答案</strong>：</p>
<blockquote><p><strong>KISS &#8211; Keep It Simple Stupid </strong></p>
<p><strong>DRY &#8211; Don&#8217;t Repeat Yourself </strong></p>
</blockquote>
<p>一点不感到意外吧？ </p>
<p>注：DRY原则倒是比较好理解和实践的。但KISS原则则是看上去直白，其实实践起来不那么容易的一个原则，因为simple和stupid的定义并不是每个人、在每个场景下都是一致且明显的，一个人的simple可能是另一个人的stupid，一个人的stupid可能是另一个人的unnecessary。一旦一个标准取决于具体场景，事情就不那么简单了。所以我们经常要说“<a href="http://c2.com/cgi/wiki?ItDepends">It depends</a>”。 </p>
<p>2. 获得<strong>第二认同的答案</strong>： </p>
<blockquote><p><strong>写代码时时刻设想你就是将来要来维护这坨代码的人。 </strong></p>
</blockquote>
<p>在这个答案后面有人添加到：</p>
<blockquote><p>最好设想你的代码会被一个挥着斧头的精神病来维护。</p>
</blockquote>
<p>有人接着又YY道：</p>
<blockquote><p>而且这个挥着斧头的精神病还知道你住在哪儿。<sup>1</sup></p>
</blockquote>
<p>注：其实这个原则在设计API时也有用：</p>
<blockquote><p><strong>写API时时刻设想你就是要去使用这坨API的人。</strong></p>
</blockquote>
<p>3. <strong>一些众所不一定周知的答案</strong>：</p>
<blockquote><p><strong>先弄清你的问题是什么！</strong></p>
</blockquote>
<p><a href="http://www.douban.com/subject/1135754/">弄清问题</a>永远是问题解决过程中的第一步和最重要的一步。</p>
<blockquote><p><strong>代码只是工具，不是手段。</strong></p>
</blockquote>
<p>不知道怎么最好地解决你手头的问题（注：需求、架构、算法，技术选型，etc..），写上一万坨代码也是浪费比特。</p>
<blockquote><p><strong>知道什么时候不该编码</strong>。</p>
</blockquote>
<p>（类似条目：YAGNI——“你并不需要编写这坨代码！”，针对你的需求编码，“写你所需”，别做“聪明事”，为一个不确定的未来编码。同时也注意模块化设计，以便能在未来新增需求时无痛扩充系统）</p>
<blockquote><p><strong>永远不要假定你已经了解一切了！</strong></p>
</blockquote>
<blockquote><p><strong>不作没有证据的推论。</strong></p>
</blockquote>
<blockquote><p><strong>想清楚了再编写</strong>。类似条目：<strong>如果方案在你脑子里面或者纸上不能工作，写成代码还是不能工作。</strong></p>
</blockquote>
<p>4. 一些众所很可能周知的答案：</p>
<blockquote><p>越懒越好。</p>
<p>过早优化是一切罪恶的根源。</p>
<p>不要重新发明轮子。</p>
<p>测试通过前说什么“它可以工作”都是纯扯淡。</p>
<p>了解你的工具。</p>
<p>一切以用户需求为导向。</p>
<p>利用分治、抽象，解开子问题之间的耦合。</p>
</blockquote>
<p>5. <strong>最幽默的答案</strong>：</p>
<blockquote><p><strong>咖啡进，代码出</strong>。（Coffee in, Code out）<sup>2</sup></p>
</blockquote>
<p>最后，整个问题的 thread 在<a href="http://stackoverflow.com/questions/159176">这里</a>。</p>
Footnotes:<ol class="footnotes"><li id="footnote_0_180" class="footnote"> 事实上后面有人指出这是 Martin Golding 的一句名言 </li><li id="footnote_1_180" class="footnote"> 参见 <a href="http://en.wikipedia.org/wiki/Garbage_in,_garbage_out">Garbage in, Garbage out</a>. </li></ol><h3  class="related_post_title">你可能也会喜欢以下文章</h3><ul class="related_post"><li><a href="http://mindhacks.cn/2008/10/29/methodology-for-programmers/" title="方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵">方法论、方法论&mdash;&mdash;程序员的阿喀琉斯之踵</a> (10)</li><li><a href="http://mindhacks.cn/2008/03/03/failing-to-see-the-big-picture/" title="Failing To See the Big Picture &#8211; Mistakes we make when learning programming">Failing To See the Big Picture &#8211; Mistakes we make when learning programming</a> (1)</li></ul><hr />
<h3>订阅 Mind Hacks</h3>
<a title="用Google Reader订阅" href="http://fusion.google.com/add?feedurl=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_google.gif" style="border:0" alt="订阅到 | Google" /></a> 
<a title="用鲜果订阅" href="http://www.xianguo.com/subscribe.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_xianguo.gif" style="border:0" alt="订阅到 | 鲜果" /></a>
<br/> 
<a title="用抓虾订阅" href="http://www.zhuaxia.com/add_channel.php?url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_zhuaxia.gif" style="border:0" alt="订阅到 | 抓虾" /></a> 
<a title="用有道订阅" href="http://reader.youdao.com/b.do?keyfrom=mindhacks&url=http://mindhacks.cn/feed/"><img src="http://mindhacks.cn/wp-content/uploads/2009/02/feed_yodao1.gif" style="border:0" alt="订阅到 | 有道" /></a> 
<hr />
<h3>我是你的信息过滤器</h3>
想了解作者最近在关注什么，欢迎 Follow <a href="https://twitter.com/pongba">pongba@Twitter</a>
<br/>
程序员朋友请到作者发起的 <a href="https://groups.google.com/group/pongba">TopLanguage</a> (<a href="http://mindhacks.cn/about-toplanguage/">about</a>) 社群逛逛，定有收获 :)
<br/>
想了解作者在阅读哪些书，请到 <a href="http://www.douban.com/people/pongba/">pongba@豆瓣</a>，或者直接访问以下四个豆列：<a href="http://www.douban.com/doulist/46003/">[只读经典]思维改变生活</a> | <a href="http://www.douban.com/doulist/127649/">[只读经典]思考的技术与艺术</a> | <a href="http://www.douban.com/doulist/197706/">决策与判断</a> | <a href="http://www.douban.com/doulist/176513/">机器学习与人工智能书籍资源导引</a> 。
<br/>
想了解作者平时在互联网上的阅读，请订阅 <a href="http://delicious.com/pongba/shared-reading">pongba-shared-reading@delicious</a> 。
<hr />
<p><small>
本文由 刘未鹏 发布在 <a href="http://mindhacks.cn">刘未鹏 | Mind Hacks</a>, 2009. | <a href="http://mindhacks.cn/2009/03/09/first-principles-of-programming/#commenting">32 条评论</a> | 标签: <a href="http://mindhacks.cn/tags/%e7%bc%96%e7%a8%8b/" rel="tag">编程</a>
<br/>
转载请注明作者，出处，以及<a href="http://mindhacks.cn/2009/03/09/first-principles-of-programming/">原始超链接</a>: http://mindhacks.cn/2009/03/09/first-principles-of-programming/
</small></p>]]></content:encoded>
			<wfw:commentRss>http://mindhacks.cn/2009/03/09/first-principles-of-programming/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
	</channel>
</rss>
