最近重新看邹欣写的构建之法,发现他的第一章课后作业很有意思,所以决定自己也来写一下。有关的作业说明在2017BUAA软工助教 第0次个人作业 - ChildishChange - 博客园中。

结缘计算机

你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答)
计算机是你喜欢的领域吗?是你擅长的领域吗?
你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?

与大部分人差不多,在高考前我也没有对规划未来。考的也不是很好,没有太多的选择。所幸自认为还是有学习的劲头,想着大学找机会去转专业一波。当时也没有太在意专业的填报,最后机缘巧合来到了财经读计算机。大一下时,确实得到了转专业的机会。在面试时,突然感觉自己对转过去的专业也没有太多的好感,就和面试我的老师说放弃转专业,他们只能口头上鼓励我,男生学计算机也不错。大概就是这样子,就在计算机专业混到了大四。

比起这些博主来说,我没有他们那么强的主观能动性吧,能自觉地了解学习计算机各个领域的知识。而我从除了学校内的课程安排之外,自己了解其他知识都是浅尝而止。从大一开始差不多就点弯了天赋树,基本上课余时间都在写算法题目,参加各种各样的算法竞赛。幸运地拿了一些大大小小的奖,但是这也导致在知识面上和企业认为的计算机专业学生有很大的区别。目前来说,正在通过自己的努力,加强学习基础知识,希望能补齐自己的短板。

记得之前有一句话说,「数学是神造学科,计算机是人造学科」。在三年多的学习中,无时无刻不感受到前人思维的巧妙与严谨。比如 CPU 中的加法器,能通过简单的元器件和门电路搭配实现二进制加法以及进位。另外,计算机专业也能及激发最深处的好奇心。当你查阅相关的文档,实现软件的某些功能时,是否能想起童年某个午后拼成的模型?

在计算机系学习

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

对于专业来说,我记得辅导员曾经在年级会议上讲过这样一段话:「有些人和我说,为什么高等数学这么难?这些书都是在大学没有扩招前编的,以你们的成绩当时都可能上不了大学。而且,我们学校搞计算机系,只是发现有很多教计算机基础的老师才开设的。」所以,也可以知道这个专业在学校的尴尬地位。

托尔斯泰说「幸福的家庭总是相似的,不幸的家庭却各有各的不幸」。反而对于计算机专业来说,感觉「普通学校的问题总是相似的,强势学校的优点却各有不同」。蒋宇东在梦断计院 为梦前行中写道他自己的学校计院有三大问题:1.学生基础薄弱 2.学风不正,溃散成性 3. 实践环节薄弱,人才位置错放。之前,我也一直在想一件事情:是老师水平太差学生懒得学还是学生水平太差还是老师懒得教?看到上面的三个问题才明白,冰冻三尺非一日之寒,事物发展都是相辅相成的。学生大部分都是过来享受大学美好生活的,对于有挑战的专业基础课比如编译原理、离散数学等都会用脚投票让他离开课程表。有幸能勉强开下去的课程,也会被改成能突击几天通过的样子。

记得大二导师前往台湾进修前找我谈过一次话。他希望我能自己养成一些良好的学习习惯,多去钻研计算机专业知识。并且还说,学院每年毕业的学生中,没有超过十个学生明白计算机是怎么一回事?三年多的时间里,我也接触过网上的一些 Mooc,不过差不多完全听完的只有浙江大学陈越教授的数据结构和吴恩达教授的机器学习。能坚持学习完这两门课,背后都是兴趣使然。数据结构是 ACM 比赛中很重要的一个知识点,当时自己学校还没有开设这门课,而且看书自学也不是很懂,所以就花大半学期的时间在网上去学习。机器学习则是希望未来能从事机器学习相关方面的工作才了解的。

陈越教授放在网上的数据结构课程相对于浙大内部来说,最大的变化是将教学语言从英文变成了中文,而且也适当的删除了部分内容(不是很确定?)。之前也在知乎上看到浙大计算机专业的课程安排,主干课程选用外国原版教材,以及使用英文授课。另外陈老师在讲解相关算法时,只介绍原理和思想。相关的实践需要你课后花时间进行,并且要求提交程序设计平台上进行黑箱测试。对比后来在自己学校开设的数据结构课程中,直接给你展示代码,也不强求你写的代码能正确运行,只要粘贴在实验报告中提交即可。《机器学习》的课程展示了美国教育的特点,每一周的课程都会包含一个小 quiz ,以及在课程中插入适量的编程大作业,学习的困难程度也就可想而知。

这些授课方式的不同,我认为是不同大学对于教育的理解不同。对于浙大之类的重点大学来说,所给予学生的是精英教育,侧重于培养学生的计算机科学基础。而下面的学校更多是大学教育成为通识教育的产物,本应该培养专业型人才,传授计算机技术,却由于种种原因没有这样开展。Mooc 的出现,打破了原有的时间、空间的限制,让我这样的普通学习接触到了国内外顶尖大学的教育资源,有利于教育公平。但失败之处也在于它的灵活性,不得不承认需要很强的自我约束能力才能完整地学习完网上的课程,不知你还记不记得那个当时看得热血沸腾的课程时,被你遗忘在哪个角落了?

最后,我觉得 Mooc 还缺少的同辈压力。吴军博士在《大学之路》中写道「当许多聪明、求知欲强、具有同情心而又目光敏锐的年轻人聚到一起时,即使没有人教,他们也能互相学习。他们互相交流,了解到新的思想和看法、看到新鲜事物并且掌握独到的行为判断力。」这大概就是学什么不重要,重要的是和谁一起学吧。一些 Mooc 虽然提供在线社区交流,但还是没有线下那种碰出火花的感觉。

对比完这些,计算机专业学生的另外一个主题不可能忽视——“自学”。最开始的作业说明给出的很多参考博文也说明了这一点。我印象最深的一个方法是徐宥在掉进读书的兔子洞中写道的「一字不漏敲入一本书的程序成了我推荐别人学习语言的最好办法」。古语读书百遍其义自见,计算机是一门实践的学科,只有在实践中才会学习到技术的本义。目前,自己在看《机器学习实战》时(相关代码和读书笔记见参考链接5
),也差不多用的是这个方法,将书中提到的机器学习算法一个字符一个字符地敲进编辑器,一次又一次地调试运行直到出现满意的结果。

在这样的学习中,我也可以回答这一部分的最后一个问题,我们为什么要学这么多数学,这和我们的计算机有关系吗?对于机器学习来说,本身是建立在概率论和线性代数的基础上,毕竟解释机器为什么能学习都需要用到霍夫丁不等式等相关知识。数学是一种工具,通过数学能将很多的计算机实践经验理论化,以此得到更好的发展。对比功力性很强的培训机构来说,接受科班教育的结果是有机会受到严格的数理化训练,这也能间接决定你在这个行业从事工作的层次和上限。

未来规划

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

前文也提到了,以我的目前的情况来看,大学中接受的教育和自己所学的技能都是和市场脱节的。所以,前一段时间也很迷茫,自己能做什么。所幸看到之前公司的同事所写的知乎专栏文章「谈“圈外”在校生如何更靠谱的拿到大厂算法/ML实习机会」(不知道为什么被删除了,所以无法提供链接),大意就是可以曲线救国,先就业再择业。

所以,我还是推荐出去实习的。不仅是走出象牙塔,感受一下工业界的需求。更重要的是大一点的企业都会安排专人对实习生进行相应的指导,使其能更快地朝工程师方向发展。

参考

  1. 现代软件工程 第一章 【概论】练习与讨论 - SoftwareTeacher - 博客园
  2. 2017BUAA软工助教 第0次个人作业 - ChildishChange - 博客园
  3. 蒋宇东:梦断计院 为梦前行
  4. 徐宥:掉进读书的兔子洞
  5. xiang578/MachineLearningAction: 《机器学习实战》

IMG_0233