原文:44 engineering management lessons 

作者:Slava Akhmechet 
翻译:Aladdin

译者注:作者是RethinkDB的联合创始人 – 一个开放源码的分布式数据库,旨在帮助开发人员和运营团队使用非结构化数据构建实时应用程序。以下为译文:

欢迎来到工程管理课程。它生动有趣,艰难有益 ,最重要的是它能给你带来全新的技能!以前你认为有用的管理技巧现在可能不灵了。你必须获得一套全新技能,并在这个过程中摆脱一些不良的习惯。接下来提供一个让你入门的小指南。

需要做的

  1. 吸引,培养和留住人才。与工程师交流,尽快整理出问题,然后尽可能的解决这些问题。
  2. 和每个工程师沟通,了解他们紧接着要处理的最重要的问题是什么。
  3. 当开发团队之间无法达成共识时,站出来成为最后的决定者。
  4. 成为信息中心。了解每个工程师在做什么,尽可能的连接团队里的每个人。
  5. 提供行政支持。安排问题,协调发布,确保官僚体系能够正常运转。
  6. 执行行为和绩效标准。开除行为恶劣及表现不佳的员工。

尽量避免

  1. 一个人埋头处理问题并强行制定规则。当你不得不写下一些准则来保证高效的工程开发,这恰恰就是你制定规则权力的终结。
  2. 监督员工的工作质量和数量。软件工程不是装配线。如果你发现自己经常监督,那仅仅是因为你没有吸引到合适的人才,并给予他们正确的激励。

动机和文化

  1. 你是招聘和决定的人。您的团队发生的一切都是您的责任。
  2. 工程是卖方市场:人们为你工作,因为他们相信你。获取他们的才华是你的一种特权。
  3. 权威不是随便就能获得的。它是随着时间的推移,在不断做出正确决定的过程中积累出来的。
  4. 不到万不得已,千万不要做决定。尽可能让团队自己探索想法并作出决定。
  5. 做必要的决定。几乎没有东西能够比一个无法取得突破的团队还要沮丧。
  6. 不要随便否定一个想法。创造一个每个人都觉得能安全共享和探索想法的环境。写代码的员工有很多你不了解的想法。依靠你的团队,你会做出更好的决断。
  7. 建立起关于如何做出良好决定的直觉,这种直觉95%是来自于你和团队的良好关系。多如牛毛的概念框架在如何管理工程团队上并没有太大作用。它们仅仅是让优秀的管理者更优秀,糟糕的管理者更糟糕。

情绪和人的管理

  1. 就像其他的技能一样,在我们的日常文化中,管理常常伴随着威望。威望容易让人分心 – 它常常伴随着决断的轻率和随意。越早跳出威望的陷阱,你就越能专注于自己的工作。
  2. 管理活动也常常招致鄙视。你要做的就是忽略它 ,因为一般认为管理者是无用的人,压根就不了解怎样创建一个成功的人类组织。
  3. 一旦你觉得有问题,你可能是对的。你要做的是避免受外界事物的干扰,不忽略你的感受。
  4. 如果你发现自己正在指责某人,你也有可能做错了。没有人早上醒来就准备把事情搞砸。大多数时候你能通过与人交流感受解决问题。
  5. 大多数人不会轻易分享他们的情绪。和员工多进行些非正式的谈话,梳理工作中可能出错的地方。然后尽可能的修复它。
  6. 你的团队期待你的领导。你应该有勇气站出来说出一些员工不敢说的东西。
  7. 发现和解决你的团队不太注意的文化问题是值得的。敢于说出每个人都应该知道但实际上他们不知道的一些文化习俗。
  8. 雇用行业大牛,并且完全信任他们。按季度或月来评估员工表现,迫不得己可以开除员工。不要每天都评估员工表现,这会让你和他人都会疯掉的。
  9. 大多数智力活动都受潜意识里情绪的干扰。一旦你清楚这些东西,你的管理将会更加高效。

应对打击和冲突

  1. 不要太快做判断,你远没你想象的知道的多。即便你确定你是完全正确的,也请你听完所有人的意见。
  2. 在听完所有人的意见之后,总结他们的观点,争取能让人们说出“谢谢,这正是我想要表达的做法”这样的话来。归纳大家相一致的意见,并说明你从每个人那里学到的东西。然后做出你的决定。
  3. 做出决定后,立马执行。不要让团队把时间浪费在安抚团队内少数持反对意见的人。
  4. 执行过程中,有重要新信息出现,重新召集成员讨论解决方案。
  5. 当碰到有人不接受这些有理有据的决定时,分歧就会演变成冲突。
  6. 大多数冲突的发生是因为人们感觉被忽视。所以你要坐下来问每一个成员的感受,认真听取他们的反馈,然后总结一下他们的回复,并向他们再三确认。大多数时候这样会解决问题。
  7. 如果你在合理的距离内听取了每个人的意见并处理了问题,冲突仍然存在,那么是时候开始一段艰难的谈话了。

困难对话

  1. 尽快开启困难对话。等待只会使情况更糟。
  2. 不要假定或武断的下结论。不要在你心中妖魔化人。永远不要大声苛责,诽谤别人。
  3. 使用非暴力的沟通 – 这是我所知道的最好的方法来批评人们的行为,而不会冒犯他们。它看起来似乎像一个管理潮流,但真的很有用(我保证)。
  4. 有勇气说出你的感受和需要。人们因为表现出自己脆弱的一面而相互吸引,虽然这个做法是被自己排斥。但请记住脆弱性并不是弱点。
  5. 期待人们给予你同样的礼貌。当你陈述你的需要和感觉时,别人的反映让你感觉不舒服,这往往告诉你需要将关注点放在他们身上而不是你自己身上。

不可触碰的底线

  1. 人们会试图试探发现的你的底线。这时你只要知道什么时候该承担责任,什么时候该坚定想法就成功了一半。
  2. 偶尔有人会做得太过火了。当他们这样做时,你必须表明这个底线不能触碰,否则你将失去你在团队里的权威。
  3. 一个类似“你这样做,我感觉不舒服”这样坚定的回答通常就足够了。
  4. 如果你不喜欢他们的所作所为,那就别笑了。敢于表现出你的真实情感。
  5. 如果你总是对同一个人说“你这样做,我感觉不舒服”,那么是时候开除这个人了。
  6. 除非你是一个反社会的人,否则开除人就会很艰难,你会找借口说服自己不要这样做。如果你一直觉得某人并不适合这个岗位,就请你勇敢做你该做的事。
  7. 不要让外界压力迫使你做决定,外界会让你为你的决定负起相应的责任,他们做法无可厚非。自己做的决定就应该承担相应责任。
  8. 相信自己。如果连你自己都认为你在马上的姿态滑稽可笑,显然你是不能领导骑兵的。

如何看待,不要更新了学不动了?

(天啦,有人又要来叨逼叨逼了)

计算机简单也复杂,简单在计算机世界由0和1组成。复杂在从硬件到软件,再到不同领域(网络、操作系统、数据库、桌面软件、BS软件、CS软件、APP软件、人工智能、大数据、五花八门的编程语言),最后到IT领域的不同职业。
我们从更新快到岗位焦虑再到可行的解决路线。

1.更新太快

计算机不管是硬件还是软件更新速度太快,太快了。我们现在用到的技术很多都是非常新的,这个和传统行业比起来天差地别。
技术上过时的软硬件技术很多(暴露年纪的时候到了),例如
CRT显示器、软盘、塞班、Delphi、ASP、PowerBuilder

如果从现代的岗位划分来看的话
前端:前端越来越复杂,工程化成了必然,SPA大行其道,JS通过nodejs也具备了后端能力。
后端:CS架构的软件、桌面软件成了“濒危物种”需求量很小了,BS大行其道,现代后端更偏向架构、算法、业务需求拆分。新兴的编程语言golang在Cloud Native时代成为云端编程语言标准。
运维,除了基础的资产管理、部署、调度、监控,有了现代的业务程序容器(Docker为主)化从而解决环境依赖问题,K8S成为容器编排的实施标准,从而解决容器调度编排问题。
APP:Android和IOS原生开发中的问题产生了, Hybrid App、JsBridge技术,现代更有了微信小程序、快应用的基础框架下层,上层暴露给前端的新兴技术。
测试:在基础的人肉测试上,新兴的编程语言如Golang在语言级别的单元测试上是语言级别支持,在语言级别的单侧保证从而能更好的保证业务层面的测试。
最些年还发展了在CI、CD流程上的集成测试,还有电商的全业务链路的压测(如:从登录到下单)。

2. 岗位的焦虑

现代岗位划分的较为细致,因为没有人什么都能精通,岗位发展也是行业必然的结果。
可悲剧的是就算岗位拆分了还是会让人学不动了。
前端:比如我tm才把VUE学会,又来了微信小程序、快应用规范又是自成一套,React还在暗中观察中。ECMAScript下一波更新就快抵达。
后端:只会“拍簧片”这是我人生道路的瓶颈啊,就是只会某单一的编程语言。停留在语言层面。
运维:程序问题我解决不了啊,我不是背锅侠啊。只会安装、配置不会开发貌似工资上不去啊。
APP:刚和前端打组合Hybrid App、JsBridge技术,前端这到好,小程序、快应用会又出来抢我饭碗了。
测试:日复一日的黑盒功能测试,有点无味呀。

焦虑来自未知的恐惧,觉得自己跟不上趟,又不知道怎么跟上趟。
自己在岗位领域深入底层原理还是全面技术发展,不知道怎么搞。

3. 兄弟扶你起来,带你整

有基本盘才不会慌,才不会怕,那用什么立本呢?
我们继续从岗位上去看

前端:什么MVVM、SPA、VUE、React他们的本质是什么?本质是HTML、CSS、JavaScript(ECMAScript)。所以打牢基础就不慌。
更多的时候跟下ECMAScript新版本,而且有babel加持完全不慌。
后端:后端不要局限在单一一门编程语言,这个会把自己限制的死死的,对于PHPER为出发点的开发者,
编程语言PHP+数据存储方面MySQL、Redis为基本盘。 静态现代语言Golang+动态语言[Python、NodeJS]辅助稳固基本盘。
同时MySQL基础的CURD的使用是不够的,起码要会一些基础的OLAP,复杂SQL查询。
运维:业务稳定、快速恢复是基本盘。万变不离怎么资产管理、怎么部署、怎么监控、怎么快速恢复、怎么解放我傻逼的敲命令,做个WEB让开发自己玩去,这就是所谓的运维自动化。
APP:能提供APP原生整体解决方案,全套一条龙就是基本盘。再来和WEB前端的打组合。
测试:什么自动化测试,老夫没有PRD都能测,别整那么没用的,手动斜眼。 手动黑盒测试作为基本盘。

4.建议的职业路线

有了基本盘,再想想怎么💪自己。
说实话,从事互联网行业的人们,没有点兴趣这个行业是做不下去的,有些人只看到工资高,没看到这个行业头发会变少,所以我相信你是喜欢这个行业的。

在技术上的发展
前端: SPA,推荐必学Vue,微信小程序(有美团的mpvue方案)
后端: 语言,只会动态语言的必须要补一个静态语言例如Golang极力推荐,现代的Cloud Native系统几乎都是Golang写的;数据库,尝试更复杂的SQL,可以在数据统计分析方面进步不少,SQL几乎就是数据分析的事实标准。搜索方面Elastcsearch
运维: 语言,Python;数据库,MySQL;容器,Docker;容器编排:Kubernetes(可用Ranher落地)
APP: 语言,Kotlin做一个基础入门,合适的时候可以考虑运用,Swift做一个基础入门,合适的时候可以考虑运用。 JsBridge技术和WEB前端组队。 还有精力就试试后端。
测试: API测试、压力测试,单元测试。还是测试领域更大神了。辅助编程语言Python

在业务管理方面看
不是计算机科学家,就的老老实实用人家的技术去做业务需求,用人单位看中的是你的整体解决能力,就是要给用人单位提供一条龙的输出。
现代社会是分工和合作的,分工是因为大到一个人没法在要的时间完成,合作是因为分工后需要整体协调

在每个岗位的时候一定要有个整体意识,把这个项目推成功了,脑子里不要只想着自己手上这一点事,一起和同事把这个事做成了。
自己要在多人协作中培养自己的团队协作意识,吐槽完了要给解决思路建议,要做发动机,不要做拖后退的人,你当老板自己都嫌弃自己的。

从技术和业务管理协作方面来看,技术是基本盘,综合协同能力是扩展盘,当你都达成了,恭喜你,叫你一声“领导好”。

希望各位同事朋友能在岗位上更上一层楼。