[2019BUAA软件工程]第0次个人作业
我 & 计算机
写在前面
撰写本博客时,笔者正就读北航计算机系大三下的软件工程课程。借由这次博客作业的机会,笔者从高考时与计算机专业结缘、大学对计算机的学习以及对未来的计划三方面进行了些许思考。
以下附上相关的信息:
Tips | Link |
---|---|
课程链接 | 2019春季计算机学院软件工程(罗杰)(北京航空航天大学) |
博客作业连接 | [2019BUAA软工助教]第0次个人作业 |
实验作业链接 | [2019BUAA软工助教]第0次代码作业 |
实验结果链接 | [2019BUAA软工]第0次代码作业 |
自己的课程目标 | 系统学习软件开发理论和流程,通过实践积累软件开发经验 |
本博客的收获 | 静下心来总结了一下自己,对以后的规划更清晰了 |
结缘计算机
- 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?
高考成绩刚刚公布的时候,我对自己取得的成绩是十分满意的(远远高于我平时的成绩)。有了比较好的成绩,对于学校和专业就有了更多的选择。当时结合自己的兴趣和成绩,再在网上查找了许多的资料,我对于计算机系、数学系等专业有了一定的想法。最初接触到计算机专业正是在查找各个专业的信息的时候,在此之前由于忙于高中课内的学习,我对于计算机专业没有任何的了解,在计算机的使用上仍停留在用用PPT、打打游戏的层面。在对计算机专业的内涵以及前景进行了一定的搜索研究之后,我很快地对于真正的计算机专业产生了浓厚的兴趣,认为今后计算机专业拥有巨大的发展前景,希望在大学更加系统地学习计算机知识。因此,在最后提交的志愿中,我清一色地选择了各个计算机专业较强的学校,并依靠着高考优异的成绩来到了北航。
最初对于清一色地选择计算机专业,我自己是有着很大的顾虑的。最主要的就是我当时几乎没有在计算机方面的知识铺垫,再加上从周围各方渠道了解到的计算机专业的学习压力相当大等消息。我在最后做出决定时是下了相当大的觉悟的。(上大学后才发现身边有许多人也是从零开始)
在这些博主中有在上大学前就解除了计算机专业的,也有像我一样从进入大学才开始学习的。我自身的条件比不上许多博主,但北航的学习条件是由于很多博主曾经的条件的。
- 计算机是你喜欢的领域吗?是你擅长的领域吗?
最初选择的计算机专业时我是出于自己对计算机领域的好奇之心。也许当时可能是一时的冲动让我投身于这个显然十分艰苦的道路。但在经过了两年的学习,在此期间我经历了计算机组成原理、操作系统等硬核的计算机基础课的洗礼后,我仍觉得当时我做出的选择是正确的。我不能说是擅长计算机专业,因为我接触它才仅仅两年半,对于如何高效地学习该领域各方面地知识我才刚刚有些头绪。在最初的一年中,由于我对实践在计算机专业中的重要性缺乏重视,导致我在大二各个实验开展时遇到了种种困难。从此之后我才逐渐开始了在在编写代码方面的加强,在认真完成课程任务的同时对于自己提出更高的要求(虽然一般是达不到的),积极地向身边擅长的同学请教经验。尽管我真正的编程起步较晚,但经过了一年多的亡羊补牢,我也逐渐走上了正轨。经过了并不平静的两年半,在克服了许多学习上的困难后,我也算是有了不少的收获。克服一次次困难后所带来的满足感让我从最初的好奇逐渐变成了喜爱。
- 你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?
热爱的定义有很多,如果按照博客R中的例子作为标准的话,我对计算机专业的热爱程度可能还相差较远。如今,我在计算机专业的学习仍处于开荒期,自己在计算机专业上的知识积淀还不足,以自己的能力勉强能完成课内的实验。至于我对计算机的热爱更多的是体现在每次都尽量给自己提出更高的要求,在计算机的学习上挑战自己,在课内的要求之外让自己学习更多的相关知识与技术。
学习计算机
- 你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。
大学生活用一个字来总结就是——忙。感觉之前的大学生活几乎就是在忙碌中度过的。大一忙于各个基础课,忙于适应大学生活;大二忙于各个实验以及其他的事务。事情往往是接踵而至,甚至在你还没完成前一个任务时,后一个任务就接踵而来。这使得我常在一些事情上出现虎头蛇尾的情况。我理想的学习状态应当是能够单独完整地完成一件任务后(包括反思和总结)在开始投入到下一个任务当中去,当然这在现实中也是很难实现的。能够“多线程”地完成工作学习上的各种事务是必须拥有的能力。
现在我所处的大学环境已经基本和我理想中的大学教育符合:北航为我提供了多样的计算机专业课程以及学习资源。唯一让人不满的可能就是其中的一些选课要求了。我不否认全方面发展是大学生需要达到的,但就个人而言在一些跨领域的学习要求有些过于赘余,在此就不展开。
我对于国外计算机专业的教学方式了解并不多,但通过自己一直以来的一些认识并阅读了博客之后,我觉得若要求我们的老师和学校做到和国外的一样是存在一定的困难的。最主要的原因就是教育资源的问题。就我这一届来说,如果要让全系三百号人都接受国外那样的教育显然是不现实的。但是我们学校的计算机课程的开展方式可以将国外课程的核心与实际情况相结合,形成自己的教学方式。国外计算机专业的教育方式更加注重的是实践和应用能力,而我的学校已经有许多相当注重学生实践能力的实验型课程,例如计算机组成原理实验、操作系统实验、编译系统原理实验等。
- 迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。
至今为止,我大约写了近2万行代码,其中主要是计算机组成实验、操作系统实验、面向对象课程设计系列程序、编译原理实验、数据结构课程相关代码以及其他工程的代码,涵盖了C、Java、JS、Python、Verilog等语言。其中最复杂的项目应当是编译原理实验中的“类C语言编译器”。由于我是选择使用C语言编写的编译器,相交使用C++编写,我需要使用更多的代码来维护编译器中的各种数据结构以及实现相应的逻辑(而C++则能够使用很多类库以及面向对象等来简化)。此外,不同于计算机组成实验中编写CPU时有着详细的指导以及算法说明,在编译原理实验中需要基于课本内基础的理论从程序顶层的设计,到各个模块的划分,再到底层各功能的实现都要求自己有着比较明确的思路,以及最后在优化算法实现的部分也对之前完成的原始编译器的可延展性提出了较大的挑战。
除编译原理实验之外,在同一时期完成安卓应用开发项目同样令我印象深刻(即使从复杂度角度上来看不如编译原理实验)。当时我计划开发的是安卓平台上的一个游戏助手(项目连接)。在此期间,我基本算是自学了安卓开发的基本原理,并自主设计并完成了应用前端交互界面以及前后端交互逻辑。正是在这时候,我接触到了行业中有如MVC框架、MVP框架等课内未曾见过的新概念,并尝试将其实践于应用之中。这让我由衷地感到自身知识量的不足,并驱使我开始了解更多的前沿的知识。
- 科班出身和北大青鸟有什么区别?
科班出身的学生所掌握的更多的应该是学习方法、研究方法。职业学校以及培训班出身的学生掌握的更多的应是职业技能。打个比方,科班出身的学生学到的应当是为解决问题不断寻找资源、学习各种技能的能力,注重解决问题的能力以及对于深层思想的掌握;职业学校出身的学生所会的是更好更熟练的某种技术来解决问题,注重对某种技术掌握的熟练度以及应用能力。
- 速成的培训班和打基础的大学教育还有mooc之间有区别吗?
这三者建立的目的以及面向的对象有着巨大区别。速成的培训班成立的目的更多在于为其学员解决眼前的技术问题,其面向的对象有临时学习技能的人,有为学习完成某个项目所需技术的人等等。
有关于博客E中所讲:
或许,我个人的经历也不足以代表一般性。而我依然还是痛恨培训学校。 因为他们会教学生简历造假。 会教学生投机取巧。 会教学生“如何开发项目”。 然而,那些项目经验,几乎一文不值。 甚至不如一些学生在寝室里写出来的没有界面的小DEMO。
我觉得一个正常的程序员,是不应该去参加培训的。更何况,培训真的没有什么用。 多半都是想走捷径,不劳而获。 而若要好好走好职业道路。 在走出大学校门的那一刻,应该学会自我成长,自我完善。
我是表示部分赞同的。大学教育更多在于思想、方法等更为基础的内容,往往无法在短期带来效益,但从长远的角度来看,这些是发展的基石。于此同时,我也不否认速成的培训班的重要性。就计算机专业而言,课内的知识量是完全不够的,当在完成一些项目(甚至是课内的实验)的时候,需要我们在短时间内寻找、学习并联系有用的技术来实现相应的功能。远水解不了近渴,此时,参加培训班就成为了较好的选择。况且计算机专业的知识之广泛是难以全部掌握的(最多达到涉猎的底部)。时常会出现知识量不够需要对相应的技能进行“抢救式”的补充的情况,这也是网络上一些培训班存在的意义。但是培训班往往采取的是填充式的教学,丧失了大学教育中启发式的元素。若仅专注于眼前技能的“抢救”,而忽略基础思想与方法的掌握,难免会本末倒置,弊端也迅速地暴露。就如同博客F中博主的经历一样:
我跟着也回宿舍学习几次,慢慢的天气变冷了,宿舍特别冷,学校也特别冷,只看视频,不怎么做练习,发现到后面前面的东西又忘记了,然后就回头学,效率低下来,这个时候开始学winform,学习做视频上的练习,winfrom虽然简单,但是要做个和视频上一样的练习项目还是挺花费时间的,可能一节课,把练习做完需要两三天才行,当时没有这样学习过,其实我一直都没有培养出好的学习方法,以前学习都是上课45分钟,作业几十分钟搞定了,然后下一课。这个时候学一课需要做的练习时间非常长,然后自己就 把握不好,进进退退,企图把平台的知识学完,常常倒回去看多态,抽象类,接口,索引器,委托,二维数组,这些难点。然后几天一周下来,不知道自己搞到哪了,似乎这一周什么都没学会,现在看来是人在学习时常常高估自己的能力,编程不是高中背书,不是做数学化学题,它是技能,是需要大量练习和长时间实验感悟的。
我也曾在培训学习过一些课程,主要是出于现实需要的因素要快速运用到一些项目中。短时间的学习让我能够比较熟练地使用这些技能,但自己对于自身到底学了什么却没有什么实感。完成项目后随着时间推移,又开始忙于其他事情,这些知识很快就淡忘了。
至于mooc,以中国大学mooc和国外的coursera为代表,其中大多为大学将课程移至线上。在保证了大学教育的精髓的同时,又能够满足学习时间灵活的需求,可以让我们接受更多不同大学的不同课程,使学习的内容更多样。
- 学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?
在学习这些基础课程之初,我是存在这样的疑惑的。但经过一段时间的学习,这些疑惑也逐渐消除了。计算机技术归结到最底层往往与算法与数学密切相关。比如计算机图形学的基础理论与线性代数有关,大数据分析的基础与概率论和数理统计有关等等。
未来规划
- 对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路?
就我个人而言,按照博客I中的技术栈的分类标准,我希望向系统架构的方向发展。至于前端还是后端,我还没有明确的想法。目前来看我对于这些部分都有学习也都有较高的兴趣。我未来的规划应当和很多的同学相似,大致如下:
-
2019年,在学习课内知识之余,全力进行考研的准备,计划报考北航的计算机专业。在课余的时候完善计算机的基础技能和知识的学习,尝试参加一些企业的面试,进入企业进行实习。
-
长远的看,无论是否顺利考入研究生,在近十年的计划便是不断的强化自身的计算机专业的实践能力,尽量向如今前沿的理论和技术学习。在这个阶段中,通过不断学习,逐渐在庞大计算机领域中寻找自己真正属于的部分。
-
你们马上就要面临实习了,你打算在企业内实习还是在实验室实习?
我更加希望前往企业中实习,主要是因为通过在企业中实习能够切身体验当前IT行业的现实环境。但这可能会需要更多的时间和精力。
- 实习经验究竟有多重要?是否需要马上开始积累实习经验?
实习经验当然重要。在平时学习了知识归结到最后就是要落地于实践。但是否需要马上开始积累实习经验这一问题的答案因人而异。就我个人而言,由于大学前并没有计算机专业的基础,在大学学习期间,需要投入比较多的精力来完成课内的任务。为保证课内学习的质量,我在此之前并没有进行实习。但现如今大学学习渐入尾声,也是到了将知识实践落地的时候,我也计划开始积累实习经验。