我是程序员。大众口中非科班的那种,带着高中时期对二进制的恐惧,在大学参加科研比赛后保研,再到和校友一起创业,现在在某大型互联网公司做前端开发,一路走来都是靠自己学习。
前端框架 VUE 的作者尤大说过一句话:以前所学的东西并不影响以后要学的东西。这句话也是,我对前二十多年从义务教育,到自学编程的深刻体悟。
下面,我跟大家分享一下,我是如何踏上编程这条路的。这篇文章断断续续写了一个星期,文字很普通,希望大家有所收获。
我最早接触计算机是 2008 年,那时候我在浙江读初中。不得不说,沿海地区的教育确实比内陆地区的教育要快半拍。(我小学在四川念的)
学校里已经有了微机室,课上微机课老师教我们打字,练习结束的同学,有网就上 4399 玩狂扁小朋友,没有网就玩本地单机游戏纸牌,扫雷。
电脑在当时的我看来,都是玩票性质的,比如下载音乐,打游戏。从来没有想过它的原理是什么,系统是什么,软件是什么,统统不知道。对我来说,电脑就是一个黑盒。
到了高中,呆了两年都不知道微机室在哪里,封闭式管理的教育环境,网吧是不可能接触到的。所以,说出来大家可能都不信,高中两年都没有接触过计算机。
高三了,我们那时候高中有个通识性考试,叫会考。其中一个科目就是计算机原理。在考试前几周,一个自称是计算机老师的来给我们上了课,
计算机课总共就上了两节。却给我留下了非常严重的阴影:我不是学计算机的料。
在课上,那个老师引入了二进制的概念,采用速问速答的形式,让我们计算二进制的结果。结果别的同学都答出来了,就我还在想为啥:1+1,怎么就变成 10 了?
不科学,不合理呀,九年义务教育加这两年的高中教育,都不是这么教的啊。
当时一直纠结这个点,导致后半节课全程懵。二进制转十六进制,什么鬼?反码,补码,什么码?内存外存,什么存?
曾经有个男生上数学课,弯腰捡了一块橡皮,从此再也没有听懂过数学课。就是这种感觉!总之,一堂课下来,我突然觉得计算机不好玩了。
本以为还可以多上两节课,把问题搞清楚。没想到刚上完课的计算机老师就 “生病” 了,由数学、英语、语文几位重要学科的老师补位。
虽然会考还是凭借我的 “努力”—— 背题,通过了会考,还是全优,但这个阴影对我的影响非常大,导致我高中毕业都没有考虑过跟计算机相关的专业。
直到我上了大学,情况发生了变化。
高中生涯留下了很多美好的东西,也有很多不堪回首的往事。高考考了三年以来最差的成绩,带着遗憾和不甘,我选择硬着头皮选一所 211 大学读书。
巧的是,当年母校的录取分数线和当年四川的一本分数线一样,而我的分数线也和一本分数线一样。对,哥就是那么幸运,我的分数 === 一本分数线 === 母校调档线 === 518 分(2012 年四川重点分数线),我不用复读了!
母校现在肯定是比一本分数线高了不少。说起来,我是幸运的。应了那句话:上帝给你关上一道门的同时,也会给你开一扇窗。别放弃,朋友。
大学的第一年,家里经济条件还是一如既往地困难,全寝室就我一人没有买电脑。不过学校有专门的微机室了,还给我们发了上机卡,足够一个学期的学习。
当时参加军训的教官很有趣,经常跟我们说一些冷笑话,同学们之间也会讲一些有趣的段子。我就把他们说的简单记录在手机上,等休息的时候,我就跑到微机室,花上一两个小时,整理成文档保存下来,顺便练习一下打字。
到了军训结束的那天,我把文档打印下来,分给教官和同学们,都是满满的回忆,凭借这点,我被推选为班长。
刚开始,我大学的目标和很多同学一样:玩得开心。所以参加了很多社团,用微机室的电脑做策划,写一些剧本拍微电影之类的。还是和初中一样,玩票性质的。
事情到了大一下学期发生了一些变化,专业课增加了一门 VB,全称是 Visual Basic。我还记得,是一位非常漂亮的女老师教的,我听得挺认真,最后拿了笔试 92 分,机试满分,算是比较高的分数了。
VB 算是我第一次接触的编程语言,学会了 Function,条件判断,循环处理,输入输出等比较基础的操作。但除了应付考试,我还是不会干别的。一个非计算机专业还要啥自行车,我对计算机还是没兴趣。
这中间发生了一件比较比较尴尬的事情,我会写程序,但不太会做 PPT,第一份 PPT 是在英语课上介绍自己的 Hometown,最后我上铺的兄弟帮忙做了。
大一上学期因为贪玩,学习成绩在年级中等吧,不过通过大一下学期的努力,逆袭到了年级前五。还拿了一个奖学金,于是给自己买一台戴尔电脑,在这台电脑上,我装了好多软件,按照教程重装过系统,对操作系统熟悉了不少。
到了大二学期,我想读研了,而且了解到学院有保研的名额,但只有一个外推机会。仔细了解了一下保研的细则,做科研打比赛能加很多分,于是我和系里的老师都沟通了一遍,最后确定了一个计算机背景的老师作为我的科研竞赛导师。
这位老师当时说是毕业了以后就担任了系里的讲师,一边工作还一边读哈工大的博士,方向是数据可视化。在他的影响下,我接触了 Flex 虚拟仿真软件,Matlab 等做仿真的工具,同时也发现了 R 语言这类脚本语言的美。
慢慢地,我会用 R 语言统计分析数据,用 Matlab 做仿真模拟,还用 Flex 做了一套物流分拣系统。参加了大大小小的比赛,比如数学建模比赛,挑战杯之类的,都拿到不错的成绩。
看起来对于一个非计算机专业的同学来说,做到这种程度已经比较不错了。但我还是不满足门外汉的现状,只是会使用而已,不知所以然,比较痛苦,尤其是当时用 Dreamweaver 做了一个网站,不知道怎么部署上线。
直到毕业,参加创业。
大学毕业那年,我已经拿到中山大学的保研 Offer,没有毕业就失业,而且把注意力投入到创业去了。
回顾了一下大学生活,社团,校内机构,志愿活动,科研,比赛,都玩了一遍,还剩一个创业没有玩。
凭借一腔热血,和几个校友同学,一个猛子扎进了 “万众创新,大众创业” 的浪潮中。
投入创业以后,才猛然发现。我们得有分工,你做运营,我做研发,商量着来。
一直以来对计算机爱舍难分的我,选择了开发这个硬骨头。从最基础的 CSS,HTML,Javascript,开始学起来。
认真学了一个多月,粮食吃了不少,但网站的踪影没见着。运营的同学已经把粉丝积累到 20 多万了,我们却连个官网都没码出来。
于是,我们找到一个做网站的公司。对方报价 12 万,不讲价,不给代码。奶奶的,我们启动资金也才 20 多万,还是 11 个同学凑的,最少的拿了 5000。
回来以后,我们痛定思痛,还是自行研发。这不过这次,我们找了一个老师 —— 涛哥。
涛哥是西安一家军工背景的 IT 工程师,在网上录制了一些课程,偶尔接一些外包的工作。我们找到他,希望他帮忙带带我们,作为技术顾问的身份参与我们的创业。
在涛哥的带领下,我们的技术得到了很大的提升。并且采用了前后端分离的方案,一部分同学学前端 React 框架,一部分同学学后端 Java Springboot。
框架确实很好,理解了基本的思想以后,我们就能上手开发了,再也不用学那些枯燥无味的基本原理,比如继承,闭包什么的。所以,对于大部分人来说,学编程最好的方式是学以致用,而不是像大学那样上来就啃基本原理,大学的学习方式有它的好处,能把基础打得比较牢固,但与此同时学习的激情会很快就会丧失。
回到我们的创业进程上来。经历了涛哥三个月的魔鬼训练,我们已经能开发出基本的中后台页面的。前端使用的框架是:Dva 脚手架 + React 全家桶 + Ant Design 组件库 + Restful Api。后端我没有太多关注,使用的框架是 Nginx + Mysql + Springboot。
你看,我们其实并不是特别高级的工程师,只能说会使用 Api 的框架师。但这并不影响我们创业,学东西,搞事情,赚钱钱。创业也就那么回事。把一些工具和人聚合在一起,做出功能,服务用户,然后收钱。
17 面 2 月份,刚上了研究生半年,我决定效仿一下乔布斯,休学搞创业。当时也没有想太多,国家比较鼓励休学创业,万众创业,大众创新。
在和我导师商(Chao)量(Le)以(Yi)后(加 Jia),我踏上了北上之路。关于创业的故事可以看这个系列的文章:我的创业故事。
在这次创业过程中,我一边学 React,一遍研究一些更有趣的框架比如 Css 的预编译框架 Less,空闲的时候还在知乎和博客上写一些心得,进步还算比较快。我觉得输出是非常重要的,高中的时候,我就喜欢给别人讲数学题。只有自己真正懂了,才能把别人给讲懂。所以,对于输出我乐此不疲。学习编程也是一样的。
除此之外,为了解决团队代码管理混乱的问题,自学了 Git 代码管理系统的基本操作。其实基本的命令就够用了,不需要学得特别深,特别复杂。因为复杂的操作平常工作中也用不到,想要用了,去手册查一下就可以了,没有必要把命令都背下来。
后来为了给产品增加批改作业的能力,还学了 Canvas 和 Svg。就这样前端的基本工作,我都能应付了,已经成为一个初级开发工程师了。让我知道离高级开发工程师还远得很的,还是秋招。
创业暂停,重启学业。
创业很有趣,一路走来,我收获的不仅仅是出售股权赚的几十万,还有对人性的深刻解读。
18 年 2 月,我回到学校继续读书。对于我来说,创业暂时离我而去,学位拿到手是比较重要的,未来有机会再来便是。这也是我去创业之前,做的最坏的打算:哪怕啥都捞不到,最后也学了一身技术。
我在中山大学的研究方向是面向交通场景的数据可视化。数据可视化的前提就是得有数据,交通场景的数据丰富,可视化目前都在 Web 上展示,能和前端开发结合,所以我正好可以继续学习前端开发。
说实话,在学校的时间,学习效率反而没有创业的时候高。因为在学校要看论文,学一些算法,没有太多应用场景,顶多是针对研究成果做可视化展示。
硕士三年,加上休学的一年,四年时间很快就过去了。我当时面临继续创业,还是找工作,我选择了后者。创业还是要创业的,我秉承一种观念:无论在哪里都要给自己打工,所以在公司干活,还是自己开公司独立创业,对我来说差不多,等哪天不想打卡上班了,再独立也可以。
所以 2020 年 3 月份,我开始准备春招,想着先去一个公司实习,看看行情。我当时投递了网易,腾讯,阿里,三个大厂。刚开始我比较没有底,也不知道看网上的面经,连牛客网也很少上。
结果可想而知,一面都没能通过。经此一役,我总算知道自己的水平在哪里了,依然是一个框架师,对于很多基础性的东西一问就倒。于是,我一边准备毕业指标(我们毕业需要一篇 SCI),一边恶补前端基础知识,俗称背八股文,方便面试的时候造飞机。
6-7 月,我才正式看红宝书。越看越觉得自己看晚了,里面很多基础的知识点,我看完有种恍然大悟的感觉,原来之前有些框架用 A 方案而不用 B 方案,是因为 A 方案的特性更合适框架要解决的业务场景。面经上的很多问题,在书里也找到了答案。
这两个月除了前端的 JS,CSS,HTML,我还准备了前端工程化,前端安全,网络协议,算法和数据结构,几大方向的内容。这些我都总结了,放在 Github 上,有需要的自取,我在完善中,欢迎 Star。
8-9 月,秋招开始了。真正的面试开始了,我发现自己还是很菜。刚开始笔试过不了,后来刷 Leetcode,掌握了一些技巧,能过一些公司的笔试了。
紧接着的面试也不是很顺利,为此我还在牛客网上写了一个记录贴,别人在 8 月份开始比较 Offer 了(提前批的同学),我面试还老碰壁,可见当时我有多惨。
不过面试期间,我发现了很多自己的不足,每一次面试结束,我都把知识点记下来,去查去总结,用 A4 纸手写下来,手上的资料厚厚的一叠。
最后 9 月(具体时间),终于来了第一个 Offer,深圳一加手机的前端开发工程师,一加当时还给了我 Sp,我很感激它。这家公司也是比较有调性的公司,比较注重仪式感,发 Offer 的时候,还给我们开香槟庆祝,我很喜欢那个调调。现在的手机也换成了一加。
不过,我女朋友小梁当时准备去北京读研,所以我依然在争取北京的 Offer,结果都还不错,拿到了美团和小米的 Offer。
确定好 Offer 以后,我觉得自己的技术应该能胜任公司的工作,所以没有去实习。而是转头参加了腾讯组织的小程序比赛,对小程序的那一套写法有了进一步的了解。
对前端的学习,在拿到 Offer 以后我搁置了一段时间。兴趣转移到了理财上,研究了一些套利和低风险理财,自学了很多关于理财的知识,用 Python 写了一些小工具,收获也还不错,年化收益在 15% 左右。在我看来,理财和编程一样,都是需要长期投入,并且以实践为主。
得益于之前的创业经历,加上不错的自学能力,我工作起来还算游刃有余,得到了同事们的肯定。未来希望在前端领域有所突破,尤其是用前端可视化技术提升团队效能方向。
对于编程,我觉得自学是完全 Ok 的。关键是得学以致用,光看书不练习,永远都学不会。所以我总结了学习编程最有效的三招:
推荐我自学以来看过的书籍(持续补充~):
前端:
《JavaScript 高级程序设计(第 4 版)》
《JavaScript 设计模式》
《CSS 权威指南(第四版)》
算法:
《图解算法》
《啊哈!算法》
入职快一年了,在职场中学习又有了新的体会,等我下一篇:如何在职场中自学编程。