从文科生到前端专家 - 在转行时我想过的问题
从一篇约稿说起:
在 2021 年的 8 月份,工作中的我接到了淘系技术运营同学的约稿,邀请我谈一下“程序员最重要的能力是什么”。随后我根据自身经历,写下了回答,全文发表在淘系技术公众号的《程序员最重要的能力是什么?》中。
到了九月底,淘系技术运营的同学和我说文章发表出去的反馈不错,希望我能继续写一下具体的心路历程,于是就有了这篇文章。
希望能为和我一样,对编程感兴趣/犹豫转行/正在转行的同学们提供一点经验分享。
我的编程学习经历
在高中时,因为学不会物理和化学,我选择了文科,这也意味着计算机专业类对我关上了大门,不过在当时我也没有想到自己在未来会喜欢上写代码并以此为生。
现在回想起来,与编程有关的只有两件事情。
一是在繁忙的高中生活中,我一直订阅着《电脑报》,并通过它了解互联网的时事。二是当时的文科数学需要解一种流程图题,也是我最喜欢的题型,现在看来与代码流程其实是无异的。
流程图题
▐ 从 C 语言开始
升学后,我就读的是人力资源管理专业。2015 年初,大一上学期的期末考试刚结束,距离回家尚有一段时间,因为闲着无聊便上网络学起了翁恺老师的《C 语言基础》课程,随后就被带入到了计算机编程的坑中,至今尚未脱坑并越陷越深。
记得当时的我,在 2015 年寒假一个月的时间内。开始了每天听课,思考。然后把代码输进手机慢慢运行的过程(那时候还没有笔记本电脑)。当时最开心的就是图片的这一段代码,一次性编译运行通过。
▐ 从“年轻工程师”到阿里前端技术专家
往后的半年中,编程的学习也并没有像想象中的那样顺利。学习进度停滞不前。我还清楚的记得当时的自己:“会用20门语言输出Hello World!”,“别人一周就能上手的 BootStrap 我学了四个月” 等诸如此类的事情。
偶然的一个契机,我找到了愿意带我写代码的同学,并磕磕绊绊的完成了第一次 Ajax 操作。那之后的我仿佛开窍了一般,编程世界的大门,终于向我敞开,任我探索和遨游。
直到有一天,我遇到了瓶颈。
2016 年的前端,技术日新月异,当时的我颇有一些手足无措,总觉得时间不够用。于是在参加当年的 JSConf 时,遇见了当时前端圈的名人贺师俊(Hax),于是便壮着胆上去交流了一番。
对话的内容我只记得个大概,在交流结束时我向贺老致谢,他回复我说:“学东西不要有那么强的功利心,而且对于我来说,能帮你们这些年轻的工程师就非常好了。”
在那时候我发现,对编程的兴趣已经托着我从学生过渡到大家眼里“年轻的工程师”了。时间一晃眼已经过去了 5 年,当年的学生,也从“年轻的工程师”蜕变成了阿里的前端技术专家,身份在变、环境在变、技术在变,只有对代码的兴趣没有改变。
▐ 从 Node.js 使用者到 Node.js Collaborator
由兴趣驱动的源动力,往往是纯粹且不掺杂利益的,而在软件世界中,兴趣驱动与开源精神是高度契合的。
在 2020 年冬季到来的时候,我遇到了新的瓶颈,想学习更多 Node.js 的知识却不知从何下手。
这一次我的选择是参与 Node.js 开源社区的协作。我开始阅读 Node.js 的源码,解决 Github 上的 Issue 等。在事后提名 Node.js Core Collaborator 时,我统计了一下,两个月的时间内我一共提出了 50+ 的 Pull Request。
现在回头来看,这些与实际工作“无关的兴趣”,最终支撑着我走的更远,现在的我在 Node.js 架构团队,全职负责着 Node.js 的工作,个人的眼界也开拓了许多。
转行的那些问题
转行并非是一帆风顺的。在这个过程中,最常见的问题莫过于如下:
非科班的同学,能学会计算机吗?
计算机专业学了 4 年,你自学的能跟得上吗?
出来后能找到工作吗?
转行的过程中需要做什么呢
……
这些问题从我学习编程时,就一直萦绕在耳旁,时至今日依然会有同学找我聊天,然后再问出上述的问题。也是借着此机会,我写一下我的想法。
▐ 非科班能学的会计算机 / 自学能跟得上吗?
答案是肯定的:“可以的,没问题的”。
说起来,我从未纠结过自己非科班的出身。在学习编程的伊始,我就想清楚了,如果想要成为一名优秀的程序员,科班 / 非科班的身份根本就无关紧要,真正的关键在于个人的学习效率与投入的时间。
而在大学中,我投入了大量的时间,平均每天编程 6h,这样的生活一直持续到毕业。而在毕业时,我已经完成了大约十几个项目,写过十几万行代码,也有一个十几万字的博客。
博客统计
大学时写的一个项目
Commit 记录
换言之,我也认为,如果一名非科班的同学,学过计算机的课程,写过很多行代码,也可以顺利的完成项目,那么他就是程序员。
▐ 出来后能找到工作吗
答案也是肯定的:“可以的,没问题的”。
计算机编程就业环境还是很好的,并不会卡死专业,而是通过过往的经历 + 笔试/面试来决定是否录用你。所以不用太担心这方面的问题。
这个问题我之前在知乎也回答过,所以就不再重写啦,可以看下面的截图。
这可以说是社区每天都能遇见的问题了。但授人以鱼不如授人以渔,我说一下我自学新领域所使用的方法。
方法很简单:上知乎,搜索 XX 入门(如计算机入门,前端入门),就会出现一大堆提问,你需要的只是耐心读完其中高赞的一些回答,并归纳总结分析,大概心里就有数了。随后选择其中你觉得靠谱的高赞回答去学习即可。
许多提问的高赞回答其实都回答的很详细也很好,认准教程后跟着学习即可,学习的过程中你又会遇到新的问题,这个时候继续再搜索即可。
这个方法很管用,时至今日,我在学习产品、设计、演讲、游戏等新领域时都是这样做的,在尝试和摸索的过程中,你的自学能力也会得到提升。
我的自学方式
我在刚学习前端时,幸运的在知乎上看到了大漠关于前端自学的回答。
后面我还经历了这样的一过程,我思考过三类问题,并且将他们列在一起:
1.哪些知识点懂了?
2.哪些知识似懂非懂?
3.哪些知识不懂?
接下来有了这样的三份清单之后,就能非常清楚自己知道自己,然后先解决第二个清单中的list,再解决第三个清单中的list。
最后建议,学习这个过程是不断渐进的,整个过程把握:多看、多想、多问和多做。这也是我自己的四多原则。如果你时间允许,多写写东西,总结自己的知识。现多看看规范。
后面也针对自己的情况,画了一张思维导图,把似懂非懂的知识点列了出来。
后面在寒假里针对这些问题重点攻关,并写成总结的技术文章。
2016 年的文章
目前来看,找到自己“似懂非懂”的知识,学习,总结,分享是一个非常有效的学习方式,有兴趣的同学也可以参考试试。
我也一直坚持,学习方案的重点在于学习效果,而不是方案有多复杂和多详尽,适合自己就好。
▐ 转行的过程中需要做什么呢
这里我的建议是:
多做项目
多写总结
多打基础
首先我建议多做项目,比起打下“扎实的基础”,对于转行的同学,培养起对编程的兴趣是更重要的。不同于科班良好的学习氛围与节奏,自学往往对自制力的要求更高,这时候培养起对计算机的兴趣,能让自己继续学习写代码才是更重要的。
其次我建议多写总结,总结是一个非常高效的学习过程,如果你要把一件事情给讲清楚,那么首先一定要弄懂这个知识。自学计算机的过程中,多总结不仅可以查漏补缺,也可以让自己在回顾的时候多一份积累的感觉。
最终则是建议多打基础,转行计算机的同学,计算机底层原理,算法等知识接触较少,但这些却实打实的是基础,可以帮助你未来少踩很多坑的知识,因此在学习之余也可以多关注计算机基础知识(至于怎么学习,可以参考上面的回答)。
回头看转行
时光荏苒,回头看已经写了快 7 年代码了。
回头再看自己的转行经历,与其说是文科生转行学了计算机,倒不如说是自己发现了对计算机的兴趣,并持续投入至今。
最后,送上我很喜欢的一段话作为结尾。