▐ 在学习编程之前
在高中时,因为学不会物理和化学,我选择了文科,这也意味着计算机专业类对我关上了大门,不过在当时我也没有想到自己在未来会喜欢上写代码并以此为生。
现在回想起来,与编程有关的只有两件事情。
一是在繁忙的高中生活中,我一直订阅着《电脑报》,并通过它了解互联网的时事。二是当时的文科数学需要解一种流程图题,也是我最喜欢的题型,现在看来与代码流程其实是无异的。
流程图题
▐ 从 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 入门(如计算机入门,前端入门),就会出现一大堆提问,你需要的只是耐心读完其中高赞的一些回答,并归纳总结分析,大概心里就有数了。随后选择其中你觉得靠谱的高赞回答去学习即可。
许多提问的高赞回答其实都回答的很详细也很好,认准教程后跟着学习即可,学习的过程中你又会遇到新的问题,这个时候继续再搜索即可。
这个方法很管用,时至今日,我在学习产品、设计、演讲、游戏等新领域时都是这样做的,在尝试和摸索的过程中,你的自学能力也会得到提升。
- 我的自学方式
我在刚学习前端时,幸运的在知乎上看到了大漠关于前端自学的回答。
最后
在面试前我花了三个月时间刷了很多大厂面试题,最近做了一个整理并分类,主要内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。
包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。
-
HTML5新特性,语义化
-
浏览器的标准模式和怪异模式
-
xhtml和html的区别
-
使用data-的好处
-
meta标签
-
canvas
-
HTML废弃的标签
-
IE6 bug,和一些定位写法
-
css js放置位置和原因
-
什么是渐进式渲染
-
html模板语言
-
meta viewport原理