当前位置:网站首页>如何成长为高级工程师?
如何成长为高级工程师?
2022-08-04 05:29:00 【行者AI】
本文首发于:行者AI
“形而上者谓之道,形而下者谓之器。”
这句话是笔者在拜读《计算机心智:操作系统之哲学原理》时看到的,结合以前师傅的教导,感触良多。授人以鱼不如授人以渔,我愿和大家分享自己学习到的思维模式。
笔者是一名励志成为卓越程序员的前端开发工程师,因为不喜欢把自己限制在前端开发中,所以在这里和大家讨论如何成长为高级工程师。
按照德雷福斯模型,技术人员可以分为五级:
- 新手:只能按照指令一步步地走。新手没有接触过当前行业,所以只能按照指令一步步地走完过程。
- 初级:能够完成局部工作。只需给出局部工作的目标而非指令,初级便可达成这一目标,但初级没有形成全局概念,不知道自己所做的内容在全局所占据的份量有多重。
- 中级:能够完成全局工作。这一层面的技术人员对一个领域的各方面都有所了解。他可以在给定目标的情况下独立完成项目,可以带人,不会频繁求助高级。
- 高级:具备主动性,能够根据环境纠正自己的目标和手段。高级能够站在一个中立的层面考虑什么应该做,什么不应该做,怎么做代价最小,需要权衡付出与收益。
- 专家:凭直觉工作,每击必中要害。在长期的解决问题过程中,专家形成了丰富的经验积累,可以快速抓住问题的关键点。
可以看出,解决问题的能力是决定技术人员级别的根本。你能解决别人所不能解决的问题,你在团队的分量自然更重。而解决问题的能力是自己在学习工作中不断培养的,是不断解决自己的问题,亦或是帮助别人解决问题以后,不断复盘、归纳总结出来的一套思维模式。
在此之前,我想先和大家讨论学习方法。
以前我刚接触前端开发,在实验室老师指导下,拜读《JavaScript权威指南》,学习了Js底层知识。私认为自己基础不错,开始研究当时盛行的JQuery框架,不曾想处处碰壁,强行看完一篇JQuery框架源码系列文章之后,不仅没感觉到任何技术提升,还让我更加怀疑自己。也是在这个时候,认识了我的师傅,在师傅指导下,掌握了一套通用的学习方法:螺旋上升迭代学习法。
螺旋上升迭代学习法:该方法与敏捷开发的思想有点类似:具体是通过看书系统学习理论知识并运用到开发中,在实践中加深理论的认识,发现新的问题;再针对性地复习相关理论知识,解决发现的问题,形成一个迭代上升的循环,并且每一轮的起点都比上一轮高。在学习任何知识,尤其是在掌握面向对象思想、设计模式、重构思想、代码设计、抽象封装思维等抽象性的理论知识时,此种方法效果尤为显著。每次解决问题都需要自己主动思考,解决完问题以后会带来巨大的成就感,以此来保持对学习的乐趣。
具体实践是通过写H5小游戏,从中提炼2D游戏引擎。在这个过程中学习抽象思想,并通过不断地迭代实践,熟练掌握此学习方法。为了更好地掌握抽象思想,《冒号课堂》我看了四遍。此后,我发现学习生活中各种技能都能够使用此种方法做到触类旁通,在不熟悉的领域也能比大多数人做的更好。
在这个过程中,我开始在师傅指导下使用前端类型化语言TypeScript和vim指令,尤其是vim配合vscode的快捷键,编程如同钢琴演奏一般美妙。这些工具的使用改变了我的编程方式以及思考模式,抛开工具,人与人之间的差距是不大的。
多年以来,我不断探索世界。但直到我看了《刻意练习:如何从新手到大师》这本书,才了解到我所掌握的学习方法原来很久以前就被人提出:刻意训练的本质是长时工作记忆,这种能力可以通过一定的训练进行激活,通过不断增加难度的重复训练,在每次训练中收到反馈,不断纠正自己的错误,不断提升大脑的适应能力。这个训练是历经痛苦的过程,每次当你适应这种痛苦以后,你的能力也就得到提升。
接着我们来聊聊计算机理论基础的重要性。
在计算机科学里,可以分为两个维度:工程和科研。“工程”中最核心的知识包括:数据结构、体系结构、架构设计;“科研”中最核心的知识包括:算法、数学基础、快速阅读论文的能力、将理论经过简化后应用到工程中的能力。所谓万变不离其宗,掌握了计算机核心的底层原理以及思想,具备了抽象设计的思维,这样不管你学习哪种语言都能快速抓住其本质。
彼时,我毕业进入一家创业公司,当我技术水平达到能够独立完成前端项目,并保证各种前端优化都已经尽善尽美的时候,我开始思考如何成为一名合格的程序员。在看了知乎很多博主的文章以后,我启动了补充计算机理论基础的计划。在创业公司的半年时间里,我每天早上和晚上都在学习数据结构和算法,并在LeetCode上做题,只有下午才写公司业务代码。也正是因为熟练使用vim指令让我的编程速度提高了2-3倍,才能在当时的环境下完成此次计划。
最开始的时候,我写递归算法题需要一整个上午的时间,有时候理不清楚,需要在纸上写下每一步执行结果,逐步剖析才能理解当前执行到哪一步。历经半年,看了数据结构、算法、计算机网络、Webkit内核、操作系统相关书籍,刷了158道题,我终是达成了目标。在经历这次技术洗礼以后,我感觉非常踏实,思维方式得到很大改变,常常深入思考程序的更优解决方案。
随后我离开创业公司,和师傅一起创业。师傅对代码有极高的追求,在他严格的CodeReview下,我了解到高级程序员的重要技能:如何写出让别人易读的代码以及如何保证你的代码质量,可以归为工程化思想。通过学习《计算机程序的解释与构造》《重构-改善既有代码设计》和《代码整洁之道》三本书以及和师傅不断争论,我们的编程风格越来越相近,每次CodeReview的重构点也从最开始的50多个逐步减少。
现在我们来聊聊如何成长为高级程序员。
从初级到中级过程中,我们需要掌握一套高效的学习方法,你可以学习任何一门语言,深入了解其运行机制,然后学习计算机理论基础:数据结构、算法、计算机网络、操作系统。其中,操作系统和计算机网络不是必要的,但是学习这些知识可以让你认识到计算机底层执行原理,开阔视野。
从中级到高级过程中,需要看到问题和技术的本质,善于思辩、独立思考,思维方式需要从被动完成任务转变为主动解决问题。前面提到,只有不断解决问题,在解决问题的过程中弥补相关知识,寻找更好的解决方案,并不断复盘、总结,才能提高你解决问题的能力。所以,如果中级在主动性没有根本性的改变,中级就会留在原地,如果有了转变,就能够有着越来越多的机会提升自己,进而与中级拉开距离。
高级程序员重视工具的使用,更愿意花时间去研究新的工具、新的手段让解决问题的方式变得更加简单,从而提高自己的生产能力。最重要的是,工具也包含了扩展思维能力的思维模式,这种思维模式让你总是为同一类型的问题寻找更好的解决方案。
高级程序员不会轻视任何一个项目,每次项目都是表达自我的机会。需求不清晰,没有关系,我可以通过沟通来将需求弄清楚,这样可以锻炼沟通能力;框架有问题,没有关系,我可以修改源码来让框架更适合当前项目,这样可以锻炼我的源码阅读能力;以前老代码很乱,没有关系,我可以通过重构思想来简化项目,这样可以锻炼我的抽象能力;无论是用户体验还是代码格式都需要做好,这才是高级程序员表达自己的方式。
以上都只是高级程序员所应该具备的硬实力,这些年我开始学习软实力,包括产品思维和领导能力。
- 产品思维:能够充当半个产品经理,站在产品的层面思考问题、设计程序。能够与产品、质量部门出色的完成沟通。
- 优秀的领导能力:能够凝结团队力量,获得团队的肯定与支持,确定技术方向。领导能力并不是说你一定是经理或者老板,而是在团队中大家认可你的技术实力以及为人,自然而然地愿意听你指挥。
我始终相信越努力越幸运,期待自己能够在30岁以前进阶成为一名高级工程师。
PS:更多技术干货,快关注【公众号 | xingzhe_ai】,与行者一起讨论吧!
边栏推荐
- Androd Day02
- Simple and clear, the three paradigms of database design
- tensorRT5.15 使用中的注意点
- (十)树的基础部分(二)
- 审稿意见回复
- 典型CCN网络——efficientNet(2019-Google-已开源)
- 度量学习(Metric learning)—— 基于分类损失函数(softmax、交叉熵、cosface、arcface)
- 【深度学习21天学习挑战赛】0、搭建学习环境
- 动手学深度学习_卷积神经网络CNN
- 【论文阅读】Exploring Spatial Significance via Hybrid Pyramidal Graph Network for Vehicle Re-identificatio
猜你喜欢

【深度学习21天学习挑战赛】备忘篇:我们的神经网模型到底长啥样?——model.summary()详解

fill_between in Matplotlib; np.argsort() function

安卓连接mysql数据库,使用okhttp

【深度学习21天学习挑战赛】3、使用自制数据集——卷积神经网络(CNN)天气识别

DeblurGAN-v2: Deblurring (Orders-of-Magnitude) Faster and Better 图像去模糊

线性回归简介01---API使用案例

【论文阅读】SPANET: SPATIAL PYRAMID ATTENTION NETWORK FOR ENHANCED IMAGE RECOGNITION

线性回归02---波士顿房价预测

postgresql 事务隔离级别与锁

Logistic Regression --- Introduction, API Introduction, Case: Cancer Classification Prediction, Classification Evaluation, and ROC Curve and AUC Metrics
随机推荐
MAE 论文《Masked Autoencoders Are Scalable Vision Learners》
图像形变(插值方法)
光条提取中的连通域筛除
Attention Is All You Need(Transformer)
Lee‘s way of Deep Learning 深度学习笔记
Pytorch问题总结
线性回归02---波士顿房价预测
[Go language entry notes] 13. Structure (struct)
2020-10-19
Dictionary feature extraction, text feature extraction.
TensorFlow2 study notes: 6. Overfitting and underfitting, and their mitigation solutions
(TensorFlow)——tf.variable_scope和tf.name_scope详解
Deep Adversarial Decomposition: A Unified Framework for Separating Superimposed Images
[Deep Learning 21 Days Learning Challenge] 1. My handwriting was successfully recognized by the model - CNN implements mnist handwritten digit recognition model study notes
PyTorch
【论文阅读】Mining Cross-Image Semantics for Weakly Supervised Semantic Segmentation
sql中group by的用法
oracle临时表与pg临时表的区别
打金?工作室?账号被封?游戏灰黑产离我们有多近
lstm pipeline 过程理解(输入输出)