技术工作的一二三之内功
大型软件工程在个人和团队上有着很多的要求,并且没有银弹可用。在团队现状下梳理出不少内容,但多就意味着不聚焦,不能为提升内功做概要。去年协助AIO面试,在这方面有一些启示。候选人都是10年左右的技术同学,经历和技术栈各异,列三个我觉得是典型的经历。
同学A半路出家切入安卓开发,从系统应用做到Framework、system以及驱动,在宽泛的集成工程上,虽然不是样样都精,但积累了一套结合经验分析解决问题的方式。技术中的大局观和方法论有同样的身影体现在管理工作上,对于没有经历的工作也能举一反三。
同学B后端出身,几乎以一年一跳的频率往来于北京大厂,手中php相关三板斧滚瓜烂熟。知其然不知其所以然,应用以外的原理、系统、调优、运维只要没接触过连思路也无法提供。管理思路口口声声兄弟义气,跨专业事宜依赖相关技术栈的朋友。
同学C负责技术、产品、设计的整体研发部门数年,项目迭代部门管理都有正向的思路表达。落实到细节却不尽人意,版本迭代周期究竟几周无法清晰地厘清过程。后端JAVA出身,经历过每天入账十万的项目,不能说明负载细节,同样对性能、集群、运维等工作知之甚少。
不知道大家看过这些履历的感受,每次沟通后总是不免唏嘘几声。
由人及己,择善而从。
从履历引申开,个人成长在学而优则仕和仕而优则学的路子上,关键点归结为“优”的标准和“则”的时机。学未优则仕的切换,对技术工作而言容易带来难以突破的职业瓶颈。
“学”的定义是技术的专业技术领域,也就是我们现在的技术岗位划分,包括服务器、iOS、安卓、前端、测试。这些岗位所需要具备的基础能力,可以定义成为栈内技术。在初入领域的三到五年内,都是以栈内技术的学习和积累为主,包括基础的语言知识、高质量的代码进阶、主流框架、系统设计和算法、其他应用知识相关(数据库、渲染、缓存、日志框架等)。
在这个阶段会有三类情形。有的同学数年如一年,在基础语法过关后,只能随着业务了解功能,成为开源集成工程师,对技术的基础缺少思考和学习能力。在面试中经常遇到这类同学,说实话不适合从事技术工作。大部分同学从发展轨迹看,快的人通过针对性的学习或遇到挑战性的项目,能在三年左右达到大厂项目骨干的要求。而慢的同学,也能在六年左右通过项目的历练完成这一过程。团队中的小伙伴们也大多处于这个阶段,同学B则是典型。
“优”的定义是在栈内技术知识之上的方法积淀,可以称之栈内深度。指的是建设专业技术体系的解决方案,或者说是做事的方法论。这部分工程经验涉及到技术选型、架构设计、性能优化,CI/CD,监控体系、系统测试等,这些都是跟工程相关的方法论。面试中经常听到掌握了某某技术,但实际只是一些知识点,那些“今晚查完明天就会了的”不叫技术。决定技术深度,体现专业价值的,是领域工程经验。一些同学很少重视总结工程经验,35岁是程序员终点这个梗,大多也是由于未能做好沉淀,在效率上输给了后来者。而工程经验也是技术水平的分水岭。
积累工程经验需要两个维度的工作:一是对技术知识原理的理解,一是业务中实践的机会。工程相关的内容非常多,并不仅仅是代码,包括计算机体系运行涉及的方方面面。只有挖掘到问题背后的原理,才能做到触类旁通举一反三,真正将经历变为经验。在这点上,B同学做了反例。而原理大多都从书本或者网上的文章看来,这些看的再多也没有用,没真正实操过都不能称之为掌握,没有线上流量验证过的技术都是纸上谈兵。只有在业务中多争取实践的机会,将经验多次用于成功解决问题后,掌握的工程经验才能聚合为指导未来工作的方法论。在这点上,C同学给了反例。
“仕”可以理解为项目管理、团队管理或是业务管理。这些工作与技术的思路是有相当大区别的,一旦承担了这些方面的工作,势必会有精力被分走。如果在这之前没有能做到学而优,一是管理工作没有触类旁通不尽人意,二是技术工作本身会由于没有方法论指导而效率低下,同时栈内深度由于精力所限,成为职业瓶颈无法突破。
“则”的把握,机遇使然。对于技术团队内部,要求大家作为专业的人,先能做好专业的事。公司正在快速发展,团队和业务规模也在快速扩大,对于学而优的同学,“则仕则学”时时都有机会。
最后引用网上的技术能力模型,希望技术同学在团队内都能在金字塔的基础两层中做到学而优。
版权声明: 本文为 InfoQ 作者【拖地先生】的原创文章。
原文链接:【http://xie.infoq.cn/article/460d597193eb33eafb0fda2d1】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论