如何成长为高级工程师?

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

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

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

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

  • 新手:只能按照指令一步步地走。新手没有接触过当前行业,所以只能按照指令一步步地走完过程。
  • 初级:能够完成局部工作。只需给出局部工作的目标而非指令,初级便可达成这一目标,但初级没有形成全局概念,不知道自己所做的内容在全局所占据的份量有多重。
  • 中级:能够完成全局工作。这一层面的技术人员对一个领域的各方面都有所了解。他可以在给定目标的情况下独立完成项目,可以带人,不会频繁求助高级。
  • 高级:具备主动性,能够根据环境纠正自己的目标和手段。高级能够站在一个中立的层面考虑什么应该做,什么不应该做,怎么做代价最小,需要权衡付出与收益。
  • 专家:凭直觉工作,每击必中要害。在长期的解决问题过程中,专家形成了丰富的经验积累,可以快速抓住问题的关键点。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 产品思维:能够充当半个产品经理,站在产品的层面思考问题、设计程序。能够与产品、质量部门出色的完成沟通。
  • 优秀的领导能力:能够凝结团队力量,获得团队的肯定与支持,确定技术方向。领导能力并不是说你一定是经理或者老板,而是在团队中大家认可你的技术实力以及为人,自然而然地愿意听你指挥。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容