你的老板可能真的很棒。我在我自己的编程生涯中遇到过几个真心棒的老板,但即使是棒的老板似乎也常常总是不能理解软件开发。
  事实上,我想说的是当涉及到不止编程的几个元素时,大多数软件开发经理都有点目光短浅。
  所以,我编译了一个简短的清单,用来说明关于编程一些让你老板、开发经理、技术大咖等等误解的方面。
  1. 技术债务会拖累项目
  工作在一个满是技术债务的代码库上,像是在烂泥堆中奔跑。起初,在泥浆还不是很厚的时候,勉勉强强走过去还没问题,但当有个 1 米深的时候,你寸步难行了。
  我喜欢的作家之一,《7 Habits of Highly Effective People》的作者,Steven Covey,称之为“P/PC 平衡”或“产量 vs 产能。”
  通常,管理人员和其他非技术性人员在推动生产力的时候,宁愿牺牲质量——像杀掉了下金蛋的鹅一样——从而招致技术债务。
  当然,通过绞拧这只鹅的脖子,威胁它,你或许暂时可以得到更多的蛋,但用不了多少时间,死去的鹅永远不会再产蛋了。
  如果你的老板正遭受着不懂技术债务的痛苦,不知道技术债务是如何正在拖累你的,那么建议你可以给他讲讲《7 Habits of Highly Effective People》中关于P/PC 平衡中技术债务的条款。
  大多数管理人员可能都会看过这本经典的书,所以比起你说写新功能很难是因为代码库太糟糕,还不如说说书中的观点,更容易被他们所理解。
  2. 预估大多是废话
  软件开发中的预估大多是废话。
  这一点,你知我知,甚至团队可怜的项目经理也知——当然,也有可能他不知道,但是他应该知道。
  预估软件开发中的任何事情都是非常非常困难的,因为各种意外会让你防不胜防。
  每一个软件项目,每一项任务都是新的。每次你坐下来写代码,总有一些意想不到的狗屎事情发生。
  但事情是这样。没有人应该为此负责。不是你的错,也不是我的错,不是任何人的错。它是要发生。
  然而,我们依然情不自禁地会去玩这个“预估”游戏。
  “Joe,你建立客户登录页面需要多久?”
  “哦……呃……”随便想了个时间,“2 天……哦等等——”忘了 CYA 加倍。 “——要 4 天。”
  “好吧,那我给你 5 天”。
  “好,那 5 天。”
  还有一个很好的解决办法是把任务分解到足够小的程度,将所有的预估控制在 4 小时以内。
  经验告诉我,半天时间内的预估,通常能让你体面地完成工作。超过这个点,那你是废话了。
  3. 可以立刻或快速完成
  催促专业人士通常是一个糟糕的主意。
  我用我从写代码到现在超过 15 年的时间里,学到了这个道理,所以我知道当我雇用别人做一些事情的时候,如果我催促他们,没准他们会按时完成,但结果将是无用功。
  不幸的是,我发现许多软件开发经理似乎不知道这个普遍真理。不知怎的,他们认为代码可以得既快又好。
  可不要误解我的意思,我也承认是有例外的。有时,你的确可以快速地写出好的代码,但通常而言总是慢工出细活。
  同样不幸的是,大多数程序员,当被告知要快点完成任务的时候,往往会选择走捷径,通过牺牲质量来加快进程。
  更不幸的是,这样的“代码快手”经常被当作英雄称赞,因为他们能够更快地完成任务,因为他们从不推迟或要求更多的时间。
  然而,这些“代码快手”往往会将代码写得乱七八糟,给其他人留下一连串的技术债务。
  如果你正在打交道的开发经理不明白,快与好之间的关系,那么你好拿出一些统计数据,以说明后期修复 bug 比前期预防要耗费更高的成本。
  组织越大,以及涉及的公事程序越繁琐,那么快速完成任务比正确完成任务的终成本会越高。
  (对于这个问题的经典书籍——《人月神话》。)
  4. 有的开发人员实际上是在帮倒忙
  有一个事实是,我们都碰到过那种对团队弊大于利的程序员。
  不同的程序员,他们的软件开发领域能力和技能水平有着巨大的差异。
  事实上,有些软件开发人员糟糕到他们在工作中写的每行代码都是在浪费公司的时间和资源。
  这种类型的开发人员也许应该付钱给公司,而不是公司付给他钱。
  这对你而言可能是显而易见的,但对老板却不尽然。比如说,在你看来,可能 Joe 是一个彻底的失败者,是需要被解雇的,因为他只会干些“点金成石”的蠢事。所有他接触的东西都变成了没用的“石头”。
  但是如果你的老板不明白团队中有这些人比没有更糟,那你能做些什么?
  好吧,大多数软件开发人员都怕自己被认为是一个爱搬弄是非打小报告的人——我完全理解。
  但是……你必须这么做。这是对的。如果某人确实是团队中的害虫,那么让管理人员知道这一点也是你的份内事。
  我知道这将会令你陷入不舒服的处境,但是如果你不报告,那你不是称职的程序员。你会成为杀死项目的帮凶。
  至于所谓的报告,只要谨慎措辞和给一些提示可以。
  比如你可以这么说:
  “嘿,我不喜欢做这种事情,但我觉得,如果我是你的话,我会想知道是否有人直接妨碍了团队。所以,我觉得这是我的责任来告诉你一些我一直在观察的东西。
  ……
  当然,这些都只是我的观察,所以请和其他团队成员商量一下,根据你自己的经验来判断。”
  或者,如果你也可以使用这种不那么婉转的方式:
  “嘿!Joe 很菜。他写代码实在是太慢了。事实上,他可取之处是他的慢,因为自从他来了之后,项目基本上只能以蜗牛的速度前进。你再不正确了解他晚了。”
  5. 更好的设备是你可以投资的便宜的生产力之一
  我非常讨厌程序员告诉我——他们的小气鬼老板不给他们配备第二个显示器,或者让他们用的是已经 5 岁高龄的电脑。
  老实说,我真心不理解为什么有的软件开发经理不同意为那些 8k+ 美元的程序员花费 2k 美元改善硬件——这是很划算的投资。
  老旧的硬件装备让程序员真心很懊恼,很烦躁!
  每当有程序员抱怨这种工作情况时,我通常会建议他们另谋高,因为这种老板的愚蠢恐怕无药可治。
  什么都别说,我告诉你:
  好的设备能让软件开发人员多干一小时的活,让开发人员更有生产力。即使只有我说的数值一半的量,加起来的总时间也不会少。
  如果算一年 250 个工作日,那么是 250×$35 美元=$8750。即使你砍去一半或四分之一,这依然是个不错的投资。
  如果你的老板不懂这个道理,那么老实说,我不认为你能有什么办法。如果你真心喜欢你现在的工作,那么只能自己给自己投资了。