【软件工程】第一次作业-热身!

项目 内容
这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建)
这个作业的要求在哪里 第一次作业要求
我在这个课程的目标是 掌握软件开发的方法论和诸多技术,与同学合作开发出好的软件
这个作业在哪个具体方面帮我实现目标 总结过去,明确未来目标
作业正文 如下

第一部分:结缘计算机

同许多同学一样,我与计算机缘起电子游戏。小学时订的《少年电脑世界》推荐了《星际争霸》,从此一发不可收拾,视力一落千丈。博客I中博主为了计算机而立志学好英文,我却是为了看懂游戏剧情,模仿游戏中的语音而积累了很多词汇量,并练就了一口正统的美式口音。至今仍清晰地记得认识“program”这个词是源于《星际争霸》的“Exit Program”,当时觉得这个词汇十分的“高大上”。

· 你为什么选择计算机专业?

遗憾的是,小时候我对游戏的热情并没有迁移到对计算机的热爱。虽如此,一直以来我都惊叹于计算机的繁复与精巧,因此它始终在我的专业清单中居于高位。高考时没有去到最想去的南大物理系,便选择来北航学习计算机。时至今日,我十分感谢过去的选择。通过近三年的学习,除了"hack into the computer",写了大大小小的程序颇有成就感之外,更重要的是我在这个过程中收获了一个可以说是“general rule”的强大思维方式——abstraction,以及用代码解决生活中问题的尝试欲——这为我的生活带来诸多情趣。

Any problem in computer science can be solved by anther layer of indirection.

这句话在学习操作系统,编译原理,数据库.......时被反复提及、想起,对我的思维方式造成了不可磨灭的影响。如何设计中间层以及层级之间的接口是一门颇有讲究的学问,甚至可以形式化地研究它。这种拆解、抽象的方法论十分强大且cool,相信在接下来软件工程和计算机网络的学习中我又能加深对其的认识。

·你认为你的条件如何?和这些博主比呢?

我认为我在认真,追求简洁这点上还是符合了计算机的气质。但与博客I博客M的博主相比,我并没有像他们那样自小而来的探索计算机的热情,与博客C的博主相比,我也没有他那种近乎偏执的坚定,因而也就缺少了一些兴趣驱动的探索过程。博客M中轮子哥讲述大一时自制脚本引擎并在后来发现与Java使用了相同的操作细节,这样的经历无疑能强化对相关概念(对象)的认识和自学的信心。他们的经历告诉我们:在计算机上所画下的真功夫,对能力、技能、思想的提升是巨大的,且一定能在不久的将来体现出来。

· 你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?

学习计算机,既可以获得思维上的提高,又可以体会到一把geek的技术宅之乐;近来的诸多方法,甚至能让计算机从生活现象中抽象出一般规律。对于这样一个万能机器岂有不爱之理?!如今,对计算机的上下结构都有了一定的了解,也具备了编程解决一些生活中问题的能力。正如Queen的那首《radio ga ga》唱出了一代人对信号噪声的情愫,我发现计算机已然成为我生活中不可分割的一部分。虽则时而被专业课暴虐,对计算机的热爱却并不会因而减弱。

第二部分:在计算机系里学习

对我来说,在北航计算机系学习的确具有理想大学生活的特质:每一学期奋战大作业时夜以继日地调bug、优化,以及最后的ladder机制都十分exciting;os期末的时候几个人聚集在士谔空间整理一学期的代码、知识点,同时不忘关心一下对方又被“刀”了几下。凡此种种,都成为6系的共同回忆。

· 你对你的大学生活有什么想吐槽的地方吗?

阅读了FutuerxGo同学的博客,深感其对本科教育认识之深刻,针砭时弊读的好不爽快!总体来说我对大学生活较为满意,唯一想吐槽的是部分实验课程的低容错率:以自学为主,难免踩坑,而较高频的闯关测试削减了试错的机会。当然解决方式应该是搜集共享信息及自己编写测试,但在刚接触此种模式经验尚不丰富时,不能在短时间内掌握一些方法,致使因为一些失误而无法继续,的确令人不甘。

· 你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。

我理想的大学教育应该是在通识教育的基础上给学生提供几种专业方向的路径(课程的先后关系),鼓励学生根据自己探寻出的发展方向选课。每门课明确自己的前后继和讲述内容,让学生带着目的上课。内容上,专业课的实验课程应该更加紧密地和理论结合在一起(应该由理论课老师掌握实验进度,而非另外的老师)。更多强调course project而非紧张的周测,放长检验周期,允许一个不断refine的过程。高年级前沿领域课程可以将course project的目标提高到一个严谨的学术成果,做的非常好的学生可以就此发表论文。关于同国外的对比,我非常认同edward-crazyMisTariano的回答,硬性条件的不足与选拨方式造成的环境不纯粹性的确使得学校难以做到国外的水平,但仍有许多老师在尝试着引入新的模式,并且可以取得良好的收效。比如上学期的数据挖掘和机器学习课鼓励动手实现机器学习模型,着实让人在工程代码、数学原理上都有所收获。很多同学都探索了自己的EDA(Exploratory Data Analysis)方式及调参技巧,这对经验的积累是非常重要的。

· 迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。

总代码量在6-7万行。做过的最复杂的项目是用C语言实现的类C文法编译器。通过自顶向下分析法对源代码做语法分析生成中间代码,而后将中间代码翻译为MIPS汇编指令,并做了一些中间代码的窥孔优化。代码量在4000行左右。

· 学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?

之前学数学的时候,更多是延续了高三的心态:上课记笔记,下课刷题考试。并没有就意义上思考太多,课程难度也不太大。数学在编程上起到核心思想作用的第一个稍具规模的程序是数据结构的大作业。用马尔可夫链对长文本建模,基于此对原文缩写。虽然其数学思想比较trivial,但这已经初具编程实现数学模型的雏形。上学期数据挖掘导论及机器学习鼓励自己动手实现模型,在这个过程中接触到了二次规划的优化求解(SVM中的SMO算法),花了好长时间才理解原理,这才意识到数学水平之薄弱。后来看了一些论文,发现ML方向的创新许多都来源于数学(损失函数,优化方法等),编程很多时候只起到一个检验的作用。

其他学科中,有直接关系的英语自不必说——英文是学术交流的国际语言。在对真实世界的建模过程中亦需要用到许多物理知识。对于计算机来说,让其解决其他领域问题,就必须将领域知识作为先验编码。

第三部分:未来规划

· 对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样规划你的技术道路,职业道路和社会道路?

我的梦想是在计算机科学的前沿研究中做出自己的贡献,希望从事科研工作,实现创新。这需要有坚实的数学,编程基础和对领域内各种方法(包括传统与SOTA)的深入理解——理解一个方法,才能发现它的优点与限制。在此基础上,坚实的数学能良好地辅助建模(或对现有方法的补足)过程,保障模型可以work。而拥有强大的编码能力才能快速验证自己的想法,抢夺先机。此外,英语是学术交流的国际语言,优秀的英文阅读理解及写作能力是吸收观点,表达观点的窗口。

· 你对于实现自己的梦想已经做了或者计划做什么样的准备?

在校内的实验室进行了一些知识图谱挖掘的工作,了解了表示学习的常用方法及知识迁移的深度方法。实习过程中尽力阅读原始文献,保持一定的阅读量,同时在阅读过程中积累词汇量。

实习中时有受到编程上的制约而影响效率,以后要在编程中积累一些简化操作和常用算法。此外,在实验室的这段时间更让我深刻认识到数学水平之不足,因此计划未来在遇到卡壳的数学知识时及时补充消化。

· 你们马上就要面临实习了,你打算在企业内实习还是在实验室实习?

我认为企业与实验室的选择是由想深入了解的方向所驱动的。在一些比较实际,具有很大商业价值的领域(如软件工程,计算机视觉等)企业往往比高校的实验室有更深刻的见解(trick)。而在基础研究上,由于其商业价值尚且无法快速实现,高校的研究会更为深入(如对自然语言的建模,知识图谱的表示学习等)。当然,这些新方式的价值,终究还是要投入实际应用才能彰显,因此很多时候不难在高校的论文中发现企业人员的身影。对于我来说,企业及实验室都希望有所接触。

· 实习经验究竟有多重要?是否需要马上开始积累实习经验?

对我来说,实习经验很重要,我认为本科生应该在学有余力的情况下尽可能积累实习经验。这实际上是一个自然而然的探索过程。不管以后有志从事何种工作,提前接触都是必要的:一方面实习通过带来一些实际的体验让我们更加清楚地认识到自己是否真正喜欢这一路径。另一方面,实习过程中从新手入门的过程,也即学习而后学以致用的过程,对学习能力,交流能力的提高也有很大帮助。如果在实习中更加确定了自己的方向,这段实习也能提供给你一个更为明晰的目标。

结语:Life-long learning

看《星际争霸》20年间的变化,计算机软硬件技术的发展可见一斑:分辨率提高适应更大的屏幕,贴图变得更加复杂精细栩栩如生,3D画面、阴影的运用营造出一种景深感,单位被赋予了精巧的闲置动化,寻路算法更加智能,甚至,暴雪引入了Grandmaster级别的RL-based的AlphaStar与玩家实时对战......

技术来带更加舒适、沉浸的体验,这将永远持续下去,需求也将随着技术而拓展。从事计算机行业需要保持不断的学习和进步才跟得上时代。breaking barriers in C.S. will be a life-long process.

猜你喜欢

转载自www.cnblogs.com/blueshift/p/12391906.html