从文科生到前端专家,在转行时我想过的问题
繁易2021-11-03

从一篇约稿说起:

在 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 的工作,个人的眼界也开拓了许多。

转行的那些问题

转行并非是一帆风顺的。在这个过程中,最常见的问题莫过于如下:

  1. 非科班的同学,能学会计算机吗?
  2. 计算机专业学了 4 年,你自学的能跟得上吗?
  1. 出来后能找到工作吗?
  2. 转行的过程中需要做什么呢
  1. ……

这些问题从我学习编程时,就一直萦绕在耳旁,时至今日依然会有同学找我聊天,然后再问出上述的问题。也是借着此机会,我写一下我的想法。

非科班能学的会计算机 / 自学能跟得上吗?

答案是肯定的:“可以的,没问题的”。

说起来,我从未纠结过自己非科班的出身。在学习编程的伊始,我就想清楚了,如果想要成为一名优秀的程序员,科班 / 非科班的身份根本就无关紧要,真正的关键在于个人的学习效率与投入的时间。

而在大学中,我投入了大量的时间,平均每天编程 6h,这样的生活一直持续到毕业。而在毕业时,我已经完成了大约十几个项目,写过十几万行代码,也有一个十几万字的博客。

博客统计

大学时写的一个项目

Commit 记录

换言之,我也认为,如果一名非科班的同学,学过计算机的课程,写过很多行代码,也可以顺利的完成项目,那么他就是程序员。

出来后能找到工作吗

答案也是肯定的:“可以的,没问题的”。

计算机编程就业环境还是很好的,并不会卡死专业,而是通过过往的经历 + 笔试/面试来决定是否录用你。所以不用太担心这方面的问题。

这个问题我之前在知乎也回答过,所以就不再重写啦,可以看下面的截图。

转行的同学要如何学习呢

这可以说是社区每天都能遇见的问题了。但授人以鱼不如授人以渔,我说一下我自学新领域所使用的方法。

方法很简单:上知乎,搜索 XX 入门(如计算机入门,前端入门),就会出现一大堆提问,你需要的只是耐心读完其中高赞的一些回答,并归纳总结分析,大概心里就有数了。随后选择其中你觉得靠谱的高赞回答去学习即可。

许多提问的高赞回答其实都回答的很详细也很好,认准教程后跟着学习即可,学习的过程中你又会遇到新的问题,这个时候继续再搜索即可。

这个方法很管用,时至今日,我在学习产品、设计、演讲、游戏等新领域时都是这样做的,在尝试和摸索的过程中,你的自学能力也会得到提升。

我的自学方式

我在刚学习前端时,幸运的在知乎上看到了大漠关于前端自学的回答。

后面我还经历了这样的一过程,我思考过三类问题,并且将他们列在一起:
1.哪些知识点懂了?
2.哪些知识似懂非懂?
3.哪些知识不懂?
接下来有了这样的三份清单之后,就能非常清楚自己知道自己,然后先解决第二个清单中的list,再解决第三个清单中的list。
最后建议,学习这个过程是不断渐进的,整个过程把握:多看、多想、多问和多做。这也是我自己的四多原则。如果你时间允许,多写写东西,总结自己的知识。现多看看规范。

后面也针对自己的情况,画了一张思维导图,把似懂非懂的知识点列了出来。

后面在寒假里针对这些问题重点攻关,并写成总结的技术文章。

2016 年的文章

目前来看,找到自己“似懂非懂”的知识,学习,总结,分享是一个非常有效的学习方式,有兴趣的同学也可以参考试试。

我也一直坚持,学习方案的重点在于学习效果,而不是方案有多复杂和多详尽,适合自己就好。

转行的过程中需要做什么呢

这里我的建议是:

  1. 多做项目
  2. 多写总结
  1. 多打基础

首先我建议多做项目,比起打下“扎实的基础”,对于转行的同学,培养起对编程的兴趣是更重要的。不同于科班良好的学习氛围与节奏,自学往往对自制力的要求更高,这时候培养起对计算机的兴趣,能让自己继续学习写代码才是更重要的。

其次我建议多写总结,总结是一个非常高效的学习过程,如果你要把一件事情给讲清楚,那么首先一定要弄懂这个知识。自学计算机的过程中,多总结不仅可以查漏补缺,也可以让自己在回顾的时候多一份积累的感觉。

最终则是建议多打基础,转行计算机的同学,计算机底层原理,算法等知识接触较少,但这些却实打实的是基础,可以帮助你未来少踩很多坑的知识,因此在学习之余也可以多关注计算机基础知识(至于怎么学习,可以参考上面的回答)。

回头看转行

时光荏苒,回头看已经写了快 7 年代码了。

回头再看自己的转行经历,与其说是文科生转行学了计算机,倒不如说是自己发现了对计算机的兴趣,并持续投入至今。

最后,送上我很喜欢的一段话作为结尾。

Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle. As with all matters of the heart, you’ll know when you find it. 」 — Steve Jobs