• [敏捷软工热身博客]起点、展望


    项目 内容
    所属课程:北航-2020-春-软件工程 博客园班级博客链接
    课程要求:阅读数篇课程组推荐博客并回答系列问题 热身作业阅读部分要求
    我在这个课程的目标 提升在团队合作中开发“好软件”的能力
    这个作业在哪个具体方面帮助我实现目标 反思过去的计算机学习历程、考虑未来的发展方向、改进自身的思维方式和学习方法

    一、结缘计算机

    1. “最酷的”计算机

    自从出生以来,电影、电视剧、书籍、报刊等信息来源无不向我展示着计算机的先进、强大与有趣。这正是我选择计算机专业的原因。

    小学时,计算机还是一个稀罕玩意。整个小区的小伙伴中,只有一个人家里配置了计算机:一台联想的笔记本电脑。我小学的假期有很大一部分时间是在小伙伴家里度过的。我们在暑假时如饥似渴地刷着一款有一款游戏,在现在已经消失的碟片市场中搜寻着好玩的新游戏。但是,当时并没有互联网接入,我们没办法获得充沛的共享资源,从而进一步探索计算机的世界。

    在小学时光的末期,我们终于不再是互联网的遗民。我们知道了原来游戏也是可以修改的,原来有些游戏甚至提供了开放的修改接口,其中十分优秀的一款接口是魔兽争霸Ⅲ的地图编辑器。我们从修改某个单位的数值开始,制作新的地图、添加新的剧情、甚至到后期向地图编辑器中导入新的模型,撰写出了属于我们自己的故事。魔兽争霸Ⅲ的地图编辑器提供了良好的GUI,基本不需要编码就可以完成地图的制作工作。之后我们接触过许多即时战略游戏和策略游戏官方发布的游戏编辑器,但是他们都和魔兽争霸Ⅲ的地图编辑器大同小异。通过这些游戏编辑器,我们初步窥见了游戏内对象的组织方式和内容的设计方法。计算机的世界是如此有趣,我能在其中自由地创造,也能欣赏到别人的创造,这实在是太酷了。

    再到初高中,因为搬家我和小伙伴分开,我也失去了经常接触计算机的机会,只能偶尔去黑网吧体验一下游戏的魅力。但智能手机的出现又将互联网接入了我的生活。因为学业的压力,我的智能手机主要用来聊天和看看新闻。新闻应用中的科技板块是我最为关注的板块,其中有各种互联网、手机等新闻。虽然媒体的报导有些夸大其词,但却展示出了计算机等技术的日新月异,各种炫酷引人注目的新技术令我心驰神往。

    2016年是我拥有智能手机的第一年,2016年也正是“VR元年”,当时媒体铺天盖地的报道我记忆尤新。当时的我不断地在互联网上搜寻着各种与VR相关的内容,其中既有内容空洞的新闻,也有科普性的文章。当当时在无人引导的情况下,我只是接受着那些表面浅显的知识,既没有对计算机图形、硬件及应用开发等技术都没有深入理解。也正是2016年阿尔法狗打败李世石,媒体中充斥着“人工智能将会改变世界”的夸张言论,不断地从各个角度“论证”着这一点。我也在VR和人工智能双重因素的影响下,最终决定报考计算机专业。

    2.学习条件与学习兴趣

    对比博客1博客2作者们的两段经历,我发现我的条件十分普通。博客1的作者在进入大学学习计算机前已经接触过许多计算机相关的内容,已经为大学的计算机学习做好准备。而我大学前则一直在计算机的门前兜兜转转,一直没有接触到核心内容。从这个角度来说,我的条件可谓是十分普通。在我的家乡,从未听说过有人搞信息竞赛,身边也没有从事计算机相关行业的前辈,再加之我并没有主动探索接触到的计算机相关技术的原理,这也许就是我一直没有进入计算机的大门的原因。

    相信计算机这种“炫酷”的东西,青年期的男孩都会喜欢,直到现在我也一直被计算机所深深吸引。但是回顾在进入大学之前,没有深入进入计算机领域学习,很难谈得上是对这个领域是真正的喜欢。大学前我对计算机的热爱,大体上可以说是一种非常浅显的,青少年对于新生事物的热爱。就像现在许多青少年听到MR、自动驾驶、特斯拉和基因编辑会兴奋地想要有所尝试一样,当时我也想象我会在学习计算机以后做许多有趣的事。

    剥开青少年对新生事物的热爱,大学前我对计算机还有一些其他方面的期许。在许多游戏的编辑器中,我体会到了创造的乐趣,不断做出新的地图,不断编写新的故事。而我在大学前听说编程就是一件十分具有创造性的工作,程序员们编写着自己的程序,创造出一个个独特而又强大的应用,用深奥神奇的算法解决一个个复杂的问题,将许多人从重复无趣的劳动中解放出来。

    每当解决一个个问题,修复一个个bug后,我总能获得巨大的成就感。而这种成就感总是推动着我面对新的挑战,尝试新的技术。我想,这就是我对计算机热情最好的体现,虽然不比许多大神喷薄而出的热情,但却并不匮乏。对比起博客1作者对计算机的热情和博客3作者的内生动力和不懈努力,我不禁感到自行惭愧。我只能说,我还有许多地方需要学习改进。虽然自认在计算机方面有些热情,也为之付出了一些努力,但是还远远不够。

    二、在计算机系里学习

    1.大学生活与教育

    如果对优秀计算机人才的成长路径没有认识,很难将大学生活过的充实。我的大学生活总是在忙碌中度过,忙着完成课程要求,忙着完成博雅任务、偶尔挤出时间打打游戏。这样“充实忙碌”的生活却没有带来多少实打实的成长。学习课程总是在记忆书本上的知识,完成博雅任务却没有真正积累人文知识和社会经验,打的游戏也是经长换来换去。考试时,只要能将课程要求的知识掌握七七八八就能获得不错的成绩。大学三年学下来,缺乏对计算机领域的全面系统的认识,难以将所有的课程串起来;在每门课内部同让如是,并没有深刻的理解课程的内部逻辑,只有一个个记忆性的知识点。

    但这并不意味着我的大学生活是完全荒废的,那些散乱的知识正是计算机领域中的支柱知识。在我编程实现完成编译器时,我发现逐渐发现之前学习面向对象,数据结构等课程的意义。在二次需要课程所学知识时,随着对知识的复习,我能产生更加深刻的认识,也能在体会到课程知识的重要性。也就是说,我认为如果一个学生能出色的完成北航的计算机课程,那么他已经具有了成为计算机工程师的潜力和基础。

    我的大学生活和我想象中的大学生活相距甚远。我觉得差距最大的一点就是对思维方式的培养,具体来说,老师在上课时很少对同学的思考进行引导,而是按部就班的抛出一个个知识点。这样,我们大学学习仍然是灌输式学习,并没有培养出计算机学科所需要的思维方式。虽然计算机系的许多课程以抛出知识点的方式进行思维方式的教授,当时同学们往往会笑话不良。思维方式不像是公式和单词,记忆下来并不代表学会。如果用知识点的方式教授,要么概括性很高,难以理解其实际含义;要么依附于具体之中,很难清晰的理解。我认为只有让学生真正地按照某种思维方式主动地思考一边,才能真正的理解和掌握。就像博客2中所言,博主在大学生活中并没有真正的学懂计算机,而是记忆了无数的知识点。可能是因为课时的限制,抑或是其他的原因,我的思维方式并没有在课程中得到充分地培养。

    我想,大学课程没能充分地培养学生的思维方式有如下原因。

    • 基本上所有的大学课程都有“时间短任务重”的特性,而引导学生思考则是一种慢活,在时间这一客观因素上存在矛盾。
    • 对于学生来说,思维方式的培养是一个痛苦的过程。思维方式的训练经常会面临挑战、感受痛苦、占用大量的时间。学生既面临着挂科的风险,也面临着巨大的学业压力。学生需要同时学习多门课程,不能期望大多数学生每周学习时间达到7*14h以在很多课程中都完成思维方式的培养。
    • 中国学生在进入大学前,已经接受了12年的灌输式教育。大学的这一教育特点实际上是对之前教育特点的延续,虽然有所改进,要求学生有一定的自主性,但总体上还是属于灌输教育的范畴。如果大学中的教育方式与之前12年差异巨大,则有可能导致许多学生无法适应。
    • 课程考核主要考察学生对知识的记忆能力,对思维方式的考察较少。而同学们的聪明才智,总能巧妙地应对大作业、课堂展示甚至是面试型考核。导致推动学生学习的最大动力——课程成绩,并没有在培养思维方式层面发挥作用。

    虽然博客5对计算机科学的学习一阵猛批,但我认为北航计算机科学的课程还是很有可取之处的。北航计算机系的一大特点就是实验课程任务十分重,学生需要完成许多tony系统——CPU、操作系统、编译器等。这样在核心任务上大量的练习量,使得北航计算机系学生的编码能力是有所保障的。而我也同样遇到一些优秀的老师,他们尽量在课堂上给予学生思考的时间,为学生扩展一些课外的知识。

    2.代码与编程

    在大学中,我的编程经历主要在于课程要求,也有实验室作为补充。

    • C语言程序设计、数据结构:通过这两门课程,以C语言为工具逐渐入门编程。总代码量估计为2000行左右。
    • 计算机组成:在ISE软件的基础上搭建tony CPU,总代码量估计在3000行左右。
    • 面向对象:利用JAVA学习面向对象思想,代码总量估计在2500行左右。
    • 操作系统:填写tony操作系统中的关键代码,手动编写代码总量在2500行左右。
    • 编译技术:利用C++编写tony编译器,编码量在4000行左右。

    对于我来说,我做的最复杂的作业/项目当属编译器课程设计的作业。编译课设也是我认为最“软件工程”的作业。

    对于我来说,编译器课设的特点和挑战如下。

    • 完整的tony编译器:需要完成tony编译器完整的功能,工程的复杂性较高,规模较大。
    • 理论支持:编译器的每一个模块的构建都有其理论的支持,需要开发者将理论对应到实际的代码。
    • 模块性要求高:例如在语法分析和语义分析中间代码生成之间需要尽力进行解耦,否则后续debug阶段痛不欲生。
    • 需求不断变动:每次新作业都在上次作业的基础上进行,不断添加新的需求。
    • 对性能要求高:最后有编译器的竞速比赛,对编译器的性能提出了较高的要求。

    虽然在编写编译器时尽力想遵循上面列出的几条,但是编译器还是有许多问题。例如设计的不合理,导致考试时出现重大的bug却无法解决。软件设计不具有可拓展性,后期在添加优化功能时不断尽力重构,工作量巨大,bug众多。在搭建编译器时并没有考虑到未来维护和改进的需求,很多实现都是功能为主,甚至写成了面条代码。

    我希望在软件工程的学习中,提升团队协作开发可靠、易维护软件的能力。参与实际投入应用的软件构建,能使我看见学校象牙塔之外的风景,让我的所能应对的情景范围更广。

    如果说我看得远,那是因为我站在巨人们的肩上。——艾萨克·牛顿

    软件工程是一门系统化的学科,我希望能解借鉴吸收前辈们的经验,让自己更快的成长为一名优秀的软件工程师。与软件团队一起编写出用户喜欢,经得起时间考验的软件。

    3.我对计算机中数学及自然科学类课程的看法

    数学分析、线性代数、概率论、离散数学、大学物理,前面所列举的学科似乎与编写代码的关系不大,我在完成计算机专业的核心专业课的作业时,只用到了浅显的数学。那么,这种数学和自然科学课程对计算机科学家或是软件工程师的成长有什么作用呢?

    直到大三深入的学习计算机领域的专业知识,我才初步地得出这个问题的答案。一门机器学习导论,让我意识到什么叫书到用时方恨少。机器学习中公式的推导,以及其中体现出的思想,都与数学关系密切。我发现即使掌握了大一大二所学的数学分析、线性代数及概率论,机器学习中的许多内容理解起来仍然有困难,甚至于有些内容关联到我从未听说过的知识。

    机器学习对于数学及自然科学的要求只是冰山一角。计算机科学诞生于现代,受多个学科的影响,其中数学的影响最为深远。计算机最初诞生的目的就是帮助人们解决各种计算难题,为各种需要计算的场合提供强有力的支持。时至今日,在互联网和深度学习的支持下,人们期望计算机在人类活动的所有领域发挥作用。具体来说,为企业服务的数据科学家不仅需要数学知识,还需要与企业所在领域相关的知识;编写飞控软件的软件工程师,需要对飞行器的原理和特性有所掌握;即使是从事计算机科学理论的研究,也需要扎实的数理功底。我记得计算机前沿技术讲座的老师曾经讲过,他为了编好电厂的自动控制软件,半年都泡在电厂中,最后摸清了电厂的运行方式,收到了留下来做副厂长的邀请。诚然,让计算机专业的人去开发新的发电机核心部件是强人所难,但是当代先进发电系统的构建绝对无法脱离计算机技术。而在其中活跃的软件工程师,要想出色的完成工作,也一定要对发现系统有深入的理解。而这些理解的基础,正是大学学习的数学及自然科学类课程。

    三、未来规划

    进入到计算机专业之后,我就开始关注计算机领域的发展,堪称波涛汹涌。计算机领域发展的很快,许多炫目的新技术纷至沓来令人眼花缭乱。我在考虑未来规划的过程中,不禁感到迷茫。再加之我没有高质量的信息来源,看计算机行业的发展更是雾里看花。每半年考虑一次未来规划,每半年的结果都不一样。

    读完博客11后,我发现做未来规划需要考虑的方面如此之多。我本以为考虑未来规划的关键点在于目标领域的情况,例如发展趋势、工作机会等,但在博客11中却重点强调了自身情况的重要性。

    A)所掌握的知识,B)问题的解决能力、判断能力和分析能力,C)对待困难的心态,D)团队合作能力,E)表达能力和语言组织能力,F)创造和创新能力,G)沟通能力,H)自己的性格内向还是外向,I)是否有坚韧不拔的专研精神,J)自己的弱点和性格上的缺陷,K)学习能力,获得知识的能力,L)领导组织能力,M)目前自己能够进入的企业,N)目前自己在社会中的地位,O)目前自己的竞争实力。

    以上是博客11列举出的考虑因素,现在让我一一的依据这15条分析自己的情况是很困难的。我对自己的认识并没有那么深刻,我也发现在大学中自身性格的十分快速。如若是让我和大一的我聊一个小时,他绝对不敢相信我会变成这样。现在的我很难确切的给出未来的规划,去哪种公司,进入哪个领域,向哪种职位发展。但是,有些能力是通用的,只要我将来还在计算机领域工作,就会依赖于这些能力。

    • 扎实的基础:数据结构、算法、数理基础等
    • 团队合作能力:和团队成员共同完成一个项目
    • 面对困难的勇气:面对新技术,新场景,迎难而上的勇气
    • 强大的学习能力:这个能力是不被计算机的技术大潮冲刷淘汰的必要条件
    • 灵活的创新能力:毫无疑问,计算机领域是一个创新的领域
    • 一份敲门砖:好的学历能在事业的发展过程中提供强大的助力

    如果一个人能在以上所有点都能做到优秀,那么他绝对可以胜任大多数计算机领域的工作。而我在以上个点都有欠缺:大一大二学习的基础遗忘了许多、参加过一些不是很理想的团队协作、有时候面对能解决的困难存在危难心理。但是从另一个角度来看,我较大一已经成长许多,不足之处已经得到了很大程度的补足。

    继续深造是大概率的,我十分珍惜在学校内潜心学习的时光,我也希望在将来继续的学习过程中获得更多的成长。

    另一方面,我心中已经有一个职位的dream list,这段时间我一直在想办法了解dream list中职位的具体情况,甚至和在其位的前辈取得联系。我想,这对我制定出清晰的未来规划有很大的帮助。

    四、写在最后

    敏捷软工这门课程是最接近业界的一门课程,我希望能在接下来的学习中窥见业界的思想精髓,让我的知识体系更加健全,思维过程更加活跃

  • 相关阅读:
    DFS HDU 1518 Square
    输入初始单纯形表后的单纯形程序,线性规划 未写完
    奇数幻方 程序实现 C++,linux系统下的codeblocks写的,估计里面的清屏函数windows下不能被调用
    棋盘切割 DP POJ 1191
    POJ 3716 Cow Bowling 数字三角形 简单DP
    ZOJ 3703 Happy Programming Contest (01背包,稍微加点处理)
    SQL Server 2005 Analysis Services实践(二)
    SPGridView的使用增加自动生成的序列号
    SQL Server 2005 Analysis Services实践(一)
    [转帖]传说中的MOSS葵花宝典Office SharePoint Server 2007 Starter Guide
  • 原文地址:https://www.cnblogs.com/starmiku/p/12386729.html
Copyright © 2020-2023  润新知