你是那个十五六岁偷偷学计算机的中学生吗

最近腾讯内部 bbs 上有个问题是 “你是那个十五、六岁就偷偷学计算机的中学生吗?”
记录下自己的回答

收到封培认识的小伙伴的邀请,看到这个问题一时竟有些激动得说不出话。过往昔事一件件浮现在眼前。

我出生在衡水的一个村子中,后来四五岁的时候为了上学搬到了附近的小镇上。大概二三年级的时候第一次接触电脑,感觉第一眼看到时就好奇计算机是怎么实现的,怎样才能在电脑上做出自己想要的功能。这种好奇逐渐在心中发酵,成了其它好奇无法替代的梦想。可小时在的村子与城镇在信息上都比较闭塞,周围也没有人听说过编程一词,因此当时也一直不知道应该如何写软件。我也没能赶上许多回答问题者所说的小霸王时代,小时候好像完全没有听说过这种东西。还记得小学时候在百度搜索 “怎么编程”、“怎么创造软件” 类似的问题,却总找不到答案。那个时候还没听说过 C 语言,完全找不到学习编程的入口。假如当时有听说过 C 语言,在百度搜索 C 语言应该会好些吧。小时候虽然未能开始学习编程,在起跑线上晚了一步,但编程的梦想却在心底深深扎根。那时候还沉迷在从家里偷钱去网吧打游戏,跑跑卡丁车、QQ 华夏、QQ 音速、魔域、流星蝴蝶剑等等等等。

初中时候去堂哥家玩,偶然间发现了一本 C 语言的教程书。谁能想到堂哥没能学会的东西,却给我打开了一扇大门。我偷偷地把这本书带回了家,现在看来,这本书的质量并不高,讲东西也很模糊不透彻,它却让我了解到这世上有一种叫 C 语言的东西,就像一心想造房子的人知道了这世上有锤子钉子这些工具。我没能看懂这本书,因为它讲解知识点实在是差到极致。我在百度上搜索 C 语言的教程,找了一部教学视频看。当时的老师还是用的 WinTC 编译器,写着较古老的 C 语言代码。我的第一行代码是跟着这个老师写的,第一行代码写的是什么我已经忘记了,反正不是极具仪式感的 hello world,现在想来有些遗憾吧。我跟着视频学了几节,却觉得这老师讲得也不好(也可能我没有认真听),讲到循环那里的时候已经完全不能理解。记得当时还没能理解 = 号是赋值的意思,交换 a, b 值的那段代码 t=a; a=b; b=t 让我崩溃,a b 两个不同的值怎么会相等!我在这边放弃了,没有继续看他的视频去学习。

搁置了一段时间后,大约是初一寒假的时候了解到郝斌 《C 语言 180 讲》教学视频,费了很长时间才找到了资源,这个资源现在还记得很清楚,在土豆网上搜索 Bunny_Leo 用户,就可以在他上传的视频中就可以看到这 180 讲。如果说前面的一切只是铺垫的话,那我到这里才开始真正的学习编程,郝斌是我编程的启蒙老师。郝斌老师的 180 讲真的很详细,看他的视频我没有几乎没有遇到一点点的困难,即使是学习指针时,也觉得稀疏平常,不知道为什么大家都说它难。这套课程是在授课时候录的,那时的我无论如何都想不明白,这么好的老师,这么有意思的课程,为什么会有人在课上睡觉,为什么老师提问大家一片沉默,没人积极回答,也不知道为什么我觉得很简单的问题,被点名后却吞吞吐吐回答不上来。这些事情我上了大学才明白。当时真的好想成为郝斌的学生啊,可以坐在真实的教室里听他讲课,也好想在现实中能有个教我的老师,遇到想不通的问题可以问他。这次学习中也有遇到一些挫折困难,当时学函数的时候,老师写了个 isPrime() 函数来判断一个数字是否是素数,这个函数判断素数的原理我能理解,却无论如都不能理解 if( isPrime(a) ) 为什么能判断 a 是不是一个质数,为什么 if 会知道这里面发生了什么。我想了很久都想不通,自信心很受打击,感觉自己很笨,这个都理解不了。后面一天的时候灵光一现,突然想到 isPrime(a) 其实是一个值,是真或假,if 就可以判断了,一下豁然开朗,感觉自己已经没有什么困惑的了。后面大学里学习底层原理的时候发现答案就是我想的那样,函数会返回一个值,告诉 if 结果,与我当初的想象如出一辙。但当时想不通的无力感或许真的只有身边没有老师的自学者才知其中味吧。

当时也了解到有一本书叫 《C Prime Plus》,当时是寒假,快过年,我千辛万苦地在网上找到了资源,打算带笔记本电脑回没网的老家过年时学习。我下了很多资源,下载完成后却都无论如何都打不开,或者电脑整个卡住,或者是打开发现是乱码,不知道为什么会这样,又有了那种无助感。现在想来也觉得可笑,下载的资源是 pdf,我却是用记事本打开,因为当时不知道 pdf 是什么,只觉得书的话肯定是文字组成,当然能用 txt 打开。因为打不开资源,于是那年过年我又玩了七八天的单机游戏,在偶尔空暇还用已学过的知识写了个最简单的计算器。后来初三暑假我斥巨资 42 元买下了这本书,才得以第一次看到里面内容,真是本好书啊。也记得那时候好奇怎么计算平方根,于是在电脑上尝试性地写下了 a*a=2;printf("%d",a) 的代码,结果发现这种方法行不通。当然也写过 shutdown -s -t 0 -c "洗洗睡吧",改名成你懂的.bat,发送给好友整蛊。因为让一个没有保存文件的女同学电脑关机,我被那女的数落了好几年,或许这就是我这么多年单身的原因吧。

一开始学习的经历大致如此,有了些基础后后面学习就简单了很多。初中高中顺带学了郝斌的 Java、数据结构、数据库教学视频。高中是住宿式学校,禁止带一切电子产品(衡水的教育模式,你懂的),一个月只放一天半假,在学校时每每都渴望着放假,放假时便抓紧时间打游戏、看教学视频。记不住,就把示例代码抄在纸上,带到学校中去理解、学习。在学校时,不知道有多少次实在忍不住寂寞,在自习课上背着手写较为复杂的链表代码、冒泡排序,郝斌视频中的链表代码,不知道我在纸上写了多少遍。很多人面试时害怕的手撕代码,我并不是那么畏惧,或许原因就于此吧。(不太发达的小城镇,对信赛毫无概念,看到大家高中时可以跑到机房学习算法、敲代码,还有老师教,十分羡慕。)同桌是发小,还教他编程知识,他不学我强迫着他听的那种。如果当时能接触到红黑树,那我估计就能在学校中手写红黑树代码了,如果是这样积累下来,我肯定比现在厉害吧,滑稽。学校发了本微机教材,惊喜地发现里面有编程部分,虽然只有短短几十页,却足以让我高兴许久,一点点品味,给苦苦的高中找了些甜味。教材里是 VB,于是我也学会了 VB 一些基础的东西,回家在电脑上敲出,这也是我第一个带界面的程序,当时觉得带界面的东西真酷,C 语言都是黑窗口真垃圾,哈哈。几次放假,就用 VB 给家里写了个商店管理程序,遇到困难想不通,就记在纸上,回到学校中思考解决方案。当时最难的是不知道在输入框中输入东西,我怎么才能把他放入 SQL 语句(当时不会字符串拼接)。可能用于两三个月才学会这项操作。初中高中时候还尝试在贴吧拜师,写什么真心求师父,我自学能力强,数学有一定基础,最终却没能如愿找到一个师父,还曾和贴吧里一个六七十的大爷聊过一下午,让他教我 VB。城镇还不算太发达,老一代的人估计也没有编程的概念,初中时候父母亲人一开始都很反对我学习编程,想让我学医。大伯说编程是顶级聪明的人才学懂的,我们家脑子不行,搞不来数学,出不了这种人,家人说我是痴心妄想、提着包上门修电脑等等。但从小扎根的梦想哪里是别人能撼动的,我固执己见,一直坚持着。再到后面做出商店管理程序父母才真正去听我编程的梦想吧。再后面父母看我坚持,也就支援了,开始支持我学编程,同意我的梦想,虽然他们还是希望我能学医。我将梦想写在纸条上,放进瓶子里,希望在后来的某日让自己想起过往的事,希望能在受到挫折时激励自己。

后面高考未能考入梦想三年的学校,进了南邮,就憋着一口气,想着一定要证明自己。想起初中高中时候在群里看到搞 NOIP 的很厉害,我去了解,发现 NOIP 是中学时候的竞赛,大学不能参加了,感觉很可惜。后面又了解到大学里面的是 ACM,就硬着头皮参加了,第一次参加校队选拔的时候我整个人傻了,这踏马是个啥。于是不出预料地在 ACM 算法题里用二重指针开了动态二维数组。按下三年训练的辛酸不提,在区域赛滚榜的时候,我们队超过自己心中梦想大学队的一刻,自己心中突然一下五味杂陈,有些想哭,却告诉自己要坚强。当初憋着的那口气终于得到舒缓,开始一点点解开自己的心结,开始告诉自己学校不重要。自己的大学并不是特别努力,没能如初中高中时想象的那般沉浸学习编程,没能达到当初所幻想的实力,现在也很后悔这点。

再后来的事就是今年毕业,入职腾讯,实现了大学里的大场梦,也算是守住了初心。“名不显时心不朽,再挑灯火看文章”,希望自己继续在鹅厂继续自己的故事吧。