如何成长为高级工程师?

更新日期: 2021-07-07阅读: 2k标签: 工程师

“形而上者谓之道,形而下者谓之器。”

这句话是笔者在拜读《计算机心智:操作系统之哲学原理》时看到的,结合以前师傅的教导,感触良多。授人以鱼不如授人以渔,我愿和大家分享自己学习到的思维模式。

笔者是一名励志成为卓越程序员前端开发工程师,因为不喜欢把自己限制在前端开发中,所以在这里和大家讨论如何成长为高级工程师。

按照德雷福斯模型,技术人员可以分为五级:

  • 新手:只能按照指令一步步地走。新手没有接触过当前行业,所以只能按照指令一步步地走完过程。

  • 初级:能够完成局部工作。只需给出局部工作的目标而非指令,初级便可达成这一目标,但初级没有形成全局概念,不知道自己所做的内容在全局所占据的份量有多重。

  • 中级:能够完成全局工作。这一层面的技术人员对一个领域的各方面都有所了解。他可以在给定目标的情况下独立完成项目,可以带人,不会频繁求助高级。

  • 高级:具备主动性,能够根据环境纠正自己的目标和手段。高级能够站在一个中立的层面考虑什么应该做,什么不应该做,怎么做代价最小,需要权衡付出与收益。

  • 专家:凭直觉工作,每击必中要害。在长期的解决问题过程中,专家形成了丰富的经验积累,可以快速抓住问题的关键点。

可以看出,解决问题的能力是决定技术人员级别的根本。你能解决别人所不能解决的问题,你在团队的分量自然更重。而解决问题的能力是自己在学习工作中不断培养的,是不断解决自己的问题,亦或是帮助别人解决问题以后,不断复盘、归纳总结出来的一套思维模式。


在此之前,我想先和大家讨论学习方法。

以前我刚接触前端开发,在实验室老师指导下,拜读《JavaScript 权威指南》,学习了 Js 底层知识。私认为自己基础不错,开始研究当时盛行的 jquery 框架,不曾想处处碰壁,强行看完一篇 JQuery 框架源码系列文章之后,不仅没感觉到任何技术提升,还让我更加怀疑自己。也是在这个时候,认识了我的师傅,在师傅指导下,掌握了一套通用的学习方法:螺旋上升迭代学习法。

螺旋上升迭代学习法:该方法与敏捷开发的思想有点类似:具体是通过看书系统学习理论知识并运用到开发中,在实践中加深理论的认识,发现新的问题;再针对性地复习相关理论知识,解决发现的问题,形成一个迭代上升的循环,并且每一轮的起点都比上一轮高。在学习任何知识,尤其是在掌握面向对象思想、设计模式、重构思想、代码设计、抽象封装思维等抽象性的理论知识时,此种方法效果尤为显著。每次解决问题都需要自己主动思考,解决完问题以后会带来巨大的成就感,以此来保持对学习的乐趣。

具体实践是通过写 H5 小游戏,从中提炼 2D 游戏引擎。在这个过程中学习抽象思想,并通过不断地迭代实践,熟练掌握此学习方法。为了更好地掌握抽象思想,《冒号课堂》我看了四遍。此后,我发现学习生活中各种技能都能够使用此种方法做到触类旁通,在不熟悉的领域也能比大多数人做的更好。

在这个过程中,我开始在师傅指导下使用前端类型化语言 TypeScript 和 vim 指令,尤其是 vim 配合 vscode 的快捷键,编程如同钢琴演奏一般美妙。这些工具的使用改变了我的编程方式以及思考模式,抛开工具,人与人之间的差距是不大的。

多年以来,我不断探索世界。但直到我看了《刻意练习:如何从新手到大师》这本书,才了解到我所掌握的学习方法原来很久以前就被人提出:刻意训练的本质是长时工作记忆,这种能力可以通过一定的训练进行激活,通过不断增加难度的重复训练,在每次训练中收到反馈,不断纠正自己的错误,不断提升大脑的适应能力。这个训练是历经痛苦的过程,每次当你适应这种痛苦以后,你的能力也就得到提升。


接着我们来聊聊计算机理论基础的重要性。

在计算机科学里,可以分为两个维度:工程和科研。“工程”中最核心的知识包括:数据结构、体系结构、架构设计;“科研”中最核心的知识包括:算法、数学基础、快速阅读论文的能力、将理论经过简化后应用到工程中的能力。所谓万变不离其宗,掌握了计算机核心的底层原理以及思想,具备了抽象设计的思维,这样不管你学习哪种语言都能快速抓住其本质。

彼时,我毕业进入一家创业公司,当我技术水平达到能够独立完成前端项目,并保证各种前端优化都已经尽善尽美的时候,我开始思考如何成为一名合格的程序员。在看了知乎很多博主的文章以后,我启动了补充计算机理论基础的计划。在创业公司的半年时间里,我每天早上和晚上都在学习数据结构和算法,并在 LeetCode 上做题,只有下午才写公司业务代码。也正是因为熟练使用 vim 指令让我的编程速度提高了 2-3 倍,才能在当时的环境下完成此次计划。

最开始的时候,我写递归算法题需要一整个上午的时间,有时候理不清楚,需要在纸上写下每一步执行结果,逐步剖析才能理解当前执行到哪一步。历经半年,看了数据结构、算法、计算机网络、Webkit 内核、操作系统相关书籍,刷了 158 道题,我终是达成了目标。在经历这次技术洗礼以后,我感觉非常踏实,思维方式得到很大改变,常常深入思考程序的更优解决方案。

随后我离开创业公司,和师傅一起创业。师傅对代码有极高的追求,在他严格的 CodeReview 下,我了解到高级程序员的重要技能:如何写出让别人易读的代码以及如何保证你的代码质量,可以归为工程化思想。通过学习《计算机程序的解释与构造》《重构-改善既有代码设计》和《代码整洁之道》三本书以及和师傅不断争论,我们的编程风格越来越相近,每次 CodeReview 的重构点也从最开始的 50 多个逐步减少。


现在我们来聊聊如何成长为高级程序员。

从初级到中级过程中,我们需要掌握一套高效的学习方法,你可以学习任何一门语言,深入了解其运行机制,然后学习计算机理论基础:数据结构、算法、计算机网络、操作系统。其中,操作系统和计算机网络不是必要的,但是学习这些知识可以让你认识到计算机底层执行原理,开阔视野。

从中级到高级过程中,需要看到问题和技术的本质,善于思辩、独立思考,思维方式需要从被动完成任务转变为主动解决问题。前面提到,只有不断解决问题,在解决问题的过程中弥补相关知识,寻找更好的解决方案,并不断复盘、总结,才能提高你解决问题的能力。所以,如果中级在主动性没有根本性的改变,中级就会留在原地,如果有了转变,就能够有着越来越多的机会提升自己,进而与中级拉开距离。

高级程序员重视工具的使用,更愿意花时间去研究新的工具、新的手段让解决问题的方式变得更加简单,从而提高自己的生产能力。最重要的是,工具也包含了扩展思维能力的思维模式,这种思维模式让你总是为同一类型的问题寻找更好的解决方案。

高级程序员不会轻视任何一个项目,每次项目都是表达自我的机会。需求不清晰,没有关系,我可以通过沟通来将需求弄清楚,这样可以锻炼沟通能力;框架有问题,没有关系,我可以修改源码来让框架更适合当前项目,这样可以锻炼我的源码阅读能力;以前老代码很乱,没有关系,我可以通过重构思想来简化项目,这样可以锻炼我的抽象能力;无论是用户体验还是代码格式都需要做好,这才是高级程序员表达自己的方式。

以上都只是高级程序员所应该具备的硬实力,这些年我开始学习软实力,包括产品思维和领导能力。

  • 产品思维:能够充当半个产品经理,站在产品的层面思考问题、设计程序。能够与产品、质量部门出色的完成沟通。

  • 优秀的领导能力:能够凝结团队力量,获得团队的肯定与支持,确定技术方向。领导能力并不是说你一定是经理或者老板,而是在团队中大家认可你的技术实力以及为人,自然而然地愿意听你指挥。

我始终相信越努力越幸运,期待自己能够在 30 岁以前进阶成为一名高级工程师。

本文首发于:行者AI


链接: https://www.fly63.com/article/detial/10511

Web前端工程师必备的PS技能之切图

Web前端工程师必备的PS技能之切图:PS中我的标尺的参考线为什么不能自动吸附图层或画布中间了?有个选项没有选择“菜单栏-视图-对齐”,按照设计师提供的设计稿,实现HTML页面,需要将设计稿切分成为最终在页面中呈现的一个个图片为“切图”

写给工程师的十条精进原则

作为一名技术人员,我们应该如何践行呢?本文总结了十条精进原则,希望能够给大家带来一些启发,更好地指导我们行动。Owner意识、时间观念、以终为始、闭环思维、保持敬畏

如何学习前端知识?优秀的前端开发工程师应该具备什么条件?

Web前端开发技术主要包括三个要素:HTML、CSS和JavaScript!如果单纯只是学习前端编程语言、而不懂后端编程语言(PHP、http://ASP.NET,JSP、Python),也不能算作是优秀的前端工程师。在成为一个优秀的前端工程师的道路上,充满了汗水和辛劳。

全栈工程师是什么?为什么要做Web全栈工程师?

随着软件技术的发展以及市场需求的变化,全栈工程师似乎已成为未来发展趋势。很多Flag公司都已经声称只招Full Stack的员工,那么面对这样的市场形势,对于正在求职路上或者是想要跳槽的程序员来说,我们需要如何准备,如何应战?现在,小编带你了解为什么这次我选全栈工程师!

高级PHP工程师所应该具备的专业素养

初次接触PHP,就为他的美所折服,于是一发不可收拾。很多面试,很多人员能力要求都有PHP高级工程师的字眼,如果您真心喜欢PHP,并且您刚起步

前端工程师自检清单与思考

对于JavaScript,掌握其语法和特性是最基本的,但是这些只是应用能力,最终仍旧考量仍然是计算机体系的理论知识,所以数据结构,算法,软件工程

作为一个web前端工程师,要不断的深入自己的技能

现在,前端工程师终于前所未有的在Web中占有了一席之地。随着多设备、浏览器和Web标准的演变革命,前端正在成为兼顾逻辑、性能、交互、体验的综合性岗位。

一名【合格】前端工程师的自检清单

前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。

写代码这条路,能走多远?工程师能力模型告诉你

职场危机感似乎是每个人在职业生涯都会遇到的话题,我对这种危机处境和自己曾遇到的问题进行了一番思考,参考了其他人的一些结论并结合自身的经历,设计了应对的初步方案。

我放弃了成为一个全栈开发工程师的理想

一提起“全栈开发工程师”,大家的印象肯定是:这号人啊,堪称大神!会很多技术,前端后端都精通,不掌握七八种语言都不好意思出来打招呼,热点技术名词全都知道,也都会点儿;

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!