我拒绝同自己和解·软工第一次作业
这篇博客是一次课程作业。
Q | A |
---|---|
这个作业属于哪个课程 | 2020春北航计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 第一次个人作业 |
我在这个课程的目标是 | 系统地学习如何组织、管理并践行软件工程 |
这个作业在哪个具体方面帮助我实现目标 | 上路前的自我反思与温故知新 |
童年·结缘计算机
Q: 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?
Q: 计算机是你喜欢的领域吗?是你擅长的领域吗?
Q:你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?
这世间到底有没有缘分,我其实不太清楚。高中毕业后向喜欢的女生表白,她说“有缘再见”,然而事实是我有她几乎所有社交媒体好友,可她再也没有给我发过消息。我花了很久时间思考什么是缘分,它是不是某种类似量子纠缠的幽灵般的东西——但很快也就放弃了,因为我实在想不明白量子纠缠云云的玄之又玄的概念——这或许也是学计算机的契机之一吧,由于实在理解不了缘分亦或量子力学亦或女人的真实想法这些困难又抽象的事物,才去和机器、程序、符号这些简单直接却美妙的东西打交道(CSS和模板元除外,那些可能是我毕生也无法理解的 混沌 )。
寻寻觅觅,冷冷清清,凄凄惨惨戚戚。
因而“结缘计算机”这个说法于我并不很严谨。要说的话,当时是计算机先找上我来的。在我大概四五岁的时候,我的父亲就已经拉上我在他的笔记本电脑上打游戏了。我们常玩两款游戏,《抢滩登陆》和《坦克大战》,都是他负责移动,我负责射击——这样的好处是,得分算我的,死了算他的。那是一台厚重的惠普笔记本,对一个连字都不会写的小孩儿来说自然是不会记下它的型号与配置的——唯一的记忆是,它带给了我很多快乐。多年以后当我尝试基于Unity写游戏时,第一个项目依旧是《坦克大战》,写完邀请父亲一起玩,一下子就回到童年的那个下午,我俩趁母亲不在家合伙在昏暗屋子里闹革命——他负责移动,我负责射击。我后来再也没有玩到那么好玩的游戏。
电子游戏是我最早的启蒙老师。我在小学的电脑课上是最熟悉游戏的几颗明星之一——熟悉到可以凭直觉用GBA模拟器加载《口袋妖怪绿宝石》的盗版ROM。这也不是什么好事,期末最后一节课老师放开了游戏权限,大家都开始玩《绿宝石》了,我还在东跑西窜帮最后几个女生启动游戏。那一天我第一次发现,会一门技术是一件被别人羡慕而能给自己带来无尽满足感乃至虚荣的事。
当然,满足感终归不能当饭吃——但爱情就不一样了。Declan Galbraith,在我初中时还是个英国童星,曾一度被我视为头号情敌的存在——虽然很快我就明白追星和谈恋爱是彻头彻尾的两码事,警戒也就随之解除了。但他还是给我带来了一个天大的机会。逻辑是这样的:大前提是如果我喜欢我喜欢的女生喜欢的东西,那么这个女生就会喜欢我;小前提是她喜欢这个英国哥儿;结论是如果我让那个女生觉得我也十分懂这个英国哥儿的事情,她就会喜欢我。
完美无缺。如果那个女生也和我一样在初中就拥有如此缜密的思路,我就不至于到大学还没谈过恋爱了。
最难的事情来了:如何“让那个女生觉得我也十分懂这个英国哥儿”呢?那时她每天都在念叨Declan还有几天过生日,我想干脆就写个小程序帮她自动化完成这个事情吧。
那个假期我买了两本书:《星际争霸:闪点行动》和《C++ Primer Plus》。凭借着男人陷入爱情时的可怕根性,我在自己那台玩开心农场都会死机的小笔记本上用破解版VS2010 Professional一个字符一个字符敲下了
#include<iostream> // 必须写这一句
using namespace std; // 这是c++才要求的
int main()
{
cout<<"hello word"; // “考特”是输出,箭头指向它表示的屏幕
return 0; // 结束,回到0的意思是程序被删掉了
}
两周以后我遇到了必定纠缠自己一生的梦魇:闰年,并认定它是比Declan可怕的多的敌人。那是另一段罗曼蒂克史了。
再然后是一系列幸福的事情:中考,算法竞赛,项目课,科技竞赛,高考,大类分流,实习,进实验室,发论文……掐指一算,上贼船都快六年了。和计算机结缘从来都不是我的本意,但计算机确实启蒙了我的童年,见证了我的青春——或许在我未来的人生阶段将继续扮演某个角色。很多东西都变了,不变的总是那种自我沉浸:按自己的想法,编织自己的想法,检验自己的想法,改进自己的想法。那真的——我给你讲——太上瘾了,二十年后如果我还像现在一样编程,我依旧会回到藏在被窝里第一次编译HelloWorld的那个午夜,那之后我明白什么叫一发不可收拾。
艺术源于生活。至少现在看来,“玩电脑”(这是我奶奶对我所有开发工作的精炼总称)是我喜欢的东西,是我自认为擅长的东西,是我愈发觉得为此而生的东西。
课程组推荐的博客I,我抱着某种好奇看完了,然后又突然想起了这许多的往事,自我感动起来。博主是从那个
先用的GWBASIC,后来接触了Quick BASIC和Pascal
的传奇年代走过来的,那是雷军写加密软件、扎克伯格写网站的属于开发者们最黄金却也最黑暗的一个年代,每一个能从那个学习资源匮乏的年代挺过来的程序员都了不起,我由衷地佩服并自愧不如。博主分享了很多,但我还是很好奇:那时的程序员们,都仅仅是狂热的“个人英雄主义”分子吗?究竟是什么契机使他们去学如此生猛的所谓“程序设计”?恐怕那将是永远尘封的小秘密了。
两个月前和初中追过的那个女生一起喝酒,她现在在北师大读心理,男朋友考研想学金融。她说她特佩服我当年敢带着那么个连有没有病毒都不知道的烂程序找她表白然后被秒拒。她问我知不知道有一个说法是“表白是胜利的冲锋号而不是集结号”。
“集结号啊,”,我故作深沉地晃了晃手里的龙舌兰,仿佛那样就能快点醒开杯中沉眠的醉意。
“你知道吗,函数要先声明才能调用。”
我的大学·在计算机系里学习
Q: 你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。
事情和想的不太一样。
我对大学计算机系的向往源于清华FIT楼,高中时我在那里徘徊荒废了很长一段时间。FIT的每一层都有一小片敞亮的空间,配白板和桌椅,点缀一两盆绿植。白板上总是天马行空地刻着天马行空的符号——虽然看不懂,我知道那是思想交锋流下的碎屑。所以入学北航后我最喜欢的地方就是士谔空间,那儿简直是我具象化的澎湃心境。操作系统Lab3-2上机前夕,十几个人搬着电脑围坐在士谔空间的三张长条桌前——那本是为咖啡课做Cupping借的,本来我应该把它还回去,但我没有——那天我们吵吵嚷嚷到很晚,只为了搞明白进程切换时系统内核中到底发生了什么。
另一件快乐的事情是入学后和学长一起研发运维一个校园助手App,那是一个祖传项目,名字“同袍”取自那句著名的
岂曰无衣,与子同袍。
太浪漫了。我是当时团队内唯一的IOS前端——虽然入伙时我对IOS开发唯一的基础是有一台Macbook——因此大学的第一个十一假期是Swift文档陪伴我度过的。我记得很清楚的是十一月修复了两个IOS端日期显示的bug,十二月和学长合作加了空教室、日程安排等我们觉得很cool的功能。上线的那天我把App Store上好评如潮的评语截图发到家庭群里,自豪地告诉父母:“我终于不再是自己一个人捣鼓那些小程序了。”
理想中的大学生活就是这样自驱动的,是学会凭借个人意志作出选择的一场试炼,也是和志同道合的人一起掀起的狂风暴雨。课程组提供的几篇博客,博客M回忆
刚进了大学没几天,就听一个大四的师姐说我们的班主任陈健老师是教编译原理的,于是我就把这一叠纸拿给了她看。
博客C总结道:
我觉得,这种时常拜访的愉悦感,让我很早就开始相信独立思考的力量
博客B反思:
若只有机械思维——上了清华又如何?
博客F强调:
总之就是编程并不像宣传的那样,三个月就可以学会,不可能。想理解一些东西必须经历一个很长的时间,还需要在使用过程中感悟。慢慢入门以后,还有非常多的东西需要学习。
我认为这些观点综合起来,就是进入大学计算机系学习的具体意义和含义了:学会独立;找到真正的人生目标(而不是简单的升学导向);学会学习;将一腔狂热以理性扶正而延申;将浮躁的心沉淀下来。读完这些想法,一些对我而言本不明晰的事情也渐渐有了坚实的轮廓。
但还是有很多事情,和想的不太一样。
对六系而言分数还是太重要了,尤其是在大类招生的背景下,竞争惨烈以至于到了严重内卷的程度。在这样的外源压力下,身边的同学变得越来越不单纯。理想中那种自由探讨的学术氛围,那些无忧无虑的试错机会,似乎都渐行渐远。
所谓欧美精英教育,无非是先选拔人才,再进行培养。而中国大多数教育模式是反过来的:先进行培养,再选拔人才。国情不同,各据其理。国内大学与中学定位的差异,就在于它本已经靠高考选拔出那一批所谓的“人才”了,却又受限于资源不得不继续进行这个迭代——残酷程度,可想而知。因此会内卷,因此会日益压抑。
两份大作业,当看起来都同等精致可口以致于达到怪物程度时,老师在有限的答辩时间内只能倾向于更好看的那个——纵使另一个用redis做了分布式任务队列并实现了流量削峰,而好看的页面仅仅得益于更好看的Ant组件库。
这是个很严肃的话题。有人说扭曲的竞争环境有关公平与正义,而对此我喜欢罗尔斯《正义论》中关于无知之幕的阐释:
只有在每个人都受到无社会差异的对待时,正义才会出现。
当然这是,就可预期的未来而言,不可能的。那能怎么办呢?年轻人不应早早听从那些靡靡之音,只满足于坐在路边拍手。
有人说你要学会和自己和解。有人说你要接受自己仍然是一个普通人的事实。有人说来日方长。
林清玄说:
要有柔软心。
Q: 迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。
我没有想过。高中竞赛囫囵算个3000行吧,刷题不多;高中项目零零散散加起来大概有2000行了;大学搞APP开发、做外包、写抢课脚本满打满算2000行;实验室500行,第一次实习经手1000行,第二次实习已经写了1000行,助教工作500行;计组500行,系统200行,面向对象2000行,编译3000行,其他专业课全加起来按500行算;参与开源项目的100行不能丢下,因为意义大于其他的总和。
做过最复杂的工作大概是爬学校的教务网站(并抢课)吧,印象里涉及的组件有模拟登陆、代理池维护、发包控制、XPath分析、微信实时反馈……网站本身写的很烂,所以解析起来也很痛苦,想起来真的是比复现论文或课程作业这些有迹可循的工作恶心多了……
Q: 科班出身和北大青鸟有什么区别?
Q: 速成的培训班和打基础的大学教育还有mooc之间有区别吗?
课程组下发的博客里也有培训班出身的前辈,学习内容无非是.Net、网站开发云云管中窥豹的东西——我猜北大青鸟不一定要求学员会写Dijkstra或会搞死锁检测。从文章描述来看老师自身的技术水平就不算过硬,大多数学员也学的一知半解。但另一个角度讲,前两天帮组里面试了一个阿里的技术员,学历博士,问他诸如
Python的上下文管理器(Context)是如何实现的
这样的具体问题也并没有回答的很好——但这不影响他在我这里取得相当高的面试分数,因为他在长期工作中积累的经验、理论储备与技术敏感性非常solid。大学科班和培训班涉及的学术/技术都只是整个CS的细小皮毛,从这个角度来看或许两者差别确实不大。所以我想,科班带给我们最宝贵的财富是科学素养与思维习惯吧。
Q: 学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”
正好最近在搞图像编码相关的工作,这个方向涉及相当多的数学。比如对RDO:
主流的learning based方法,R的形式是
一眼看上去就很信息论。这个式子有两个好处。一是它可以和Range Coding配合使用,因为这个式子就是在已知\(\tilde y = Q(f(x))\)概率分布的情况下Range Coding结果的码率理论上限。二是借助它可以将求解熵模型划归为一个极大似然估计。
刚刚接触这个方向时我花了相当夸张的精力去理解背后的数学原理,而现在有一小部分工作是只有我才能做的了。说到底概率、数论这些数学从来都是计算机的理论基石,我很难想象一个计算机从业者毕业后再也不和数学打交道的情景。
我想,对数学基础有要求的工作就像路上的金粒一样可遇不可求吧,一旦遇到了,数学积淀将决定个人上限。因此数学对于计算机行业还是蛮重要的。
在人间·未来规划
Q: 对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?
希望赴美钻研最精尖的理论,更希望赴美学习最本质的思想。
希望回国。不希望仅仅做一颗螺丝钉。
希望自由却踏实地活着。希望保持善良。
Q: 你准备怎样来规划你技术道路,职业道路和社会道路?
做过传统web,也会一点system,还懂一些deep learning。
本科结束前将继续这样广撒网乱捉鱼,静候一个温驯的良夜。
变数太多,我没有把这条路写死,希望向最适合自己的方向进发。
Q: 你对于实现自己的梦想已经做了或者计划做什么样的准备?
写了一些程序吧。有好好学外语。
Q: 你们马上就要面临实习了,你打算在企业内实习还是在实验室实习?
都体验了,个人更喜欢企业一些,因为能接触到很多学术/技术以外的新鲜事物。我有两段企业实习经验,第一次是和老师同学一起办初创,这个过程中虽然给人家添了不少乱,但幸而得以管窥了创业过程,通过小团队这个微缩模型了解了企业运作的一些细节。第二次则是目前所在的商汤科技,让我把视野从几篇论文和代码移向了整个业界,有机会关注更多以前从未关注过的角度。
此外还有重要的一点是,我现在的研究兴趣集中在learning上,而这是一个高度依赖算力的研究方向,企业可以为我提供相当数量的算力资源。举个例子是,春节期间我的一系列实验每天用12个计算结点并行,每个结点包含8张Nvidia 1080ti——这一点是国内很多实验室满足不了的。
Q: 实习经验究竟有多重要?是否需要马上开始积累实习经验?
非常重要
有机会学到数倍于课堂内的知识。
是的,马上开始
无论去哪里实习都需要一段准备期与适应期,因此越早越好。
最后,关于未来规划,我想援引尤雨溪先生在知乎上发表的一段话作为结尾:
看到最近那个硅谷程序员不敢失业的问题,有点感触。运气这个东西确实很微妙。当年我要不是 H1B 没抽中,也就不会想到尝试 O1,也就不会无排期拿到 EB1 绿卡,后面也就没有胆子跳槽/辞职单干,也就不会有现在这么惬意的生活状态。如果我当年抽中了,很可能至今还在大公司当螺丝钉,前端也可能已经没 Vue 什么事了。
最后
感谢课程组的这次作业,让我有机会花几天时间重新思考一些有关自身的问题。或许从作业的角度,这不是一份很好的答卷——很多地方坚决贯彻了我个人的意识流狗屁不通写作风格。但我至少可以确定这些文字完全是我个人在结合几篇博客阅读后思辨的产物。
我始终相信人生应当也是符合开闭原则的:对修改封闭,对扩展开放;对过去封闭,对未来开放。It seems promising.