好的程序员,效率是普通程序员的亿万倍
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(企业长青),什么是好的作家,什么是好的漫画家,什么是好的音乐家?
一句话:世界是如此的相似。
分享到:
相关推荐
它们可能会集成多种实用功能,如代码高亮、网络请求查看、CSS编辑等,极大地提高了程序员的工作效率。 【描述】:“程序员浏览器程序员浏览器”重复多次,暗示这款浏览器是专为程序员打造,可能包含多项针对编程...
故事始于她在西部一所普通高校毕业后,找到一份程序员的工作,但感到生活过于安逸,缺乏挑战。受到一篇关于IT精英奋斗的文章启发,她决定离开熟悉的环境,前往大城市追求更高的职业发展。 在初到大城市的初期,她...
业务理解是架构师与普通程序员的区别之一。架构师不仅要关注技术实现,还要理解业务需求,将业务逻辑融入到系统设计中。他们需要与业务部门密切合作,了解业务流程、目标和痛点,设计出能够支持业务发展的系统架构。...
Android 程序员需要了解如何提高 ListView 的效率。例如,复用 convertView,历史的 view 对象异步加载数据,分页加载数据,onscrollListener();Static class ViewHolder 使用静态的 view 对象避免创建过多的 view...
程序员在编写代码时,对键盘输入速度和准确性的需求往往高于普通用户,因此这类键盘练习程序能够帮助他们优化这一技能。 【描述解析】 描述中的“很好用 强烈推荐”表明该键盘练习程序具有较高的实用性和用户满意度...
在快速发展的IT行业中,保持对技术的深度理解和灵活运用,以及在面对压力时仍能保持初心,是区分优秀程序员与普通程序员的重要标志。因此,对于程序员来说,更重要的是不断提升自身技能,而非过于关注工具的选择。
这对于程序员来说,意味着在设计和实现大数据解决方案时,可以借鉴和利用他们的研究成果,提高工作效率和数据处理效果。 微软亚洲研究院还非常注重跨学科的合作,这鼓励程序员不仅精于技术,还要关注其他领域的知识...
【程序员个人简历模板】是求职过程中非常关键的一环,它能直观展示候选人的专业技能...对于VB程序员,尤其要强调数据库管理和项目实施的经验,同时保持简历的清晰和精炼,避免冗余信息,以提高招聘者的阅读效率和兴趣。
- **领导力培养**:讨论如何从一个普通程序员成长为团队领导者所需要具备的关键能力,如决策制定、激励他人等。 - **时间管理**:分享高效管理个人时间和任务优先级的方法论,帮助读者克服拖延症并提高工作效率。 #...
- 技术文档的编写应占据一定的工作比重(例如,普通程序员约30%的时间用于编写文档); - 确保文档清晰、准确地描述了代码的功能、结构及其与其他组件的交互方式; - 随着项目的推进持续更新文档,确保其时效性和...
综上所述,程序员帮助文档仓库不仅是一个简单的文档集合,更是提高工作效率、促进技能成长的重要工具。通过合理利用CHM等格式的文档资源,结合有效的管理方法和个人实践经验,可以极大地提升个人和团队的技术水平。
3. **程序员专用**:这表明该工具是为具备编程知识的人设计的,普通用户可能无法直接使用,需要一定的技术背景才能理解和应用。 【压缩包子文件的文件名称列表】"web12306"可能是整个抢票程序的源代码文件夹或者主...
迭代器提供了统一的接口,允许程序员像操作普通指针一样访问容器内的元素,同时也支持对容器的算法操作。有输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器等五种不同级别的迭代器,每种具有不同的...
尽管网络上有大量的数据库优化资料,但大部分资料往往侧重于某个特定领域的优化技巧,缺乏全面性和系统性的指导,这使得普通程序员在学习和实践过程中容易感到困惑。 #### 数据库访问优化法则简介 为了帮助程序员更...
成熟的思维方式是区分高级程序员和普通程序员的关键。具体表现在以下几个方面: 1. **逻辑性**:成熟的程序员编写代码时逻辑清晰,易于理解和维护。 2. **思维方式**:成熟的程序员倾向于自顶向下的思维方式,即先...
### visibroker c++程序员指南 英文版 ...它不仅详细介绍了visibroker for C++的核心概念和技术细节,还提供了实用的操作指南和最佳实践,是每一位C++程序员在进行分布式应用开发时不可或缺的好帮手。
《C++编程实例详解》是一本面向普通C++程序员的参考书籍,旨在通过丰富的实例来深入解析C++编程语言的核心概念和技术。这本书不仅适合初学者,也对有经验的程序员在提升C++技能方面有着极大的帮助。下面我们将详细...
该文件为Java程序员面试宝典的一部分,主要内容包括Java基础知识点的面试问题及其答案,非常适合准备参加Java程序员面试的求职者。以下是详细的知识点: 1. Java源文件中可以包括多个类,但只能有一个公共类...