这些哭笑不得的情景,每个程序员都可能面对

每个程序员都经历过项目的洗礼,你是项目成员还是项目经理?许多年过去了,那些让你哭笑不得的场景是否依然没有改变?几位大牛将大量场景抽象为模式,以其幽默、深刻的洞察力讲述了项目失败的原因,这些原因跟每一位程序员息息相关。

1、工作忙乱是生产率高的表现

优先级总是变化不休,所有事项都是“昨天”就要,总是没有足够的时间交付项目,每个项目都是加急项目,而且加急项目还在不断出现。每个人都忙得焦头烂额……永远如此。

2、所有失败的会议…

你经常开会吗?你们会议得出的大多数决定都是正确的,且可以很干净利落地决策和行动吗?还是会议组织杂乱,新想法层出不穷,主题不断变化,新问题源源不断,但却没有一个有答案。最终,大家在会议结束时安排了额外的会议。——所有失败的会议最终都走上这一步,概莫能外。

3、死鱼就在那儿

从开工起,项目就完全不可能完成目标,项目团队中的大多数人都很清楚这一点,却缄口不言。

很多组织过于看重成功,所以任何表达疑虑的人都不会因为说真话得到任何奖赏。事实上,如果谁在项目的前期阶段就声称死鱼的存在,管理层的第一反应多半如下:

“证明给我们看。给我们证明成功的可能性是零。不要拿以前项目的死鱼经验来唬人。现在的项目不一样。请用严密的数学证明来告诉我们失败无法避免。”

一旦你提出任何缺乏精确证据的东西,就会被指责为软蛋或者是试图逃避辛苦扎实的工作。

4、项目经理是保姆

快偷偷笑吧,这个好难得!

你所在的组织或许已经有一些“保姆型”经理,如果你留意,会发现:不必预约就能见到你的头儿,或者不必在琐碎和令人生厌的管理工作上花费太多时间。周围是开放的氛围,人们畅所欲言,互相学习。这种经理认为培训或进修非常必要,而不是视之为烧钱。他们还会专门安排时间(比如早晨咖啡闲谈或者周五下午阅读探讨),让大家在一起讨论新想法。

5、把灵魂卖给开发语言

合格的专业人士能够根据待解决问题的实际情况来裁剪解决方案,而不是把个人或者团队久经检验的技能强加在问题上。这不是说团队成员不懂应用已知的工具或方法。他们没有把灵魂卖给任何技术,换而言之,一旦出现了好的新思路,他们能够比较优劣,明智地决策。

不把灵魂卖给开发语言的好处是,当技术潮流退去时,你不会在沙滩上裸泳。你可能知道,有些人自诩为开发人员,却很久都没有尝试学习新的编程语言。这些人眼巴巴地搜寻提到自己所用语言——当年也曾风行一时,但现在基本不再使用的编程语言——的工作职位。悲哀就在于,他们把灵魂卖给了那种开发语言。

6、你们为什么不是米开朗基罗

“我给了你凿子,可你为什么不是米开朗基罗?”这样的疑问充斥在迫不及待希望立即提升生产率的组织,以及招聘时重视应聘者的薪水要求而非所掌握技能的组织。热切人人都是米开朗基罗的组织内,架子上总是堆满了各种工具。

没错,工具是有用的,在合适的人手中它们能大幅提升生产率,还可以完成那些本来无法完成的任务。但是,工具的构造者会告诉你,最关键的是,拥有对应的技能来使用工具。所谓凿子,在米开朗基罗拿起它之前,只是拥有锋利边缘的铁器而已。

7、影评人

影评人是团队成员或者公司内部的旁观者,他们认为自己对项目的贡献在于,指出问题所在或者将会出现问题的地方,至于解决问题,那不是自己的职责。

并不是所有评论项目的人都是“影评人”,重要的区别在于选择的时机不同。如果对项目的成败负有责任感,人们一旦发现事情做得不对,或者可以做得更好,就会毫无顾忌地讲出来。他们会走到他们认为可以发挥作用的人面前,讲出自己的想法。他们尽可能及时地行动,因为他们知道时间总是有限的,纠正措施应该越早采取越好。这些人不是“影评人”,他们是跟你携手并肩的“电影制片人”。他们知道自己和项目是一损俱损的,因此他们每天都会把问题揽在自己身上,以增加成功把握。

而“影评人”往往到“电影”结束,或者快要结束的时候才参与进来,此时已经没有足够的时间来采取纠正措施。

8、沉默即同意

利益相关方无法区分真正的赞同和屈从的沉默。承诺被误解的情形通常是:一方表达了需求,然后另一方点头示意明白。前者把这种情形理解为承诺:“我告诉他必须在12 月31 号以前完成,这非常重要。”后者则视为痴人说梦:“当然,他希望我在年底完成,但那不可能。”通常,提要求的人更有权力,而且他会依据法律上的格言“沉默即同意”来设定自己的期望。如果没有对这样的人物说“不”,就相当于在说“是”。

9、稻草人

“客户只有看到了系统,才知道自己真正想要什么……肯定不是那个系统。”

稻草人模型是一种需求钓饵。你给客户一个激发想法的东西,试探出他们的好恶。这些模型都是快速完成的,而且因为它们不保证正确,所以不必花太多精力。由客户来评审解决方案——比如说,“选定区域销售主页”界面——的实物模型、原型或者故事画板。用这些东西模拟未来要交付的软件,作为回报,客户带你走向真正的需求。

最好的分析师不会问:“你们想要什么?”他们意识到这种问题通常会令人不快。人们讨厌对着一张白纸设想答案,但乐意批评已经写在纸上的答案。

10、贪多求全

组织想要贪多求全,就会影响速度,最终导致净收益降低。但是那种诱惑可能是无法抵抗的……

承担超出最大能力范围的工作是降低速度的罪魁祸首。你大概从未见过有人如此坦率地指出数量和速度之间的关系,因为说出来绝对是令人不快的。正因为大家无视这个问题,所以如此多的组织会为了完成大量的工作而让自己慢到几乎动不了。如果他们暂停下来,从麦麸中挑出麦粒,就能明白停滞的原因是没价值的麦麸太多了。

11、坏消息

在组织里,坏消息不能准确向上传达。

12、把坏消息埋在心底

许多企业文化都会传达一种信号:谁发现了杂乱不堪的现象,谁就得负责清理。另外,指出问题,却没有立刻提出改进措施——这会被认为是在抱怨。而在很多组织里面,抱怨者的职业前景相当有限。

13、记者

记者是指这样的项目经理,他们认为,准确报告项目的情况与保证项目成功是两个目标。

想一想记者报道飞机失事的情景。记者觉得自己有责任准确地报道哪架飞机失事了,发生的时间地点,飞机上有多少人,是否有人生还,但他不会因为没有阻止飞机的失事而觉得内疚。那不是他的责任。

记者型项目经理也同样如此。他们的报告清晰、准确、细致,可以列为范本。他们清楚地知道“订单管理”子系统延迟多长时间,偏离关键路径多少天,这项延迟对依赖它的后继任务有什么影响。但是他们忽略了非常重要的事情:这个职位存在的意义,是要保证项目有个圆满结局。

14、数据质量

数据质量往往异常低劣。很遗憾,常见解法竟然是寻找更好的软件来处理它。

数据库软件的质量高出它所处理的数据的质量,这并不罕见,尽管对最终用户来说,系统的质量受制于两者之中更差的那个。各家公司的数据库里面都堆满了不准确的,以及过期或不完整的信息。问题就像鼻子长在脸上一样明显,但人很难看到自己的鼻子。即便每个人都能看出其他人的数据有问题,公司也很难去直面自己的数据质量问题。相反,公司看到的总是软件与数据混在一起的问题。因为软件总是比数据(数据量大得可怕)容易修复,所以公司乐意修复或者更新软件。

这两种做法都没有意义,因为我们要讨论的关键问题不是“为什么我们不应该从软件动手”,而是“为什么明知不是软件的问题,我们仍然从软件动手”。

15、好想法不会很快被接受

更新、更好并不足以保证想法能立刻被接受,接受新想法需要时间。组织会抗拒变化,或者延长决策期,以推迟变化。但是发明和支持更好想法的人可能备受打击,因为看到自己的建议被人忽略,或者被翻来覆去地考量。在军事上,反反复复的思考被称为“慢摇”。在做项目的这些年里,我们看到几乎每一个新出现的好想法都经历过“慢摇”(至少在短时间内是这样的)。举个例子,即使在像软件这种应该是高速发展的行业里面,一些今天已经被广为接受的最佳实践也花了差不多20 年时间才被接受。

经典推荐

作者:Tom Demarco等

译者:余晟 金明

书号:978-7-115-39130-8

定价:49

页数:207

第19届Jolt大奖获奖作品

《人件》作者又一力作

入木三分刻画软件项目众生图

“只要经历过一两个软件项目的磨练,就能从书中找出许多熟悉的模式,也会从大多数模式中获益。”

——Joel Spolsky,《软件随想录》作者

“作者兼具十足的幽默感和深刻的洞察力。本书清楚地讲述了项目因何而失败,有何补救措施,并以极为友善且易于接受的方式提出了切实可行的建议。”

——Warren McFarland,哈佛商学院教授

“对于任何一位曾经在组织里面从事过项目工作的人来说,86个项目模式熟悉得令人心惊。幸运的是,其中有一些模式是良性的,应该给予鼓励。然而悲哀的是,剩下的绝大多数模式不仅仅令人心灰意冷,而且它们对生产率、质量和项目团队士气的破坏程度令人瞠目结舌。”

——Ed Yourdon,《死亡之旅》作者

“这本《项目百态》就是关于项目管理的实话集……读这样一本书,你会笑,更多的时候你会摇头苦笑,甚至如芒在背。”

——熊节,ThoughtWorks中国公司首席咨询师

时间: 2024-10-07 02:04:37

这些哭笑不得的情景,每个程序员都可能面对的相关文章

程序员都应该知道的福利

眼下正是年后跳槽的黄金时期,博客园里的大牛小牛拿了去年的年终奖后,有些肯定想给自己加点工资.博客园里的大牛小牛都是我们中国软件业的精英,跳 槽的时候肯定手里握着好几个,不知道选择哪家.先不管工作的内容和前途,就工作本身的待遇,我们还是可以比较的. HR是专门负责谈薪资的,当我们跟HR讨价还价的时候 HR会介绍公司有的福利,而回避公司没有的福利.作为程序员,我们一定要对跟我们利益息息相关的各种福利细节了如指掌. 重要的福利都要跟HR询问清楚,通过其他途径了解公司的每项福利. 阅读目录 工资每个月多

StackOverflow程序员推荐:每个程序员都应读的30本书

“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西.” 很多程序员响应,他们在推荐时也写下自己的评语.以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书.其实除了前10本之外,推荐数前30左右的书籍都算经典,伯乐在线整理编译这个问答贴,同时摘译部分推荐人的评语.下面就按照各本书的推荐数排列. 1. <代码大全>史蒂夫·迈克康奈尔 推荐数:1684 “优秀的编程实践的百科全书,&l

每个程序员都应该了解的 CPU 高速缓存

每个程序员都应该了解的 CPU 高速缓存 英文原文:Memory part 2: CPU caches 来源:oschina [编者按:这是Ulrich Drepper写“程序员都该知道存储器”的第二部.那些没有读过第一部 的读者可能希望从这一部开始.这本书写的非常好,并且感谢Ulrich授权我们出版. 一点说明:书籍出版时可能会有一些印刷错误,如果你发现,并且想让它在后续的出版中更正,请将意见发邮件到[email protected] ,我们一定会更正,并反馈给Ulrich的文档副本,别的读者

程序员都是有强迫症的

昨天晚上,为了完成实验室任务,一直写代码,写到两点多,然后总算是写完了.但是程序员都知道,调试的过程通常是最复杂的,因为可能遇到各种奇葩的错误,而错误产生的原因多种多样,或者是逻辑错误,或者是输入错误,或者是访问错误...各种各样的错误,毫无头绪..... 程序员大都有强迫症,尤其在编程这件事情上.为了改正程序中的错误,可以熬夜,直到找到错误并改正错误. 找到错误本身就有挑战,因为有些错误是逻辑上的错误,这种错误通常不易发现,只是结果和预期结果不一样,这时候就需要从头去思考整个流程,判断每一步是

每个程序员都可能犯过的10个错误

本文列出的10个错误,并不局限于C#.Java.Delphi.JavaScript等——几乎涵盖了所有的编程语言.是不是大吹大擂,欢迎各位品鉴…… 1.面向编译器写代码,而不是面向用户 当人们使用编译器创建自己的App时,在把自己的想法诉诸于机器代码的过程中,常常会将那些可以使得编程更为简单却又冗长的语法遗忘于脑后.无论你使用的是单字母的标识符还是更易于人脑理解的标识符,对于编译器而言,毫无区别.编译器不在乎你写的是否是优化表达式,也不在乎你是否用括号封装了子表达式.编译器要做的就是将这些人脑可

每个程序员都应该了解的内存知识

每个程序员都应该了解的内存知识 英文原文:lwn.net,翻译:开源中国 [编辑的话: Ulrich Drepper最近问我们,是不是有兴趣发表一篇他写的内存方面的长文.我们不用看太多就已经知道,LWN的读者们会喜欢这篇文章的.内存的使用常常是软件性能的决定性因子,而如何避免内存瓶颈的好文章却不好找.这篇文章应该会有所帮助. 他的原文很长,超过100页.我们把它分成了7篇,每隔一到两周发表一篇.7篇发完后,Ulrich会把全文发出来. 对原文重新格式化是个很有挑战性的工作,但愿结果会不错吧.为了

转:哪本书是对程序员最有影响、每个程序员都该阅读的书?

哪本书是对程序员最有影响.每个程序员都该阅读的书? 国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响.每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加),其中最火的一本书<Code Complete>被顶了1306次.如果你是个程序员,你一定有兴趣看看这些书里你都看过几本,如果你一本没看过的话,我也不好说什么,也许你是个天才,但我相信大多数人都知道,你在学校里根本学不到什么真正的工作中需要的知

国外程序员推荐:每个程序员都应该读的非编程书

1. <银河系漫游指南>by Douglas Adams 2. <人性的弱点> by Dale Carnegie 3. <别逗了,费曼先生> 4. <一九八四> by George Orwell 5. <哥德尔.艾舍尔.巴赫:集异璧之大成> by Douglas Hofstadter 6. <设计心理学> by Donald A. Norman 7. <搞定:无压工作的艺术>by David Allen 8. <人月

每一个程序员都应当了解的11句话

每一个程序员都应当了解的11句话,你最同意哪一句? 1. 技术只是解决问题的选择,而不是解决问题的根本 我们可以因为掌握了最新的 JavaScript 框架 ahem.Angular 的 IoC 容器技术或者某些编程语言甚至操作系统而欢欣雀跃,但是这些东西并不是作为程序员的我们用来解决问题的根本——它们只是用于帮助我们解决问题的简单工具. 我们必须非常谨慎,不要对某项正好喜欢或者正好很火的特定技术走火入魔.否则,我们将进入这样的思维怪圈:把掌握的那项技术比做是锤子,在思考问题时,会自然的把所有的