北航软工热身作业
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020春季计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 热身作业 |
我在这个课程的目标是 | 学习软件工程相关知识,提高自己团队项目的开发能力 |
这个作业在哪个具体方面帮助我实现目标 | 总结回顾计算机学习生涯,为未来规划作出准备 |
参考文献 | 博客1 博客2 博客3 |
第一部分:结缘计算机
Q: 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?
作为一个在大学之前从未接触过编程的人,最初选择计算机专业主要是靠盲从和感觉。因为高中读的理科班,而当时理工科最热门的专业可能就是计算机了,便选了我高考分数能够得着的北航信息类。在大一学习过一些计算机基础课之后也认识到自己对这个领域并不厌倦,相比于其他工科专业,我认为计算机的思维方式对我们未来的人生可能更为实用,便决定进入计算机学院。
在见识过北航的各种大佬后,我认为我只能算资质平庸的学生。在这里从小就接触编程,初高中就获得过信息学竞赛的同学不在少数,而我刚进大学时连Hello World都要研究半天,与同学讨论问题时也常常佩服他们宽广的知识面与精妙的思维,这些都是在高中两耳不闻窗外事,一心只顾刷题的我需要学习追赶的。
与博主1相比,我感到的只有惭愧,他是英语专业的学生,但对于计算机的热爱却从小开始就不曾间断,身为计算机专业的我却只把计算机当作一门课程,一种工作,而不是融入内心的追求。我深知自己落后的还有很多,但正如博主1所说,“世事没有完美”,而成功“贵在坚持”,不妄自菲薄,多向他人学习,持之以恒,我相信我也能干出一番事业。
Q: 计算机是你喜欢的领域吗?是你擅长的领域吗?
我对计算机可以说是又爱又恨。自己写出一个支持50条指令的cpu时,写出一个自己的编译器时,我感到自豪与欣喜,认为我热爱计算机,但当自己被Bug困扰修改几天也无济于事甚至只能重构时,我又后悔当初为什么要学计算机。我在学习计算机的路上就这么跌跌撞撞的前进着,但我觉得学习任何一门课都会有成就与欣喜,也会有困难与沮丧,关键是在这个过程中我们能有所收获,时间久了,便发现自己已经越来越爱这个领域了,也许我并不是很擅长计算机,但现在想来也绝不后悔选择这个专业。
第二部分:在计算机系里学习
Q: 你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。
不知不觉大学生活已经过了大半,对自己的大学生活也难免有些吐槽的地方。首先是大类分专业问题,因为北航是按成绩分,成绩高的可以先选,而据我所知大一排名前列的几乎都选了计算机,这就导致有些真正热爱计算机专业的人可能进不了计院,而有些人可能不那么想选计算机,但在大势所趋以及面子问题上硬着头皮选了进来。其次是计院的课程体系,计组,操作系统,编译这些课开设的确实很好也能学到很多东西,但天梯制给分却让人感到相当大的压力,以编译器课设为例,两个同学的编译器性能上可能只有很小的差距,但排名却相差甚远,难道这两个同学的水平就真的有很大差距吗?我觉得有待考量,在这种情况下应试技巧反而成了比学习知识更重要的东西,让自己的编译器优化更符合测试样例排名就高,测试样例不涉及的就不做优化,甚至出现了藏分,我觉得这些问题的出现都是需要我们反思的。相比于硬件课的高水平教育,软件类的课反而感觉不受重视,比如算法这种课的难度跟计组比起来可就差太多了,我觉得学院可以适当多分配些时间到软件上,像类似于航概,物理实验这些学了根本不知道有什么用的课倒不如减少甚至取消,给软件方面的教育提供更多资源。
我理想中的大学教育,应该是让学生先学习专业基础课,之后根据个人兴趣选择适合自己的方向,如果有条件的话可以提供相关实验室供学生实习,提前感受研究氛围以及最前沿的知识,对于想要工作的同学也可以开展就业指导,注重培养工业界所需要的技能之类的。在具体的课程上,老师不仅仅是传授知识,更应该鼓励学生独立思考,实行启发式教育,正如博主2所说,“我们的思考方式沦为简单地重复和机械地回忆,胆子变小,创新力几乎丧失——对于计算机这种快速变化和要求很高的学科来说,显然没有什么价值”,别人的想法始终是别人的,一味的接受别人而没有自己的思考只不过是一个“调包侠”而已,有自己的深入思考,能提出建设性问题并沿着这个方向不断钻研下去才能将知识内化,最终得出自己的理论。我觉得北航这方面做得还不错,很多实验课设基本都是鼓励我们自己思考并付诸实践,遇到困难也可以相互讨论,整体氛围是非常好的。
与国外相比的话,国外应该更注重学生的个体发展,并且教授与学生的联系要更紧密,在北航我给一些教授发邮件经常不回,但国内资源有限老师也确实很忙,如今北航的课设改革也越来越像国外靠拢,注重培养学生的工程能力和综合素质,我觉得这点是非常好的。
Q: 迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。
目前我主要的代码量都集中在leetcode刷题以及学校的课设上,具体多少没做过统计,前前后后也能使用java,python,C++写点像样的东西出来,但代码风格以及质量实在需要改进,我也希望在这门课中学习完软件开发的知识后能写出高效的代码。
我人生中第一个真正的项目是大一在网上学的消消乐游戏,用了一个C语言很古老的graphics库,虽然是过时的技术但却给了我计算机项目的宏观印像,那时正好学习程序设计,递归思想以及模块化设计思想在这个项目中都得以运用。最复杂的软件项目可能是编译器课设,从词法分析,语法分析,错误处理,生成中间代码,中间代码优化再到最后的生成目标代码,总量3000行左右,使用C++编写,在这个过程中我坚持增量式开发不断扩充功能,虽然最终的编译器效率一般但对于我也是一次难得的经历。
Q: 学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?
我从没有过这样的疑问,早在高代课上老师就经常提及线性代数知识在信息领域的广泛应用。随着科学的发展,人们不仅要研究单个变量之间的关系,还要进一步研究多个变量之间的关系,不仅要研究单个特征的影响,更要研究多个特征的影响,在各种实际问题中我们经常需要用高维向量去表示目标并将问题线性化,而线性代数正是解决这些问题的有力工具。至于概率论,其中的很多概率模型都在如今的计算机建模中被使用,重要性不言而喻,可以说数学是计算机的基础,也是计算机发展的导向,程序员不过是将数学付诸于实践,而算法与模型的提出,都需要数学知识来支撑。
至于其他学科,我一直认为计算机是一门包罗万象的学科,现在几乎任何领域都有计算机的身影。如果我们学习医学相关知识,那么就会成为信息化医院的建设人才,如果我们学习商业,了解顾客的心理与偏好,我们设计的产品也就更能为顾客喜爱,诸如此类的例子数不胜数。正因为是计算机专业的学生,我们才更应该去学习其他领域的知识。
第三部分:未来规划
Q: 对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路?
我特别想成为某个领域的技术大牛,我知道我差的还有很多,在计算机这个技术飞速更迭的行业,只学习课内知识已经远远不够了,我想之后进入企业实习,在工业化节奏中感受到这个行业需要什么以及自己欠缺什么,再为将来的方向做好打算。博主3说,“从毕业开始到毕业后至少5年内,踏踏实实地专研技术,这是一个积累过程,千万不要把心思放在钱和职位上。钱和职位只是能力的附属品,不要让其喧宾夺主”,我觉得这对我启发很大,虽然行业日新月异,但只要能不断磨炼自己的技术,跟上时代脚步,那么就一定能找到自己的一席之地。我之后也希望去出国留学开拓自己的视野,毕竟对普通人来说,出国读书的机会可能只有一次,趁年轻时多出去见见世面,学习不同地区的思维方式文化特色我觉得对一个人的全面发展是特别有好处的。
Q: 实习经验究竟有多重要?是否需要马上开始积累实习经验?
正如我在上个问题所说,我觉得实习经历是非常重要的,博主3也说:“在大学的时候尽量多地进入公司参与实际工作,一方面积累工作经验,另一方面,提前认识工作和自己,以便毕业时更准确地把握自己的方向”,我也更倾向于企业实习,这不仅是学习知识,也是大学生学做人,学社会的良机。