<?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>Dobila</title>
	<atom:link href="http://dobila.info/feed" rel="self" type="application/rss+xml" />
	<link>http://dobila.info</link>
	<description>我会沿着电车的铁轨走回来的</description>
	<lastBuildDate>Thu, 10 May 2012 01:20:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>更换多媒体标签</title>
		<link>http://dobila.info/entry/replacement-of-multi-media-label.html</link>
		<comments>http://dobila.info/entry/replacement-of-multi-media-label.html#comments</comments>
		<pubDate>Thu, 10 May 2012 00:29:52 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[日志]]></category>
		<category><![CDATA[wow]]></category>
		<category><![CDATA[视频]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3365</guid>
		<description><![CDATA[随着html5的火爆和我用智能手机的时间日益增多，我决定把原来的用flash播放的视频和音乐开始转换成html5的标签。我想这样会比较好一点。用手机看的时候不会卡死。我想，2012的主题怎么还没出来，如果在过2个月还没有音讯的话，我会将博客换成别的，不用wordpress了，或者我会自己去写一个。原来觉得那么复杂的事情现在看起来真的很简单。 <a href="http://dobila.info/entry/replacement-of-multi-media-label.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>随着html5的火爆和我用智能手机的时间日益增多，我决定把原来的用flash播放的视频和音乐开始转换成html5的标签。我想这样会比较好一点。用手机看的时候不会卡死。我想，2012的主题怎么还没出来，如果在过2个月还没有音讯的话，我会将博客换成别的，不用wordpress了，或者我会自己去写一个。原来觉得那么复杂的事情现在看起来真的很简单。</p>
<p>下面演示一段视频，是我最喜欢的游戏的音乐。玩魔兽世界的人应该都听说过。</p>
<p><video controls="controls" width="480" height="270"><br />
<source src="http://dobila.info/wp-content/uploads/2012/05/Arthas-Invincible.webm" type="video/mp4" /><br />
<source src="http://dobila.info/wp-content/uploads/2012/05/Arthas-Invincible.mp4" type="video/mp4" /><br />
</video></p>
]]></content:encoded>
			<wfw:commentRss>http://dobila.info/entry/replacement-of-multi-media-label.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://dobila.info/wp-content/uploads/2012/05/Arthas-Invincible.mp4" length="26713615" type="video/mp4" />
<enclosure url="http://dobila.info/wp-content/uploads/2012/05/Arthas-Invincible.webm" length="25428932" type="video/webm" />
		</item>
		<item>
		<title>EMACS一些技巧</title>
		<link>http://dobila.info/entry/note/some-emacs-tips.html</link>
		<comments>http://dobila.info/entry/note/some-emacs-tips.html#comments</comments>
		<pubDate>Wed, 09 May 2012 09:19:52 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3363</guid>
		<description><![CDATA[在perl中，如果你选中一段代码，然后align，emacs会把等号对齐，但是在php中不会这样，如果在php中你也想这样的话，那么你会用到。 <a href="http://dobila.info/entry/note/some-emacs-tips.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在perl中，如果你选中一段代码，然后align，emacs会把等号对齐，但是在php中不会这样，如果在php中你也想这样的话，那么你会用到：</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;">M-x align-regexp RET <span style="color: #66cc66;">=</span> RET</pre></div></div>

<p>举例，比如在一个比较长的数组中，如下，你会想把等号对其。</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'filter_order_id'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_order_id</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_box_code'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_box_code</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_customer_id'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_customer_id</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_email'</span><span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_email</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_shipping_name'</span>			<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_shipping_name</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_telephone'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_telephone</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_shipping_address'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_shipping_address</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_postcode'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_postcode</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_payment_method'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_payment_method</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_order_box_status_id'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_order_box_status_id</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'filter_date_added'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$filter_date_added</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'sort'</span>				<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$sort</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'order'</span>				<span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$order</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>当然align-regexp后面跟的是个正则表达式，如果你想让它以其他的方式对其，JUST DO IT！</p>
]]></content:encoded>
			<wfw:commentRss>http://dobila.info/entry/note/some-emacs-tips.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MYSQL创建删除索引</title>
		<link>http://dobila.info/other/create-and-drop-index-in-mysql.html</link>
		<comments>http://dobila.info/other/create-and-drop-index-in-mysql.html#comments</comments>
		<pubDate>Wed, 02 May 2012 05:13:44 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[学习资料]]></category>
		<category><![CDATA[转载]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3347</guid>
		<description><![CDATA[索引的创建可以在CREATE TABLE语句中进行，也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引。删除索引可以利用ALTER TABLE或DROP INDEX语句来实现。 <a href="http://dobila.info/other/create-and-drop-index-in-mysql.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>索引的创建可以在CREATE TABLE语句中进行，也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引。删除索引可以利用ALTER TABLE或DROP INDEX语句来实现。</p>
<p><strong>（1）使用ALTER TABLE语句创建索引。</strong></p>
<p>语法如下：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">INDEX</span> index_name <span style="color: #66cc66;">&#40;</span>column_list<span style="color: #66cc66;">&#41;</span> ;
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">UNIQUE</span> <span style="color: #66cc66;">&#40;</span>column_list<span style="color: #66cc66;">&#41;</span> ;
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>column_list<span style="color: #66cc66;">&#41;</span> ;</pre></div></div>

<p>其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3种创建索引的格式，table_name是要增加索引的表名，column_list指出对哪些列进行索引，多列时各列之间用逗号分隔。索引名index_name可选，缺省时，MySQL将根据第一个索引列赋一个名称。另外，ALTER TABLE允许在单个语句中更改多个表，因此可以同时创建多个索引。</p>
<p><span id="more-3347"></span></p>
<p>创建索引的示例如下：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">USE</span> tpsc
<span style="color: #993333; font-weight: bold;">DATABASE</span> changed
mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> tpsc <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">INDEX</span> shili <span style="color: #66cc66;">&#40;</span>tpmc <span style="color: #66cc66;">&#41;</span> ;
Query OK<span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">2</span> <span style="color: #993333; font-weight: bold;">ROWS</span> affected <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0.08</span> sec<span style="color: #66cc66;">&#41;</span>
Records: <span style="color: #cc66cc;">2</span> Duplicates: <span style="color: #cc66cc;">0</span> Warnings: <span style="color: #cc66cc;">0</span></pre></div></div>

<p><strong>（2）使用CREATE INDEX语句对表增加索引。</strong></p>
<p>能够增加普通索引和UNIQUE索引两种。其格式如下：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">INDEX</span> index_name <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #66cc66;">&#40;</span>column_list<span style="color: #66cc66;">&#41;</span> ;
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">UNIQUE</span> <span style="color: #993333; font-weight: bold;">INDEX</span> index_name <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #66cc66;">&#40;</span>column_list<span style="color: #66cc66;">&#41;</span> ;</pre></div></div>

<p>说明：table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义，索引名不可选。另外，不能用CREATE INDEX语句创建PRIMARY KEY索引。</p>
<p><strong>（3）删除索引。</strong></p>
<p>删除索引可以使用ALTER TABLE或DROP INDEX语句来实现。DROP INDEX可以在ALTER TABLE内部作为一条语句处理，其格式如下：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">DROP</span> <span style="color: #993333; font-weight: bold;">INDEX</span> index_name <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> ;
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #993333; font-weight: bold;">DROP</span> <span style="color: #993333; font-weight: bold;">INDEX</span> index_name ;
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #993333; font-weight: bold;">DROP</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> ;</pre></div></div>

<p>其中，在前面的两条语句中，都删除了table_name中的索引index_name。而在最后一条语句中，只在删除PRIMARY KEY索引中使用，因为一个表只可能有一个PRIMARY KEY索引，因此不需要指定索引名。如果没有创建PRIMARY KEY索引，但表具有一个或多个UNIQUE索引，则MySQL将删除第一个UNIQUE索引。</p>
<p>如果从表中删除某列，则索引会受影响。对于多列组合的索引，如果删除其中的某列，则该列也会从索引中删除。如果删除组成索引的所有列，则整个索引将被删除。</p>
<p>删除索引的操作，如下面的代码：</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">DROP</span> <span style="color: #993333; font-weight: bold;">INDEX</span> shili <span style="color: #993333; font-weight: bold;">ON</span> tpsc ;
Query OK<span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">2</span> <span style="color: #993333; font-weight: bold;">ROWS</span> affected <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0.08</span> sec<span style="color: #66cc66;">&#41;</span>
Records: <span style="color: #cc66cc;">2</span> Duplicates: <span style="color: #cc66cc;">0</span> Warnings: <span style="color: #cc66cc;">0</span></pre></div></div>

<p>该语句删除了前面创建的名称为“shili”的索引。</p>
]]></content:encoded>
			<wfw:commentRss>http://dobila.info/other/create-and-drop-index-in-mysql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>挤得要命</title>
		<link>http://dobila.info/entry/note/so-crowd.html</link>
		<comments>http://dobila.info/entry/note/so-crowd.html#comments</comments>
		<pubDate>Wed, 02 May 2012 01:11:48 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[青岛]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3337</guid>
		<description><![CDATA[关于事件驱动。看了好多人的博客啊教程啊什么的，说要实现事件驱动用php什么的。当然用php也是可以的，你不光要用的回调函数，也要写一个死循环来拾取和执行事件的handler。其实事件驱动就是有一个死循环来不断的接受事件队列的事件，然后根据相应的对策来处理它。处理完了怎么办？那就需要用的回调函数来，执行提供的函数即可。nodejs的阻塞和非阻塞的问题，是用事件驱动和回调来实现的。如果还是很不理解，那么可以去看看汇编语言中的中断，跟这个类似，在单片机中，很多都是用中断来实现事件驱动的，说起来事件驱动只是一种编程范式。 <a href="http://dobila.info/entry/note/so-crowd.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>前天去海边走一走，发现人太多了，挤得要命。大部分是旅行团的人，前面有一个带队的，拿着小喇叭。他们玩的好辛苦。我想，以后要出去还是选人少一点的地方比较好。</p>
<p>前两天一直在考虑2个问题：事件驱动和js的原型链。明显是研究nodejs的过程中产生的问题。nodejs是朋友介绍的，据说很厉害，所以就研究一下，发现js的原型真的跟普通的面向对象有很大的区别。下面写一下我对这两个东西的理解，或许错了，但是也要记录下来。所有的东西都是回忆。</p>
<p>关于JS的原型链。在理解这个东西的时候，把函数分解成两个部分，一个是函数，一个是对象。一定要分离着理解，上张图，绝对给力，我就是靠这张图理解的。</p>
<p><img src="http://dobila.info/wp-content/uploads/2012/05/JavaScript_Object_Layout-450x559.jpg" alt="" title="JavaScript Object Layout" width="450" height="559" class="aligncenter size-medium wp-image-3345" /></p>
<p>仔细研究这个图，你一定有收获。还有网上还有这么一张图，我相信你看后绝对会很混乱，这张图我放在下面，大家研究一下，反正我是搞不懂。</p>
<p><span id="more-3337"></span></p>
<p><img src="http://dobila.info/wp-content/uploads/2012/05/instance-450x247.png" alt="" title="siemon的图" width="450" height="247" class="aligncenter size-medium wp-image-3343" /></p>
<p>这个叫siemon的人绝对技术很牛逼，但是当老师就一般了。</p>
<p>关于事件驱动。看了好多人的博客啊教程啊什么的，说要实现事件驱动用php什么的。当然用php也是可以的，你不光要用的回调函数，也要写一个死循环来拾取和执行事件的handler。其实事件驱动就是有一个死循环来不断的接受事件队列的事件，然后根据相应的对策来处理它。处理完了怎么办？那就需要用的回调函数来，执行提供的函数即可。nodejs的阻塞和非阻塞的问题，是用事件驱动和回调来实现的。如果还是很不理解，那么可以去看看汇编语言中的中断，跟这个类似，在单片机中，很多都是用中断来实现事件驱动的，说起来事件驱动只是一种编程范式。</p>
<p>所以，事件驱动、回调函数、阻塞和非阻塞是三个不同的东西，分别去理解这三个东西就可以了。比如在计算机的中断上，只有回调和阻塞的概念，没有事件驱动的概念，因为没有事件队列。中段中的中断地址指向的代码就是回调函数。</p>
]]></content:encoded>
			<wfw:commentRss>http://dobila.info/entry/note/so-crowd.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>懒惰的程序员</title>
		<link>http://dobila.info/other/lazy-programer.html</link>
		<comments>http://dobila.info/other/lazy-programer.html#comments</comments>
		<pubDate>Mon, 16 Apr 2012 00:32:00 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[转载]]></category>
		<category><![CDATA[电脑]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3318</guid>
		<description><![CDATA[可能除了哲学家以外，笔者认为程序员是最懒的一群人。他们的职业看起来又似乎有一定的劳动强度。 <a href="http://dobila.info/other/lazy-programer.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>可能除了哲学家以外，笔者认为程序员是最懒的一群人。他们的职业看起来又似乎有一定的劳动强度。</p>
<p>想想看，生物学家要亲自做所有的实验…给数百只小白鼠注射药物不可能自动完成。医生必须给病人进行身体检查；教授每年都要教授同样的课程；建筑师从各个角度制定方案，并手工地将方案一笔一划绘制出来。</p>
<p>让我们再来看看更为辛苦的一些职业，情况更糟。营销人员要不断重复地进行同样的产品宣传；理发师日复一日地做着同样的事情；收营员每天都以相同的方式对货物进行结算…工厂工人…</p>
<p>你面前呈现出了一幅图片，世界上有很多这样的人，他们每一小时，每一天，每一年，有些甚至一辈子都在重复做着几乎相同的事情。 </p>
<p><strong>来看看程序员</strong></p>
<p>每当我们想连续两次做同样的事情时—我们会尝试想一个方法来自动完成此过程。每当你写的代码是完成同样的一件事时，你会开始寻找一个库；每当你启动一个类似的项目时，你会去寻找一个模板。</p>
<p>程序员的生活就是致力于消除重复的工作。</p>
<p><img src="http://dobila.info/wp-content/uploads/2012/04/coding.jpg" alt="" title="coding" width="500" height="332" class="aligncenter size-full wp-image-3319" /></p>
<p>将琐碎地任务从我们的工作流程中剔除，这能让每个人生活得更轻松。这里有一个经典的笑话，说一个程序员情愿用一周的时间来写一个拷贝脚本，也不愿意将相同的文件复制粘贴两次，尽管复制粘贴可能只需要两分钟。</p>
<p>该死的，我们要遵循DRY（Don’t Repeat Yourself不要重复自己）的原则。这个原则的基本内容是宁愿创建一个令人费解的抽象类，也不要将不相同但非常相似的代码写两次。</p>
<p>这当然会导致很多问题。</p>
<p>一般的软件项目充满了在顶层抽象类上构建的抽象类，你慢慢地会不清楚这些顶层抽象类将如何工作。甚至你完全不知道其代码在做什么。”Dizzying but invisible depth“，涉及到这个问题时，你真的应该读读这篇短文。</p>
<p><span id="more-3318"></span></p>
<p>另一方面，懒惰本身已经证明了历史上许多科学和工程发展所带来的背后推动力。用有轮子的拖车运东西比人工搬运要轻松；用船在水中前行比游泳来得容易；甚至如果你他妈的想炸掉一座城市，你投掷一颗原子弹也比投掷几千个小炸弹来的容易。</p>
<p>所以这也许并不是说程序员是懒惰的。也许真正懒惰地是工程师们。只是恰巧在这样一个历史时刻，程序员作为工程师中最鲜明的一类，总是将世界向更好更光明的未来推动。而其它大多数领域已经在某种程度上稳定下来，或者需要更长的时间去适应新的工具。</p>
<p>这里有一个重要的问题要问：程序员天生就懒吗？聪明懒惰的人容易被编程工作吸引吗，或者这是一种社会效应？懒惰源于最好的编程实践？还是最好的编程实践源于懒惰呢？</p>
<p><strong>一个比较</strong></p>
<p>最近，我有机会将一个建筑专业学生的一天与一个计算机科学专业的学生（就像我自己）的一天进行比较。</p>
<p>大多数的建筑系学生的生活充满了这样或那样劳动密集的任务，这些任务是她工作的一部分。在任何时候，她都有可能要对一些模型进行拼凑粘合，在AutoCAD中从50个不同的角度对同一个物体进行绘图，或者在其它3D建模软件中重复相同的事情…然后将这些图片导入到Photoshop中成为真正好看的图。</p>
<p>这种事会接连不断的发生。我估计她花费在课程作业上的时间比她实际上课的时间多一倍还不止（事实上她说花了5倍还多）。更糟糕的是，更好的完成这些任务并不能真正加快完成任务的进程，这只是意味着你多知道了几个键盘快捷键，意味着下次画图时你可能会少犯几个错误。</p>
<p>熟练和精通完全无法优化关键的部分。</p>
<p>相比之下，当我不上课时，我通常都在做自己的项目。因为我可以，因为我有充足的时间。当有作业布置下来时，一般情况下，我都可以在几个小时内完成…即使是最关键最重要的项目，老师也很少给我们超过一周的时间来集中完成作业，最多两周。</p>
<p>精通编码并不意味着你打字更快（与建筑专业中等同的能力不同）。它意味着想出的解决方案更容易实现，利用工具来达到事倍功半的效果，诸如此类。最终，通过互联网进行测试评判，而实现过程是最无关紧要的部分，因为每个人都会。如果你有一天的时间，你可以实现某些东西。如果你有更多的时间，你可以使这些东西实现得更漂亮，模块化更高，可重用性更强，等等。</p>
<p>基本上你能够快速地实现眼前的任务，你工作中大部分时间都在致力于使你的任务完成得更加漂亮。但这对于你手头的任务来说其实并不重要，你这样做是因为你可以。</p>
<p>甚至于当程序员对自己的优化工作都产生厌倦时，他们会立马转而去创建工具来完成优化工作。</p>
<p>事情就这样周而复始地重复着。</p>
<p>接下来的家伙会使用他创建的新工具，使实现过程变得更快，接着优化它直到他最终厌倦，然后创建了一个新的更好的工具。</p>
<p><strong>所以…是辛苦的工作？</strong></p>
<p>但回到我最初的观点，辛苦工作对程序员的生产效率存在多大的影响？对于那些每天辛苦工作13小时以上，以取得竞争优势的创业者来说，这又意味着什么？这是值得考虑的一种优势吗？</p>
<p>辛苦的工作可能对程序员工作效率产生负面的影响。它掩盖了背后所做的优化工作“哦，我可以手动把它完成，这将只需要10分钟时间”（其实这需要20分钟）。下一次，一个相似的任务到来时，你可能需要再次手动把它完成，长此以往…</p>
<p>最重要的是，辛勤地工作会使你变得很笨。许多研究表明，持续疲劳的状态会使你做出错误的决策，甚至过多的决策也会让你会出错误的决定（称为决策疲劳）。事情上，这可能是我们喜欢创建抽象类并使用它们的原因—让其它人做大多数的决策，这样我就可以只专注于关键的部分。</p>
<p>但是，我仍然没弄懂，到底是懒惰的人更喜欢编程，还是编程使他们变得懒惰… </p>
]]></content:encoded>
			<wfw:commentRss>http://dobila.info/other/lazy-programer.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SVN一键添加删除</title>
		<link>http://dobila.info/entry/note/svn-onekey-add-and-delete.html</link>
		<comments>http://dobila.info/entry/note/svn-onekey-add-and-delete.html#comments</comments>
		<pubDate>Thu, 12 Apr 2012 08:43:53 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3316</guid>
		<description><![CDATA[其实两键，两条命令。在你做了很多操作，很多删除很多添加的时候，很有用。我记得是在博客里面有来着，但是找不到了。 <a href="http://dobila.info/entry/note/svn-onekey-add-and-delete.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>其实两键，两条命令。在你做了很多操作，很多删除很多添加的时候，很有用。我记得是在博客里面有来着，但是找不到了。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> status <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-v</span> <span style="color: #ff0000;">&quot;^.[ <span style="color: #000099; font-weight: bold;">\t</span>]*\..*&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;^?&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #c20cb9; font-weight: bold;">svn</span> add
<span style="color: #c20cb9; font-weight: bold;">svn</span> status <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-v</span> <span style="color: #ff0000;">&quot;^.[ <span style="color: #000099; font-weight: bold;">\t</span>]*\..*&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;^\!&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #c20cb9; font-weight: bold;">svn</span> delete</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://dobila.info/entry/note/svn-onekey-add-and-delete.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>mysql默认值</title>
		<link>http://dobila.info/entry/note/mysql-default-value.html</link>
		<comments>http://dobila.info/entry/note/mysql-default-value.html#comments</comments>
		<pubDate>Wed, 11 Apr 2012 02:45:23 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3313</guid>
		<description><![CDATA[mysql列的默认属性必须是个常数，不能是函数或者表达式。有一个例外就是 CURRENT_TIMESTAMP。 <a href="http://dobila.info/entry/note/mysql-default-value.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>mysql列的默认属性必须是个常数，不能是函数或者表达式。有一个例外就是 CURRENT_TIMESTAMP。</p>
<blockquote>
<p>可以用NULL作为值，那么默认的default value是NULL。</p>
<p>不能用NULL作为值，那么分情况。数字列默认是0,字符串默认是&#8221;"，即空字符串</p>
</blockquote>
<p>还有好多其他的，请看<a href="http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html">http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dobila.info/entry/note/mysql-default-value.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>写给每一个自己</title>
		<link>http://dobila.info/other/to-your-own.html</link>
		<comments>http://dobila.info/other/to-your-own.html#comments</comments>
		<pubDate>Fri, 06 Apr 2012 00:18:13 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[转载]]></category>
		<category><![CDATA[韩寒]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3307</guid>
		<description><![CDATA[最近三个月，看世间百态，人情冷暖，失落与收获都颇多。失落在我出生是纯正的上海郊区农村屌丝，无权无势，白手起家，本以为自己是一个很励志的“屌丝的逆袭”的故事，却硬要被说成一个经过多方神秘势力包装的惊天大阴谋；失落在北京有一个几面之交的“名流友人”，莫名编造了一个内幕，四处传播，让我心寒，我愿怀着善意，相信他是无心的吹水；失落在我自己，太过在意，害怕深文周纳，行文变得谨慎。收获在很多谋面和未曾谋面的朋友仗义执言;虽然都被打成利益集团；收获在十几年前的同学为我说话，虽然因为回忆太远往事，细节互相有偏差被打成诈骗团伙；收获在我看到太多人心和各种面目，以后写小说刻画人物会更加精彩。 <a href="http://dobila.info/other/to-your-own.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>首先，本文第一段是个介绍，不是原文。从第二段开始是摘自韩寒的博客上的<a href="http://blog.sina.com.cn/s/blog_4701280b0102e3v6.html">一篇文章</a>。我不知道是不是违反了什么规矩，如果有人在意的话，请告诉我，我会马上删除。总结了这篇日志的观念，主题就是：谁没SB过？好的，下面正文开始。</p>
<p>最近三个月，看世间百态，人情冷暖，失落与收获都颇多。失落在我出生是纯正的上海郊区农村屌丝，无权无势，白手起家，本以为自己是一个很励志的“屌丝的逆袭”的故事，却硬要被说成一个经过多方神秘势力包装的惊天大阴谋；失落在北京有一个几面之交的“名流友人”，莫名编造了一个内幕，四处传播，让我心寒，我愿怀着善意，相信他是无心的吹水；失落在我自己，太过在意，害怕深文周纳，行文变得谨慎。收获在很多谋面和未曾谋面的朋友仗义执言;虽然都被打成利益集团；收获在十几年前的同学为我说话，虽然因为回忆太远往事，细节互相有偏差被打成诈骗团伙；收获在我看到太多人心和各种面目，以后写小说刻画人物会更加精彩。</p>
<p>人的处事风格和性格不是一成不变的，尤其是16岁到30岁之间。我写过一些不错的文字，也写了不少烂文章，无论状态起伏，无论风格转变，都是一个人的成长历程，谁人能在十四年的青春里保持纹丝不动。我二十岁出头的时候主张抵制日货，是个民族主义者，08年的时候开始反对抵制家乐福，我小时候主张打仗收复台湾，现在都不好意思承认自己这么说过，十七八岁时，我居然说，活着的作家中，写文章论排名老子天下第二，现在想起来都脸红，更让我脸红的是当年我心中那个第一居然是李敖。我少年时装酷，追求语出惊人，这些话现在看来，很多都惹人厌恶，甚至还惹我自己厌恶，把各种傻话挖出来，总会击中不同的人。谁没有年少过，你在宿舍里说过的那些蠢话，你在树林里幼稚的表白，现在拿出来可不都得笑死，没有人永远和过去的自己一致，除非你不再成长。</p>
<p><span id="more-3307"></span></p>
<p>接触过我的人都知道，我面对生人其实腼腆拘谨。这点从小到现在都未改变。也许我把性格里的另一面都发泄到了赛车和写作中。只要不是被踢走，我在一支车队一效力就是五六年，有合作的地方只要没有意外都会一直合作下去，酒店都选熟悉的住，吃饭永远去那两三家，点的也永远是那几个菜。我性格就是这样。也许因为我选择走的道路太不一样，充满未知，所以我很希望在日常生活里没有变故，不再有陌生的事物。我口才不算好，有人把我十几二十岁时的电视采访都挖了出来，挑了回答的差的问题和木讷的地方拼接在一起，以验证我是一个草包。</p>
<p>是的，大家尽可以挖苦我，嘲弄我，也许有的人在二十来岁的时候上电视能出口成章泰然自若，比我强很多。今天我知道了口无遮拦的代价，知道了年少轻狂的代价，知道了直来直去的代价，知道了不设城府的代价，但明天我还会这样说话，外交辞令永远不会出现在我的嘴里。我在很多地方笨拙，嘴皮子也耍不好，所以我选择了写东西。面对键盘，我拥有我自己的世界，就像我倒车经常撞，停车老停歪，但戴上头盔，坐进赛车，我依然是个好的车手。这就是我的性格。人的性格未必一面，也未必必须符合其他人的设定。每个人的境遇和脾性都是不同的。你不能拿着标尺先裁量自己，再去宣判每个与你尺码不同的他人是伪劣产品。</p>
<p>我反智么？是的，我反弱智，我还反各种束缚人的体制。我学历低，学识差，也有很多的缺点。我有恶趣味，但我最怕无趣，我口无遮拦，但我最恨道貌岸然。我常说错话，得罪人，也常道歉反思。此番我又发现我17岁的书中有一句话错了，那就是七门红灯，照亮我的前程——红灯永远不能照亮你的前程，照亮你前程的，是你的才能。</p>
<p>在很多的采访里，我常说一句话：人，可以不上学，但一定不能停止学习。我也常说，为了避免早期作品中模仿他人的痕迹太重这个缺点，我不再看其他人的小说，但一定不能停止阅读，只有阅读，才会进步。硬要控制信息，断章取义，我也没有办法，也许我们读着不一样的书，走着不一样的路。我只是选择了做自己喜欢的事情，为了写作，我影响了学业，最后退学，为了赛车，我又几乎放弃写作，不计代价，孤注一掷，我运气好，都做的不差。</p>
<p>电脑前的每一个人，我相信造物者一定赋予你们特殊的才能，很多人只是没有发现而已。也许此刻，有很多莫扎特正在编程序，很多舒马赫正在写文案，很多张曼玉正在当前台，很多李开复正在做中介。我只是比很多人幸运，找到了自己喜欢又适合的。同时我也有很多比你们蠢笨的地方，怎么学都学不会。每一个人，纵然缺点一身，但必然有一些地方是长于他人的，那是你区别与他人的标记，也是造物者公平的地方，就看你能否找到这些标记。</p>
<p>没人能让所有人满意，所以让自己和你中意的人满意就可以。你所判定的一切，也许就是你自己内心的投影。人生就是一个不断接纳和抛弃的过程，就是一段迎接冷眼嘲笑孤独前行的旅途。KO不了你的，也许让你更ok，没让你倒下的，也许让你更强大。我也将尽我所能，向在乎我的人创造各种东西，绝不向厌恶我的人解释这是个什么东西。</p>
<p>最后我想到一部电影的结尾。朋友们，愿你带走我身上你们中意的那一部分，踩两脚讨厌的那部分。当你站在城墙上，拥抱着你所喜爱的那部分，回头看到人群里背身远去那个叫韩寒的家伙，不妨说一句，那个人样子好怪，他好像一条狗诶。</p>
]]></content:encoded>
			<wfw:commentRss>http://dobila.info/other/to-your-own.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>清明结束</title>
		<link>http://dobila.info/entry/ching-ming-is-over.html</link>
		<comments>http://dobila.info/entry/ching-ming-is-over.html#comments</comments>
		<pubDate>Thu, 05 Apr 2012 00:30:42 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[日志]]></category>
		<category><![CDATA[青岛]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3302</guid>
		<description><![CDATA[清明假期结束，突然发现已经4月了。博客也快沦为月经博。办完了很多事情，要好好工作了。大家一起加油。 <a href="http://dobila.info/entry/ching-ming-is-over.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>清明假期结束，突然发现已经4月了。博客也快沦为月经博。办完了很多事情，要好好工作了。大家一起加油。最近很对希望这个两个字很喜欢。在我一切都顺利的时候，在大的痛苦大的折磨来临之前，默默的安慰自己一切都有希望。每一丝流光都充满希望。不管碰上什么事情都要坚强。加油。</p>
<blockquote><p>
你永远孤寂的挂在天上<br />
恍若不知那空旷的荒凉<br />
你只是默默的照亮远方<br />
让我不被绝望彻底埋葬<br />
你依然静静的散发光芒<br />
每一丝流光都充满希望<br />
你让我相信遥远的理想<br />
一路高歌直到白发苍苍
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://dobila.info/entry/ching-ming-is-over.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>程序员应读的书</title>
		<link>http://dobila.info/other/material/books-programer-should-read.html</link>
		<comments>http://dobila.info/other/material/books-programer-should-read.html#comments</comments>
		<pubDate>Fri, 16 Mar 2012 00:07:42 +0000</pubDate>
		<dc:creator>dobila</dc:creator>
				<category><![CDATA[学习资料]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[计算机软件]]></category>

		<guid isPermaLink="false">http://dobila.info/?p=3296</guid>
		<description><![CDATA[“如果能时光倒流，回到过去，作为一个开发人员，你可以告诉自己在职业生涯初期应该读一本，你会选择哪本书呢？我希望这个书单列表内容丰富，可以涵盖很多东西。” <a href="http://dobila.info/other/material/books-programer-should-read.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>“如果能时光倒流，回到过去，作为一个开发人员，你可以告诉自己在职业生涯初期应该读一本，你会选择哪本书呢？我希望这个书单列表内容丰富，可以涵盖很多东西。”</p>
<p>很多程序员响应，他们在推荐时也写下自己的评语。以前就有国内网友介绍这个程序员书单，不过都是推荐数 Top 10的书。其实除了前10本之外，推荐数前30左右的书籍都算经典，笔者整理编译这个问答贴，同时摘译部分推荐人的评语。下面就按照各本书的推荐数排列。</p>
<p>1. 《代码大全》 史蒂夫·迈克康奈尔</p>
<p>推荐数：1684</p>
<p>“优秀的编程实践的百科全书，《代码大全》注重个人技术，其中所有东西加起来，就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。” —— Joel Spolsky</p>
<p>对于新手来说，这本书中的观念有点高阶了。到你准备阅读此书时，你应该已经知道并实践过书中99%的观念。– esac</p>
<p><span id="more-3296"></span></p>
<p>2. 《程序员修炼之道》</p>
<p>推荐数：1504</p>
<p>对于那些已经学习过编程机制的程序员来说，这是一本卓越的书。或许他们还是在校生，但对要自己做什么，还感觉不是很安全。就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图，你也可以画的很漂亮，但如果你觉得你不太知道从哪儿下手，如果某人要你独自画一个P2P的音乐交换网络图，那这本书就适合你了。—— Joel</p>
<p>3. 《计算机程序的构造和解释》</p>
<p>推荐数：916</p>
<p>就个人而言，这本书目前为止对我影响醉倒的一本编程书。</p>
<p>《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。其他书籍则处理算法。这些书都有自己所属的位置。</p>
<p>然而《计算机程序的构造和解释》与这些不同。这是一本会启发你的书，它会燃起你编写出色程序的热情；它还将教会你认识并欣赏美；它会让你有种敬畏，让你难以抑制地渴望学习更多的东西。其他书或许会让你成为一位更出色的程序员，但此书将一定会让你成为一名程序员。</p>
<p>同时，你将会学到其他东西，函数式编程（第三章）、惰性计算、元编程、虚拟机、解释器和编译器。</p>
<p>一些人认为此书不适合新手。个人认为，虽然我并不完全认同要有一些编程经验才能读此书，但我还是一定推荐给初学者。毕竟这本书是写给著名的6.001，是麻省理工学院的入门编程课程。此书或许需要多做努力（尤其你在做练习的时候，你也应当如此），但这个价是对得起这本书的。</p>
<p>你还不确信么？那就读读第一版的前言或序言。网上有免费的电子版。 &#8211; Antti Sykäri</p>
<p>4. 《C程序设计语言》</p>
<p>推荐数：774</p>
<p>这本书简洁易读，会教给你三件事：C 编程语言；如何像程序员一样思考；底层计算模型。（这对理解“底层”非常重要）—— Nathan</p>
<p>5. 《算法导论》</p>
<p>推荐数：671</p>
<p>《代码大全》教你如何正确编程；《人月神话》教你如何正确管理；《设计模式》教你如何正确设计……</p>
<p>在我看来，代码只是一个工具，并非精髓。开发软件的主要部分是创建新算法或重新实现现有算法。其他部分则像重新组装乐高砖块或创建“管理”层。我依然梦想这样的工作，我的大部分时间（>50%）是在写算法，其他“管理”细节则留给其他人…… —— Ran Biron</p>
<p>6. 《重构：改善既有代码的设计》</p>
<p>推荐数：617</p>
<p>我想我不得不推荐《重构》：改进现有代码的设计。—— Martin</p>
<p>我必须承认，我最喜欢的编程语录是出自这本书：任何一个傻瓜都能写出计算机能理解的程序，而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler</p>
<p>7. 《设计模式》</p>
<p>推荐数：617</p>
<p>就我而言，我认为四人帮编著的《设计模式》是一本极为有用的书。虽然此书并不像其他建议一样有关“元”编程，但它强调封装诸如模式一类的优秀编程技术，因而鼓励其他人提出新模式和反模式（antipatterns），并运用于编程对话中。—— Chris Jester-Young</p>
<p>8. 《人月神话》</p>
<p>推荐数：588</p>
<p>9. 《计算机程序设计艺术》</p>
<p>推荐数：542</p>
<p>这是高德纳倾注心血写的一本书。—— Peter Coulton</p>
<p>10. 《编译原理》（龙书）</p>
<p>推荐数：462</p>
<p>我很奇怪，居然没人提到龙书。（或许已有推荐，我没有看到）。我从没忘过此书的第一版封面。此书让我知道了编译器是多么地神奇绝妙。- DB</p>
<p>11. 《深入浅出设计模式》</p>
<p>推荐数：445</p>
<p>我知道四人帮的《设计模式》是一本标准书，但倒不如先看看这部大部头，此书更为简易。一旦你了解了解了基本原则，可以去看四人帮的那本圣经了。- Calanus</p>
<p>12. 《哥德尔、艾舍尔、巴赫书：集异璧之大成》</p>
<p>推荐数：437</p>
<p>如果下昂真正深入阅读，我推荐道格拉斯·侯世达（Douglas Hofstadter）的《哥德尔、艾舍尔、巴赫书》。他极为深入研究了程序员每日都要面对的问题：递归、验证、证明和布尔代数。这是一本很出色的读物，难度不大，偶尔有挑战，一旦你要鏖战到底，将是非常值得的。 – Jonik</p>
<p>13. 《代码整洁之道》</p>
<p>推荐数：329</p>
<p>虽然《代码整洁之道》和《代码大全》有很多共同之处，但它有更为简洁更为实际的清晰例子。 – Craig P. Motlin</p>
<p>14. 《Effective C++》和《More Effective C++》</p>
<p>推荐数：297</p>
<p>在我职业生涯早期，Scott Meyer的《Effective C++》和后续的《More Effective C++》都对我的编程能力有着直接影响。正如当时的一位朋友所说，这些书缩短你培养编程技能的过程，而其他人可能要花费数年。</p>
<p>去年对我影响最大的一本书是《大教堂与市集》，该书教会我很有关开源开发过程如何运作，和如何处理我代码中的Bug。 – John Channing</p>
<p>15. 《编程珠玑》</p>
<p>推荐数：282</p>
<p>尽管我不得不羞愧地承认，书中一半的东西我都没有理解，但我真的推荐《编程珠玑》，书中有些令人惊奇的东西。 – Matt Warren</p>
<p>16. 《修改代码的艺术》by Michael Feathers</p>
<p>我认为没有任何一本书能向这本书一样影响了我的编程观点。它明确地告诉你如何处理其他人的代码，含蓄地教会你避免哪些（以及为什么要避免）。- Wolfbyte</p>
<p>同意。很多开发人员讨论用干净的石板来编写软件。但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy</p>
<p>17. 《编码：隐匿在计算机软硬件背后的语言》</p>
<p>我推荐Charles Petzold的《编码》。在这个充满工具和IDE的年代，很多复杂度已经从程序员那“抽取”走了，这本书一本开眼之作。 – hemil</p>
<p>18. 《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance》</p>
<p>对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。不管你做什么事，总是要力求完美，彻底了解你手中的工具和任务，更为重要的是，要有乐趣（因为如果你做事有乐趣，一切将自发引向更好的结果）。 – akr</p>
<p>（编注：关于这本书，也可以看看阮一峰的读后感。）</p>
<p>19. 《Peopleware / 人件集:人性化的软件开发》</p>
<p>Demarco 和 Lister 表明，软件开发中的首要问题是人，并非技术。他们的答案并不简单，只是令人难以置信的成功。第二版新增加了八章内容。 – Eduardo Molteni</p>
<p>20. 《Coders at Work / 编程人生》</p>
<p>一本非常有影响力的书，可以从中学到一些业界顶级人士的经验，了解他们如何思考并工作。 – Jahanzeb Farooq</p>
<p>21. 《Surely You’re Joking, Mr. Feynman! / 别闹了，费曼先生！》</p>
<p>虽然这本书可能有点偏题，但不管你信不信，这本书曾在计算机科学专业课程的阅读列表之上。一个优秀的角色模型，一本有关好奇心的优秀书籍。 – mike511</p>
<p>22. 《Effective Java 中文版》</p>
<p>此书第二版教你如何编写漂亮并高效的代码，虽然这是一本Java书，但其中有很多跨语言的理念。 – Marcio Aguiar</p>
<p>23. 《Patterns of Enterprise Application Architecture / 企业应用架构模式》</p>
<p>很奇怪，还没人推荐 Martin Fowler 的《企业应用架构模式》- levi rosol</p>
<p>24. 《The Little Schemer》和《The Seasoned Schemer》 nmiranda</p>
<p>这两本是LISP的英文书，尚无中文版。美国东北大学网站上也有电子版。</p>
<p>25. 《交互设计之路》英文名：《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》该书作者：Alan Cooper，人称Visual Basic之父，交互设计之父。</p>
<p>本书是基于众多商务案例，讲述如何创建更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。本书列举了很多真实可信的实际例子，说明目前在软件产品和基于软件的高科技产品中，普遍存在着“难用”的问题。作者认为，“难用”问题是由这些产品中存在着的高度“认知摩擦”引起的，而产生这个问题的根源在于现今软件开发过程中欠缺了一个为用户利益着想的前期“交互设计”阶段。“难用”的产品不仅损害了用户的利益，最终也将导致企业的失败。本书通过一些生动的实例，让人信服地讲述了由作者倡导的“目标导向”交互设计方法在解决“难用”问题方面的有效性，证实了只有改变现有观念，才能有效地在开发过程中引入交互设计，将产品的设计引向成功。</p>
<p>本书虽然是一本面向商务人员而编写的书，但也适合于所有参与软件产品和基于软件的高科技产品开发的专业人士，以及关心软件行业和高科技行业现状与发展的人士阅读。</p>
<p>他还有另一本中文版著作：《About Face 3 交互设计精髓》</p>
<p>26. 《Why’s (Poignant) Guide to Ruby 》</p>
<p>如果你不是程序员，阅读此书可能会很有趣，但如果你已经是个程序员，可能会有点乏味。</p>
<p>27. 《Unix编程艺术》</p>
<p>It is useful regardless operating system you use. – J.F. Sebastian<br />
不管你使用什么操作系统，这本书都很有用。 – J.F. Sebastian</p>
<p>28. 《Practices of an Agile Developer / 高效程序员的45个习惯：敏捷开发修炼之道》</p>
<p>45个习惯，分为7个方面：工作态度、学习、软件交付、反馈、编码、调试和协作。</p>
<p>每一个具体的习惯里，一开始提出一个谬论，然后展开分析，之后有正队性地提出正确的做法，并设身处地地讲出了正确做法给你个人的“切身感受”，最后列出几条注意事项，帮助你修正自己的做法（“平衡的艺术”）。</p>
<p>29. 《Test-Driven Development by Example. / 测试驱动开发》</p>
<p>前面已经提到的很多书都启发了我，并影响了我，但这本书每位程序员都应该读。它向我展示了单元测试和TDD的重要性，并让我很快上手。 – Curro</p>
<p>我不关心你的代码有多好或优雅。如果你没有测试，你或许就如同没有编写代码。这本书得到的推荐数应该更高些。人们讨论编写用户喜欢的软件，或既设计出色并健壮的高效代码，但如果你的软件有一堆bug，谈论那些东西毫无意义。– Adam Gent</p>
<p>30. 《Don’t Make Me Think / 点石成金:访客至上的网页设计秘笈》</p>
<p>取决于你所追求的目标。我喜欢《代码大全》是因纯编程，《点石成金》是一本有关UI设计的卓越书籍。 – Justin Standard</p>
]]></content:encoded>
			<wfw:commentRss>http://dobila.info/other/material/books-programer-should-read.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

