当一个人在完成一件体力工作时,你很容易评估他是否在努力的工作。你可以观察他的物理动作,看他流了多少汗水。你还可以看到他工作的成功:砖墙在砌高,地面上挖的坑在变大。对努力工作的认可和褒奖是人性中非常基本的本能反应。这也正是为什么人们对体力耐力体育活动如此着迷的原因之一。这种对体力上的辛苦工作的本能的赏识,在遇到管理一群技术创造型的员工时,却成了一个麻烦问题。高效的脑力工作者通常会被看作并没有在努力的工作。
早在2004年,我还是一个初级程序员,工作在一家有线电视公司,在一个大型团队中开发财务和供销系统。跟所有的大型系统一样,这个系统由很多的相对独立的模块组成,分别由一些个人或小团队负责。其中模拟电视和数字电视的财务和供销系统几乎完全独立,分别由两个团队开发。
模拟电视开发组决定在早期的微软Biztalk平台上开发他们的系统。由这个公司的4个小伙和微软的一个团队共同开发,并负责产品环境的运行。他们看起来真的工作的十分辛苦和努力。你经常能看到他们加班到深夜或周末加班。每个人都会随时放下手中的活儿来解决正式环境中突现的问题,经常会在一张桌子前一群人围绕着一个小伙,各自说出自己的见解,讨论什么地方错了,应该如何修正。工作气氛永远是热火朝天,每个人都能看到这些——即使只是经过瞟一眼,不仅仅从整个团队讲,而是他们每个人都真的真的工作的很努力。
数字电视供销系统开发团队却是完全的不同。代码几乎是由一个家伙写的,我们就叫他大卫吧。我是一个初级程序员,在团队里做维护工作。起初我在理解他的代码时遇到了很大的麻烦。他的代码里没有很长的过程,通常我的代码会把很多操作放到一起,相反,他的代码里有大量的很小的类文件和只有几行代码的小方法。好几个同事都抱怨大卫把代码搞的过度复杂了。但大卫耐心教导我,建议我去读几本面向对象编程的书籍。他给我讲设计模式,SOLID编程原则,单元测试等知识。很快,我对他的代码开始有了理解,我越研究他的代码,越欣赏这些程序中优雅的设计。这些代码放到产品环境中非常好用,运行稳定的干着它们的工作。这些代码修改起来也相当简单,因此,一些新功能的增加变得轻松容易。单元测试保证了大部分的bug都阻挡到了正式环境之外。
这些做法产生的结果就是,我们看起来完全不是在十分努力的工作。我们5点半准时下班,周末从来没有加过班,我们从来没有发生过一大群人围绕着一个人数小时的讨论正式环境中的错误是怎么发生的场景。在外人看来,我们肯定是被分配了一件相对容易的任务。但事实上,需求都是十分相似的,我们只是更好的设计和实现了这个系统,有更好的支持系统基础架构,特别是单元测试。
管理部门宣称他们要根据员工的工作表现涨薪。当轮到老板跟我谈话时,老板说只给那些工作真的努力的员工涨工资才显的公平。而我们的团队看起来对公司发展的好坏并不太在意——跟那些放弃了自己的晚上和周末的英雄们相比。
这家公司是一个稀有的实验室,你可以将好的软件设计和坏的软件设计、好的团队特征和不好的团队特征的影响效果做一个直接的对比观察。大多数的公司里不可能提供这种比较的机会。你很难说这些挥汗如雨、工作到深夜和周末、坚持冲在灭火第一线的小伙们是为了开发一个真的非常非常复杂的系统而展示了伟大的付出,还是就是一次失败。除非你有能力提供两个团队来竞争,让他们解决同样的问题,可是哪个公司愿意做这样的事情呢。相反,如何看待那些坐在角落里,朝九晚五,看着像是整天上网读什么东西的程序员呢?是他们善于写出强健稳定的代码吗?还是分配的活儿比其他人容易?在常人的眼里,前一个团队的小伙们是在努力的工作,而第二个不是。努力工作值得赞扬,懒惰可耻,不是吗?
我敢断言,表面上看起来工作很努力通常会是一种失败的信号。在高压下,在一个不断被打搅的环境中,软件开发通常是不能干好的。长时间的工作往往不是一个好的方式。有时解决一个难题的最好的方法是停止思考,出去散散步,或更好的,去睡一个好觉,让潜意识帮你解决。我最喜欢的一本书就是20世纪英国数学界领军人物G. H. Hardy先生写的《A Mathematician’s Apology》。在这本书里,Hardy先生描述他的日常规律:上午4小时的工作,下午看板球比赛。他说一天超过四小时的高强度脑力劳动都是无意义的,也是无效率的。
对于那些管理者们,我想说的是,判断一个人要看结果,要看开发出的软件的好用与否,而不是看他们表现的是如何在努力的工作。很反直觉吧,你其实最好不要坐在这些程序员中间,这样能保证你不受传统的、本能上的评判指标的影响,这样你才能对他们的产出有更好的认识。远程工作是特别有效的一种做法,你只能通常他们的产出来评判他们,而不是省事的观察他们是否8小时都坐在办公桌前对着IDE噼里啪啦的敲着键盘或“热心的”围聚在另外一个人的桌前提供着“有效的”建议。
[英文原文:Are Your Programmers Working Hard, Or Are They Lazy? ]
相关推荐
因此,程序员在编写代码时必须保持高度警惕,对每一个细节都进行仔细检查。 此外,勇于挑战难题也是优秀程序员的特质之一。面对复杂的问题,他们不仅不会退缩,反而会感到兴奋,因为解决这些问题正是他们工作的一大...
### 作一个真正合格程序员的七种素质 在IT行业中,成为一名合格的程序员不仅需要扎实的技术基础,还需要一系列软技能和个人素质。以下是成为一名真正合格程序员所必备的七种关键素质。 #### 1. 团队精神和协作能力...
从菜鸟到牛人,再到更高级别的程序员,每一个层级都对应着不同的技术水平和个人成长阶段。对于中国的程序员而言,在这个过程中不仅有机会接触到前沿的技术知识,还可以参与国内外的交流活动,不断提升自身的技术能力...
成为一个优秀的程序员并非易事,它需要的不仅仅是一两门编程课程的学习。以下是对成为一名好的程序员所必需的关键要素的详细解释: 首先,扎实的基础知识是程序员的基石。这包括理解计算机科学的基本概念,如数据...
一个好的程序员不仅需要技术能力,还需要与人沟通和理解客户需求的能力。从提供的文章内容来看,程序员对开发工作的思考主要涉及以下几个方面: 1. 深层挖掘客户需求:程序员不应仅限于完成任务本身,而应该深入...
这个故事向我们展示了一个中专生如何通过不懈努力和对技术的热爱,克服困难,最终成为一名程序员的历程。这个过程中的挫折、挑战和坚持,都是他成长的烙印,也是每一个程序员在成长道路上可能遇到的缩影。这个故事...
- 通过简洁的语言概括汇报的主要内容,以便让听众对接下来的内容有一个大致了解。 2. **工作成就**: - **案例展示**:通过具体案例展示项目成果,包括技术方案、实现过程以及最终效果。 - **数据支持**:利用...
因为学校不好也就没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了,大一开学前的假期我就开始了学习,记得我买的第一本书是《计算机基础DOS3.0》,大家别吓着了,其实当时已经普及了DOS6.22了...
综上所述,通过分析这篇文章,我们可以了解到一个程序员从毕业到踏入职场初期所经历的一系列过程,包括选择职业方向、面对就业市场的挑战、解决实际问题的方法以及在职业生涯起步阶段的生活状态等。这些内容不仅对于...
从1.5K到18K,一个程序员的5年成长之路 《从1.5K到18K,一个程序员的5年成长之路》是一篇励志的博文,讲述了一个程序员从基础薄弱到入职心仪公司的5年成长经历。本文的作者通过分享自己的成长经历,希望能够激励...
这些文章包括普通的,有名的的程序员的经历,还有一些让人深思的程序员问题, 我把它们分成奋斗篇,中国篇,外国篇,反思篇,如果你想进入程序设计的世界,这 些文章应该能给你一些启示,也一定能给你一定的鼓励! 整理者: ...
自学编程是很多渴望进入IT行业的朋友们的一个必经之路,它不仅仅是学习一种技能,更是一种对逻辑思维、耐心、好奇心和自学能力的考验。在自学之前,有几个关键的问题需要先进行自我评估: 1. 是否具有较强的逻辑和...
“突然认识到一个人的力量是多么渺小,一个人的力量是有限的。”这表明了程序员开始意识到团队合作的重要性,并愿意为此做出贡献。 五、架构设计:当程序员积累了一定的工作经验后,他们开始从更高层次上考虑问题,...
总结来看,作者的述职报告不仅为我们提供了一个程序员职业发展的范本,更通过个人的成长经历,展示了程序员如何在技术追求中不断进步,在职业生涯中不断超越自我。这份报告的价值在于它为程序员和对技术感兴趣的人们...
相比于程序员,IT培训师的工作压力较小,职业稳定性更高,且没有明显的年龄限制,是一个较为理想的职业发展方向。当然,转型过程中也需要考虑自身的优势和不足,例如接受必要的培训,提升教学技能等。 #### 转型...
### 一个程序员成长的六个阶段详解 #### 第一阶段:掌握基础编程语言 在这个初始阶段,程序员主要聚焦于掌握一种编程语言的基础语法和结构。这一阶段相当于武术中的基础训练,如学习基本动作和套路,目的是为了在...
例如,一个专注于后端开发的程序员可能会成长为一名优秀的系统架构师,负责整个系统的结构设计和技术选型等重要工作。 #### 二、项目管理路线 对于那些具备一定技术基础同时又善于沟通协调的程序员而言,转型成为...