软件工程师的进阶:从初级工程到高级工程师
“屋顶的闪闪星光”这个IP专注软件技术人员的就业指导、职业发展,欢迎大家私信交流具体问题。
无论是科班毕业参加校招,还是跨专业、跨行业,通过自学或者参加培训班而转行到计算机,当一个人拿到了软件开发工程师的offer,并进入公司开始做商业项目,就是一名正式的初级软件开发工程师了。
这个阶段工作的最大特点是:无数需要学习的新知识涌过来。
我刚工作那会儿,虽说在学校里也积累了几万行的代码,自觉牛屁烘烘的了,但进入公司之后仍然发现自己是个彻底的小白。作为一个本科生,即使从大二开始编程,在学校两、三年的时间内,零零散散、无人指导的Coding,学到的那点东西在真正的职业工程师眼里真的是不够看。
发现自己是一个彻头彻尾的技术小白:
正式项目的工程结构,不懂;严谨的编码风险,不懂;一些常规框架分别在什么场景下使用,以及为什么,不懂;常见的设计模式,看过书,仅仅了解而已,但对于如何在编码时灵活运用,不懂;如何自测,不懂;上线之后如何对服务进行日常的运维,保证稳定性,不懂。
除了技术,其它方面也很小白:
公司业务是做什么的,基本的模式是什么,不懂;部门是做什么的,在公司内是什么定位,不同;做一个商业项目的基本流程,不懂;怎么理解、分析需求,不懂。
基于以上这些前提,初级工程师一脚踏入职场之后,如何才能快速成长为高级工程师呢?我认为最核心的是把一件事做好:当好一块坚硬的砖。
作为一名初级工程师,无论把我们扔到哪个项目中,无论碰上什么样的人,我们都要用最大的热情,最具奋斗精神的努力去学习、掌握新知识,快速融入项目开始干活。
甚至,极端一些来说,这个阶段的工作都不需要太多深层次思考,掌握知识即可。因为,有效思考的前提是我们掌握了足够多的信息,才需要通过思考提升自己的判断力,初级工程师,技术底子一穷二白,一思考就“思而不学则殆”了。
前几天听朋友提到一句话:键盘敲烂,月薪过万。简直不要太对了。这个阶段所有需要我们学习、掌握的东西,都是以适应的方式,获取的信息也是以点状为主。比如:
代码质量
工作之前,不管是在学校自己Coding还是在培训班学习,大家更注重的是了解框架、学习基本的语言使用,对于如何产出高质量的代码不怎么关心。虽然有很多优秀的开源框架可以让我们学习,但是没有体会过烂代码的问题,怎么能够对好代码的重要性有深入的理解呢。
所以,这个阶段的代码Review特别重要。只要遵守一些基本开发规范的技术团队,都会对刚入职的初级工程师设置代码Review流程的。功能做完之后想提测、想上线?先让团队内的资深员工看过没问题再说。
通常,这个资深员工会提很多修改意见,保持谦逊的态度,一个个地记下来、问明白、认真修改。如果别人没有时间和心思跟我们解释,那就先照猫画虎,做了之后再慢慢体会。
流程规范
先想一想我们的名字:软件工程师,所以,我们在用编程语言搞工程。既然是工程,那就要有协同、有规范。小工程相对简单,要求也低,可以随便搞,出了问题影响也不大。可要是想搞出供许多人使用的,优秀的大工程,就要有一套严格的方法论了。
具体包括,如何设计需求,如何做系统分析,如何拆解领域,如何做模块设计,如何使用设计模式,如何测试,如何发布,如何运维。每一个环节都会有相应的套路,只要适应了这些东西,我们才能在一个大的工程中生存下来而不会被淘汰。
工程技巧
如何把一个上百行代码的大函数抽成几个数十行代码的小函数?如何把一个几百行代码实现的功能用几十行代码实现?如何在合适的地方使用恰当地设计模式?工程结构要如何划分?
这些都需要一个点一个点地去学习,并在经过几年的工程开发实践中慢慢积累,最终让我们成为一个可以写出高质量代码,开发出高质量软件工程的人?
基础设施的使用
十几年前我刚工作那会儿,开发一个App时,需要先从网络框架、图片加载框架、文件缓存管理器之类的基础设施开始做。而现在,只需要在优秀的开源框架拉一个稳定分支出来,几行代码集成完毕,后面聚焦在业务逻辑和界面开发上就可以了。
那么,我们可以说十几年前的软件工程师比现在的吗?No!软件工程师是否厉害,要看我们解决的问题,而不是掌握什么样的技能。
软件工程发展到今天,各技术领域的基础设施都已经很成熟,如何运用这些基础设施,更高效地解决问题、达到目的才是最重要的。
为了更好地运用这些基础设施,我们不但要知道如何集成、使用他们,还需要了解他们的原理、使用场景、优缺点,甚至还要选择一、两个常用的去深入到源码级做深层次的探索。这样才能做到,遇到一个需求时,知道使用哪个框架、服务,才可以更高效地实现。
查找资料
可以说起这事大家都觉得没啥,“内事不决问百度”嘛,但事实上不止如此简单。
假如我们要接入一个中间件,第一件事要做的是什么?百度上搜一下这个中间件的介绍,然后拉引入进来之后就开始集成?好吧,我敢打赌,这会在后面使用中碰到各种千奇百怪的问题,然后再去百度,出来一堆不靠谱的答案,挨个试到最后,发现没一个是有用的,最后开始大骂那些写文章的人。
正确的路径应该是:先通读官方文档,对这个中间件有一个概要上的了解,适用什么场景,解决什么问题,基本的性能指标,部署要求等等。与其它类似产品做过横向比对之后,确定符合自己的需求了,再细读一遍官方的接入文档、Demo等,最后再开始集成。
集成的时候,每一步的操作严格按照官方文档来,不要加戏,先保证跑起来,等成功之后,可以再尝试按照自己的理解做一些修改,并依次验证。
以上,能让我们避免90%以上的低级问题。
请教而不依赖
同事之间的帮助是一种情分而不是义务。
如果有一个主管或者师兄对我们谆谆教诲,事无巨细地回答我们的问题,那是我们的运气,更要以自己的力所能及的形式,适当回报;如果团队中同事之间关系平平,那就尝试自己努力去刷脸、交流,摆正自己的态度向别人请教,毕竟,谁也不是谁的爸妈,没有义务帮助我们;如果团队中同事之间互相提防,生怕你学会了对他们造成威胁,那就赶紧离开。
以上,点状地聊了聊如何快速地从初级工程师成长为高级工程师。
从初级工程师到高级工程师的成长路径相对简单、直接,成长的速度跟Coding、项目的积累量,遇到问题的复杂程度息息相关。经验来看,这是一条个人技术水平随着时间而线性增长的曲线。说句政治不正确的话,这个阶段,加班确实可以让人成长的更快。
希望我们所有的初级工程师们都能踏实谦逊、艰苦奋斗,用最短的时间度过这个阶段。当2、3年之后成为一名合格的高级工程师时,我们会变成团队中的主力开发,市场上争抢的对象,无论对谁都有了比较大的谈判能力。
从当下开始,为了那个目标而努力。
#我的求职思考##牛客在线求职答疑中心#该系列文章都是作者花费大量业余时间整理、分享出来的,建议软件技术方向的同学收藏、阅读。

