好的程序员,效率是普通程序员的亿万倍

好的程序员,效率是普通程序员的亿万倍

2011-5-27

 

咋看之下,有人肯定认为这是标题党,或者有人或许认为:疯了吧,怎么可能有亿万倍。为了证明我不是标题党,我也没疯,我决定把这篇文章写好!大家先来点掌声,支持一下!^_^

 

网上流传的“标准观点”是好的程序员效率是普通程序员的数倍。这句话被很多人、很多文章引用过。而我说:好的程序员是普通程序员的亿万倍。这是不是有点非常非常夸张了?如果真这么好,那么普通程序员都不用干活了,都只由“好的程序员”做了算了。

 

以我的经验来看,这或许有点夸张,但却基本属实。非常非常好的程序员,的确效率是普通程序员的亿万倍不止。而稍好的程序员,效率也将是普通程序员的百倍不止。

 

先抛出个问题:既然比的是程序员的好与普通、效率的高低之分,那么什么称得上是程序员的效率呢?

 

效率是不是可以认为是编码的效率?亦或甚至是编程带来的产品效应,社会效益?

 

程序员的效率,其实我们很多时候,单单说的是:这个人每天编码的量。一个人是大牛(好的程序员),是不是说,他一天编码的量,就一定比普通程序员的量大呢?我觉得不一定。很多搞外包的,每天编码量达到了上一两千行,这是很正常不过的了。但他们是不是好的程序员呢?而作为最著名的软件公司微软公司,他们的程序员每天的编码量据说不过是50行。差距何其巨大!难道他们的牛人算不得好的程序员?

 

所以我认为,每天的编码行数比较大,并不代表你是不是一个好的程序员。你能编写正确良好运行的程序,但不能认为你就是好的程序员了!好的程序员是普通程序效率的亿万倍,你觉得你做到哪一份上了呢?(当然,这时候,效率还没定义好呢,接着往下看)

 

其实,有在大公司工作过的经历,让我从大牛那里学到不少知识。其中对好的程序员,和普通程序员的印象也更为清晰。好的程序员,他们的编码量或许不大,但他们的程序是公司的一切产品的核心!有人肯定猜到了,对,那就是程序库。

 

好的程序员与普通程序员的差距是否就在于,能否编写一个复用率比较高的程序库。复用率高,意味着其它员工,可以利用上这个库,做一些高质量的编程开发,从而大大提升了整个项目组,甚至是整个部门、公司的效率。并且保证了产品质量,避免了重复的低质量的开发。从而为公司赢得了市场,换取了经济效益。

 

这里,你或许已经有点明白我说的了。为什么好的程序员是普通程序员的亿万倍了。

 

好的程序员,编出来的程序,可以做到“一次编写,多人多次多处可用”的。高的复用率,意味着效率。这个效率之高,又怎么会是普通程序员编写的“多次重复编写、个人一次性使用”可以比的呢? 

 

说了这么多,我终于有了“程序员效率”的定义了!

 

程序员效率定义1一个程序段(包括其复制版)的运行时间总和(小时)/ 编写该程序段所花时间

 

大家觉得,按这个定义,什么样的程序员效率会比较高。什么样的程序员算好的程序员、什么样的算普通程序员?

 

微软那些大牛们,编写的可是操作系统啊。运行于千家万户。累积起来的运行时间肯定是无可比拟的。对比一些小公司的程序员(产品可能卖得不好),效率那可真是相关亿万倍不止。

 

linus ,编写了linux内核,估计不少代码仍然在使用。Linux系统如今占据着服务器操作系统市场的不少份额,因而也是效率非常高的一个程序员。

 

Java创始人 及其 jdk编写者。编写的代码,至今良好运行于多种平台(移动的、PC的、服务器的),并且仍为java平台的储多程序员复用着,编写着大量的商业、娱乐、学习产品,大大提升了人们的编写产品的效率。你说,他们的对人类虚拟世界的贡献大不大?他们算不算好的程序员?  他们的效率是不是非常之高?

 

Mysql是一个伟大的开源数据库。作为一个成功的数据库产品,他们应用于许许多多的互联网产品当中。使得我们有了更好的管理产品数据的能力,创造了非常大的时间效益、经济效应,社会效应。这当属非常成功的产品。创建他们的人,也是非常好的、伟大的程序员!

 

现在我们来到某个大型的互联网公司,参观一下他们的世界。一个程序员大牛们。他不是疯狂地在加班,而是在听音乐。是的他在听音乐,而此时,他在构思一个奇妙的构想。通过构建某一个程序库+自动化组件+可配置化系统,能让他们以后的某个业务,能快速的通过这些自动化组件、程序库快速构建起来,从而大大减少人力、提升效率和程序员的生活品质。是的,他以前就是这么做的。因此他成为了公司的骨干!他与公司在一同快速成长起来!(PS,我现在所在的大公司,一个程序员大牛说过:一切皆可自动化!――可自动化学派)

 

其实,你或许说了,在微软,就算你编写的是狗屎代码,但按我的公式算出来,也算是非常好的程序员。其实,狗屎不是狗屎,市场可以做初步判定。并且从长远来看,如果你的东西真不是狗屎,那么亿万年之后,依然有人在用你的代码。

 

再举一些或许不那么程序员的例子。但即与《程序员的十层楼》有异曲同工之趣!

 

二分查找算法(思想),这个不是程序,而是程序的灵魂---算法。我觉得,即使微软倒闭了。人类没灭亡的话,我觉得依然会有程序员继续使用的。其它的永恒的“真理”还有很多。比如说分治思想、以空间换时间、二八法则…..

 

发明算法(程序灵魂)的人,排在《程序员的十层楼》的第七(大师)、第八层楼(科学家)。算法是不灭的,所以他们如果可以称之为程序员。无疑是效率极高的一群人。他们的效率,不仅仅使得他们发明的算法思想,用永远的使用下去,而且可以极大的提升计算机的效能,使得计算机更有效率地为人服务。

 

 

程序员的效率,我也做出了一个定义了。并且举了一些例子,有世界著名的大公司的,也有开源软件、操作系统,互联网大公司的。我想应该你也能明白我所说的了,我的说法并不是无依无据的。或许有失偏颇,但这个定义或许的确不错呢!

 

末篇

 

刚才举了商业公司微软的例子,再为自己辩驳一下:微软这个软件生态系统的出现,起码解决了操作系统的问题。(程序员不可能都自己写这些线程、进程调度程序---节省了大家的时间,提升了效率)。不仅如此,形成生态圈,有了比较好的win32开发环境----VC6.0  VB 等等 开发软件,也极大的加速了应用软件的开发。----又是一层效率的提升。

 

我觉得,很多时候,作为程序员。我们不能太狭隘了。比如说,提升效率有很多种方式。创造 lib 程序是一方面。  创建一个可配置化的系统是一方面。  提供一个较好的行业解决方案,又将是一方面。  甚至于创造一个通用的算法,那不止是青史留名了,更是有可能极大的提升了计算机的效率了。  除此之外,参与开源项目。那也是成为好的程序员、提升效率的重要手段(难以想像,没有开源项目,是否还有现在的互联网?

 

说了这么多,目标无非是一个:正确认识程序员的效率的差异。理解到了差异(差距),让我们有了前进的目标与动力。

 

想成为了一个好的程序员,我觉得应该做到:

1、      充分利用现有的程序库,不做无用功(《linux编程思想》)。

2、      编写新的代码时,不重复编写一些相似的代码,而应该学习抽象思维,抽象可复用函数模块,提升程序的模块化、结构化

3、      作为一个员工,假如涉及较多的重复编码的模块的。建议抽象成全组全部门通用的模块,形成部门积累。

4、      做工作时,能自动化的地方多自动化。不能自动化的地方,多想想怎么流程化、规范化。(流程规范,事实上是把人当成是计算机硬件、流程规范当成是软件)

5、      能设计可复用可配置的系统,代价不高的情况下,尽量这么设计。----有人喜欢说“快速迭代、敏捷”。 我觉得,这与程序员的效率并不矛盾。 参考第6点。

6、      编写程序系统,是一门平衡的艺术。如何平衡性能与算法复杂度。如何平衡使用硬盘、磁盘、SSD盘。平衡开发“临时性系统” 还是开发“较通用、的生命周期较长的系统”。

7、      饱含大局观。如果能以较小时间、人力代价做出业界领先的统一化解决方案。为人类谋福祉,为公司创造价值,为自己赢得涨薪。为什么不做?

8、      参考本文“程员效率的定义”,多想想“开源的好处”,发明一个优质的产品的好处。产品与开源、与程序员的效率并不矛盾。

 

好的程序员,在条件允许的情况下,尽量向着“效率最优化、生活品质最好化”的方向前进。(这下子,好的程序员的定义也有了!)

 

谢谢大家围观!  这文章比较长,但话依然没说完,留到下次吧!且听下回分解。

 

PS:再BB一句,大家觉得什么是好的诗人(短而流传时间长)?  什么是好的思想家,  什么是好的产品经理(经典而多人使用,产品周期长),什么是好的CEO(企业长青),什么是好的作家,什么是好的漫画家,什么是好的音乐家? 

一句话:世界是如此的相似。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值