码农和技术管理者的区别,到底在哪里?
正文开始
许多技术管理者都有这样的困惑,我们做技术管理的,写代码的时间越来越少,手越来越生疏,但是参与了更多的技术评审和技术决策,这似乎是件很矛盾的事情。
因此,他们时常感到很焦虑,自己技术能力越来越差,日常管理工作又非常琐碎,没有时间提升技术,会不会有一天年龄大了,失去了价值或性价比,就被行业淘汰了。
其实,这里面有两个问题,第一,技术管理者的核心能力是什么;第二,技术工程师和技术管理者的技术能力有什么差别。
先说第一个问题,技术管理者的核心能力是什么,说实话这也是曾经困扰笔者的问题,直到有一次上MBA课程的时候,教授的一句话让笔者一下子通透了。
“管理者的核心能力是什么呢?是职业判断力。”
在2013年,阿里巴巴的张勇看到了移动互联网的未来,提出“All in移动”,帮助阿里顺利拿到了移动互联网时代的头等舱,这就是职业判断力。
海尔张瑞敏,在互联网时代来临时,提出了“人单合一”模式,“革自己的命”,企业获得了重生;在万众创业的时代,他提出“创客模式”,把企业变成创客平台,释放了企业的创新力。这也是职业判断力。
同样的道理,技术管理者的核心能力就是技术判断力。技术判断力简单说来,就是某个技术项目“要不要做”,要做的话“能不能实现”,是否适合现在做,还要考虑技术风险、项目管理复杂度、成本等,已经远远超出了写代码的范畴。
工程师和技术管理者的技术能力
有什么差别?
第二个问题,技术工程师和技术管理者的技术能力有什么差别呢?简单来说,技术工程师的技术能力就是写代码,做具体的技术实现。技术管理者的技术能力是技术判断力,通过在技术领域和非技术领域的长期积累培养起来的技术决策能力。
许多朋友,一直把技术工程师的技术能力与技术管理者的技术能力混为一谈,讨论技术总监应不应该写代码是非常可笑的。
这要分场景来看,例如,创业团队缺乏资源,技术负责人当然事必躬亲,动手写代码,但当团队慢慢壮大时,技术负责人就要把重点放在做技术决策上面。
也就是说要看团队所处的阶段和团队规模,以及技术负责人的角色定位,来决定他的工作内容究竟是做技术实现,还是做技术决策,还是两者兼而有之。技术总监或CTO是否写代码,离开具体场景的讨论是没有任何意义的。
技术判断力,要判断哪些事情?
技术判断力主要体现在三个方面:
第一,对结果的判断。
即这个事情做还是不做,用什么样的指标来衡量它的好与坏,例如,开发人员提出要用Flutter对现有App进行重构,技术管理者就要给出一个判断做还是不做。
技术人员考虑这个提案的出发点也许是想“玩一玩”新技术,给自己的简历加分,而作为技术管理者,考虑的是现阶段公司App的关键问题是什么,假如是App的稳定性、开发速度不够快,那么Flutter作为一种新技术框架,能不能解决现有的问题呢?如果不能,那么现在引入它也许还不是最好的时候,可以安排一两个技术人员做预研,开始关注这项技术。
不难发现,技术工程师跟技术管理者对同一个问题的思考角度和维度差别很大。
第二,对技术方案的判断。
即对技术可行性、可维护性、成本收益等方面进行判断,通常在技术方案评审环节给团队进行指导。
如方案是否具备技术可扩展性、能不能为公司建立起技术壁垒、技术框架里有没有详细日志记录、出现线上故障时是否有预警,并且提供详细的错误日志进行分析、选择这项技术的机会成本如何等?
所谓机会成本,即选择这项技术就会放弃另一项技术,有没有可能另一项技术的收益更大呢?
技术管理者对技术方案的判断也比技术工程师思考得更深、更全面,技术工程师或许只考虑好不好实现,而技术管理者要确保在方向上不出现大的偏差。
第三,对风险的判断。
包括技术风险、项目执行风险、团队风险等方面。技术管理者利用自己的经验、思考分析、团队讨论等手段,识别出主要的风险,并采取措施进行规避。
技术管理者平时做的技术评审、项目回顾、技术方案规划等工作就是在做技术判断,技术能力并没有变差,因为作为技术管理者,技术判断力在日常工作中得到了持续的锻炼和提升。
如何提升技术判断力?
新晋技术管理者的技术判断力,主要来源于之前写代码和做项目的经验积累,这时候要做好知识迁移,将技术工程师的经验认知转换成技术管理者技术判断的认知。
技术判断力的提升,主要有四个方面:
第一,团队日常技术和产品工作汇报。团队在汇报技术和产品进展时,是获取信息反馈、验证技术判断的大好时机,看看自己之前的技术决策产生了哪些影响,有无需要调整的地方,也可以学到下属们的思考和经验,及时更新自己的技术和产品认知。
第二,参与技术方案评审。小到每次Code Review,大到系统整体方案评审,都要尽量参与,尤其是大型系统整体架构评审,这是系统化提升技术判断力最好的机会,架构师的讲解,包括架构设计的逻辑、每种技术的特性等,结合自己的理解和经验给团队提供反馈,架构判断能力也可以得到提升。
第三,主持系统顶层设计和规划。技术管理者可直接担任或主持系统顶层设计规划,业务架构规划、系统各层的划分、子系统之间的数据交互协议、技术框架选型、系统容量规划等,从技术整体架构进行把控,再由团队进一步展开做更细的规划。
第四,持续学习新技术。从事技术管理工作,并不是说完全丢弃技术,只是放弃了大部分的代码工作,但是新技术的学习是不能停止的,如人工智能的技术框架、机器学习的几种模式及擅长解决哪些问题等。
再比如区块链几种共识算法的特点、实现原理、加密算法、记账方式差异等,关注的是这项技术解决什么问题、实现的原理和机制,而不是如何熟练使用这个新技术写“Hello World”,当然写一些demo对于加深理解是有必要的。