我是如何成为一名程序员的

2,876 阅读17分钟

随这我在学校就业网提交签约信息,也就意味着我的秋招基本结束了

我也正好捋捋我是如何成为一名程序员的。

翁恺男神:拯救了我的 C 语言

在上大学之前,从来没写过程序,甚至连编程这件事情是什么都不知道,只会用电脑看小说和打游戏(而且只会4399),对计算机软硬件知识一无所知,计算机能干什么我不知道,可能唯一的憧憬就是成为一名黑客,在网络上叱咤风云。

我本科专业是通信工程,按道理和计算机没有什么关系,但是还是会有一些关于编程的课。我大一有一门《C语言程序设计》的课,它是我的编程启蒙,通过它我第一次知道编程这个东西,也是它让我有了第一次对着代码抓耳挠腮,对着电脑几个小时,但是愣是找不出 bug 在哪里,心态爆炸的感受。

但是我还是坚持了下来,一个主要原因就是中国 MOOC 这个平台,因为高数课需要在上面完成测验,我才了解的这个平台,后来发现上面有非常多的课,也有很多学校在上面开课,从此打开了我的新世界,我大学的主要课程都是在 MOOC 上学习的。

因为我的 C 语言老师讲课水平实在差点意思,很难听懂在讲什么,要知道我大一那会儿可是上课最认真的时候,但是即使这样还是听不懂。于是我就去慕课上找课程看,万幸我找到了浙江大学翁恺老师的课程,我从来没有见过一个老师居然能把 C 语言讲的这么好(这句话放到现在也是成立的),如果没有翁恺老师,很有可能我早就失去了编程的兴趣,老师从容不迫的讲课节奏,温柔舒适的嗓音让我沉迷其中,当时我跟着他的视频做了两个笔记本的笔记。

翁恺老师有一句很经典的话广为流传:

计算机的所有东西都是人做出来的,别人能想的出来的,我也一定能想的出来,在计算机里头没有任何黑魔法,所有的东西只不过是我现在不知道而已,总有一天我会把所有细节,所有内部的东西全都搞明白的。

计算机里面没有黑魔法这句话不知道激励了多少人,当然也包括了我。

虽然有翁恺老师的帮助,但是因为学习效率、学习习惯以及第一次接触编程的缘故,我的 C 语言考试没有达到自己的预期(我记得好像是 82 分),我依稀记得其中有一道题是手写冒泡排序,现在看来这么简单的题目,但是我却写不出来。

虽然 C 语言学的不咋地,但是还是激发了我对编程的兴趣。后来我在上网冲浪的时候,看到了 C++这个东西,它的英文名叫 C plus plus,看到 plus 觉得它是 C 语言的增强版,一定非常的厉害,我要学它。因为我的课程里没有它,所以我都是平时业余学习的,因为那时我刚上大学,不知道去哪里寻找资源,慕课上面那时还没有 C++ 的课程,所以我是去图书馆借的一本书进行学习的,好像叫 《C++程序设计》,一本黑皮书。

对于每一章我都会记笔记,因为代码这个东西手写太麻烦了,我在代码编辑器里面写了一遍,再抄一遍浪费时间,所以我开始尝试电子笔记,我当时还是用 Word 记的笔记,不过现在我已经找不到了,花了一个多学期记了60多篇笔记,现在回头看,很多关于 C++ 的东西都忘的差不多了,最大的收获可能时学到了面向对象相关的东西,为我后面学习其他面向对象的语言(Java、JavaScript、Python等)打下了基础。

崇新学堂:Android 开发

大一下学期,学院想开办一个崇新学堂,然后大家都可以报名,做一个东西出来,经过答辩决定是否能够进入学堂。当时王xx和贾xx小两口子找到我,希望我和他们一起做一个 Android 应用,虽然不知道他们看上我哪一点,不过我同意了,因为我也想进入崇新学堂,也就是从那时起,我接触了 Java。

因为我们想做一个 Android 应用,上网搜了一下哪本书好入门,大家都推荐 《第一行代码》,所以我就去图书馆借了这本书,对着书学习 Android 开发知识。我们所有的业余时间都花在上面了,他们学习 Java,而我跟着书学习 Android。因为这本书是讲 Android 开发的,没有介绍 Java 的部分,我当时只有 C++ 的一点知识,靠着这点功力勉强能看懂,但是整个过程很难受。

整个过程整体上我是感觉比较难受的,包括

  • 没有进度管理、没有目标
  • 学习 Android 难受,没有 Java 基础
  • 他们俩每天你侬我侬,我却要天天吃狗粮
  • 没有业余时间,难以照顾到其他课程

因为我所有的业余时间都花在上面,并且整个过程我觉得比较难受,我就有 quit 的念头。因为开发安卓应用需要安装 Android Studio,因为我的电脑的原因或者其他,怎么都安装不上,我就向他们提出了 quit 的想法,正式脱离这个组织。

他们最后成功的加入了学堂:clap:,有时候我也在想如果我当时没有退出是不是也能进入学堂,然后现在更加的牛逼。那我有没有后悔,当时肯定是有一点的,不过也只是一点点,对我那时的学习和生活几乎没有产生任何的影响。

从这个项目中我有收获什么呢? 对于 Android 的知识我现在是忘的一干二净,当时做了一个笔记本的笔记(其实就是抄书),但是从来没有打开过,在家里吃灰呢。真正学到的可能是教训,一个团队是需要一个灵魂人物的,人员调度,进度管理等等,否则 1 + 1 < 2 是必然会发生的。

另一个小小收获可能就是一本书吧,当时对于每一个立项的团队都会有 1000 元的资金,我当时申请买了一本书 《Java 编程思想》,现在还在我这里,不过这本我打开的次数不超过三次,每次都是从第一章重新开始看,现在都没看完第一章:joy:

相伴最久的语言:Java

虽然我 quit 了崇新学堂的项目,但是我却开始对 Java 感兴趣,不能说感兴趣,只是说一时之间不知道干什么,所以就选择去学习 Java,anyway,我从那时开始学习 Java 了。我当时的学习方法还是去借书看,当时借的是 《疯狂Java讲义》,挺厚的一本书,我花了小半个学期和一个暑假的时间把它看完了,然后记了三本笔记(还是抄书),有一点似懂非懂的感觉,远远谈不上灵活应用。

来到了大二学期,我迎来了电子系的一系列专业课程,《模拟电子线路》,《数字电子线路》,《高频电子线路》,《信号与系统》,《微机原理》 等,其中上面重点标注的我称为天书课程,实在是太难搞懂了,因为由于专业课程需要花费大量的时间,以及课程也没有编程的需求,所以对于编程的学习我就就此按下了,当时的我还是觉得我要去从事通信相关的工作的,所以把专业知识学号才是重要的。

时间来到大三的上个学期,开始有一些选修课了,其中就有一门 Java 程序设计的选修课,因为Java我有基础,在加上开这门课的王xx老师也比较有趣(之前的微机原理也是他上的,编写汇编程序,记忆深刻的课),我自然而然选了这门课。因为我对Java是有基础,所以老师上课讲的东西我大部分都能听懂,所以会做到第一排积极的和老师进行互动。

为了让老师加深我的印象,我得将自己营造的像个高手,但是我当时只是三脚猫功夫,很容易露馅,于是我在线下开始补习我的 Java 知识,当时是在闲鱼上花了几块钱买了一个 Java 培训机构的课程,跟着视频一步步进行学习。在学习的过程中,发现讲师用了一个笔记软件,当时觉得代码在其中显示非常的漂亮,后来了解到这是 Markdown 笔记,用的软件叫 Typora,于是我也开始尝试使用 Markdown 记笔记,因为它也支持数学公式,我其他专业课程的笔记也开始使用它,特别是《数字信号处理》,我用它写了 20 多篇文章。

我现在正是使用 Typora 来写的这篇文章:grin:。

因为我学会了 Markdown 的语法,它比使用 Word 记笔记漂亮以及方便太多了,所以在这门课课程报告中,当别的同学提交 Word 版本的报告时,我却创新的使用了 Markdown 来写我的课程报告,并将其提交,正是这样让老师注意到了我

老师的联系:学习前端

时间来到大三的寒假,我突然在 QQ 上收到一位同学的消息,说王xx老师找我有事,给了我他的电话号码,让我联系他,我怀着忐忑的心情拨打了电话,一番寒暄之后,我了解到原来是我的实验报告的缘故,因为我是 Markdown 写的报告,在计算机界是比较常见的格式,但是在我们电子系使用的人很少,所以老师可能感觉到了我对计算机的兴趣,所以特意联系我,指导我以后的学习方向,希望以后能一起合作开发一些项目,因为老师对前端看好以及实验室可能比较缺少前端开发,所以推荐我学习前端(当时我还是想搞后端的,毕竟我在 Java 上花了那么多的时间,也比较熟)。

此时的我对于前端真完全的小白,当时我连 HTML、CSS、JavaScript 都没有听说过。但是我还是接受了挑战,从零开始学习,因为我学习 Java 是跟一个培训机构(我明说了,是黑马程序员)的视频学的,所以我继续选择该机构的前端视频进行学习。

经过我在寒假夜以继日的学习,终于把 HTMLCSSJavaScript 学完了,当然只是过了一遍,写了一些小 demo,还不是特别的熟练。然后开学去找老师,跟老师说学习进度,然后老师让我去学习 React,给我讲现在的前端是基于组件的开发,巴拉巴拉,我当时真的是问号脸,但我当时还是表示 OK,我回去就学。

因为我的找的培训视频是比较早的,没有 React 相关的内容,于是我又开始去图书馆借书以及寻找新的视频进行学习,学习新东西真的好难,我现在坐在这里码字,回想过去自己在图书馆努力的啃书,对着视频敲代码,都感觉那是一段艰难的岁月。

由于大三学业的压力还是比较重的,专业课都比较重要而且难,并且特别是学校有选修课学分的要求,为了大四专心准备考研不上课,一般会在这个学期将所有的选修课选完。因为不确定自己以后会从事什么工作,以及真的感觉自己什么都不会,也找不到好的工作,所以准备考研,加上学习 React 时受到的挫折,学习前端的这件事情就被搁置了。

秋招:看看自己什么水平

时间来到大四的上学期,我已经准备考研三四个月了,这个时候也有一些公司陆陆续续开展秋招了,虽然我不准备去工作,但是我还是想看看我的水平是否能找到一个工作,所以我也打印了几份简历,准备面几家公司。我总共就面了两家公司,面的都是 Java 开发工程师,虽然很多的时间学前端去了,我的 Java 水平也没有精进,但是也比我当时的前端水平强,所以我投的是 Java 开发。

第一次面试的公司是中兴,在面试之前有一个宣讲会,在宣讲会上我特意问了问题面试看的是什么能力,他们说是基础,完了宣讲完之后我又特意打听了一下,他们表示只考察基础,所以我放心的投递了简历,因为我觉得我 Java 的基础还算 OK。但是没想到人家的基础和咱想的不一样,我想的 Java 基础语法,人家问的 TCP 三次握手,使用过什么框架,会不会 Spring 啊,我支支吾吾回答了半天,回答很差劲,面试当然没有通过。

第二次面试的是浪潮,他们是群面,七八人一起进去,依次坐好,然后介绍自己。当时就两个本科生,一个是我,另一个是计院的,其他的都是研究生。介绍完之后,依次问问题,当时问了我会不会框架,我说不会,我当时连框架是什么都不知道,是一个软件吗? 然后就问了我一个非常简单的问题,然后就结束了,当然这次面试又失败了。

这两次面试,两个面试官都问了我会不会框架,我当时就十分的好奇,框架到底是什么,虽然当时我还在考研,当我还是每天抽一到两个小时学习 Java,学了一两个月,终于当我学习完 SSM 的时候(然而现在流行的是 Spring Boot),终于知道了框架是什么,然后就没有继续学了,专心的准备考研去了。

考研完了以后,在学校学了几天 HTML5CSS3 的东西,然后就收拾东西回家去了,只是没有想到的是,下次回来的时候却是半年后。

疫情:复试和前端

我的初试成绩还算理想,以 385 分的成绩成功的进入了复试,我能考这么高是我真的没有想到的,因为我那年的数学真的特别难,我好像只考了 106 分,但是没有想到我的英语和政治这么给力,将我的总分拉了上来。虽然进入了复试,但是没有想到复试竟是地狱难度,60 进 10,我的初试分数刚好是在第 10 名。因为疫情的关系,复试的时间迟迟没有确定,我在家也无法安心复习。

在准备复试的期间,王xx老师再一次的联系了我,具体干什么我忘了,然后我就开始学习 React 相关的内容,当时老师给我推荐了一个网页 《React小书》,它写的实在是太好了,我靠它成功了入门了 React,并与老师配合,写了一个在线博客网站,当时为了能让别人访问,我还特地买了域名,进行了备案,当然这个网站早就下线了,而我的域名也早就过期了。

复试发挥的不是很好,没能进入前 10,好在可以进行校内调剂,最后被调剂到了本部的电磁场与微波专业,我真的非常害怕电磁场与微波,我大二有一门 《电磁场与电磁波》 专业课,我学这门课头发都快被我薅没了,这是发自内心的害怕,我当时有想过要不要二战,或者直接找工作,但是在疫情这种情况下,工作实在不好找,我也没有这个精气神去二战了,所以还是选择来读书了。

研究生:深入钻研前端

虽然来到了微波工程系,但是导师给我分配的课题与微波等方面无关,因为本科毕设做过深度学习方面的内容,所以决定让我做深度学习方面的研究,虽然深度学习我也不是很熟,但是相比于微波,算是很好的选择了,坏处就是根本找不到人请教,没有人搞深度学习,全都得靠自己摸索。

我也基本确定了自己的道路,那就是去互联网公司,因为我在疫情以及暑假期间都在学习前端,我对这方面也比较感兴趣,所以基本确定了我是想成为一名前端工程师。有了目标就好办,那就是天天学呗,所以除了研一需要上课之外,业余时间我都用来学习前端了,在这个期间看了好几本经典书 《JavaScript高级程序设计》《JavaScript忍者秘籍》《深入理解ES6》《深入浅出NodeJS》 等,将我的 JavaScript 基础打造的无比的扎实,这些书都看过都不止一遍,有的书我甚至看了三四遍,并开始经营自己的博客,发表了多篇学习笔记以及学习心得。

但是此时我还没有什么项目经历,如果想去互联网大厂的话,基本是需要项目经历和实习经历的,所以研一下学期(哈工大研究生两年制,2022年改为三年)我就开始向大厂投递实习简历,说实话,我是非常紧张的,因为我从来没有面过互联网公司,怕自己达不到他们的要求,当时其实就是抱着试一试的心态,投了阿里美团字节三家公司,没有想到我居然全部都通过了,拿到了 offer,这些 offer 给了我很大的自信,原来我不菜。

综合实习薪资以及实习时间要求,我选择去了阿里高德实习,我在这里实习了两个多月,感受了一下工作流程,工作氛围,最后也是成功的拿到了转正的 offer。因为师兄们都非常 nice(特别是高建师兄),阿里给出的薪酬也达到了我的预期,所以我就接受了 offer,结束了我的秋招。

综上,便是我成为一名前端工程师的全部过程,我的整个过程并不是一番风顺,其中的苦与甜也只有我一人清楚,在我刚进入大学校门时我也从来没有想到我会成为一名程序员,所以未来会怎么样谁说的定呢? 你只需要确定一个目标,然后为之努力奋斗便是,至于是什么样的结果,时间最终会告诉你答案。