﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-xan walking &amp; thinking-随笔分类-Life Log</title><link>http://www.blogjava.net/xan/category/30692.html</link><description>watch and learn</description><language>zh-cn</language><lastBuildDate>Wed, 09 Apr 2008 19:04:06 GMT</lastBuildDate><pubDate>Wed, 09 Apr 2008 19:04:06 GMT</pubDate><ttl>60</ttl><item><title>(转)程序界葵花宝典</title><link>http://www.blogjava.net/xan/archive/2008/04/10/191711.html</link><dc:creator>xan</dc:creator><author>xan</author><pubDate>Wed, 09 Apr 2008 16:16:00 GMT</pubDate><guid>http://www.blogjava.net/xan/archive/2008/04/10/191711.html</guid><wfw:comment>http://www.blogjava.net/xan/comments/191711.html</wfw:comment><comments>http://www.blogjava.net/xan/archive/2008/04/10/191711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xan/comments/commentRss/191711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xan/services/trackbacks/191711.html</trackback:ping><description><![CDATA[中国人大都喜欢用武侠小说来比较软件开发，但是在实战武功中，只有葵花宝典才是最厉害的，也只有掌握了葵花宝典，才能称为"不败"。 <br />
&nbsp;&nbsp;&nbsp; 但什么才是软件开发的葵花宝典？ <br />
让我们先从一些现象出发。我们的前提是，软件开发是一项智力密集型劳动。对于智力密集型劳动，我们观察到的现象是，个体的表现差异很大，团队的表现差异很大，组织的表现差异很大，国家的表现差异很大。这不象体力占主要的劳动，象百米王跑百米的速度也仅比我快50%。但在棋类运动中，一个高手可以车轮战数位低手，而且毫无例外地将他们一一击败！ <br />
&nbsp;&nbsp;&nbsp; 这些智力运动员表现出的特点是，计算精确而且速度快。其行为很象东方不败。虽然关于葵花宝典的传说很多，但最准确的描述只有一个字"快"。东方不败已经快到了吓人的地步。就象卡斯帕罗夫已快到了深蓝的地步。 <br />
&nbsp;&nbsp;&nbsp; 有一则关于物理学家玻尔的轶事，有一次玻尔在普林斯顿大学听两个年青教授演讲他们的工作成果。期间玻尔突然发言说，如果照你们的研究算下去，会得到一个很有意思的推论。结果两个年青教授回去计算了两天，果然得出了同样的结论。玻尔是如何做到这样快的？ <br />
&nbsp;&nbsp;&nbsp;&nbsp; 在软件开发中，我们同样注意到这样一种高手，他们可以每天写出一千行左右的高品质代码。他们可以运用已有的一些软件包，迅速完成一个新的产品。他们可以在很短的时间内，学会一项新的程序语言或是新技术。他们表现出一种神奇的速度。 <br />
<br />
在武侠小说中，所有的高手都有一些凡人不能企及的表现。象张无忌学太极，用龙爪手击败龙爪手名家；乔峰用太祖长拳击败天下英雄；姑苏慕容以其人之道还治其人之身，令狐冲一剑剌瞎十几双眼睛等等。我认为，之所以他们能做到这样，关键是在于他们快。 <br />
<br />
快并不意味着不准或品质差。快与品质并不矛盾。 <br />
<br />
高手的快，其实包含着很高的品质在其中。如果你因为高手的快，就质疑其品质，那就相当于在问：东方不败出手那么快，会不会刺不准？东方不败并不满足于刺死对手，他会在对手身上刺朵花。他把杀人变成了艺术。准确来说，他真正的兴趣不在杀人，而在于艺术。 <br />
<br />
退一步说，就算东方不败第一击有点偏差，他稍作修正后，马上跟上的第二第三击，也会击中他想击中的地方。在武功差的对手剑还没拨出来的时候，他已杀死对方并刺上了一朵花。 <br />
<br />
所以真正的软件高手，他并不满足于他的代码能有效地工作了，他认为编程是艺术，并醉心于其中。在低手能写出一个版本的时间里，他已经写出了第十版。其品质当然不可同日而语。就象一个九段棋手，在给定的时间里，他能计算十种可能，并将每种可能计算到100手之后，从中选择一种最有利的下法。低手岂有苟全的机会？ <br />
<br />
高手写软件总是不停地在重构(refactoring）。高手喜欢迭代式开发。高手说，增量就是打补丁，迭代就是推倒重来。对于软件这种东西，写一遍它可能OK（做到这一点也不容易），写十遍就是一个伟大的产品，再多写一遍它就更伟大些。 <br />
<br />
高手快的诀窍在于他很熟悉各种东西。高手看书很快，因为每一本新书里，值得他好好看的新技术只有一两章的内容。他能迅速看完，并准确领会这本书的中心思想和价值。而对于一个新手，每句话都是新的，他都需要去理解，每一段例子，他都需要去试。 <br />
<br />
很少看到一种100%全新的技术或理论。就象Java language specification里说的，Java没有使用任何新技术，用的都是业界久经考验的技术。对于高手来说，那些技术都是他所熟悉的。自然，很快他就从一个C++高手变成了Java高手。如果一个编程新手学Java，学两年也不如一个高手学两个月的。高手学新东西快。 <br />
<br />
高手写代码速度快。统计结果说，人均每人月的有效代码速度大概是300至400行。但那是业界平均生产效率。对于高手来说，这个数字太低了。每天写300至400行是完全有可能的。因为在写代码时，所有知识都已具备，已经没有任何需要他多花时间的事情了。他甚至很少需要Debug。 <br />
<br />
高手重用代码的能力很强，熟悉新的API的速度很快。这也是因为，他曾经使用过很多的API，重用过很多的代码。他知道哪些是可用的，哪些有缺陷。他既过用Qt，也用过gtk+，也用过windows API &amp; MFC，也用过AWT &amp; SWING。新的API对他来说，也是老熟人。 <br />
<br />
高手喜欢用轻量级的工具，象vi，notepad，最多到UltraEdit这样复杂的。高手用这种工具写出很多的东西。这些工具就象东方不败的针。那根针已具有神奇的魔力，有时候它可以当激光枪来用。 <br />
<br />
对于一些重量级的工具，高手虽不常用，但一经使出也威力大于常人。如果让东方不败用剑，最厉害的剑术名家也会败得很难看。高手其实用过很多的重量级工具，而且深知其优缺点。所以使出来，就会把威力发挥到最大，而把缺陷减少到最小。而低手则不然，总是把缺陷加以大大的发扬而浑不知其精髓何在。就象很多人学用UML、RUP、XP、Design pattern那样。 <br />
<br />
高手所学博杂且融会贯通。高手做什么都快，当低手还在一愁莫展的时候，高手已经圆满解决问题，去干别的事去了。 <br />
<br />
在成为高手的路上，要有热情，要循序渐进，要持之以恒。 <br />
<br />
要逼自己，<font color="#0000ff">书</font><font color="#0000ff">要快快地看。要试图迅速理解其主旨。其实你快快看所接受的信息量，与慢慢看接受的差不多。</font>能明白多少很大程度上取决于你的功底。以后用到再回过头来看。一本对你来说新东西太多的书，不要指望看一次就全理解吸收。就象很多功力不够的人看design patterns那本书一样。慢慢看还不如找到多种信息来源，都快快看一遍。<font color="#0000ff">对于一个完全陌生的领域，只看一本书很远远不够的。</font> <br />
<br />
<font color="#0000ff">要逼自已，事要快快做</font>。有一个朋友，几年前我介绍他去玩玩linux，他也表示想玩，但他现在还没碰过。他失去了很多机会。 <br />
<br />
平时<font color="#0000ff">要有意识提高自己写代码的速度</font>，其实你一天写15行有效代码，与你写50行有效代码，其品质是差不多的。你应该把那些业界平均水平抛诸脑后，把超越自己做为唯一目标。等到你写了很多各式各样的代码，你的水平就不一般了。一个老师曾向我介绍他的学英语的决窍，他说你去啃原版小说，啃到50本，就和一般人有很大距离了。就是这个理。如果你写得太慢，怎么能写得多？水平怎么能提高？ <br />
<br />
要逼自己，学很多别人怕学的东西。低手总会说：这么多东西怎么学得过来啊。于是就少学或不学。这样就成不了高手了。高手有非常广的知识面，有很丰富的经验。知道很多低手不知道的事。玩过很多低手听都没听过的东西。 <br />
<br />
要逼自己，努力满足客户的各种需求。个人技能是在满足客户的各种需求的过程中提高的。比如你喜欢用Delphi，客户说一定要用VB，那你就答应他，然后把自己培养成为VB的高手。用户的需求看似变态，但对你是一个机会。 <br />
<br />
怎样才能做到看书快，写代码快，学新东西快，一个显而易见的途径就是将<font color="#0000ff">工作并行化</font>。你在一台机器上make时，同时可以在看别的文档和聊天。对于计算机是这样，对人也是这样。如果你只能串行地处理问题，你的速度将提高有限。你的大脑有很大潜力可挖，它应该是一个多任务分时系统。努力减少它idle的时间。搞经济的Samuelson被人称为human brain main frame，可见他的大脑有多快。 <br />
<br />
让你的思维快起来，你就会区别于那些反应迟钝的人。如果你不能让人生的道路变长，就让它变宽。这世界变化快，需要你变得比它快才行。 <br />
<br />
这样加快并不会让你短命，相反，你有更多的时间来享受生活和锻炼身体。你的生活将更有品质，更丰富，更有意义。面对变化，你将立于不败之地。我们都是和自己赛跑的人，需要跑得比昨天的自己更快。 
<img src ="http://www.blogjava.net/xan/aggbug/191711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xan/" target="_blank">xan</a> 2008-04-10 00:16 <a href="http://www.blogjava.net/xan/archive/2008/04/10/191711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>永远的追求</title><link>http://www.blogjava.net/xan/archive/2008/04/09/191699.html</link><dc:creator>xan</dc:creator><author>xan</author><pubDate>Wed, 09 Apr 2008 14:45:00 GMT</pubDate><guid>http://www.blogjava.net/xan/archive/2008/04/09/191699.html</guid><wfw:comment>http://www.blogjava.net/xan/comments/191699.html</wfw:comment><comments>http://www.blogjava.net/xan/archive/2008/04/09/191699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xan/comments/commentRss/191699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xan/services/trackbacks/191699.html</trackback:ping><description><![CDATA[说是追求，不知要追多久，是否能实现？<br />
<br />
算法！ 总是想去学，总是没去学。 就像想玩linux一样<br />
<br />
好吧，列一个很粗略的list：<br />
&nbsp;&nbsp;&nbsp; 算法<br />
&nbsp;&nbsp;&nbsp; 数据结构<br />
&nbsp;&nbsp;&nbsp; linux<br />
 <img src ="http://www.blogjava.net/xan/aggbug/191699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xan/" target="_blank">xan</a> 2008-04-09 22:45 <a href="http://www.blogjava.net/xan/archive/2008/04/09/191699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>