软件工程第0次作业
项目 | 内容 |
---|---|
本作业属于北航软件工程课程 | 博客园班级链接 |
作业要求请点击链接查看 | 作业要求 |
我在这门课程的目标是 | 成为一个具有一定经验的软件开发人员 |
这个作业在哪个具体方面帮助我实现目标 | 让我对自己目前的状况有一个更加清醒的认识 |
第一部分:结缘计算机
问:你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?
答:其实在上大学之前,我从未正式接触过编程。与编程最接近的一次,是我高一时购买了一台德州仪器的可编程计算器,在上面随手编写了一个计算两条直线夹角的小工具。当时我对编程并没有概念,只是照着说明书上的Demo照猫画虎,但最后竟然完成了自己想要实现的功能。从那时起我便想,也许给我足够多的时间,我就可以把我的计算器变成一台电脑。这就是一种创造,创造的过程使我感到掌控一切的快乐感,于是从此我把计算机和物理并列,成为了我大学专业的首选方向。
高考结束以后,我得知自己考了666分。这个分数上南大的物理系有些勉强,因此我来到了北航计算机系。基于上一段提到的原因,我的条件并不是很好。一个几乎没有正式编过程、甚至没有听说过什么叫“递归”和“面向对象编程”的人,来到大佬云集的北航,无疑是一个受虐的过程。在第一学期的Python课上,我渡过得很艰难,每一次编程作业都是一次考验。但逐渐我发现写代码变得轻松了起来,因为我可以很轻松地发现我代码中的问题,或者想到绕开某个困难的办法。从这个角度来讲,我在编程领域又是有一定天赋的,我的思维方式很适合编程。一言以蔽之,我认为我自己是一个有一点点天赋的却什么也不会的菜鸡,如果那些初中甚至小学就已经接触过编程的大佬条件是100分的话,我可以给自己打59分,虽然没有及格,但只需要再努把力就可以踏入计算机科学的大门。
和这篇博客的博主相比...那自然是没法比的。这个博主显然就是我说的那种满分大佬,他在博客中提到的很多名词我甚至都没有听说过,比如GWBASIC和Quick BASIC,这些名词光听名字就知道有很久远的历史。从而这位大佬的经历也是我无从与之比较的。可以说,我与这位博主完全不是一类人,没有任何可比性。我选择计算机是基于机缘巧合,如果我高中时没有买那台可编程计算器,也许我现在就不会在北航计算机而是在南大物理系。我没有博主那样的对计算机笃定的热爱,也没有他丰富的经历,因此在阅读他的博客时,我只感到疏离,或许还有一丝被炫耀的无奈。
第二部分:在计算机系里学习
问:你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。
答:整体来说,我觉得在北航计算机系的学习经历是令我满意的。从数据结构课程、到计算机组成,到面向对象再到编译,我自认为我受到了全国顶尖的实践训练。但问题在于,许多课程的理论和实践是完全脱节的,比如计算机组成课程,实验课非常有趣,但理论课却枯燥乏味。老师似乎只是在念PPT,在课堂上听到的那些东西我暑假中自己看书已经全都学过了,所以我完全没有去上课的动力。这是我对目前的大学生活最不满意的地方,许多老师的学术水平很高,但是讲课能力却不能满足学生的需求。这就导致许多人完全不听理论课,只醉心于实验,期末考试时再集中突击一下,往往理论和实验都能取得不错的成绩。他们把这种经验一届届流传下去,造成了恶性循环。
我理想的大学教育,应该是理论与实践完美契合的。老师上课不仅会讲PPT或书本上的内容,更会与自己在学术界或工业界的见闻相结合,向学生们展示理论知识在实际中的用途。接着,再在实验课中让学生练习这些内容,形成一个闭环。
但目前北航的课堂教学方法仍然有待加强,和我理想中的有很大区别。具体的区别已经在本问答的第一段中有所描写,在此不再赘述。
显然,北航的老师和学校距离外国顶尖大学水平还有相当一段距离。当然,在国内,北航的计算机教学水平已经是前五了。可以说不仅是北航,整个中国的计算机教学水平离国外都有相当大的差距,也不能提供国外大学那样优秀的教育体验。归根结底,这主要是因为中国的学生太多、交的学费太少,老师没有精力也没有动力去准备优秀的课堂,学校限于学生人数和公立大学的身份,无法实行分层教育,只好一刀切,无论是顶层的学生还是底层的学生,都采用同一种平均的教学方式。这导致水平较高的学生无法得到满足,水平较低的学生觉得学习压力太大。当然,还有一些其它的潜在原因,比如大学对老师以科研论英雄的要求,许多喜欢讲课、愿意讲好课的老师迫于科研和论文压力,无法像自己理想的那样去上课。这个话题再讨论下去就很深了,因此在这里不再多言。
问:迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。
答:没有一个工具可以帮我统计我迄今为止到底写过多少代码,因此我只好凭我的记忆胡编一个数字。这个数字可能大了,也可能小了,归根结底是不准的,所以我索性不说了。我可以给出一个大概的数字,比如万行左右,但这实在是没有意义的。我无法保证我所说的数字是正确的,阅读这篇博客的您也无从判断我说的是不是真的。所以如果您一定要问的话,我就告诉您:“迄今为止,我写了一万行代码”好了,至于您是否相信,那便不是我的事情了。
虽然我不知道自己到底写过多少代码,但我对自己写过的大项目还是有一些印象的。大二上的计算机组成课程设计中,我的CPU大概有1000行代码,不过其中有很多水分。比如实例化一个模块时,我对每一个端口都单独分了行,如果不分行的话,可能最终只有六七百行。大二下的面向对象课程代码量陡然变多了,不只是因为代码写得多,更是因为面向对象的作业我不停在重构和重写,累积起来的代码量就不可计数了。我估计整个课程中我写了3000行+的代码,这也占了“一万行代码”这个虚数的大头。大三上的编译课程设计,我一共写了1800行代码,这是我做过的最复杂的单个软件项目,或者说是作业。那个编译器最终无错误地通过了课程的考核,这令我非常满意。
在这里我想详细说明一下我的小型编译器,作为我目前做过的最复杂的软件项目,它的构造可以说是一团乱麻。由于一开始写这个作业的时候我对编译器的理论知识并没有一个清醒的认识,而老师又要求提前对编译器的整体架构做出设计,因此我只好霸王硬上弓,做了许多并不合理的设计。后来一路修修补补,遇到问题就绕弯过去,遇到需求变更就想办法到处乱插代码以实现需求,最后整个代码成为了一坨,语法解析的Parse类有1200多行,几乎无法再维护。虽然代码的功能是正确的,但我并不认为我写了一个优秀的软件,这也是我想在软件工程这门课程中,再训练自己的地方。
第三部分:未来规划
问:对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样规划你的技术道路、职业道路和社会道路?
答:鉴于我踏入计算机系大门的原因是我喜欢自己创造一个小世界的快感,在未来,我希望能够从事一些创造性的工作。例如,与志同道合的伙伴一起,编写一个从未有人实现过的功能,或者创造一个前无古人的软件。这个软件的目标用户最好是专业人士,换言之,我想像Vue的作者尤雨溪那样,为计算机业界带来一些新鲜的东西。这样的工作机会或许很难得,因为编写这样的软件或工具需要占用大量的业余时间,以现在中国的互联网公司压榨员工的情况来看,一个人在中国凭借一己之力完成这样的开发的可能性基本为零(获得公司支持除外)。但我依然会为实现此目标而不断努力。
在大学的最后一年半里,我可能不会再把重心放在课堂的学习上,而是利用这些难得的课余时间去学习一些自己之前就想学习、但一直没有时间的知识,例如目前火热的人工智能方向的技术。虽然我不看好人工智能未来的发展,但我对人工智能各种算法背后的原理和实现方法很感兴趣,在这方向入个门也有助于我未来更好地升学或工作。除此之外,我加入了老师的实验室,对一些专业领域进行更深入的研究。大三到大四的暑假我会考虑找实习,以此验证我在这一个学期的软件工程课程中学到的知识和得到锻炼的能力。大四就是准备考研,踏上自己的升学之路。
研究生之后的学习生活过于遥远,常言道计划赶不上变化,我现在就算写出来我的规划,也只是纸上谈兵的吹牛而已。等走到了那一步再去考虑也不迟。
当然,目前最迫切的目标,是顺利通过这学期的软件工程课程。愿过去五个学期中发生的所有奇迹,在这一学期中都能够顺利延续。