追求完美是一种可贵的精神,完美主义也历来被认为是一种优秀的品格。可是在项目中,完美主义也是一种错,虽然是一种“美丽的错误”。项目讲求平衡,要的是合格,而不是优秀;要的是70分,而不是100分!

1、两极分化的程序员

相信在很多人眼里,程序员都是工作一丝不苟、对代码精雕细琢、精益求精的人。瞧,他们在电脑前面一坐就是大半天,如果不是追求完美之人,谁能这样坐得住板凳?

可是依我所见,在“追求完美”这个问题上,程序员其实是严重的两极分化。有一部分程序员确实对自己的代码要求很高,他们在编程时,非常注意逻辑是否严谨、运行效率高不高、代码是不是优雅,经常进行代码重构与优化。他们就像有洁癖农村老太,整天扫把不离手,在哪里看到不顺眼的代码,就要改到哪里,如果让他来维护一个系统,多半最后会让他把整个系统的代码全部重构或者重写了一遍。他们是真正的完美主义者。

还有一部分人,他们写代码似乎只是为了完成任务。他们对自己负责的功能,缺乏计划和设计的过程,想到哪里就写到哪里,最后按下F5,编译通过,欧耶!他们甚至不愿意多点一下自己创建的按钮,更加不会在一个身份证号码文本框中输入一个电话号码来测试一下,最关键的是终于可以向经理交差了,至于代码中多少隐藏的问题,以后再说吧。这让我想起了程序员部落酋长Joel所说的,他们编写的程序“看上去像是给狗吃的早餐,只经狗能吃饱就行了,何必再花钱让食物变得色得味俱全呢?”我们甚至可以想象一下,他们的电脑屏幕上是不是铺满了灰尘,键盘缝里是不是塞满了头发和食物碎屑,电脑桌面的图标是不是如七彩拼图一般,让人眼花缭乱。

后一类程序员,在数量上似乎占据绝对的优势,对于一个不擅于控制项目质量的项目经理来说,他们的代码最终会成为项目的噩梦。系统一旦投入运行,虫子就会像美国恐怖片中的外星生物一样,源源不断的从鼻孔、嘴巴和耳朵缝里冒出来。

第二种程序员这种低标准低要求、随随便便的做法,很容易被识别出来是一种不好的倾向,而完美主义不是这样,因为我们从小就被教导要追求完美,完美主义一般被认为是一种优秀的品格,是每个人应追求的目标。

然而完美主义虽然听上去不错,却并不适合于项目,因为项目的目标是用最少的成本来完成项目,让各方满意,而不是制造一个完美无瑕的产品,以证明个人或公司的能力。显然,完美主义更适合于个人能力的修炼,或者一项没有限期出成果的科学研究,在项目中,完美主义也是一种错,虽然是一种“美丽的错误”。

完美主义者和随随便便的人,这两种程序员都不是项目的最佳人选,他们是恰好是两个相反的极端,如果让他们负责项目,估计就像玩跷跷板一样,要么压到地底下,要么翘到天空上。但是项目经不起这样的折腾,项目中需要有平衡能力的人,他们很好的把握追求完美的“度”,使得软件功能既能满足客户的应用需求,又不至于要花费过多的精力。可惜的是,这种程序员实在是不多,因为度的把握对程序员而言,确实不是一件容易的事情。

2、完美不等于质量100分

程序员心中的完美和项目经理心中的完美并不是一回事,因为两者关注中心不一样。程序员关注的是自己的软件功能本身,力争将软件产品质量做到最好,因此程序员的完美实际上是质量的完美。

而项目经理眼中,看到的是整个项目,包括质量、进度、成本、范围、风险等方方面面,需要进行平衡,花最少的成本、用最少的时间、达到各方满意、实现项目验收,这就是完美。单纯产品质量一流,而进度拖延、成本超支,这显然不是什么完美的项目。

其实现代质量管理理论普遍认为,质量并不是越高越好。事实上,市场已经对此无数次给出了证明。很多人骂过微软公司的产品烂,据说乔布斯也曾经大骂windows是坨屎,但微软公司后来却成了软件行业的霸主。

ISO9000对质量的权威定义是:一组固有特性满足要求的程度。看到了吧,是满足,而不是超出,这非常重要。不要少,少了通不过;但也不用多,多了便是浪费。我们需要的不是100分的质量,甚至也不是一流的质量,而只是满足要求的质量。

在项目管理中有一个名词叫“镀金”,也就是在产品达到客户要求后,再多做一些额外的工作,让产品更加完美,以进一步提升客户满意度,这在PMBok中是一种被明确禁止的行为。软件质量100分,在项目中不但是一种巨大的浪费,而且几乎是一个不可达到的目标, 只会让项目不堪重负,最后陷入灾难的境地。

3、合格就是完美

追求完美本身并没有错,但如果上升到完美主义,时时处处要做到最好,却不一定符合当时当地的条件限制。一个“最”字会害死人,因为“没有最好,只有更好”,如果一味追求更好,其结果可能就如陷入焦油坑的怪兽一般,无法自拔。在这样一个讲求效率的时代,完美主义更是可能会造成机会的丧失。因此,要保持追求完美的心,但又要懂得权衡,不要陷入极端的完美主义的陷阱。

要完美不要完美主义,本质上是一个度的问题,项目应讲求平衡,避免极端。学过项目管理理论的人都知道,项目管理中有一个“铁三角”,也就是在一定的项目范围的约束下,成本、进度和质量构成三角形的三个端点,为了让三角形面积保持不变,任何一个端点的变动,都会引起其他一个或两个端点的同步变动。这个铁三角本质上就是一种平衡和制约的关系,而完美主义,则只单纯的强调质量,而忽略了其它方面的因素,这显然是一种极端的行为。

那项目中质量的“度”倒底是什么呢?其实就“合格”二字。合格意味着被认可,却不需要达到优秀的代价。客户认可、领导高兴、员工轻松,这不就是完美吗?可以说项目中没有最好,只有合格,合格就是完美。

4、“70分主义”

从小老师和书本就教育我们要追求完美,考试要考100分,90分都嫌太低,那70分还拿得出手吗?

其实70分不低了,要知道现在大学生的口号是“60分万岁,多一分浪费,少一分作废”。当然这种口号容易被批评为不思进取,但万物存在就有其合理的一面,“60分万岁”也是事出有因。

在学习方面,我是主张完美主义的,前提是学的是个人感兴趣、有用的、切合实际的东西,可以我们大学的大部分课程,基本上是背道而驰。上课、考试,无非是为了不挂科,顺利拿到毕业证和学位证。这种情况下,60分万岁也就容易理解了。何必要考100分,节省下来的时间,完全可以用来学习自己更感兴趣东西。

从某种程度来说,做项目也是一种考试:有考试内容(项目范围)、考试时间(进度要求),还有及格线(质量要求和验收标准)。项目的及格线如果用分数来表示,也是60分,既然60分就够了,为什么还果提出“70分主义”呢?其实很简单,因为要想刚好考60分,实在太不容易了,搞不好就会弄个不及格。所以我提出“70分主义”,一种超越完美主义的新主义,力求在及格和完美之间达到平衡。

项目如果以70分为目标,适当留出缓冲,就可以做到游刃有余,更容易把控。70分意味着已经达到客户的验收要求,已经能投入正常使用,但可能存在一些影响较小的Bug,个别页面效率有待提升,个别操作不是很顺手,系统扩展性一般,代码组织有等进一步优化……这些不完美的地方,就让他们在那里待着吧,毕竟客户已经觉得已经达到目标,何苦自己跟自己较劲,非要达到100分呢?早验收、早收钱,这才是王道!吃饭只用7分饱,项目也是只要70分,“70分万岁”!

程序员加油站——完美主义也是一种错相关推荐

  1. 从程序员到项目经理(七):程序员加油站 -- 完美主义也是一种错

    追求完美是一种可贵的精神,完美主义也历来被认为是一种优秀的品格.可是在项目中,完美主义也是一种错,虽然是一种"美丽的错误".项目讲求平衡,要的是合格,而不是优秀:要的是70分,而不 ...

  2. 由级别和性格特征将程序员分类 ---看看你属于哪一种

    由级别和性格特征将程序员分类 ---看看你属于哪一种 想写这篇文章已经很久了,一直没有时间,今天终于闲下来,于是有了这篇文章,本文只代表本人的个人观点,可能不全面或者有偏差,请不要对号入座或者钻牛角尖 ...

  3. 开发过程中程序员非常烦恼的问题,3种内存泄漏的解决方案

    程序员非常蛋疼问题,3种内存泄漏的解决方案 1. 内存池的实现以及原理 2. 为内存加上hook,精准内存定位泄露 3. gc的实现方案 视频讲解如下,点击观看: 开发过程中程序员非常烦恼的问题,3种 ...

  4. 程序员的专业主义精神——评《程序员的职业素养》

    专业主义 1.精进技艺,保持时间上的投入,保持关注 2.负责,为制造的bug负责,而不是抱着"人非圣贤孰能无过"的态度 充足的测试用例->对修改代码没有恐惧->经常性的 ...

  5. Java程序员之完美代码

    Java程序员如何写出"优美"代码,请往下看: 1.注释尽可能全面 对于方法的注释应该包含详细的入参和结果说明,有异常抛出的情况也要详细叙述:类的注释应该包含类的功能说明.作者和修 ...

  6. 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群【转载】

    "丛林法则"从未离我们远去,"适者生存"仍然是支配社会运行的一般法则.对于一群社会性动物而言,所谓"适者",不只是体格的强壮,更重要的是能参 ...

  7. 从程序员到项目经理(十):程序员加油站 --要执着但不要固执

    程序员的成长之路,没有捷径可走,只有坚持不懈的执着追求,才能成为一名优秀的程序员.执着诚然可贵,但如果不能经常自省,则有可能会陷入固执的境地. 1.程序员需要一点执着精神 <士兵突击>中许 ...

  8. 从程序员到项目经理(九):程序员加油站 -- 再牛也要合群

    "丛林法则"从未离我们远去,"适者生存"仍然是支配社会运行的一般法则.对于一群社会性动物而言,所谓"适者",不只是体格的强壮,更重要的是能参 ...

  9. 从程序员到项目经理(六):程序员加油站 -- 懂电脑更要懂人脑

    说起程序员三个字,我觉得既骄傲又可悲.骄傲的是,我们曾经是时代骄子,是一群真正改变世界的人:可悲的是,我们很多致力于改变世界的程序员,却生活在自己的世界里,无法自拔,成为了继"书呆子&quo ...

最新文章

  1. CSS3 稳固而知新: 居中
  2. iPad不是大号的iPod touch
  3. 纯数学教程 Page 203 例XLI (1)
  4. python代码示例百度云-python利用百度云接口实现车牌识别的示例
  5. 惊了!7 行代码优雅地实现 Excel 文件生成下载功能
  6. js怎么获取扫码枪条码_生产扫码计件解决方案
  7. 人工智障学习笔记——机器学习(4)支持向量机
  8. 利用脚本设置本机IP地址
  9. 【本人秃顶程序员】SpringMVC工作原理详解
  10. Android 6.0谷歌卡刷包,卡刷包走起:谷歌Nexus5升级安卓6.0/Android M教程
  11. DirectX修复工具使用技巧之一——解除被占用的文件,完整修复C++
  12. 发光学类毕业论文文献包含哪些?
  13. 华为任正非《一江春水向东流》读后感
  14. NVIDIA CUDA各版本下载链接(更新至2019-12-11,包含最新10.2版本)
  15. 2021会是怎样的一年
  16. 计算机word表格线设置在哪里,word表格文字显示不全_word表格怎么设置显示最后一行线?_word表格怎么加一行...
  17. 网页表格线框html,网页表格中单元格线条及边框的设置
  18. QMetaObject使用
  19. [转]Magento 2 and 1 Million Products
  20. 错题本 (并查集) acwing 4084.号码牌

热门文章

  1. 《程序是怎样跑起来的》(上、中、下)
  2. name ‘keras_applications‘ is not defined
  3. Anaconda启动一直停留在loading applications解决方法
  4. c语言实用计算器项目,C语言实现简单计算器小项目
  5. Extjs 4.0 textarea 滚动条自动到最低
  6. android m3u8离线播放器,android上实现离线缓存播放加密HLS视频和未加密的HLS视频...
  7. 使用soapUI测试WebService
  8. Android全屏的三种方式
  9. lingo输出解的解释
  10. 华为快应用-web标签无法加载http和https混载的html页面