2020BUAA软工——“停下来,回头看”

Mar 1st, 2020 - Mar 3rd, 2020

博客园链接:Link

项目

内容

这个作业属于哪个课程

这个作业的要求在哪里

我在这个课程的目标是

完成一次完整的软件开发经历 并以博客的方式记录开发过程的心得 掌握团队协作的技巧 做出一个优秀的、持久的、具有实际意义的产品

这个作业在哪个具体方面帮助我实现目标

热身、热身、热身 在开始写出自己可能迄今为止最大规模的代码前 认清自己

同样我也送给大家两首小歌《你要相信这不是最后一天》《你的答案》

0x00 不认真听讲其实也没有那么错

description: 阅读完这篇博客,发表一点自己的小小看法。

这篇博客中,Scalers 给我们分享了几个观点,认为大学生上课就是要听讲,我整理在下面: 1. 认真听讲是一种能力。学会认真听讲实际上是对人的一种能力的培养,大学中如果没能养成认真听讲的习惯可能就会导致散漫的习惯的养成,直接导致关键时刻也不能绷紧自己的弦。 2. 课程讲的不好不能成为不听讲的理由。Scalers 的观点是始终相信的整体水平是优于学生的,大部分情况下学生认为的老师没水平其实是自己没水平。还提出了大学是专治青春期各种不服的地方的论点。 3. 课程有用无用不是一个大学生的格局能判定的。Scalers 认为很多学生评论课程落伍实际上是由于自己短浅的目光所导致的,如果你在大学里能训练自己不带情绪地学好任何课,你毕业走上社会,会成为非常有竞争力的人。 4. 跟上老师的节奏,梳理你的思路,这是最快的进步。Scalers 提出了一种“原生态”的思考模式的概念,指的是没有经过系统刻意地训练,没有经过斧正,而是任由随机事件随机冲击产生随机结果的状态。这种“原生态” 类型的人在社会上很容易被当成韭菜被收割,而大学听课可以给大脑里留下专业领域带来的精神、信念、理论和体系。 5. 聚精会神在这个时代已经是稀缺能力,大学应该打好基础

顺手查了一下 Scalers 的资料,从公众号 ScalersTalk 和他的知乎中搜集的,分享一下:清华大学计算机本科,14年1月开始写作,每天持续产出,文章覆盖面从外刊精读到机器学习,一定是一位很了不起的人。从16年开始做社群,社群内部发表高质量文章,推出高质量课程,群内相互监督学习。社群吸引了很多人的加入。社群的加入具有门槛,最表面的门槛就是资金的门槛,入群费用从1k涨到了3999。

上面的资料只是介绍一下作者,我这一节的内容对事不对人,也许未来我也考虑加入社群看看呢 :)

对于作者的观点,我有感同身受的地方,但也有驳斥的一方,我就不再一二三四地来像对标似的辩论,我只是讲一下我的一点经历。

首先我很大程度上也赞同这一说法——大学应该听讲,但是我也认为我们任何事情都不能走到极端,认真听讲亦是如此。 Scalers 就读清华大学,想必接触到的教育资源都是数一数二的,我以一个北航大三学生的身份,若是我也能有机会到清华听上几节课,那就算是很多清华的学生口中的“烂课”,想必我也是会很认真的。因为我也觉得,清华的老师的整体水平是优于学生的。可是,在我真实的生活中,在全国99以上的大学生的真实生活中,每天是在清华上课吗?所以当我看到作者的一句 “其实我是不相信一个认为老师没水平的大学生,水平要高过老师的,老师站台讲台上,你就好好听讲。” 的时候,不知怎的,读出了一股 “何不食肉糜” 的感觉。 我自己在北航学习,也已经是全国顶尖的学府了,但还是不免在前两年的学习生涯中,遇到了一些大家口中的“烂课”。我的母亲是一名教师,所以我对老师是非常尊敬的,我小时候就看到我的母亲晚上备课的样子,在家里的书桌前亲自动笔演算着一道一道数学题的样子,但是我的经历告诉我,不是所有的老师都是负责任的,不是所有的老师都是值得我们尊敬的。 我始终认为,上课认真听讲是衡量老师能力的最好体现,而不是一种强制措施。学校每学期末都会让学生填写一份教师评价表,评价完了教师才能看到成绩。这一种双盲的制度确实收集到了很多学生的反馈,但是想问,有多少人是认真填写的?有多少人是直接脚本一跑,为了看成绩而看成绩的? 教学的评价应该是一个从第一堂课开始到最后一堂课结束,从始至终的一个连贯的、持续性的过程,而不是以期末成绩的查看作为交换的一个一锤子买卖。Scalers 也说了一句话我特别赞同 “当一个学生说老师讲得烂的时候,我其实是期待学生能说出来具体哪里烂,而且能指出明确的点以及可改进的方案的。” 但是这句话说起来真的太简单了,实际上做起来真的有那么容易吗?我相信,每一年的学生在学期进行中对老师和课程有着不尽的吐槽,但考完试之后为了拿到成绩而填写教师评价的时候,一个学期贯穿的吐槽还有多少人是记得的?然后第二年的学期又换作了下一届的学弟学妹们,吐着一样的槽。为什么大家学期中不反馈?因为学期中的反馈没有双盲啊。我只能私下吐槽,谁会为和分数过不去呢?等到我分数到手,我也离开老师了,我也懒得吐槽了。北大有树洞,北航有ihome,ihome作为一个诉求社区其实已经很不错了,诉求80%一天内解决,99%三天内解决。但是这个诉求,他没有一个匿名的制度啊,学生们是真的想讲出老师哪里烂,但是对学生有保护的措施吗? 扯远了,回到上面。我坚信:一堂好课,一个好老师,你不用让大家认真听讲。北航最最最最最有名的老师之一:高宁老师。他教的是什么?马克思主义哲学和党课。这两门课敢说自己从始至终认真听讲的估计没什么人敢站出来,但如果是高宁老师的这两门课,我敢站出来。非常有幸在大一的时候上了高宁老师一个学期的党课,没有一次迟到,没有一次缺席,没有一次走神,有时候还是哭着走出教师。是高宁老师有魅力吗?稀疏的头发,普通不过的教师面孔,但是只要他一出声,人格魅力加满。高宁老师会为了一堂2小时的课准备许久,让同学们能够喜欢。我记忆最深的一堂党课是我哭着走出教室的那一次。高宁老师给我们讲习近平的知青岁月,给我们讲梁家河的历史。在他的口中,梁家河的画面仿佛就在我们的眼前。为什么?因为高宁老师自己亲自走访过梁家河,挨家挨户和村民交流,收集村民口中的青年习近平。 在讲到习近平在梁家河插队的时候看到报纸上有成功修建沼气池的案例,带几个人取取经的时候,高宁老师拿出了一张早已泛黄的1974年1月8日的《人民日报》——这就是当时习近平看到的那一期报纸,给大家观看。 那一堂课我虽然坐在右后方的位置,距离讲台比较远,但我不可能忘记。下课的时候,我走出了教室,却突然想跟老师说一句谢谢,回头见到老师,言未出,泪已流。这就是我最尊敬的老师。高宁老师在后续的采访中这样说到:“报纸的真实能够给大家反映出那个时代的整个的印记,这就叫触摸历史的真实。”。

一个优秀的课堂,一个优秀的教师,无论是什么样的学生,他都不会走神。一个普通的课堂,一个只会念PPT的老师,如果不是必修课,我真的会做自己的事。

课讲得不好凭什么不能成为我们不听的理由?老师付出了时间,我们就没有付出时间吗?几百个学生的时间和一个老师的时间,质比不过量也比得过吧,甚至有的时候质也可以一比。当教师的成本高吗?挺高的,教师是红烛,照亮学生;但同时也挺低的,现实中只需要考取教师资格证就能上岗,上岗前谁都不知道是不是一根红烛。

为什么说上课不认真听讲就不能培养认真的能力?能抵抗外界的干扰独善其身,静下心来做自己的事,这种能力难道比认真听讲差吗? 这也是一种 聚精会神 的能力,而且是不比认真听讲差的能力。

再者,我认为一堂课有用无用确实是大学生来判定的,我是老师上课的唯一对象,不是由学生来判定,还能由谁来判定?我真的找不到一个合适的第三者,来说服我自己。我自己是计算机专业,所以我就自己学习的专业课来说一下。一个计算机专业的学生,除特殊情况意外,大概率都会在本科生涯修四座大山——计算机组成原理,操作原理,编译原理,计算机网络。我不否认会有一部分学生觉得自己只是来学习做网页的,只是来学习算法的,只是来学习如何找工作的,有可能会认为这几门课对我们毫无用处。但是我相信很大一部分同学,可能在学习之前会觉得这些没用,但一个学期下来确实觉得自己受益匪浅。就拿上个学期结束的编译原理来说,北航要求每个通过都做出了一个属于自己的编译器,只要按照给定的语法,就能在自己的编译器上跑起来,这种自己实现的小作品是很令人兴奋的。紧接着 Github上就出现了一个大火的 文言文编程 还有最近小火的 东北话编程。外行看热闹,内行看门道。学习了编译原理的同学就知道里面其实主要是在词法分析和语法分析的部分下了功夫,定义了一套属于自己的词法和语法,在生成中间代码一层开始,其实就已经交给成熟的Python了。 另外,在最后优化编译器的时候,我们也真正地接触到了很多 代码是如何跑起来 的东西。比如我们对一个 2 的幂次做取模,实际上就是做一个和 2的幂次-1 的位运算,在硬件上位运算的速度要比取模操作快得多。这恰恰也是C编译器已经做了的,C编译器在取模前会先对模数进行判断(我估摸着也是 n&(n-1)==0 的判断),如果模数是2的幂次,则进行位运算而不是取模运算。这种只有自己亲自动手做了东西,谁会觉得没用?怕就是那些没有做的人。所以我不否认这些人的存在,但我也相信这部分人是少部分人,绝大部分人还是会对编译原理这门课评价为有用而不是无用。

最后,我非常同意跟上老师的节奏,把一堂课听顺下来,确实能汲取到不少的知识。每次我有时间预习的时候,第二天听课都特别舒服,因为我既有知道老师下一步要讲什么的准备,又有等待一个优秀的老师可能会突然提出一个惊喜的例子的未知。唉,可惜能够有预习的时间是极少的。

最后,不请自来地也想给 Scalers 提一个建议,可能他永远不会知道一个北航的学生会在第一次软工大作业中给他提一个建议,想建议他:在每天高产的间隙,翻看一下自己以前写过的博客,看一下别人对他的博客的评论和留言,我相信一定会有一些新的东西,这种东西可能是随着时间的推移对同一件事产生了新的看法,也可能甚至是从以前的自己中学到了一些什么。 这也是我在时隔半年打开博客园时,翻看自己之前写的面对对象的博客的有感而发。

人不仅要坚定地向前走,还要时不时看看自己背后的脚印。

0x01 我选择了你,计算机

description: 本节主要回答以下几个问题: 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 计算机是你喜欢的领域吗?是你擅长的领域吗? 你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?

2005年,我们家有了第一台计算机。若不是父亲的摄影的爱好,估计我们家要晚上几年才会引入计算机这个成员。如今已经15岁的他,虽然各方面的性能已经被这个时代抛下一大截了,但是在日常断网运行的保护下,依然坚挺。

我考虑过计算机专业吗?不,我连北航都没考虑过。 若不是差个几分,我可能就去到北京的另一边——南京,去南京大学学物理去了。 其实我在报考大学的时候对物理的爱是偏执的,因为自己在高中三年的生涯中,数学竞赛占据了第一年,物理竞赛占据了第二年,而在学习物理竞赛的一年也是给我带来奖项,带来成就感的一年。 高中读的是竞赛班,离计算机专业最近可能也就是去机房看信息竞赛的选手打题吧,都是我看不懂的东西,不过我也不感到逊色,毕竟物理竞赛的东西他们也看不懂。 不过我是在高中的时候就知道清华姚班的姚期智院士,还知道他曾经说过,学习计算机的话,推荐本科期间学习物理,高兴了许久。 直到成绩出来前可能对有什么学校都不是很了解,因为家在广东,更加了解港大和港科大。高考出分后,对着港大的 conditional offer,差了一道理综选择题的分数,懊恼伤心了许久。几天后捡起高考志愿填报手册,看看自己的排名能到哪里去。对我而言,南大,一个听说过的C9老牌高校,物理专业名声远扬,但也是一个是否录取取决于报的人多不多的学校;北航,一个只从爱好航模的兄弟口中听说过的学校,但我的成绩可以随便选专业(严格来说高工差两分,但也让我幸运地直接进计算机学院),面对这种情况我对学校没什么好纠结的了,冲南大保北航,南大专业可能是天文,北航专业随便选。对北航并没有太多了解的我,把高工填在了第一位,而风评最高的北航计算机,排在了第二位。我的计算机专业,就此开始了。

你要是问我的条件如何?我只能说比上不足比下有余。得益于基础学科的扎实,入门计算机不是非常的吃力。但是相比于已经和计算机摸爬滚打了好几年的信息竞赛选手们,我也不期望能够在专业知识上靠大学四年超越他们了,毕竟上了北航的个个都是人才,学习一个比一个狠,特别是6系。

这位博主相比,我简直不可比吧。 我和计算机的缘分,和很多同龄人都不可比。很多人小时候就因为游戏和计算机结缘了,可是我偏偏是一个不爱玩游戏的人,电脑在我们家只有每次拍完照才能被宠幸。我也对这个黑色的机箱中是如何运行的,一点兴趣都没有。 不过我和这位博主一样,也思考自己是不是选错方向了。只不过他是觉得选错了应该学计算机,我是觉得选错了计算机。因为我刚上北航的半年,又是通识教育很少接触计算机的内容,又是仍对物理念念不舍,一度怀疑自己是不是也太草率了,只因为计算机热门就选择了他,都不知道要学什么。面对自己的第一台电脑的桌面上的 devcpp ,我迷惑了。 我对计算机的兴趣,是从数据结构开始的,所以说白了,还是从数学开始的。果然是小学就开始学习奥数的人,居然对数据结构有兴趣。在数据结构的课上,我才体会到,程序,是有用的。二叉树、队列、图,解决了很多实际的问题,空前解放了人类的劳动力。可能对每一个学计算机的人,甚至是文科生,也听过人类历史上计算 pi 最多到多少位,计算机一秒钟能算多少位这样的小故事。但就是这些小故事,真正把我的心俘获了。从模拟银行排队到城市之间的最短路径,从最近公共祖先到sql的B+树,这些由人脑想出来的一个个数据结构,还没有太多的算法,就已经把人类从重复无趣的劳动中解放了很大一部分,再加上数学家的算法加持,早就赶超人类几条街的水平。从手写字体识别到BigGAN,深度学习的发展速度之快让人类看到了一些难以置信的东西,很多深度学习领域的可解释性居然成了人类的一道难题。“他能跑,但是他为什么能跑呢?” 计算机的魅力愈发吸引着我,让我不再去思考自己是否走对了路,而是看自己每天是不是向前走了路。

现在大三,我敢说计算机是我喜欢的领域,但我不敢说计算机是我擅长的领域。 就像一个段子一样,敢说自己精通C语言的人,一部分是刚学完谭浩强的《C语言程序设计的人》,另一部分是在维护C标准的人。 越学越觉得自己无知是真的,原来计算机包括那么多东西,我现在连冰山的一角都没看见。 虽然我不擅长,但我热爱。我的热爱可能没有推动计算机发展的人那种热爱,也没有很多人梦想着改变世界的热爱,我的热爱很朴实很可笑,因为我想让计算机成为我生活的一部分。 成为我生活的一部分是什么意思呢? 其实就是利用计算机来解放我的人脑,解放我的劳动力。懒是第一生产力,所言极是,电梯就是因为不想爬楼梯的懒人发明的。而我现在就是在借助计算机,偷一些小懒。 非常巧合,绝非骗分,这几周我的工作状态就像是一个乙方,一直在满足甲方的需求。全国线上教学,北航也是第一次,非常有幸被体育部拉去做苦力,什么苦力呢?不断地更新选体育课的人数的数据并打电话给他们让他们进课程群。体育老师们都不太懂计算机,此时我这个计算机专业学生的身份就体现出来了,从录屏教老师们查看课程名单,到在线发布作业和通知,再到导出学生名单等等等等。其中导入学生名单一块让我感受到了计算机这个学科的美好。 任务是这样的: 现在教务从每个老师的8个班级里面导出了一张选了该班级课程的学生表 一共有40个老师 另一张表存储着选课学生的电话 现在要导出一张学生+选择课程+电话的表 由于老师并不懂计算机,分配给我和另一个同学两个人,让我们人工导出表合并表并登记电话号码。 嗯?在逗我?320张表里面找没选课的人? (柯南背景音乐) 这个问题没有那么复杂啊,直接把320张表全部合并成一张然后根据学号的主键链接一下带有电话号码的表不就行了??? 于是我用半个小时的时间,编写python程序并测试运行得到了总表。 嗯,老师开心极了,把表立刻分发给每个老师配备的助教,可以开始打电话联系了。 不是因为懒,不是因为我学了计算机,我可能会花几倍的时间,依次打开我负责的160张excel,让电脑的风扇哗哗响着,把未进课程群的同学从表中揪出来,填上他的电话号码。

是的,可能大家会觉得我这个也太幼稚了,根本不是什么热爱,在很多人眼里算不上热爱。但是,给予人方便,将人从大量无意义的劳动中解放出来,不也是计算机发明的初衷吗?我的这一次导出表合合并的操作,是一个程序,但是如果老师有长期的需求,而且需求多样化了,我提供给老师一个一键导出的exe,这不就是一个软件吗? 软件工程,呼之欲出!

大家都在改变世界,你改变的是物理的世界,我改变的是软件用户的世界。

当他们不用从320张excel表格中 ctrl+F 寻找一个个没有进群的同学,他的时间不是节约出来了吗?或许这些时间他可以拿来看剧,可以拿来做个点心,可以陪家人多一点,可以陪爱人多一点,他的世界,不就被我改变了吗?

今天在B站逛的时候偶得 Vue 框架设计者 Evan You的采访,他一开始也只是找不到一个方便的工具,干脆自己做一个比较顺手的,经过了三五年的时间才逐渐转变成为了全职开发Vue吗?我相信他对技术是热爱的,对计算机也是热爱的。我又何尝不是。

0x02 速成班?系统班?

description: 本节主要回答以下几个问题: 你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗? 迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。 科班出身和北大青鸟有什么区别? 速成的培训班和打基础的大学教育还有mooc之间有区别吗? 学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?

这个专题里面突然多那么多参考博客,着实把我看爽了,精选的博客质量确实不错。看到轮子哥的大学生活,感叹自己的大学是多么枯燥;看到一个行走的书库面试着自己见过见过还是见过的面试题,感受到阅读的力量;还看到一个号称自己是野生程序员的小哥,果然敢说自己是野生程序员的人技术肯定不野生;但同时从一个.net程序员的自述中看到了自学路上的坎坷与辛酸。

我对大学生活的向往,是从高二的物理竞赛开始的。由于题目难度的原因,我们要先修一些简单的高等数学微积分,然后去解实际的物理应用题。无论是微积分还是物理竞赛题,都带给我了一种与高考题目之外的全新的体验。高中三年学习的知识,真的非常枯燥无味,就拿我接触的物理举例,高中学习的一直是质点运动学,总是在不是x轴就是y轴上面平动,直到接触了物理竞赛我才发现转动的美妙。这种感觉可能现在难以体会到了,是那一种在每天学习着一样的知识里面突然发现新大陆的欣喜与激动。为了冲刺最后的竞赛,我们停了半学期的课,我们求解了空间站在什么时候发射多少燃料才能最节能地返航,我们求解了什么样的轨道能使得小球下落最快,我们求解了一根正六边形的铅笔如何放在一个带有恒定系数的摩擦面上不会滑动,我们还求解了一根木棒靠在墙上滑下来时的运动状态...这些都激发了我对这个世界的好奇。那为什么我就向往大学生活了呢?因为我觉得大学我就可以学到更多诸如此类有意思的知识了。

当然最后我没有在大学学习物理,而是学习了计算机。平心而论,无论外界如何抹黑北航,如何抹黑北航的计算机课程,我对计算机专业都抱有着强烈的好感。在网上查阅了一下,北航是国内少有的理论教学和实践教学相结合的大学,虽然我被计算机组成原理实验虐的很惨,但我也很感激他,因为我自己动手从零开始搭起来了一个能跑的CPU。这和我理想的大学无差——我不喜欢枯燥的知识。倘若我当初没有选择北航,而是选择了一所没有配套的实验设施的大学读计算机,估计我现在会很烦躁吧。

如今已经大三,我说一下我现在的理想中的大学吧。其实只有一点,我希望穿插多一些自由的时间。当然这可能并不是特别现实,比如延长寒暑假。为什么我想要延长寒暑假呢?因为我觉得学习了一个学期的知识,需要一定时间的消化,而现在的寒暑假的时间,我觉得有点紧迫了。我非常羡慕徐宥能够看这么多优秀的经典书籍,这也是他为什么能够在面试中如鱼得水的一个重要原因。读书不在多,而在于透,略看百本不如细品一本。我也希望能够有自己可以分配的自由时间,投资看看书上。这个书甚至可以不是专业类的书籍,人生哲学也是一个非常好的建议。我确实感觉我读书读的少了。从小就不是很喜欢看书,直到初中才有一次读书热,那是一段对余华的作品狂热的时期,读了很多《许三观卖血记》、《活着》等一系列优秀的文学作品。然后又没有怎么看书了。转眼到了高中的时间,入手了kindle电子阅读器后,本着物尽其用的原则,一不小心迷上了东野圭吾的作品,《放学后》、《白夜行》、《嫌疑人X的现身》等等。我发现我是一个非常吃文风的人,平时对书不怎么喜欢,但如果遇到喜欢的文风,会抓着作者的所有书不放。到了大学开始接触编程的专业书籍了。大一的C语言基础黑书是我看过最多的,因为当时入门实在比较吃力。后面虽然拿到了很多电子书,但都只是当作参考资料,在自己有需要的时候当百科全书一样去查阅罢了。学习数据结构时买的《C和指针》,学习面对对象时买的《Java编程思想》,学习算法时买的《编程珠玑》等等一系列优秀的书籍,可能翻开的都不到50页。我是真的像给自己放一个假,把自己的存书全部看完。可能有人会说平时也可以挤一点时间,这个我也不想狡辩了,这个可能与个人的学习习惯有关吧,在忙活了一天之后我真的已经没有看书的欲望了。

说到国内大学和国外大学的差距,我还是有一定的亲身体验。在大一的暑假有幸前往伊利诺伊大学香槟分校交流三周,接触到了国外大学的教育。虽然我也不知自己在假期接触的大学教学和国外平时的教学有什么区别,但我暂且认为大体上是一样的。在UIUC,我修了两门课,一是人工智能导论,而是网络分析。至于导论课和中国的大学并没有什么区别,就是上课讲PPT,下课答疑并完成选择填空的作业。至于网络分析则更加有意思,也许因为他是一门实践课,老师并没有对着PPT一直讲,而是从第一节课就从安装软件开始,手把手的保姆式教学。老师通过分析的软件上的参数告诉大家什么是Degree Centrality、Closeness Centrality、Betweenness Centrality 等等,中间可能穿插着必要的说明在PPT里面,其他的都是以实践的可视化的方式帮助大家来理解。最后的考核方式也很有意思,让大家组队收集材料并整理分析一个网络。我们队伍分析了英国的伦敦的帮派之间的关系,得出了不少有意思的结论。比如不同帮派之间的老大和其他帮派的人的关系亲密度很低,很多事情都是交给小弟去做等等。

我们暂且不说是国内的教学方式更加优秀还是国外的教学方式更加优秀,因为我相信都有可以相互学习的地方。但是我想说国内的大学教育其实是可以从国外学习的,而且本身并不难。刘帅在回顾自己的计算机生涯的博客中也写道,他听了清华的朱仲涛老师的“数据结构”课之后的那种震撼。这似乎是一件很奇怪的事情,我们居然会因为一个老师的教学方式而感到震撼。一堂课只用1/5的时间讲理论,剩下的时间从零开始着手解决一些具体的问题,这不就是我所向往的、在UIUC的网络分析中看到的那种将知识点融入到实践中去的教学方式吗?很可惜,这可能对国外的同学再不同不过的日常教学手段,在我们的同学眼里竟是如此惊艳。是啊,我多么希望我的专业课老师也能在课堂上给我们手把手实现一下讲过的知识点,让我们看到知识是如何运用的,知识是活的,具有灵魂的。不过在北航虽然老师们没有给我们展示,课下也让我们自己去实践了,这在一定程度上弥补的我的失望。可是哪个学生不想看一下凭借老师多年的教学经验和丰富的专业知识水平打出来的代码呢?我相信很多同学上课或许没有认真听讲的原因,是“不服老师”,这个不服是加了引号的,因为可能学生觉得老师PPT里面的东西我自己也能学,甚至有一些mooc上面的内容或者公众号上的内容,或者博客园上的内容,讲得比老师的更加细致,我为什么不利用这个时间去学习我更想要的呢?所以我特别希望能遇见一个年轻有朝气的老师,他走的不是正常的教学路线,而是以码服人,就像Linus Torvalds所说的:Talk is cheap. Show me the code。 当然我也遇到过这种老师。大二的时候有一门C++和C#的课程,我虽然没选上,但是我每次也和舍友早早地到教室占座。很多课大家都是聚集在教室的后排的,而这门课大家都抢前排。老师的电脑上只有一个复古的VS6,每次上课就是新建一个工程项目,然后将字体调节到最大,开始打代码,一边打一边告诉我们C++和C#的特性,还时不时在运行前抛给大家一个问题,让大家猜一下运行的结果,大家当然听的很认真。还有大三上选的Ruby课程设计估计是最符合我预期的了,PPT里面都是代码,上课不讲太多PPT的内容,大屏幕连上笔记本,将一行一行的代码变成我们可以看见的网页的样子,老师也非常和蔼,在我期末遇到困难时主动找我,和我约时间出来当面解决难题,帮助我做出了我的第一个,也是比较符合我预期的,我心目中的网站。

得益于北航的理论和实践相结合的教学特色,这三年来还是打了一些代码,但是还没有接触过非常庞大的工程,我估计自己的代码量在5000行左右(有效代码量)。其中比较大的几个工程分别是: 1. 大二上学期的Java程序设计,要求我们写不少于2000行代码的小游戏。虽然要求是2000行代码,但是实际上第一次接触Java,主要的精力都放在GUI上了,对于GUI而言,虽然行数多,但很多都是初始化和定位和捕获异常的操作,对于自己的工程能力没有太大的提高。 2. 大二下学期的面向对象程序设计,也是北航计算机学院的精品课程,有四个Project,每个Project分三次迭代开发,总共代码量也有2000行左右,但因为是迭代开发,每次Project的后两次都是在之前的基础上进行修改,里面有很多重复的量。面向对象作为北航计算机学院的精品课程还走出了北航,提供给兄弟高校使用。(作为2020届的助教打一个广告) 3. 大三上学期的编译设计实验,写出了属于自己的能够识别特定词法和语法的编译器,因为对指针的操作比较多,所以使用C语言实现的,所以很多造轮子的过程,前后也有2000-3000行的代码。轮子太多,所以有效代码量差不多应该减半。 4. 大三上学期的Ruby程序设计,写出了自己的第一个网站。因为并不是团队开发,所以网站的规模并不大,都是自己前后端兼顾,体验了一把全栈工程师,Ruby的代码前后应该也有小1000行,但这些代码都是实打实的,无论是后端的数据库操作还是前端的页面设计都让我感觉每一行代码都有自己的生命。

在2019年的下半年开学,拖了两年的士谔奖学金评选终于进行,在我的发言中就提到了类似的对比。这里我们对比的是北大青鸟,当时我对比的是隔壁的北邮。并不是说北邮的不是科班出身,当时我拿北邮做对比是来谈了谈通识教育的感受。 北航的通识教育在全国范围内都是领头羊的身份,从我们2017级开始大类招生,第一年用心学基础知识,什么工科数学分析、离散数学、线性代数、基础物理,甚至还有2018级加入的工程图学,很少涉及到专业知识,大一上的计算机专业知识只上了8周的课,大一下接触数据结构开始才觉得自己还有一点点计算机学院的学生的意思。相比北航,北邮的步伐很快。 他们没有大类招生,入校就开始学习专业知识。当我们大二才开始接触一点专业课的时候,他们准备出去实习了。我有两个同学在北邮,他们都通过学长学姐的内推拿到了实习的机会,像他们一样的人还有很多。从外人的眼光来看,甚至从很多北航自己人的角度来看,当年考取北航的分数,性价比不高。而很大一部分是如何计算性价比的呢?能否立刻出去工作实习赚钱。我不否认这是一种衡量的途径,但同时也认为这种衡量的途径是否太片面了。倘若将北航和北邮的学生毕业五年后十年后的工资水平拿来对比,会不会又有新的发现。

我愈发感受到基础知识的重要性,不仅是轮子哥所说的扎实的数理基础让他在学习图形编程的时候信手拈来,还有我现实中遇到一些小事。 在大二的时候,有幸加入了北航的软件国家重点实验室学习计算机视觉的知识,虽然实际上是作为深度学习的入门,了解一些深度学习的基础知识罢了。多年的数学功底帮助了我很多,在看吴恩达的深度学习入门课程中很多关于矩阵的运算还有微积分的运算,不会把我卡太久。后来有一次帮师兄调研论文,论文里出现了很多降维升维的操作,师兄有点吃不消,让我跟他慢慢讲讲其中的矩阵是如何变化的,那一刻我意识到,原来数学真的是如此重要。 再后来看到一些讨论人工智能领域是否过火了的议题,有些人认为现在大家一窝蜂地扑到人工智能的浪潮中,人员已经过饱和了。但下面有一个回答特别刺眼,他将从事人工智能的人群分为两类人,一类是工程师,另一类是科学家,根据二八原则,大致也是工程师占8,科学家占2,而大家都很清楚接下来的结论,往往推动这个行业发展的,是那一少部分的科学家。 虽然我已经决定不往人工智能方向发展了,毕竟这一块其一是实在太热了,我的竞争力太小,其二是在我实习的期间也发现自己对深度学习和人工智能等等并没有很大的兴趣,我更喜欢和系统和数据库打交道。但是我还是会在课余补充自己的数学知识,以防自己的大脑掉电。 但其实从另外一种角度想,北大青鸟的人就差吗?这个社会就像是一个机器,每个人都是一颗螺丝钉,只不过大家所在的位置不同罢了。有重要部位的螺丝钉,但也有其他部位的螺丝钉,毕竟不可能每个人都当最重要的那一颗,只要大家各司其职就好了。只不过一个很残酷的现实就是,非关键部位的螺丝钉可能会被随时换下来,以为更换的成本并不高。 在刚入学的时候,北航就给我们灌输了一种思想—— 北航所培养的是领军领导人才。 在刚上编程课的时候,老师问我们,你们学习打码是以后就像成为一个程序员吗?如果你想成为一个程序员,不如现在就去北大青鸟,那里更符合你的预期,突击的集训学习,保证你在他那里毕业能找到工作。但是,从 .net程序员工作两年总结 中我们看到了,那些非科班出身的,在外面通过培训班出来工作的,即使非常用心地在学,有付出自己的努力,但是面对相同的福利待遇,门槛比我们要高得多。看完他的总结我其实非常同情和理解他,虽然可能他也不需要我的同情,很多人可能不是自身的原因,而是外部的原因,失去了很多机会,只能靠北大青鸟、达内等培训班培训上岗。我们真的要感谢我们所获得的一切,若不是我从小接受优质的教育资源,要不是我父母是有文化的大学毕业生,我恐怕走到北航的几率也很小。

我没有去过速成的培训班,只接受过大学的基础教育所以在此不做评论,但我想说一下mooc方面。 我其实算比较早接触mooc这种东西,在高中的时候,那时候互联网教育还不是特别发达,我就花了100块钱上猿辅导买了网课,补习自己的化学,老师讲的内容非常好,很多记忆的口诀,我的化学确实提升了不少,我也感受到了互联网带来的便利,可能是搭上了互联网的早班车。后来我下载了网易云课堂,网易公开课,在上面接触到了可汗大学的优质mooc,可汗大学的线性代数讲得真的非常帮,高中的时候虽然用不上,但是我还是会像追剧一样看,老师说话很舒服,板书也很工整。再到后来解除了中国大学mooc,那时候是为了补充一些物理竞赛中粗略带过的概念,看了一下清华大学的电磁学。怎么说呢,本来是怀着期待的心情看中国大学mooc上面的高等学府的资源,但却出乎所料的失望。很无趣的课堂,对着知识点的干讲,没有互动没有板书,于是乎我看完自己需要的部分,就再也没打开过了。 现在全民在家上网课,在开学的第一周有幸参加到了很多高校领导出席的观看开学第一课活动中。徐校长谈到,自己最近就在看网上某知名大学的mooc,但发现质量并不是很理想,却同时又带者精品mooc的牌子,其实北航很多的老师讲得绝对比这个好,但是我们缺少一个契机,做成网课的形式,展现出来。 2020的春天,这个契机来了。我相信这些真正给学生的mooc,而不是特地录制的mooc,更有一种真实感,更能反映出真实的课堂的感觉,而不是像中国大学mooc上面的现在的很多课程,老师确实花了时间和精力去录制,但是学生的效果却并没有理想中的完美。

线性代数和概率论本来就很有趣啊,为什么会有人提出这样的问题呢? :) 可能是数学虐我千百遍,我待数学如初恋吧。说实话至少北航的本科数学课程和高中数学竞赛相比简单了不是一个层次,而且数学能和生活联系的实在是太紧密了,虽然我看不到,但我感受得到。 所以我从来没有这种想法,学习知识,特别是学习数学这种基础知识,生活中一定会用上的,用不上也算是防止老年痴呆了。

0x03 你要改变世界吗?

description: 本节主要回答以下几个问题: 对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路? 你对于实现自己的梦想已经做了或者计划做什么样的准备? 你们马上就要面临实习了,你打算在企业内实习还是在实验室实习? 实习经验究竟有多重要?是否需要马上开始积累实习经验?

经过大二将近一年在软件国家重点实验室的实习之后,我发现我扑到人工智能的浪潮中,可能就再也找不到自己了。可能是多年竞赛的原因,自己对科研这种时间线拉的很长的事情不是特别有兴趣,可能很久都没有idea,缺少及时的反馈,很容易让人放弃。而且人工智能和深度学习领域井喷式的发展,我真的担心我可能跟不上时代的发展。所以在大三学期开始前,我退出了待了一年,特别是最后一个暑假的实验室。 当然也没有闲着,转身加入了北航的超算队,主要负责机器调试,也在赛题中帮手。我貌似找到了自己的兴趣所在——后端。后端是一个看起来谁都能做的职位,但绝对不是一个轻松的职位。除此之外我对GPU编程也比较感兴趣,大三上的《CUDA编程实践》为我打开了兴趣的大门。但是我并不是想往图形学方向发展,我更向往底层发展。听闻MEGVII的 brain++ 大厦已经落成,不知道我未来能否贡献自己的一份代码?

当然为了成为一个优秀的后端工程师,我也想参与实习,但参加了一次面试之后,发现自己所了解的还只是皮毛而已。面试官考了我几个linux下的指令的细节,我却回答不上来。是的,都是我曾经用过无数遍的指令,像是free,但我也只是在用的时候只了解了自己所需要的部分,而没有将一个指令所展现出来的所有内容和所有细节记在脑子里。这可能就是一个企业为什么要在你身上符出资源,凭什么招一个只会用的时候上网查的工程师?我深感遗憾,但也更加细化地明确了自己的方向。 至于我的技术道路的话,看了爆栈人生博客 里面的总结,感觉自己的技能树点了不到一小截,长路漫漫。但年轻也是一种资本,在实践中学习专业的知识我相信更加有效。至于职业道路的话,可能也是按部就班,先从程序员做起,但心中也坚守一份成为团队Leader的希冀,培养自己成为Leader的担当,至于再后来的路线,谁也说不定这个时代会怎么样发展,自己又会遇到什么样的人和事。看了灵感之源的十年工作经历.net程序员工作两年总结之后,我觉得单凭一个人自身的努力很可能看不到效果,还要抓住路上的机遇,甚至是风险。每一次风口出现的时候,都有一群猪在天上飞,我能不能也成为其中的一头呢?

对于马上就要面临的实习,我觉得按照我的目标不改变的话,大概率是选择公司实习了,因为学校里面也没有什么需要后端实习生的地方,而且校园内部的场景与公司相比还是太显得单一了。我现在也在学习算法和Linux编程,复习四座大山,希望能到明星大厂开启自己新的一段实习生涯。

实习的经验固然重要,但也不可神话。每个人有每个人适合自己的道路选择,我也见过身边的大佬就是适合单干,脑子里尽是idea,自己也能够一点点实现,可能实验室对于他来说是可有可无的资源,并不是必需品。但是我也相信对于大多数人来说,实验室是指明自己发展道路的一个 捷径,在导师和学长的 push 下你可以看清楚自己想要什么和不想要什么。当然大佬的能力不是人人有,对于像我一样的普通学生,能够尽早地进入实验室,看看自己感兴趣的东西实际上是否和自己想的一样。很多人认为到实验室要拿出成果,积累经验,但就我自己的角度来说,更加重要的是看清自己的方向,早走弯路。个人愚见:科研是兴趣驱动、兴趣导向的,单纯有能力可能会学的很好,但未必学的很高。在学校的实验室的试错成本要比到时候步入社会了时候的犯错成本低得多。若能在学校的期间就发现自己的真正未来方向所在,我觉得大学实习的意义已经达到的差不多了。就像是在CSDN对陈皓的采访中所说的:“今天,我对许多刚上路的朋友都会说,人生的规划很重要,从上大学时就要好好规划,这对国人来说尤其重要。因为对于国人来说,人生的头20年都是被别人规划的,导致了自己根本不会给自己做规划。这点是相当危险的。”

你要改变世界吗?是一个好问题,但我现在并不幻想着立刻改变整个世界,先从个人的小世界做起,或许哪一天在不经意间,撬动了这个世界那么一点点呢。

0x04 好久没写过思考过这么久了

拿到第一次热身作业,第一反应是被十几个博文的链接吓到了,但因为时间还很长,所以就硬着头皮一个一个看吧。但读着读着发现,程序员们的文笔都还蛮符合我的口味的,而且在自己也经历了一段科班生涯之后,在文章里也能够读出一些共通之处。大家都学了四座大山,大家都有实习和面试的经历,甚至大家都会为了本科毕业的下一段旅程而思索过。特别是当我看到轮子哥2012年的博客的时候,内心是有点喜悦的。早在知乎上就关注了轮子哥,但一直看到的只是他在一些回答中的只言片语,始终没有弄清楚过他是怎么样的一个人。在网上搜索过“轮子哥vzch”是谁,却没有找到自己想要的答案,也没有想过轮子哥是否有自己的博客。好巧不巧,居然因为软件工程这门课程,对许多程序员和计算机专业的学生膜拜的轮子哥有了更加深入的了解。果然优秀的人无论在哪里都是优秀的,无论是清北学府还是华南理工。课程组估计也下了一定的功夫,给我们设置了循序渐进的题目,确实这些题目非常诱人,一步步把我很少说的东西都从肚子里勾了出来。从来没想到过自己能写这么多,现在已经有1w4k字左右,从3月1号动笔写到了3月3号的下午5点。这几天是有时间就写,甚至晚上写到2点(我自己的真实情况是晚上更加冷静,思绪更加流畅)。 这学期借着软件工程这门课的机会,多动动笔吧,把自己的科班最后一点路记下来,或许对别人有用,更有可能的是对自己有用。 希望自己能在这学期学到一些东西!在热身作业中立下这一支Flag!

参考链接

Last updated