天天看点

软工热身作业

软工热身作业

项目 内容
北航2020软工 班级博客
作业要求 具体要求
我的课程目标 学习软件工程,掌握团队合作,锻炼自我
作业在哪个方面帮助我实现目标 认清自己,规划未来职业

第一部分:结缘计算机

1 你为什么选择计算机专业?你认为的你条件如何?和这些博主比呢?(必答)

读了几篇推荐的博客后,有这样一篇博客让我从灵魂上感到自己和作者选择计算机的原因何其相似,甚至在大学期间的困惑也如出一辙。

简答地说是高考让我选择了北航,数学让我选择了计算机:

  • 因为高考的分数恰好适合北航,而且自己也比较喜欢数学,看了很多的专业,觉得信息类比较适合我,发展前景也比较好,老师也推荐,各种因素下,我来到了北航。
  • 大一分专业时,因为数学成绩很好,我的最终排名还算不错,那个时候对于计算机专业很迷茫,但是看到大家都首选计算机,就想着我也选择计算机吧,这么多人选,总吃不了亏。

我自己的条件:得益于数学还不错,所以在理论上,我觉得还是可以的,但是对于编程的实践就要差一些了,这也是目前自己感觉需要进一步加强的地方。接触计算机专业也有两年半,基本的认识和了解是有的,可是学不太懂计算机是真的,那么多技术,那么广泛的知识面,让我有时候会感到自己的渺小。

和这些博主相比,就更加感觉自己差很多,甚至有些为自己的职业未来担忧。我没有之前的相关经历,几乎是从零开始,以致于在学习初期,感觉编程颇为吃力,不过是随着不断的学习,慢慢变好了许多,虽然常常感到力有不逮,可是坚持下去,我想总是可以在计算机这条道路上走下去的!

2 计算机是你喜欢的领域吗?是你擅长的领域吗?

不得不说,我觉得计算机算是人类智慧的一个集大成者,从简单的01逻辑,到最终层出不穷的软件,我个人非常喜欢这种逻辑清晰的东西,也愿意去探索这个神奇的大厦是怎么建立并且良好运转的,尤其是在自己写得程序良好工作时感到什么的欣慰和满足,可以说,计算机我的喜欢的领域,我不为自己的选择后悔。

但是要说是不是擅长,我觉得至少目前并没有达到那个水平:

因为我发现到目前为止,我还是有点不太适应大学生活,有些迷茫,接触计算机专业两年半了,对于自己的定位,说实话,还不是很清楚,一直跟着课程走,有点迷失方向的感觉。总之是需要不断地磨砺吧!

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

这一问题,首先举个例子:

上个学习的编译课设,在目标代码优化的最后一周里,大家都在不断的优化自己的编译器,我个人经历了一周七天熬夜四天的时光,那个期间,整个人都是全身心投入其中,不断地思考逻辑,修改代码,想要做的更好,当看到最终的结果没有问题时,我无疑时热爱的,因为我感受到了计算机带给我的魅力,那种投入之后,反馈良好,没有任何错误的良好体验(当然可能会有课程平台没有测出来的bug)。可是在接下来的一周里,当我们还是可以进行优化并且用于最终考试的时候,我自己全然没有动力了,这个时候问我,我想我的回答是:不那么热爱。

所以,就目前,我对于计算机专业,谈不上真正的热爱,但是确实有过投入其中的体验,得益于北航六系的核心专业课理论+实验双开,我经历了一个辛苦,但是还算不错的开发过程,这一过程,对于一个计算机小白来说,是艰难的,但无疑也是收获巨大的。而未来,我想,我会热爱这个专业,并且希望自己可以做到轮子哥所说的这样:

过往的这些事情给了我很多的启示。在程序员的生涯里面,最重要的就是保持对编程的热情,不要被生活的琐事所磨灭。其次是要给自己不断地创造一些足够困难但是又有办法完成的挑战,这样才可以总是让自己保持着一个快速前进的状态

-- 引用自 vczh

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

1 你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。(必答)

吐槽:

  • 就目前为止,我觉得我对于大学的主要吐槽就是选课制度了,在很多情况下,被各种的压力所困,我们很难选到自己感兴趣的一般专业课,而为了学分低下了头颅。如果学校的课程资源可以更加丰富一点的话,我想会更好(当然,国内教学资源短缺本就是现状,毕竟人多,可能很难解决)
  • 每周都会有各种各样的会议和琐事,分流了我一部分的精力,虽然知道这是不可或缺的,但是每当看到效率低下的会议,总时仍不住烦闷。

我理想的大学教育以及学校给我的:

其实我自己也没有学明白大学应该是什么样子的,但我希望是这样子:老师会布置给我们任务,学生组成小组来解决一个实际的问题,而不仅仅是学习干巴巴的理论。就像博主所说的那样,更加注重实践会令人学习到更真实的东西,只是学习理论,我现在的感觉就是:学习之后怎么使用还是不知道,慢慢的就忘记了。

其实北航六系给我们的,大家都有目共睹,是很不错的实践学习过程,尽管会有各种各样的抱怨,但是不可否认的是,我在六系确实实实在在的做了cpu、了解补写了操作系统、完善了一个简单的编译器。

当然,受限于各种因素,目前的六系课程还是存在一定的争议,尤其是课程资源这一块,不过我觉得学校为了满足这么多人的要求已经做的很好了。

我觉得可以做到国外那样:

其实对比博客我们可以看到北航六系目前做的和国外的学校老师很类似,而且我们的老师也说过是在学习国外的制度经验。抛开小问题不谈,我在大二大三经历的核心专业课设实验都很硬核,而且注重实践,不论是mipsCPU的不断升级,还是操作系统的不断完善,抑或是编译器的不断改写,都和国外的教学理念很相似,而且还有高年级的学长学姐助教来帮助我们,教学组也在根据学生的意见不断改进课程。

可以说,一定程度上,我们已经接受了国外的这种计算机专业的教育,但换句话说,我们其实也不是非要和国外一模一样,就像现在这样,根据学生的反馈,不断改进,不断适合北航的六系学生,其实是一个更好的选择吧。我们既没有抛弃实践,也没有拉下理论,反而开辟了一条自己的教学道路,至少我个人在这条路上走的还算满意,也收获了很多。

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

迄今为止,我写了大概10000+的代码吧,仔细的没有算过,但是算上各种作业和自己的学习差不多是这样子。

目前为止最复杂的作业当属上学期的编译器,使用c++开发,实现了词法分析、语法分析、中间代码生成、代码优化、目标代码生成、符号表管理以及错误处理这七个编译器应该有的部分。总共的代码超过了4000行。

至于代码质量,个人觉得,基本上还是可以看的,期间也进行了多次重构,基本满足了课程组的需求,在优化方面也做了很多的工作,实现了诸如常量传播、复制传播、死代码删除、跳转优化、函数内联、寄存器分配等优化,最终取得了不错的成绩。

当然,现在看来我之后就没有在维护过这个项目,其实当时写得还是存在一些问题,导致编译器本身比较慢,仍然存在着本身性能优化的空间。以及,逻辑上也存在着很多优化的空间。

3 科班出身和北大青鸟有什么区别?

看了博客,我觉得北大青鸟的出身在底层理论上一般欠缺较多,他们一般是直接上手使用,不去理解,采取量变引起质变的原则(有点存疑)?很多编程的本质原则他们可能不会去学习,更加注重把编程当作一个工具来使用,知其然而不知其所以然。当然,也有不少人出身北大青鸟,但是却会认真学习基础,去理解编程的底层东西,这个东西不能以偏概全。

科班出身的话,我自己的体会就是,首先,你的学习路线是不会出现大问题的,会逐步接触计算机的各个部分,逐渐建立自己对于计算机的认识,这个过程对于后续的发展打下很好的基础,属于厚积薄发的那种

4 速成的培训班和打基础的大学教育还有mooc之间有区别吗?

正如上面说的,速成的培训班注重使用,我觉得他们是把编程当作一个工具来用,不去了解背后的工作原理,能用就行,而打基础的大学教育需要我们去理解整个过程,不仅仅是给了输入,得到输出这么简单。

我认为这两者之间的主要区别就是学习路线不同,速成一上来就进入较高的起点,也容易进入死角,磨灭学习热情。而大学教育是真正的从底层出发,一步一步了解计算机,学习的过程很漫长,需要很多的积累。

但是看了博主的故事,我突然觉得,北大青鸟或许也是一种教育方式,对于没有很多数学基础的人你让他接受大学教育,是一个更好的方式吗?或许对于他们把编程单纯当成一个工具来更好,也更简单。

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

当时确实存在这样的疑问,感觉和计算机没什么直接联系呀,怎么用呢?后来学习算法,学习计组,操作系统等等就感觉其实是有着数不清的联系的,就是一个逐步积累的过程,没有基础的数学知识,后面的学习就变得艰难了许多。

对于其他的学科,就我的了解,我觉得还是有一定的联系,国外在大学期间强调通识教育,认为其他学科的知识对于人的发展有很大的作用,而最近看了一部分《构建之法》后,我觉得其他学科的知识对于我们了解世界,了解社会的需求会起到一定的作用,就像是软件=程序+软件工程,而软件工程绝不仅仅是数学和计算机就可以解决的,还涉及到管理等一系列的知识。

第三部分:未来规划

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

我自己目前还没有很清晰的想法,初步想成为一个架构师。

读了博客后,对于自己的未来规划:

  • 在大四期间尽量利用课余时间多做一些自己喜欢的事情,多研究一些技术方面的东西
  • 争取读研究生,进一步加深专业知识
  • 期间希望可以到企业进行实习,多了解一些工作经验之类
  • 对于之后具体的工作,个人还是愿意偏向于架构这方面的工作。

当然在这期间应该再多看一些书,我发现目前自己的书籍阅读量不足,自学能力也有待加强,英语也需要不断的训练,总之就是各种能力的培养和学习,同时也想多参加一些实习来了解行业的更多信息。

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

  • 语言关:学习计算机,英语是很重要的一个部分,很多书籍、博客、社区都是英语的,所以我计划划分出时间来学习和锻炼英语能力,包括写作和口语。
  • 技术关:我自己想成为一个架构师,但是深知目前的知识和能力不够,所以需要不断的学习新的知识,同时锻炼编程能力,学习系统方面的知识。
  • 知识面:学习计算机需要了解很多行业的信息,我自己现在也有看一些新闻、博客来了解,但是之后应该多设计一些这方面的,扩展视野。

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

我个人更愿意在企业实习。

我觉得在企业实习,会更利于我了解行业,而且也更加偏向于实际,实验室,感觉是更加偏向于研究的性质。

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

对于这个问题,读了这么多博客,有的博主说不重要,有的说重要,我个人感觉实习经验还是比较重要的,但是是否马上开始还是需要思考和抉择的,我个人是能力不够的话,就会很怀疑自己能不能做好一件事,所以偏向于先打好基础,再去实习。

参考博客:

博客 链接
博客B 刘帅:在失望中寻找希望
博客M 进入2012 -- 回顾我走过的编程之路
博客Q 软件工程资料 - 优秀的大学怎么教程序开发和软件工程课
博客F .net程序员工作两年总结
博客L 对程序员职业的一些建议