- Published on
我为什么如此热爱计算机
- Authors

- Name
- 长风
今年,我十八岁了。十八年以来,我越来越感觉自己与计算机脱离不了干系。计算机,是人类最伟大的艺术品;而我,想要探索这个精密艺术品的秘密。谨以此,纪念我走上研究计算机道路的历程。
混沌状态:我要学吗?学什么?
这个阶段主要是学前班和小学时期的,过程十分曲折。在这个过程中,我逐渐坚定了要学习计算机的信念。
计算机?那不是游戏机吗
其实,我一开始并不喜欢研究计算机。当时的我还处在四五岁,正值幼儿园时期。家里开了一家打印店,正好有两三台电脑。如果要问那个时候的我,电脑是什么,我肯定会回答:那不就是游戏机吗?
可不是嘛,当时QQ游戏风靡。QQ游戏只是一个平台,实际上有多款游戏运行在这个平台上。我至今仍然记得,某个账号的积分已经变成了负数,而且这个数值实在是太离谱了~~,或许原因是我的骚操作是在太离谱了~~,以至于系统不再允许进入游戏了。当时让我懊恼了好久。
除了QQ游戏,还有这个系统本身也很好玩。当时打印店里所有的电脑都是Windows XP系统,我最喜欢的就是在桌面上新建文件夹,新建文件,然后将他们拖动到回收站,将他们删除的时候,会有一声「销魂的」碎纸声。不过当时我好像没有摸清楚规律,这个声音的出现貌似是随机的,要是一下子删除了许多文件,但是没有声音,还是会让我伤心好一阵的。这种伤心往往会化为疯狂新建文件的动力。
找到最初的方向
真正出现实际意义上的转变,恐怕是在小学的第一节课。当时老师不知道是用了什么神奇的魔法,让电脑屏幕上出现了整齐的元素,还能很听话地根据老师的指令配合讲解。这也太神奇了吧!电脑,原来不只能用来玩游戏啊!
于是,我暗暗记下了窗口的软件标题:PowerPoint。
注意,这很重要,我认为这是我开始探索电脑为什么可以做某些事情的起点。
回家一看,嘿,巧了,电脑上不是也有这个同款名字的软件吗?这时,这个软件的图标让我感到了一丝熟悉。我貌似在上一个阶段探索电脑系统的时候点开过,不过不知道这个软件有何作用,只能随便点点然后关掉。后来,在我到处瞎点,左点右点之下,我居然相对完整地探索了整个软件的功能,我也能做出PPT来了!
从那以后,我开始感觉自己在看到某些事物之后,会对这个事物是怎样做到的发问了。其实,当时我想要专心研究的,可能并不是计算机,而是各种神奇的事物是如何实现的。更重要的是,我要如何去实现这个事物,就像我看到老师用「神奇的魔法」操控电脑之后,我也可以通过学习做到一样的事情。
后来研究的,是电影特效。促使我想研究特效的,应该是《阿凡达》,于2009年上映,当时我六岁,考虑到小学时期也是从六岁开始,我的印象也比较深,应该是这部影片无误了。可惜的是,在网上转了半天,却怎么也没有一个教程,教你「如何从零开始制作电影特效」。而且我的想法也是十分的模糊,你说要模仿《阿凡达》做出他那样的影片吧,做不到。哪怕是想要实现其中的一个场景,都无比艰难。我曾无数次梦想过自己做出了逼真的「爆炸效果」,可惜这个梦想直到现在都没有实现。
更可恶的是,越来越多的证据表明,根本就没有一个「专门用来制作电影特效的软件」。年幼的我逐渐意识到,这背后需要无数人的分工协作,不是我一个人就能做到的。那好吧,我就学习一下怎么做小动画吧。当时Flash动画盛行,看起来挺简单,更重要的是,这玩意儿能做视频!虽然效果简简单单,但是他至少是视频啊。要知道,在接触到Flash这款软件之前,我甚至都没有成功生成过一支视频。
于是,以学习制作影视特效作为最终目标,以学习Flash小动画制作为基本目标,我踏上了学习动画的旅程。恰巧小学课堂有开设Flash动画制作讲堂,还能代表学校去参赛。这种大好机会我自然是抓住了的。
从Flash动画到Flash游戏:初次接触编程语言
学习做Flash动画自然是一方面,在学习的过程中,自然也免不了摸鱼。
可能是QQ游戏太让我不快了,上了小学,我更喜欢玩4399小游戏。当时吸引我的,除了赛尔号这样的大型页游,更多的是形形色色的小游戏。二战前线2、森林冰火人系列、挖地小子、勇者之路都是我童年的回忆。通过及其偶然的机会,我意识到这些游戏居然是用Flash做的(毕竟名字就叫做Flash游戏嘛)。
其实一开始我并没有觉得有什么不妥,可能只是碰巧有一样的名字而已。因为这两者之间的区别实在是太大了。一边是只能自行播放的动画,一边是能够与玩家互动的游戏。这怎么可能一样呢,对吧?
可是,感觉有某种神奇的力量,促使我继续深入研究下去。最终,我得到了惊人的发现:Flash动画和Flash游戏当中的Flash一词,指的真的是同一个东西!
感觉有一堵墙瞬间打通了。
「那这些游戏是怎么做出来的呢?」,我问道。
原来是其中插入了编程元素,是这些神秘的英文字母,让动画在某处暂停,然后在点击按钮之后又恢复正常,还能监听键盘操作,从而控制小人移动。Flash使用的编程语言,也就成为了学习的第一门编程语言:Flash ActionScript。当时还为学习这种神秘语言而买了几本书。
最后,在Flash动画制作比赛上,我拿了个三等奖,主要是实在做不出什么。但是游戏编程不一样,我总感觉这其中有很多值得我探索的空间。越发展到后来,游戏编程当中的「游戏」已经差不多可以删掉了。我开始对编程感兴趣了。这时的我接触到了其他的编程语言,才逐渐想起一个最根本的问题:计算机是怎么做出来的?
当时对电脑的认知还停留在软件层面,关于硬件则暂时没有什么兴趣,甚至还没有认识到机箱里到底是什么东西,所以上此处说的「计算机是怎么做出来的」这一问题,主要指的是软件开发层面的问题。
对吼,像什么Windows XP、Office办公套件、网页浏览器、杀毒软件、已经我特别钟爱的Flash小游戏,这些都是怎么来的?总不可能是从天上掉下来的,对吧?一开始习以为常的东西,貌似也不是那样唾手可得的。再深入研究,我发现了掌握了编程语言——这种神秘的、英文字母和特殊符号的奇怪组合——就可以创造出这一切。当然,想要创造出这样的事物,也不是一个人能完成的(特别简单的Flash小游戏除外)。
这时,摆在我面前的有两条路,正如当时Flash给我的选择一样。一种是继续学习「感性的」动画制作,另一种是走上新开辟的「理性的」编程。**这真的是特别关键的抉择了,综合考虑之下,我选择了后者。**主要原因是动画制作的厂商总是把自己用来制作动画的软件藏着掖着,我也用不着,而且我还了解到,不同公司制作动画的工作流程甚至都是不一样的。但是编程就不一样了,大家都在用一样的工具编程,我也可以用到与开发Windows XP这样神仙级别软件的工程师使用同一款开发工具,这让我感到非常快乐。很明显,在做出了这个决定之后,我的人生轨迹发生了重大的改变。
于是,在获得了Flash动画制作奖项之后,我放弃了继续学习制作动画,转而学习编程语言。当时新学的,就是C++。
当时我年少轻狂,居然想早早掌握这门大师级别的语言。在类的编写中打了几个跟头,然后就放弃了。其原因可能是学习周期实在太长,久久未见成效,而那本书有过于枯燥乏味,加之初中升学压力临近,无奈之下,只能放弃了。没想到,错有错着,这里学到的一点点C++知识和编程逻辑,又为我接下来进一步走上学习计算机的道路埋下了伏笔。
孤独的探索之路
这是指初中时期,这是一段漫长而又孤独的时光。
初中信息学竞赛
刚刚升入初中,我就在教室黑板旁边一张不起眼的小纸片上发现了学校举办信息学奥赛的消息。一看,「欢迎有热爱编程的同学加入」,那不就是给我发的广告吗?我兴高采烈地跑去报名了。
当时学的具体是什么编程语言,我恐怕已经忘记了,不过很有可能是
Pascal,这是看IDE的独有风格看出来的。
结果,让人大跌眼镜的是,整个学校居然只有我一个人报名参加了信息学竞赛。
没错,是整个学校,算上了初二初三的学长们,也只有我一个人。这也太孤单了吧!
可能是看到只有一个学生,老师也感到十分无奈。他有一本教Pascal的书,每次等到上课了,就把书给我,我拿着书在电脑上敲敲敲,写了写小程序。不过,当时我一心想着摸鱼。我学习五笔打字刚好就是那个时候,每次老师一把书给我,我就会打开记事本软件在上面做笔记,现在看来,其实与其说那些是笔记,不如说是在对着书打字。哎呀,我当时到底是去学编程的还是去练打字的呀?我现在也说不清。
最后掌握了函数的编写,就开始打退堂鼓了,实在是太寂寞了!你想想,每天下午放学之后,别的同学都成群结队地跑去吃饭,而我要对着电脑在打不明所以的代码,而且没有老师教授,也没有同学一起研究,这怎么能忍?
从我看到信息学奥赛的消息,到我感到孤单,再到最后放弃,前后仅有一个月的时间。
通过这一次的经历,我对于计算机的认识更上了一层楼。小学时期学习C++十分不深入,一部分原因是那本一上来就在讲类的编程书,根本没有循序渐进的理念,还有一部分原因是我自己的英文水平实在是太糟糕,我要怎么在不认识public/private这两个单词是什么意思的情况下打出这两个单词?但是不得不说,到了初中学的这一点点Pascal语言,真的是浅显易懂,让我对于编程的思想有了进一步的了解,也为后来学习的进一步深入打下了基础。
这里的编程思想,主要是指函数思想和适应计算机那种严谨思维。
计算机是怎么做出来的?
前面曾经讲过,我在小学时期对于计算机的认识还停留在软件层面,并没有思考过在硬件上计算机是怎么实现的。打破这一个观点的,恐怕是一次神奇的电脑店加装「CD郎」的时候。
当时我真的说不出这个「CD郎」为什么要这样叫,实际上这是CD/DVD光碟的读写设备。我问妈妈:「这个『CD郎』里面的『LONG』怎么写?」妈妈也说不出来。只是说大家都这么叫,所以只要跟着叫就好了。
在学习了一段时间的英语之后,我逐渐猜测,这其实是CD Loader的叫法,广东人总有音译外来词的习惯,现在想想可能也不奇怪了。
我帮忙举着机箱,拿到电脑店里,跟师傅说:「装一个『CD郎』。」之间师傅拆开机箱,我看到了令人震惊的一幕:原来电脑机箱是可以拆开的~~(雾)~~。拆开之后,虽然有很多线在里面弯弯绕绕特别复杂,也不知道原理,但至少打破了我对电脑机箱的盲目崇拜:他里面也应该遵循跟外部世界一样的规律,而不是一个神秘的黑盒子。
装好了「CD郎」,我回家上网查询资料,了解到电脑是由那些成分组成的,又是怎么运行的。一时间学到了许多东西。
了解了计算机是怎么做出来的之后,过了几个月,很巧的是,我的舅舅淘汰了一台旧机器,就把那台机器送给了我。以前家里只有一台电脑,我也不敢拆,怕拆坏了,现在有了两台,那我不就可以随便拆了吗?于是又是一番搜罗资料,把电脑全部拆成零件:电源卸下来,主板拆下来,所有的电线全部拔掉,取下所有内存条和硬盘……
我的印象中,当时是没有拆CPU的,只是看了一下网上的教程。因为听说拆CPU再装回去的话,需要在散热器的底部涂上散热硅脂保持导热性能良好,而我又没有多余的散热硅脂,只好不拆作罢。
接下来,把眼前这一团散乱的零件全部按照我的想法拼装起来,插上电源,按下开机键。没想到,我的第一次拆机-装机就获得了如此的成功:电脑成功启动了,也没有出现什么异常!
这个给了我很大信心。我就想:电脑硬件不是也挺好玩的嘛?正是这种想法,给我走上了硬件编程学习的道路埋下了伏笔。
创客培训
参加创客培训,已经是初二的事情了。距离上文所说的两件事好像时间也挺久远的了。而且,能参加这一次创客培训,居然是「机缘巧合」影响的结果。
上课时突然听到级长广播,说要请「对电脑有一定了解,或者对编程感兴趣的同学」到办公室集合。我一听,愣住了,心里在进行激烈的斗争。不知道这一次会不会也是只有我一个人去呢?可是,不去就永远不会知道答案,甚至还会错失了这宝贵的机会。等我下定决心要去的时候,距离广播结束已经过去两分钟了。但是,我还是铆足了勇气。
来,站起来,跟老师打声招呼,走出教室就好了。
之所以回忆起来是初二的事情,就是因为当时听到这个广播的时候正上着物理课,而初二开始才有物理课。我还记得教授物理课程的张老师慈祥地目送我离开教室,现在回想起来好像还有点害羞。
到了办公室,发现有好十几位同学都来了,顿时舒了一口气,这个活动总不至于只有我一个人孤独地坚持下去了。
听级长一顿龙飞凤舞的讲解之后,我们发现,原来这是我们市科技馆举办的活动,要培养一批创客参加选拔,在这次选拔中脱颖而出者可以获得前往海南文昌卫星发射基地发射自己组建的卫星。
什么是创客?
创客就是一群「通过编程技术,控制机器人、自动化设备等物件来提高生活效率、解决实际问题」的人。
创客的核心技术就在于控制计算机来完成某些事情。这种编程方式叫做「面向硬件的编程」,是我以前从来没有接触过的新领域。不过很巧的是,我们学的编程语言Arduino,跟C/C++是同系列的,继承了C/C++的理念和形式。这就很巧了啊,我以前不是学过吗?
不过,这是后话了。当时我们使用的是图形化编程,但是在初一时期学习的Pascal基础依然给我学习Arduino带来的极大的便利,因为我已经理解了编程的思想,所以学习起来也显得特别轻松。
可惜的是,最后我并没有成功拿到参加放卫星活动的名额。事后来看,其原因应该是整个活动并不是编程技术的比拼,而是创新、创意的比拼。当时的一次调研:「如果让你放卫星,你会怎样制作这颗卫星?」其实我并没有很认真地完成。当时我正沉浸于搞更加高深的Arduino编程呢。临走之前,老师赠送了我一些Arduino开发版和传感器、电机。还是相当感谢老师的鼓励的。
回到家之后,我又开始捣鼓Arduino编程了。我注意到,我们当时学习的时候使用的图形编程软件貌似有将这些「搭好的积木」转化为Arduino代码的功能。那既然这么麻烦,我为什么不直接写Arduino代码呢?于是又买了一本书。
什么是「图形化编程」?
图形化编程,又称可视化编程,就是将编程语句拆分成一块一块的「积木」,通过对积木进行参数设置和顺序排列,来达到编写程序的目的。一般认为图形化编程的开发效率要远远低于直接使用代码编程。
因为有了小学时期的C++基础,学起Arduino语言来比较简单。很可惜的是,由于外界条件不允许,在接受了老师的赠礼之后我再也没有机会购买更多的传感器、电机一类的玩意儿。曾经有想过买一块树莓派来玩一玩,但是价格实在高昂,负担不起。但是最核心的原因,还是在我钻研了硬件开发这条道路之后,感觉自己的兴趣根本就不在硬件开发上。我后来了解了一下,还有专门开发软件的工程师,可能我想要的就是开发软件吧。
再入迷茫时期
我知道自己很想学软件开发,可是问题是在当时的特殊背景下,我一个人根本就推进不下去。身边根本就没有想要一起研究的同学,也没有老师指导。看书学编程对于当时的我来说已经可行,可是又受限于初中升高中的升学压力,在初二弄完创客培训之后,一直到中考结束,我都没怎么再继续探索。当时很迷茫,因为就算知道前进的方向,总有「一只无形的大手」拽着我不让我前进。
黄金时代:我不管了,我就要学
黄金时代当然指的是高中时期,在这三年当中,我的计算机技术突飞猛进,达到了全新的高度。
重回信息学竞赛
说来还真是巧合,初中的时候参加了信息学竞赛却因为没有人一同探索而草草放弃,等到高中开学,又让我碰到了机会。
当时是开学报到,一切流程结束之后,那位老师给我拿了两张海报。其中一张已不记得是什么内容,但是另外一张却让我印象尤深——那是信息学竞赛的宣传。基于初中同学对我电脑技术的大力吹捧,加上我对计算机的热情,我毫不犹豫就报了名。
为什么会有「初中同学对我电脑技术的大力吹捧」?
这还得从小学捣鼓PPT的时候说起。主要原因恐怕是当时的我掌握了同龄人所没有的PPT制作技能,在每次上台展示的时候我的PPT总是特别「闪亮」,尽管我并不这么认为,他们也能做到,只是出于种种原因没办法做到而已。
但毋庸置疑,这些「吹捧」确实在我做出这个决定的关键时刻起到了推波助澜的作用。
从现在的眼光看,这次报名可谓是惊天动地的大事变。如果当时我没有报名,我绝对考不上什么重点大学。关于这点,我会专门出一个专栏讲述。但需要明确的是,我没有获得信息学竞赛的降分资格,只是在信息学竞赛时认识的同学对我影响很深远。
高中的信息学竞赛,学的刚好就是C++!天哪,我真的就是在换着花样学C++,不是吗?
此言何意啊?
小学时期自学C++,因为书过于难读,放弃;初中时期,学习的Arduino语言实际上内部原理就是C/C++,两者互通。
老师花了一个星期就讲完了信息学竞赛所需掌握的C++语言知识,然后就开始了神奇的算法教学。这对于我来说是全新的领域。我以前貌似从来没有接触过算法呢!
高中的信息学竞赛,因为有同学陪伴而不孤单,也让我坚持学了一年半,最后获得省二等奖退役。但是,值得一提的是,刚开始招新的时候,整间教室座无虚席,到后来人数越来越少,最后只剩下了前三排的十几位同学坚持到了最后。啊,如果我初中的时候也有那么多人尝试学信息学竞赛,我可能就不会放弃了吧。
高中信息学竞赛的学习彻底打通了「任督二脉」,至少我能完整地掌握一门语言了:C++ without Class
何出此言啊?
因为C++实际上是面向对象的编程,但是信息学竞赛不需要用到面向对象的部分,所以我就把自己掌握的语言取名为C++ without Class了。
还有一件趣事,便是C++早期曾名C with Class,那我学的岂不就是 "C with Class" but without Class ,也就是C语言咯~~(雾)~~。
到这里,我对于软件开发的探索之路才刚刚开始。
神奇的疫情:我要摸鱼!
摸鱼起源
我退出信息学竞赛,是在2019年年末。接下来,2020年的寒假,席卷全国的疫情直接阻断了我回校的步伐,改为了网上授课。
诶,网课有什么意思?说实话,一开始我可能天天都在摸鱼,毕竟不能跟老师「对线」,上课就没有了乐趣。很多时候,我都是挂着网课窗口自己看书学的。左想想,右想想,既然要摸鱼,我为什么不学点什么东西呢?
当时的我天天都在逛哔哩哔哩,然后发现哔哩哔哩上有一个叫做3Blue1Brown的UP主,他制作的视频特别精美,我也想学。可是人家这么忙,我哪儿好意思问嘛……但是,我发现一位跟我同年,同为OIer的UP主范滇东他居然也发了风格类似的同款视频,于是我就问了一下他是怎么做视频的,又是怎么学的。很高兴收到了他的指导,加入了Manim-Kindergarten(当时还没有名字),不过想要加入,先决条件就是要会Python。
发现了吗?这里推动我学习Python的居然还是视频制作!只不过现在我想要的,不再是那种「影视特效」了。
出于以上原因,我选择了在摸鱼时间学Python,一门全新的简单的编程语言。
诶,你别说,这Python还挺有意思,至少我看的那本书都很有意思,而且又简单、又美观,这不人见人爱吗,哈哈。
当时上课有规定时间表,哎,又是中考时的那只「无形的大手」。不过这一次,老师也管不了我。我直接早上五点半爬起来,晚上学到十二点再睡觉,就是为了能挤出3个半小时的时间来学Python。在这种高强度的学习之下过去了一个星期左右,我看完了Python的语法部分,也对更加进阶的部分有所了解。
这里说的更加进阶,指的是跟Python的「魔术方法」息息相关的成员函数。
就这样,在摸鱼中学了Python,但是更加重要的是,Python是一门面向对象的编程语言,刚好把我在C++时期没有学过的知识窟窿给补上了。
做个UP主
凭借着Python知识,我成功地进入了Manim-Kindergarten,成为了早期成员之一。后来通过群友的各种资料,学习了Manim动画引擎的相关知识,也具备制作动画的能力了。一次在群里提交的作业,被群主整合到一起,成为了我哔哩哔哩投稿的第一个视频。
以防你不知道,什么是Manim动画引擎?
这是一款以Python为基础的,由程序控制的动画制作引擎。更直白地说,用Manim制作的视频都是「打代码打出来的」。
后来,既然都开了个头,那就一直做下去吧。不过我不太擅长像3Blue1Brown一样讲解数学,那我还是先从简单的部分开始讲起吧:于是就选择了高中信息学竞赛时期所学习到的最基础的部分,做成视频,陆续投稿了几次。
装个机吧
还记得初中时期曾经拆过一台机器吗?家里的电脑实在是太古老了,早已卡慢不堪。大约在2020年4月,也就是寒假延长的两个月后,我购买了一堆电脑配件来自行组装电脑,最后成功点亮~~,从此玩电脑更快乐了~~。
刚刚装完机,我兴高采烈地继续打代码去了,完全没有注意到,我的电脑原来也可以做视频。
这是怎么一回事呢?原来早在OI时期,我就想拍一个Vlog来纪念我的OI生活。可是等到寒假我有空的时候,我发现家里的电脑根本带不动剪辑软件。于是只好放弃了我心心念念的Vlog。
当我意识到这一点的时候,已经开学了~~(大雾)~~,没办法,我只好等到暑假再重启我的视频制作计划。很幸运的是,OI纪念视频成功做出来了。
独立软件开发
开学之后,由于高三临近,课程紧张,加之我是在全日制的寄宿学校上学,没办法接触到电脑,于是「无形的大手又一次把我拖住了」。
有一天下课,地理老师拿出了一大堆课件。我想把它们复制到我的Kindle上,很可惜的是,那些课件实在是太多了,根本弄不过来。
什么是Kindle?复制一下怎么就麻烦了?
Kindle是一种电子书阅读器,是高中时期为数不多的「合法电子产品」之一。但是,这个Kindle不能读取Word文档和PPT,只有将这类文件转换成pdf文件格式之后才能读取。而转化格式的唯一方法就是逐个打开文档并且另存为成pdf文件,尤为麻烦。
于是,我就萌生了开发一个自动转化格式并且将转化好的文件自动导入到Kindle中的软件的想法。在一次下课摸鱼期间,灵光一现,将这个软件取名为SITYKE,全称Send It To Your Kindle Efficiently,并且决定要将这个软件开源来惠及大众。
到了暑假,我终于又有时间摸鱼了。用什么语言开发呢?我也不打算做图形界面,他只要能做好自己分内的事情就好了。于是为了方便起见,便采用了上次摸鱼时新学的Python。
在开发这个软件的过程中,也遇到了一些困难,最关键的问题是要如何操控Word和PowerPoint来完成文件转化工作。后来,在研究了一会微软的技术文档之后,我找到了方法,这个软件的1.0版本也于暑假正式面世。经过后期的不断迭代,陆续更新到了3.1版本,功能也越来越完善,深受班上同学们的好评。
这个软件在我整个高三时期发挥了很大的作用,节省了我很多不必要的拷贝课件等待时间。
决定吧!要走哪条路?
高考结束之后,我蓦然回首,发现自己人生的前十八年跟计算机真的是息息相关,完全绕不开。我学习计算机的过程虽然曲折,但是却在机缘巧合之下环环相扣,这想必是一种缘分。于是在左挑右挑之下,选择了广东省最好的软件工程专业。
此处的「最好」指的是在「全国第四轮学科评估」中,华南理工大学软件工程专业以B+的成绩位列广东省第一。
在上了大学之后,根据调研,发现因为这个专业能赚钱而选择软件工程的同学居多。而我选择读软件工程,就是想进一步研究计算机,是真的喜欢啊。不管怎么样,加油吧,既然有方向,就朝着他前进!
Two roads diverged in a wood,and I— / I took the one less traveled by, / And that has made all the difference.
「一片树林里分出两条路,而我选择了人迹更少的一条,从此决定了我一生的道路。」——罗伯特·弗罗斯特