笔记 | 这就是软件工程师(二)

三:高手修养

3.1上升通道:技术路线和管理路线

技术路线指的是在特定的技术领域做深入的探索和研究,不涉及管理工作;而管理路线更侧重统筹团队完成一个个研发项目,离技术研究工作比较远。

第一个判断标准就是根据自己的喜好,喜欢做技术就一直做技术,喜欢做管理就去做管理。

第二个判断标准就涉及公司类型的话题,这个世界上存在两种不同组织结构的软件公司,分别是小商品工厂( Widget Factory )和电影工作组( Film Crews )。小商品工厂有点类似于做外包的公司,这种公司是不需要技术路线的,项目经理拿钱更多,因为这种公司就是做项目的。而电影工作组这种公司是做产品的,所有人都可能成为leader,都有自己的晋升通道,这种公司里有管理通道,也有技术通道。比如腾讯,阿里,就有专家线和管理线之分。有了这个认识之后,根据自己的情况选择合适的公司就好。

3.2预见未来:软件工程师要有前瞻能力

在高手阶段,软件工程师的核心是具有前瞻能力。前瞻是指,你得知道为什么系统今天是这个样子,以及未来它会朝着什么样的方向去演进,也可以说是引领潮流的能力。

①你一定要有知识的广度,需要去读论文,读业内各大公司的资料;还要去各个公司做广泛的交流,保证有足够多的不同的信息进入你的视野。

②多做跨行业的交流,跳出自己的圈子,跟其他行业的人交流,特别是投资人、创业者等见多识广的人群。

3.3权衡利弊:软件工程师要有取舍能力

所谓取舍,就是确定自己要干什么,以及不干什么的能力。要想做好取舍,关键在于两点:明确目标,学会预测。

①明确目标是最重要的事,我们要避免想要实现的目标特别多,且有冲突,可以先问问自己,最终目标究竟是什么?这一点必须定义清晰。最终目标就像一把尺子,是衡量最优方案的唯一标准。

②学会预测。有时候即使你的目标很明确,依然做不好取舍,难点在于很多数据你并不能提前知晓。这时候就得预测一下,到底哪个方案带来的结果是更优的。这里的预测是说基于现有信息做出一个预测,然后完成取舍。最终取舍得好不好,就看你预测得准不准。

3.4攻克难题

①主动寻找技术难题

②尝试不同的解决方案

3.5关键决策:技术选型的六大要素

任何项目在实施之前都要做技术选型,就是你要选择一种技术作为项目的实现方式。

①看这项技术解决的是不是大问题即格局更大的问题,如果是的话就很值得投入时间。

②看这项技术解决问题的方式是否让人有想象空间。所谓想象空间就是说,这个技术是否会让你有一种可以干很多事情的感觉。想象空间越大的东西,炒作空间也很多。

③看有没有大公司撑腰。如果这项技术由谷歌、亚马逊等大公司主导,或者背后有大公司不断投钱,那么它就更有可能成功。如今大获成功的Linux,一开始就是被IBM撑着做起来的。

④看有没有很好的技术社区。也就是说这项技术要有人捧,就像 Docker、Java这样的技术,它们的技术社区都是相张夸张的。

⑤看有没有杀手级应用。如果一项技术解决的是大问题,并且有想象空间,那它一定有杀手级应用。所谓杀手级应用,意味着这项技术有颠覆性,并且已经颠覆掉一些东西了。比如Java的杀手级应用WebSphere、Spring、SOA等。

⑥看有没有经历十年以上时间。十年是一个成熟技术产品的成长周期。

3.6代码评审:不是“做出来”,而是“做漂亮”

所谓代码评审,也就是 Code Review,指的是你作为一个没参与代码编写的人,从头到尾把别人写的代码审一遍,看看有没有需要改进的问题。

做不做代码评审,直接关系到代码的工程水平,如果业务逼得紧,让技术人员疲于奔命,那应该是需求管理和项目管理的问题。需求总变,我们更应该做代码评审,因为需求变得越快,对代码质量的要求越高,就算是一次性代码,也应该评审一下它会不会影响那些长期在用的代码。

3.7评审清单:代码评审怎么做

①设计: 代码是否经过精心设计并适合系统?

②功能: 代码是否符合开发者意图?代码对用户是否友好?

③复杂性: 代码是否可以更简洁?未来其他开发人员接手时,是否易于理解与易用?

④测试: 代码是否经过正确且设计良好的自动化测试?

⑤命名: 开发人员是否为变量、类、方法法等选择了明确的名称?

⑥注释: 注释是否清晰有效?

⑦风格: 代码是否遵循了谷歌的代码风格

⑧文档: 开发人员是否同步更新了相关文档?

3.8敢于放手,从工程师编程管理者

刚成为管理者时,你要按捺住,要克服和适应,要做好思想的转变——之前你想的都是怎么让自己变得更好,现在你要做的是怎么样让其他人更好,怎么样让团队变得更好。你要给团队指导方向,告诉大家哪些该做,哪些不该做,哪些要坚持,并让下面的同学能够理解这样做的原因,用软件工程师能够理解的方式说服他们。

3.9善于说服:相对于下指令,还是要讲道理

还要说明几个层面的问题:第一,为什么要做这件事,不做另一件事;第二,做这件事有什么好的方法。对于那些入门级的软件工程师,你可能要手把手指导,并且告诉他,这件事情可能有五种做法,为什么我的这个做法比较好。在这个过程中,你需要通过讲道理,让别人心服口服。

3.10招聘面试:考察一个人的元能力

在面试时可以更侧重去评判候选者的一些元能力,看他工作过程中沉淀出了哪些基本素质,哪些可以持续拥有的能力。比如系统设计、代码的结构化,通过分析找到关键问题,这都是元能力的体现。

之所以考察元能力,是因为这些能力是软件工程师最底层,也是最核心的能力。元能力强的人,在设计开发的工作中自然不会差。

3.11布局长远:关注长期目标

管理者在推进当前业务需求的同时,也要布局未来更有效的解决方式,平衡好短期目标与长期目标。

首先,管理者需要判断,哪些事情需要长期投入,做了之后能产生规模效应。其次,管理者要坚定地投入到长期目标上。之所以强调坚定,是因为眼前的事太多,一不小心,长期的项目就半途而废了。

3.12协同机制:保持公开透明的信息协同

要想达成有效协作,技术团队可能不需要像业务部门一样,大家坐在一起开很多会。只要在制度的公开透明上下功夫,就会达到事半功倍的效果。

3.13团队合作:一加一大于二

好的管理者,要善于发起团队合作,善于协同相关的周边业务组一起做事,不光自己闷头干活。好的团队协作,团队之间是能形成化学反应的。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月19日
下一篇 2023年12月19日

相关推荐