专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
51好读  ›  专栏  ›  Cocoa开发者社区

程序员、技术领导、管理者各有烦恼,你占了几条

Cocoa开发者社区  · 公众号  · ios  · 2017-06-22 11:32

正文

(点击上方公众号,可快速关注)


编译: 伯乐在线/lostmint

如有好文章投稿,请点击 → 这里了解详情


【伯乐在线注】:本文作者 Brett Slatkin 是在一位在谷歌工作 10 年的程序员,著有《Effective Python:编写高质量Python代码的59个有效方法》。  


我专业从事软件开发工作已超过 10 年的时间,我热爱这份事业,希望有一天我会被人们称呼为老程序员。但这一路走来,我经历了许多可怕的事情,这些事情让我讨厌我的工作。在职业生涯早期,我曾期望有人能给我一份职场指南,这样当遇到之前未曾遇到的事情时,我就不会感到如此的孤单和沮丧。  


从某种意义上说,这篇文章就是那样一份指南。我写这篇文章有三个目的。


一、回顾


辨别出我们以往都曾有过的经历。这些会帮助我们建立一些理解上的共识,可以作为判断其他不熟悉的问题的参考点。


二、展望


辨别出一些你还未经历过的新问题,这些问题有可能在你以后的道路上发生。我希望我列举的这些事项,可以帮助你应对接下来要发生的事情,以及帮助你决定什么才是值得你自己去追求的。


三、帮助你理解你的团队伙伴,相互尊重,理解彼此面临的问题


也许你不具备前瞻性的眼界,尤其当你不是一个技术领导或管理者的时候。同样,如果你是技术领导或者管理者,你或许已忘记当一个程序员是什么感受,无法体会程序员日常的工作状态。我想帮助大家站到同一个立场来看待事情。  


下面列举的事项不是按优先次序排列的。这其中也包括其他人向我讲述的观察结果,并不都是我自己的亲身经历。所以如果你曾与我共事过,请不要认为某个特例就是关于你。令人感到不可思议的是,大家的经历都很相似。  


需要指出的是,还有一些其他类型但这篇文章没有提到的可怕的事情:种族主义、性别歧视、年龄歧视,攻击行为以及许多其他因素导致的敌对的工作环境等。我没有能力去写这方面的话题,你们可以从其他地方找到关于这些话题的深刻的描述和分析。  


我写这篇文章的目的是列举出以下关于团队软件开发的特性。如果你认为我遗漏了什么,请告诉我。我可以想象到,这里面提及的许多点,特别是在技术领导和管理者方面列举的事项,也适用于其他职业。请记住这些角色并不都是只有可怕的经历,我关于这个主题的下篇文章就是讲述好的方面。



软件工程师(程序员)的烦恼


程序员就是写代码的人,受技术领导或者管理者领导。


  • 有太多东西要学但没有足够的时间。

  • 代码写得很烂。

  • 当前的抽象不好。

  • 换做我,我会以不同的方式完成。

  • 注释没有任何意义,也从来不会更新。

  • 没有任何关于这个程序应该如何构建以及它是如何运行的说明。

  • 构建缓慢。

  • 测试缓慢。

  • 测试碎片化。

  • 根本没有测试。

  • 架构很烂,需要大量样本文件、复杂的代码或者混乱的测试。

  • 管理者让我牺牲代码质量来赶上开发进度。

  • 在没有意识到的情况下依赖关系就改变了。

  • 设备、测试和产品因地域而有差异。

  • 纠结于某个问题或者花费很长时间去调试BUG。

  • 我需要去修正碎片化的测试,这个程序最开始并不是我写的。

  • 我需要去修正其他人导致的bug或者产品问题,因为他们没有积极地去马上修正。

  • 需要在某些人离开后维护他蹩脚的代码或者系统。

  • 有些事情应该自动化地完成,但是却没能做到这一点。

  • 被我的队友或者上司打断。

  • 内容切换成本。

  • 我的上司要求我去处理紧急项目。

  • 代码审查时我的队友表现地很混蛋,我感觉这是人身攻击。

  • 其他人没有及时提供一个功能项但我需要它来完成工作

  • 其他的工程师开发功能或组件太慢。

  • 我总要去等待其他人。

  • 有些产品上的决定我不能认同。

  • 我只能让干什么就干什么。

  • 没有自主权。

  • 没有人尊重我的观点。

  • 我非常努力的完成了工作,却被要求重做。

  • 产品经理们改变了对我的要求因为他们过度听取了其他人的批评或反馈。


技术领导的烦恼


技术领导:技术领导在自己写代码的同时还要指导一个小团队程序员的程序设计和实现工作。这些程序员同时还受其他人管理(不是只听技术领导的)


  • 产品的方方面面随时都会出现问题。

  • 太多的邮件和信息要去读和回应。

  • 工作上有疏漏。

  • 一切都落在后面。

  • 其他人正做出我无法认同的技术设计上的决定,但我没有能力和权力来说服他们改变想法。

  • 实现是草率的或者忽视了现存的最佳实践。

  • 事情朝我预期之外的方向发展;之后性能上的要求打破了我之前的预设。

  • 我深切地感受到来自截止日期和从属关系的压力,即使下班在家我都没法放松。

  • 每个人都需要比我预期要多的监督,不管我多努力尝试去解释这个计划的细节和文档。

  • 公开发起一个计划总是遥遥无期,它总被一些非技术性的原因阻挠。

  • 在时间和质量之间做着艰难的抉择。

  • 我很负责任,为什么其他人不能和我一样?

  • 我落后于我职责上的进度,没人有帮我。

  • 我不理解我的上司整天在干什么,但是我觉得他在瞎忙活。

  • 我不理解产品经理整天在干嘛,但是我觉得他在瞎忙活。

  • 我感觉我团队的其他工程师尝试通过不执行我们之前协定好的计划来打击我。当我向他们的管理者谈及此事时感觉自己像是在打小报告。

  • 我认为是我负责的项目被移交给了别人,但我不理解其中的原因。

  • 我的项目团队中没有足够的工程师,以至于这个项目没法以合理的时间完成。

  • 当我说到某件事多难完成时,人们并不听我的,也不愿降低标准。


管理者的烦恼


管理者:管理者管理一个团队的软件工程师,这个人也有可能是一个技术领导,或者技术管理直接向他报告(管理技术领导)


  • 如果不成为一个让人讨厌的人,就很难调动其他人。

  • 似乎随时都处于紧急状态。

  • 每个人都在向我抱怨。

  • 没时间应对邮件。

  • 没时间瞎扯,即使我因为没时间社交而感觉自己像一个让人讨厌的人。

  • 当我回到家我感觉自己很失败,经常有这种想法。当对我很重要的人或者我亲近的人想跟我谈论事情,而我正要去工作,我没时间听他们倾诉,这时我总有深深的挫败感。

  • 在任何时候,我的下属工程师或技术领导总是至少占下面情况中的一条:

    • 想放弃。

    • 对团队中的某人很恼火。

    • 对其他团队的某人很恼火。

    • 对自己很恼火。

    • 以某个理由被某人冒犯。

    • 无理由被冒犯。

    • 因为合理的理由对代码库不满意。

    • 因为吹毛求疵或者无根据的理由对代码库不满意。

    • 对他们的项目不满意,想去做别的,即使他们正做的事情是最重要的。

    • 私人问题影响他们的表现,经常导致他们有消极的反应。

    • 厌倦,很显然如果有合适的机会他们肯定会跳槽。

  • 其他的管理人员的工作就是安排会议。他们不写代码,他们就是靠说来影响事情。所以我被拉进了一堆没用的会议。参加这些会议看起来就是在浪费时间。

  • 代码写得少感觉很差劲。我感觉我正慢慢失去棱角。有时我很难做出成绩。我不得不改变我的价值观。从帮助他们变得更富创造性上寻求满足感感觉很做作。

  • 我将失去做重要决策的机会,事情将朝不好的方向发展。

  • 这个项目就要落后或者失败了因为我把它委托给了错误的人选。

  • 我感觉其他管理者尝试用政策打击我。

  • 我面临的最大问题是信任危机,我无法从其他人那里得到支持和建议。

  • 工程的CTO/VP不知道在干嘛。他们似乎没有贡献任何价值。他们问些无知的问题而且通常很无礼。

  • 我的下属工程师把时间浪费在无关紧要的事情,但是我不敢去阻止他们因为我怕把他们推开,导致他们放弃。

  • 每个人都或多或少不认同我管理团队上的做法。



看完本文有收获?请分享给更多人

关注「伯乐在线」,看更多精选 IT 职场文章