`
robbin
  • 浏览: 4826491 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:137505
社区版块
存档分类
最新评论

软件开发的葵花宝典[转载]

阅读更多
葵花宝典

注:转载,原文已经没有出处了。总是有人问我怎么学习技术,贴出来给大家参考吧。

中国人大都喜欢用武侠小说来比较软件开发,但是在实战武功中,只有葵花宝典才是最厉害的,也只有掌握了葵花宝典,才能称为"不败"。 但什么才是软件开发的葵花宝典?

让我们先从一些现象出发。我们的前提是,软件开发是一项智力密集型劳动。对于智力密集型劳动,我们观察到的现象是,个体的表现差异很大,团队的表现差异很大,组织的表现差异很大,国家的表现差异很大。这不象体力占主要的劳动,象百米王跑百米的速度也仅比我快50%。但在棋类运动中,一个高手可以车轮战数位低手,而且毫无例外地将他们一一击败!

这些智力运动员表现出的特点是,计算精确而且速度快。其行为很象东方不败。虽然关于葵花宝典的传说很多,但最准确的描述只有一个字"快"。东方不败已经快到了吓人的地步。就象卡斯帕罗夫已快到了深蓝的地步。

有一则关于物理学家玻尔的轶事,有一次玻尔在普林斯顿大学听两个年青教授演讲他们的工作成果。期间玻尔突然发言说,如果照你们的研究算下去,会得到一个很有意思的推论。结果两个年青教授回去计算了两天,果然得出了同样的结论。玻尔是如何做到这样快的?

在软件开发中,我们同样注意到这样一种高手,他们可以每天写出一千行左右的高品质代码。他们可以运用已有的一些软件包,迅速完成一个新的产品。他们可以在很短的时间内,学会一项新的程序语言或是新技术。他们表现出一种神奇的速度。

在武侠小说中,所有的高手都有一些凡人不能企及的表现。象张无忌学太极,用龙爪手击败龙爪手名家;乔峰用太祖长拳击败天下英雄;姑苏慕容以其人之道还治其人之身,令狐冲一剑剌瞎十几双眼睛等等。我认为,之所以他们能做到这样,关键是在于他们快。

快并不意味着不准或品质差。快与品质并不矛盾。

高手的快,其实包含着很高的品质在其中。如果你因为高手的快,就质疑其品质,那就相当于在问:东方不败出手那么快,会不会刺不准?东方不败并不满足于刺死对手,他会在对手身上刺朵花。他把杀人变成了艺术。准确来说,他真正的兴趣不在杀人,而在于艺术。

退一步说,就算东方不败第一击有点偏差,他稍作修正后,马上跟上的第二第三击,也会击中他想击中的地方。在武功差的对手剑还没拨出来的时候,他已杀死对方并刺上了一朵花。

所以真正的软件高手,他并不满足于他的代码能有效地工作了,他认为编程是艺术,并醉心于其中。在低手能写出一个版本的时间里,他已经写出了第十版。其品质当然不可同日而语。就象一个九段棋手,在给定的时间里,他能计算十种可能,并将每种可能计算到100手之后,从中选择一种最有利的下法。低手岂有苟全的机会?

高手写软件总是不停地在重构(refactoring)。高手喜欢迭代式开发。高手说,增量就是打补丁,迭代就是推倒重来。对于软件这种东西,写一遍它可能OK(做到这一点也不容易),写十遍就是一个伟大的产品,再多写一遍它就更伟大些。

高手快的诀窍在于他很熟悉各种东西。高手看书很快,因为每一本新书里,值得他好好看的新技术只有一两章的内容。他能迅速看完,并准确领会这本书的中心思想和价值。而对于一个新手,每句话都是新的,他都需要去理解,每一段例子,他都需要去试。

很少看到一种100%全新的技术或理论。就象Java language specification里说的,Java没有使用任何新技术,用的都是业界久经考验的技术。对于高手来说,那些技术都是他所熟悉的。自然,很快他就从一个C++高手变成了Java高手。如果一个编程新手学Java,学两年也不如一个高手学两个月的。高手学新东西快。

高手写代码速度快。统计结果说,人均每人月的有效代码速度大概是300至400行。但那是业界平均生产效率。对于高手来说,这个数字太低了。每天写300至400行是完全有可能的。因为在写代码时,所有知识都已具备,已经没有任何需要他多花时间的事情了。他甚至很少需要Debug。

高手重用代码的能力很强,熟悉新的API的速度很快。这也是因为,他曾经使用过很多的API,重用过很多的代码。他知道哪些是可用的,哪些有缺陷。他既过用Qt,也用过gtk+,也用过windows API & MFC,也用过AWT & SWING。新的API对他来说,也是老熟人。

高手喜欢用轻量级的工具,象vi,notepad,最多到UltraEdit这样复杂的。高手用这种工具写出很多的东西。这些工具就象东方不败的针。那根针已具有神奇的魔力,有时候它可以当激光枪来用。

对于一些重量级的工具,高手虽不常用,但一经使出也威力大于常人。如果让东方不败用剑,最厉害的剑术名家也会败得很难看。高手其实用过很多的重量级工具,而且深知其优缺点。所以使出来,就会把威力发挥到最大,而把缺陷减少到最小。而低手则不然,总是把缺陷加以大大的发扬而浑不知其精髓何在。就象很多人学用UML、RUP、XP、Design pattern那样。

高手所学博杂且融会贯通。高手做什么都快,当低手还在一愁莫展的时候,高手已经圆满解决问题,去干别的事去了。

在成为高手的路上,要有热情,要循序渐进,要持之以恒。

要逼自己,书要快快地看。要试图迅速理解其主旨。其实你快快看所接受的信息量,与慢慢看接受的差不多。能明白多少很大程度上取决于你的功底。以后用到再回过头来看。一本对你来说新东西太多的书,不要指望看一次就全理解吸收。就象很多功力不够的人看design patterns那本书一样。慢慢看还不如找到多种信息来源,都快快看一遍。对于一个完全陌生的领域,只看一本书很远远不够的。

要逼自已,事要快快做。有一个朋友,几年前我介绍他去玩玩linux,他也表示想玩,但他现在还没碰过。他失去了很多机会。

平时要有意识提高自己写代码的速度,其实你一天写15行有效代码,与你写50行有效代码,其品质是差不多的。你应该把那些业界平均水平抛诸脑后,把超越自己做为唯一目标。等到你写了很多各式各样的代码,你的水平就不一般了。一个老师曾向我介绍他的学英语的决窍,他说你去啃原版小说,啃到50本,就和一般人有很大距离了。就是这个理。如果你写得太慢,怎么能写得多?水平怎么能提高?

要逼自己,学很多别人怕学的东西。低手总会说:这么多东西怎么学得过来啊。于是就少学或不学。这样就成不了高手了。高手有非常广的知识面,有很丰富的经验。知道很多低手不知道的事。玩过很多低手听都没听过的东西。

要逼自己,努力满足客户的各种需求。个人技能是在满足客户的各种需求的过程中提高的。比如你喜欢用Delphi,客户说一定要用VB,那你就答应他,然后把自己培养成为VB的高手。用户的需求看似变态,但对你是一个机会。

怎样才能做到看书快,写代码快,学新东西快,一个显而易见的途径就是将工作并行化。你在一台机器上make时,同时可以在看别的文档和聊天。对于计算机是这样,对人也是这样。如果你只能串行地处理问题,你的速度将提高有限。你的大脑有很大潜力可挖,它应该是一个多任务分时系统。努力减少它idle的时间。搞经济的Samuelson被人称为human brain main frame,可见他的大脑有多快。

让你的思维快起来,你就会区别于那些反应迟钝的人。如果你不能让人生的道路变长,就让它变宽。这世界变化快,需要你变得比它快才行。

这样加快并不会让你短命,相反,你有更多的时间来享受生活和锻炼身体。你的生活将更有品质,更丰富,更有意义。面对变化,你将立于不败之地。我们都是和自己赛跑的人,需要跑得比昨天的自己更快。
分享到:
评论
55 楼 Link028 2011-10-21  
很有意思,拜读了。
54 楼 SunRuing 2011-03-31  
看了robbin的此文,得出很多牛人都是被逼出来的,自己逼和他人逼,今后也逼自己,努力做到最好,感谢robbin的分享。
53 楼 magic_yao 2010-12-29  
欲练神功,必先自宫。

练成这样的高手,必然也要舍弃一些东西的。
52 楼 zhengjianbo 2010-10-12  
我现在发现自己写代码比较快,接受新事物 新技术感觉都是不一样了
51 楼 martintree 2010-09-27  
ShiningRay 写道
欲练神功,挥剑自宫……


这里边的“挥剑自宫”应该可以理解为现实生活当中只有斩断
一些自己的欲望,才能练成“神功”。
50 楼 chaotienhisang 2010-09-22  
需方市场!没什么可说的!
49 楼 wubaodong 2010-09-21  
引用
他既过用Qt,也用过gtk+


发现个语法BUG
48 楼 e_soft 2010-09-21  
天下武功,唯快不破
47 楼 javalucky 2010-02-25  
哈哈有 一定道理
46 楼 李俊林 2010-01-05  
一定要在自己能力范围内了,切忌过劳
45 楼 walkingp 2009-12-26  
robbin说得也有道理,不过我有个人的观点,我现在桌面壁纸上一句话“一次只做一件事情”,因为我发现当我打开太多窗口而不能集中精力去做一件事情,这样我的工作效率就大打折扣。
总之呢,各人有各人的工作方式,适合自己的才是最好的。
44 楼 oliver_peng 2009-09-10  
软件开发要靠不断实践,经验多了自然成为高手。

大学的教育灌输太多,实践太少,考试是唯一的中心,如果大学生能够在学校就能够懂得并有机会实践,毕业之后就能够少走很多弯路。

加拿大滑铁卢大学最著名的是计算机系,因为所有学生每年有一半的时间在各大IT公司做实习,可以想像当他们毕业的时候已经具备了多少经验。
43 楼 jackotty 2009-07-31  
呵呵,看来我们人有向计算机发展的趋势了
42 楼 yyjava 2009-07-03  
这个早有耳闻了,当初压力大感觉到很多乐趣,现在压力小了,但心里很不舒服,不知道怎么办好。
41 楼 whg333 2009-06-26  
原来如此~一语惊醒梦中人啊~要多线操作~哈哈~
40 楼 wnzz95391511 2009-06-17  
谢谢楼主了,感觉讲的很有道理,要想精通,思想境界有提高,一定要快,在同样的时间里,完成更多的任务。这样才会有更大的进步~~~~
39 楼 yhjhoo 2009-06-12  
听君一席话,胜读十年书啊

一个字就搞定了,快
38 楼 hh2hh 2009-06-02  
highriver 写道

我的大脑没有达到并行,但是我的知识经常总结成文档,建立索引。这样当我充斥了各种知识时,可以快速的载入大脑。我把大脑当成了内存。

文档丢了怎么办? 不活了吗? 
37 楼 java142595java 2009-03-22  
的确是逼的,最近发现懒了很多,很多东西都不愿意去学了,很多书都不愿意去看了,这样下去很危险,人得有忧患意识,要不断提升自己才能生存。
36 楼 tdwm 2009-03-21  
平时自己很懒阿,所以自己能力不行阿,以后要勤快一些阿

相关推荐

    java软件开发面试宝典-葵花宝典

    《Java软件开发面试宝典-葵花宝典》是一本专为编程爱好者和对Java概念不熟悉的人士设计的面试指南。它旨在帮助读者更好地理解和掌握Java编程语言的关键概念,以便在面试中表现出色。以下将详细介绍Java软件开发中的...

    Oracle相关SQL葵花宝典

    《Oracle相关SQL葵花宝典》是一本专为学习Oracle数据库管理系统中SQL语言及PL/SQL编程设计的综合指南。本书全面涵盖了从基础到高级的Oracle SQL知识,旨在帮助读者熟练掌握在Oracle环境中进行数据查询、操作、分析...

    oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典

    oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典

    AutoLisp葵花宝典

    AutoLisp葵花宝典

    java面试-葵花宝典

    Java面试题葵花宝典,Java基础知识总结,刚开始使用Java面试必备

    开发类葵花宝典

    《开发类葵花宝典》是一...总之,《开发类葵花宝典》是开发者的一份宝贵资源,它涵盖了.NET和Java两大平台的核心知识,以及软件开发的多个重要方面。通过深入研读,你将能够全面提升自己的编程技能,成为业界的佼佼者。

    塔罗葵花宝典塔罗牌入门圣经.rar

    塔罗葵花宝典塔罗牌入门圣经

    软件测试面试宝典之葵花宝典

    ### 软件测试面试宝典之葵花宝典 #### 知识点一:处理争议性bug的策略 在软件测试过程中,测试人员可能会遇到与开发团队在bug判定上的分歧。面对这种情况,应采取一系列专业且有条理的步骤来解决: 1. **正式记录...

    葵花宝典 WPF自学手册 源代码VS2010

    葵花宝典 WPF自学手册 源代码VS2010 葵花宝典 WPF自学手册 源代码VS2010

    软件测试面试宝典之葵花宝典.pdf

    这份文件的标题为《软件测试面试宝典之葵花宝典》,这表明文档可能是为参加软件测试面试的人准备的复习资料或参考书。文件描述也是简单重复了标题内容,因此主要的知识点将从文件内容部分进行提炼。 文件内容虽然被...

    塔罗葵花宝典终极完整修正版.rar

    《塔罗葵花宝典终极完整修正版》是一款详尽介绍塔罗牌知识的资源,主要针对对塔罗牌有兴趣的初学者和进阶者。该压缩包内包含的PDF文件,提供了全面、深入的塔罗牌解读指南,旨在帮助读者理解和掌握塔罗牌的奥秘。 ...

    分区、分片葵花宝典.pdf

    ### 分区、分片葵花宝典知识点解析 #### 一、概述 “分区、分片葵花宝典”是一份详尽的指南文档,旨在深入介绍数据库中的分区(Partitioning)与分片(Sharding)技术。这些技术主要用于优化大型数据库系统的性能,...

    Java葵花宝典.rar

    《Java葵花宝典》是一份专为Java程序员准备的面试指南,包含了丰富的Java相关知识,旨在帮助读者全面掌握Java核心技术,提升面试竞争力。这份压缩包文件由五个文档组成,分别是"宝典一.docx"、"宝典二.docx"、"宝典...

    java葵花宝典&九阴真经

    Java编程语言作为软件开发领域的主流技术之一,深受程序员的喜爱,尤其在企业级应用开发中占据着重要的地位。"java葵花宝典&九阴真经"这个压缩包文件集成了六个文档,旨在帮助面试者更好地理解和掌握Java的核心概念...

    葵花宝典 WPF自学手册 源代码

    《 葵花宝典 WPF自学手册》是一本很不错的WPF学习书籍。这份源代码是随书光盘里的,我是从资源贩子那付费获得的,无偿分享给有需要的各位。

    英语葵花宝典英语葵花宝典

    英语葵花宝典英语葵花宝典英语葵花宝典英语葵花宝典英语葵花宝典英语葵花宝典英语葵花宝典英语葵花宝典

    葵花宝典--WPF自学手册

    葵花宝典--WPF自学手册 如XAML,WPF体系结构,依赖属性,WPF命令, 页面,导航,布局,数据捆绑,互操作,自定义控件,3D图形等

    葵花宝典-WPF自学手册

    在"葵花宝典-WPF自学手册"中,你可能会学习到如何使用XAML来创建用户界面,理解数据绑定和依赖属性的工作原理,学习各种控件的使用方法,以及如何利用布局系统和资源管理来优化你的应用程序。此外,可能还会涉及到...

Global site tag (gtag.js) - Google Analytics