这篇文章旨在提供这样的指导。我有三个目标。
第一个目标是回顾过去:总结我们过去已经取得的经验。这些经验是我们理解的基础。它们将作为判断其他不熟悉问题的参考点。 第二个目标是展望将来:弄清楚没有经历过的新问题,但可能会在未来的某一天成为你的拦路虎。我希望这些列举的问题能帮助你做好应对的准备,并决定什么是值得追求的。 第三个目标是让你产生情感共鸣,并互相尊重队友正在面对的困难。你可能永远不会经历许多这些前瞻性的困境,尤其如果你不是技术主管和经理的话。同样的,如果你是一个技术主管或经理的话,你可能已经忘记作为一个独立贡献者是什么感觉:你可能会日渐与现实脱节。 以下列表不按优先顺序排列。其中包括其他人告诉我的观察结果:这些事情并非所有都是我直接经历过的。因此,如果你曾和我共事过,请不要认为说的是你而对号入座。事实上,令人惊讶的是,这些故事比比皆是,非常常见。 同样要注意的是,还有一些其他类别的可怕事情是这篇文章所没有囊括的:种族歧视,性别歧视,年龄歧视,骚扰,以及许多其他会导致不友好工作环境的因素。我不打算写这方面的内容,而且这些在其他帖子中已经被详细分析和描述过了。 我写这篇文章的目的是列举在团队中构建软件的本质是什么。如果你觉得我有遗漏的地方,请告诉我。我相信,许多要点,尤其是关于主管和经理的那些,也适用于其他行业。请记住,这些工作职位并非都是不好的:我的下一篇帖子将谈谈它们好的地方。 成为程序员有哪些可怕的地方?对于编写代码和受技术主管或经理指挥的独立贡献者: - 有太多的东西需要学习,却没有足够的时间
- 代码写得很烂
- 当前抽象很糟糕
- 我已经用不同的方式完成了这个
- 这些注释没有任何意义,没有更新
- 没有关于如何构建或它为什么这样工作的文档
- 构建很慢
- 测试很慢
- 测试不切实际
- 没有测试
- 需要大量样板文件、复杂代码或混淆测试的糟糕框架
- 经理要求我为了开发速度牺牲代码质量
- 没有通知就更改依赖
- 本地开发、测试和生产之间的差异
- 陷在一个问题上或调试了很长一段时间
- 我需要修改破坏了的或不切实际并且不是我初写的测试
- 我需要和其他导致bug或生产问题的人一起处理,但他们没有立马积极修复的欲望
- 不得不维护其他人蹩脚的代码或系统,在他们离开之后
- 应该自动化的事情却没有自动化
- 总是被队友和经理打断工作
- 上下文切换成本
- 经理要求我工作于紧急项目
- 代码审查时我的队友们特别混蛋,因为会对我进行人身攻击
- 其他人延迟发布我在工作中所需要的功能
- 其他工程师构建他们的功能或组件太慢
- 大量时间花在了等待上
- 有我不赞同的产品决定
- 刚刚告诉过我要做什么又来说一遍
- 没有自主权
- 没有人尊重我的意见
- 我玩命地完成工作,然后有人告诉我要重做
- 产品经理改变了我的要求,因为对批评过于强烈或因为其他人的反馈反应
成为技术主管有哪些可怕的地方?对于一个写代码也领导独立贡献者小组设计和实施工作的软件工程师而言(同时也被其他人管理): - 生产中的一切总是被打破
- 太多的电子邮件或文档需要阅读和答复
- 工作中未加检查就算通过
- 一切都落后于计划
- 其他人做出了一些我不赞同的技术设计决策,但我没有能力或权力说服他们改变主意
- 实施马虎或实施中忽略了现有的最佳实践
- 出现了计划外的事情:打破假设的迟到的功能需求
- 我真的觉得最后期限和依赖性于我而言压力山大,以致于当我下班回家了以后依然难以放松
- 对每个人的监管比我预想得还要多,不管我如何努力解释细节或文档化计划
- 花费很长时间来发布某个东西却因为非技术原因被废止
- 在时间和质量之间做艰难抉择;故意发布已知的bug到生产中
- 我要对此负责,为什么其他人不用?
- 我没有做到我的责任,但是也没有一个人帮助我
- 我不知道我的经理一整天都做了什么,但我不认为这会有用
- 我不知道产品经理一整天都做了什么,但我不认为这会增加价值
- 就像是团队中的其他工程师试图通过不遵循我们已经协商一致的计划来削弱我;我觉得自己像是一个打小报告的人,当我和他们的经理谈到这个的时候
- 我认为会是我负责的项目被收回,并且因为一些我无法理解的原因交给了其他人
- 在合理的时间内我没有足够的工程师完成项目工作
- 当我说将会有多么困难的时候,大家听不进去并且不愿意减小规模
成为项目经理有哪些可怕的地方?对于那些管理一组软件工程师的人。这个人同时也可以是技术主管,或管理指导报告的技术主管。 - 不恶劣一点很难要求或告诉大家去做事情
- 总是感觉所有事情都很紧急
- 感觉一整天每个人都在向我抱怨
- 没时间看邮件
- 没有时间闲聊,即使我觉得这样太不合群
- 每次回到家都有一种精疲力尽的感觉;有时让人觉得不堪重负;当一些对我有意义的人走进我想谈谈他们的问题时,我是如此的疲惫不堪以致于根本听不进他们的问题
- 任何时候,我的报告中呈现一个或多个这样的状态:
- 正要放弃
- 厌烦团队中的某个人
- 厌烦其他团队中的某个人
- 厌烦自己
- 被人冒犯但理由很充足
- 被人冒犯并且毫无理由
- 有一个正当理由对代码库不满
- 因为完美主义/无效原因而不满代码库
- 对他们的项目不满,想要工作于别的工作,即使他们正在做的是最重要的事情
- 个人问题正影响着他们的幸福感,并且经常导致他们负面作用于周围人的士气
- 无聊;如果有人提供合适工作的话,他们显然会跳槽
- 其他经理的工作是安排会议。他们不写代码;他们唯一能影响人的途径就是用嘴巴说话。所以我拉进了一堆无用的会议中。一堆浪费时间的会议。
- 少写代码;感觉失去了我的优势。有时很难看到我做了什么贡献。我必须改变我的重心。在帮助他人变得更有效率中寻找满足感让人感觉不自然。
- 没有做重要的技术决定从而导致事情严重出错
- 项目将落后或失败,因为我委托错了人
- 其他经理在政治上暗中陷害我
- 我最大的问题是要保密,因此我不能要求任何支持或建议
- 不知道CTO / VP做什么;他们似乎并不能增加任何价值;他们会问一些无知的问题并且常常目下无人
- 我的一些最好的工程师将他们的时间浪费在那些无关紧要的项目上,但我不敢去阻止他们,因为我怕这样会把他们推离团队,并导致他们辞职
- 每个人对我是如何管理团队的至少有某一方面是不同意的
|