Java文萃 什么才是软件开发的葵花宝典

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

但什么才是软件开发的葵花宝典?

让我们先从一些现象出发。我们的前提是,软件开发是一项智力密集型劳动。对于智力密集型劳动,我们观察到的现象是,个体的表现差异很大,团队的表现差异很大,组织的表现差异很大,国家的表现差异很大。这不象体力占主要的劳动,象百米王跑百米的速度也仅比我快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,可见他的大脑有多快。

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

这样加快并不会让你短命,相反,你有更多的时间来享受生活和锻炼身体。你的生活将更有品质,更丰富,更有意义。面对变化,你将立于不败之地。我们都是和自己赛跑的人,需要跑得比昨天的自己更快。

时间: 2024-10-31 18:43:00

Java文萃 什么才是软件开发的葵花宝典的相关文章

java培训机构,学软件开发,湖南哪里好

问题描述 我大学的课程就是学的软件开发,不过重理论少实践,这样出来人家用人单位都不要呀,说这样的学生实际操作能力差,还没有经验,哎,没办法啊,还是打算找个培训学校系统的学一下好啊,其实我的同学都是这样的,毕业了先不找工作,都是要培训一下才上岗的,没想到这样还真实在,一般培训了出去还是很有竞争力的呀,不过我现在还拿不定主意去哪一家培训,我建了个群,大家多来讨论一下吧:<1049~50~799> 解决方案 解决方案二:来湘潭吧,呵呵,直接参加项目开发,不过想知道您是哪里毕业的啊

ERP软件开发应该如何选择才算是紧跟潮流?C#在这方面有优势吗?有何劣势?

问题描述 ERP软件开发到底应该选择什么平台好呢?是C/S还是B/S.开发语言?是JAVA还是C#,VB.数据库?是SQL还是ORACLE,或者是MYSQL.也许这一切还是要根据你的具体情况和需求而定,没有最好的技术,只有最适合的技术!各位朋友,你们的选择又如何呢?大家说说,交流交流!C#在这方面有何优势?又有何劣势? 解决方案 解决方案二:我喜欢,我选择解决方案三:C#的datagridview功能不尽完善,比如做统计,一条记录双行显示,虽然可以重写,但开发者需要花太多的时间.如果能和PB的d

JAVA 软件开发 工作在郑州 何去何从 ?

问题描述 我是一名大四的学生,大学学的是计算机专业,现在在郑州一家公司实习,毕业后就能转正了,转正能拿2000多的薪水.现在我做的是.net开发,已经进项目组了.我的经理比我大了几岁,人挺好,能力强,对我也挺照顾的.公司有双休日,按时上下班,很少又加班,一切都看是那么好.但我总感觉在这里干有点太安逸了,年轻人不应该一开始就在这样的环境下工作,而且感觉工资有点低了.前些天在网上看到了一家公司招聘,投了份简历,参加了笔试,这家公司主要是Java软件开发,薪水是4K,我想去这家公司,但感觉这家公司主要

java-88年新人准备转行入IT,学JAVA还是.net软件开发呢?(数学,外语底子很差)

问题描述 88年新人准备转行入IT,学JAVA还是.net软件开发呢?(数学,外语底子很差) 88年新人准备转行入IT,学JAVA还是.net软件开发呢?(数学,外语底子很差)原本想去学网管的不过后来还是觉得走开发好点吧!本人体育系毕业文化底子差~现在想学请问走JAVA还是NET好?那个入门撒比较容易初期对外语,数学要求不高 解决方案 另外补充一句,88年也不是很年轻了,底子差不要紧,但是如果不是非常热爱软件开发这行的话,还是建议不要入这行了. 而且你也可以考虑下移动开发(iOS和Android

让你提前认识软件开发(46):首先是为人编写程序,其次才是计算机

第3部分 软件研发工作总结 首先是为人编写程序,其次才是计算机          "首先是为人编写程序,其次才是计算机",这是软件开发的基本要点,软件的生命周期贯穿于产品的开发.测试.生产.发布.用户使用.版本升级和后期维护等长期过程中,只有易读.易维护的软件代码才具有生命力.         在实际的软件开发过程中,可能是由于工作很忙的原因,很多开发人员只注重实现程序的基本功能,而忘记了编程规范,因此写出来的代码只能让计算机看懂,人要看懂很不容易.更有甚者,有些项目组为了赶进度,明确

【分享】JAVA软件开发相关注册码 myeclipse注册码 + navicat注册码

[分享]JAVA软件开发相关注册码 myeclipse注册码 + navicat注册码 ============================================================== myeclipse 6.01 注册码 Subscriber: www.1cn.biz  Subscriber Code: jLR7ZL-655355-5450755330522962   Subscriber:Administrator  Subscription Code:NLR8Z

javascript-我想知道些关于软件开发类和java的资料 本人初学者

问题描述 我想知道些关于软件开发类和java的资料 本人初学者 请各位大师指教下javascript之类的招 跟老师学好久了还是没弄明白 还有懂vs和sql方面的也请指教下 谢谢各位大师 解决方案 www.hanbinit.com.cn 正在写一个完全面向新手的教程. 解决方案二: 上http://www.w3school.com.cn/ 一目了然 你想要知道的各个知识点都可以从零到深 去看看

java类的问题-软件开发求大神解答!!

问题描述 软件开发求大神解答!! 如何编写一个java程序,让qq邮箱里面的邮件自动下载到一个指定的文件夹,求各位朋友帮帮忙,需要用到哪些技术 解决方案 用你的程序读取qq,然后下载文件夹,用eclipse等编程软件 解决方案二: 问题是如何读取呢有没有什么建议啊

学习java软件开发,最好要用什么系统来练习啊,xp 还是vasta ???

问题描述 学习java软件开发,最好要用什么系统来练习啊,xp还是vasta??? 解决方案 解决方案二:都一样,java嘛,跨平台,用linux也无所谓解决方案三:xp,我两个系统都用过了,最后还是选择xp.解决方案四:vasta!!!楼主自己开发的系统??大多数人都是在XP上开发的,如果有条件在Linux最好(个人简历个可以写熟悉Linux编程了<玩笑,不是Shell编程>)解决方案五:都可以学这个好像不看系统,就看你用的软件和版本了.解决方案六:dos解决方案七:这可没个标准哈.有XP用