软件工程热身作业
项目 | 内容
-|-|-
这个作业属于哪个课程 |2020春季计算机学院软件工程(罗杰、任建)
这个作业的要求在哪里 |第一次作业-热身!
我在这个课程的目标是 | 提高软件开发能力、团队协作能力
这个作业在哪个具体方面帮助我实现目标 | 认清现状、明确规划
# 一、结缘计算机
## 1.1 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?
学生时代的我,与计算机的关系只停留在了娱乐一项。小学时老爸带回来的第一台电脑,在我眼里只是一个可以玩蜘蛛纸牌的。由于参与游泳特长训练,加之需要维持学业成绩,我没有将过多的精力投入在探索计算机的运行原理中,而是将其作为一个释放压力和追赶潮流的工具。同时,“编程”这个词在我生活中几乎从未出现过,除了电影。对它的印象只停留在黑客所掌握的酷酷的技能点。
平凡地经历高考之后,拿到了意外的好成绩,这是鼓励我投身信息专业的重要因素。经过反复思索后,我坚定了一个观点:信息专业是通向未来的专业,我想要探究信息世界是如何形成与发展的(也许是迟到的好奇心在作怪),这是决定性因素。很幸福的是,父母也十分尊重我的选择。所以,我最终填报了北航的信息大类志愿,也幸运地被压线录取。后来专业分流时选择选择计算机学院,有一部分“业界好评”的原因,有一部分热心向学的原因,也有一部分受周围环境影响的原因。
作为一个从大学才开始接触编程的计算机系本科生,我自认为条件自然是远远不如其他优秀的同学。从来到士谔书院起,我就十分敬仰那些中学参与信息学竞赛、热爱计算机、动手能力超强、理解能力超强的同学。虽然自己也在努力维持成绩,但编程能力、思维能力的不足还是让自己有些自卑。
与博客I的博主相比,我虽然没有他在学生时代钻研电脑的热情与经历,但拥有深入计算机专业的大学教育资源。我认为与他的条件相比,我无法区分谁好谁坏。都说“兴趣是最好的老师”,博主虽然读的是英语专业,却对计算机有十分浓厚的兴趣,这份热情驱使着他不断学习计算机领域新兴技术。而我虽然拥有十分优秀的教育资源,但仍在迷茫途中,对计算机的感情反复无常,但说不定随着理解的深入,我会在计算机领域找到一个自己热爱的方向呢?
1.2 计算机是你喜欢的领域吗?是你擅长的领域吗?
严格来说,不是。对于计算机体系结构,从计算机组成、操作系统到编译原理的课程学习来看,我很少感受到沉浸在解决难题的喜悦中,而更多的是害怕无法完成任务、跟不上系里其他同学的学业压力。当然,随着课程的学习,自己对计算机的一些问题也慢慢得到解答,这是使我感到充实的。从程序设计来看,解题过程对我来说也是比较煎熬的,且容易产生自我否定。那“不严格”来说呢?也许后续的学习会接触到某些方向,将运用之前学习的计算机领域知识系统地解决问题,那时也许我会非常乐意地说“我喜欢计算机”吧!
计算机绝对不是我擅长的领域。从本科的动手能力就能看出,程序设计、数据结构、计组等等,这些实验课中多数我都没有取得理想的成绩。且在计算机领域的知识广度、掌握的技能、实践的经历等我也远远比不上同系生。但我一直饱受心理问题的困扰——不自信。如果一直不相信自己有能力去解决某些问题,那么自己就会始终不愿意去深入、始终因为能力问题而兜兜转转。如果一直暗示自己不擅长计算机领域,也许我就再没有动力去学习领域内的新知识了。所以,还是试试相信自己的能力吧。
1.3 你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?
目前并不热爱。我对计算机的感情有些复杂,有时会因为创造可行的程序而激动,有时又会因深陷在复杂的知识点中而被挫败。从大学学习开始,我按部就班地完成计算机专业安排的课程,对于可选的一般专业课,我也秉持着“能学多学”的原则,旨在增长见识去选课。但是目前为止,我没有被计算机专业所吸引,仍然被动地为学业而学,自然谈不上热爱。
反观博客M的博主,我认为那便是热爱。从自学编程、尝试制作游戏,到解释高级语言、写脚本引擎,他的行动以兴趣为驱动,解决问题带来的正反馈效应又更加坚定他的热爱。
二、在计算机系里学习
## 2.1 你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。
我的大学生活十分中规中矩,跟随着课程设置按部就班地完成学习。想要吐槽的地方是,学院的课程压力分配不太合理。比如大二上学期的计算机组成课,一门实验课可以说是占据了这一学期全部的重心,每周除了空闲时间,甚至理论课的时间、其他课堂的时间,也消耗在编写实验课任务上,此外,还对每周四的上机考核实验忧心忡忡。这样,每周的精力完全放在有没有通过本周Project上,而忽视了其他如离散数学、概率统计之类的重要数学基础课的学习,我认为有些得不偿失。且这种高压并不利于激发我改进设计的动力,反而更加迫使我按照课程要求的“模板”去完成设计,因害怕无法通过测试而不敢思考其他可行方案。
我理想的大学教育应该是与生产实践想结合的。如果在教授课程的同时,能够加入这门课在当今生产实践中的实际运用,也许能让学生对课程整体有更直观的认识,也能够激发学生对某个领域的兴趣。比如算法课,按照课程大纲一个个算法细讲十分枯燥,而如果能够将这些算法在当今各大软件中的实际应用带入讲解,并进行编程实践,或许这些算法就很难忘记了。
学校里的教育比较按部就班,有时上完一门课,却不知道这门课是做什么的。课程的知识点大多平铺罗列,着重于记忆而非联系。
我没有经历过国外教育,但我认为国内大学和国外应该还是有一定区别。国外大学学费高,学校能够将资金转换为更优质的教育环境和资源,且国外高校教授的薪资也更能促进优质课程的产生。相比较,国内高校人数多,旨在为更多人提供平均的教育,老师有发表论文的压力,薪资水平一般,难以有动力精心准备课堂。当然如今也有越来越多的老师因课堂质量深受学生喜爱。
2.2 迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。
大一程序设计课总共约500行,数据结构课约1000行;大二计组课程约2000行,OO课程四个单元约4000行,暑期课OpenGL项目约500行;大三的编译器约5000行。合计不超过2w行吧,当然这都是粗略的估计。
最复杂的项目是大三上学期的C0编译器设计,总共5340行,包含词法分析、语法分析、语义分析、错误处理、中间代码生产、目标代码生成以及优化七个大模块,内部还有符号表之类的小设计。这是一个自己制作出来的比较有成就感的作业,课程只讲解大体的设计思路,其中实现细节经过了反复的思考、添加与修改。最终虽然错误处理测试没能通过,但优化目标代码的测试通过了,还是比较满足。
2.3 科班出身和北大青鸟有什么区别?
我还依稀记得大一程序设计课荣欣老师在第一堂课就强调过这个问题:“你们和技校、培训班培养出来的码农不一样,你们不仅要会写程序,还要会设计程序”。我认为,当一个软件、或是一个程序的设计完成后,剩下的编码任务其实很容易完成,这点在面向对象课程中深有体会。科班出身的人在掌握编码的同时,还应具备的是设计复杂系统、解决疑难问题的能力;而北大青鸟,如博客F博主的经历所见,是以就业为目的、学习技能为导向的培训。
2.4 速成的培训班和打基础的大学教育还有mooc之间有区别吗?
速成培训班以求职技巧为核心,着重教授基本编程技能、美化简历,目的是让学员找到工作;mooc为教育资源差但学习热情高、自学能力强的学生提供名校课程教学,个人的自主学习能力尤为重要;大学教育不仅仅只有老师讲授的实体课堂,大学里提供的专业资源、社交资源、实践平台也十分重要。
2.5学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?
我曾经有过很多次这样的疑问,因为在这些数学基础课与计算机之间建立不起任何联系。现在这些疑问淡化了,因为随着专业课程的学习深入,这些数学知识或多或少地都得到了一些运用,比如OpenGL的光照运用到了线性代数的向量变换知识。但还有部分未得到解答,可能是因为学习的专业课不够多、不够深入,且见识短浅,可能还需在未来的研究实践中才能得到解答。其他学科如数学分析的知识在机器学习的SVM模型中得到了运用,离散数学的知识在计组的状态机中也有运用。进一步的解答还需等待眼界更加开阔。
三、未来规划
## 3.1 对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路?(必答)
这是大学里最困扰我的问题。曾经想过做与图形图像相关的技术工作,因为比起思考枯燥的程序算法,制作出肉眼可见的成果更能使我兴奋;作为英雄联盟的游戏爱好者,我也想过进入游戏行业,看过拳头游戏出品的《听说你想做游戏??》系列宣传片中介绍的技术美工,更是十分向往;内心深处还有一个想法是依靠计算机积累原始资本,之后转行,投身自己真正感兴趣的领域。总之,这些都是迷茫摇摆的表现。
拜读过博客A后,我对“产品经理”这一职位有了动念,源于文中这一句话:“产品经理是谷歌一个非常特殊的角色,一个产品除了开发和测试之外的事情,基本都由产品经理主导。其中最重要也是最令人激动的是产品功能设计,也就是说,你对产品功能的任何合理的想法,都可以在产品经理这个平台上得到实现,最终被全球数以亿计的网民使用,改变他们的生活!”。当然公司之间的产品经理或许职能会有不同,但是主导产品的创作确实令人十分兴奋。
博客K的博主说:“做规划时最重要的是两个方面:一是清楚地认识自己的能力、优势和性格;二是确定自己的专业和想从事的行业。只有在确定这两方面后,才能做出自己的职业规划”。对这两方面,我都没有很好的认识,所以谈如何规划道路,或许我不能叫规划,应该只能说是尝试,是迷茫期的探索。博客B给我很大的启发。书籍中成体系的知识能够为自己在技术道路上的准备打下坚实的内功基础,我也深深意识到光靠老师的PPT糊弄过考试并不是真正掌握知识。所以,阅读是不可或缺的准备手段;同时,结合实践去提升自己的“硬实力”也是不可或缺的。职业道路的规划将是通过不断探索,获取关于感兴趣职业尽可能多的信息,有目的地进行求职准备,当然在这之前要面临争夺研究生资格的求学道路;因为性格内向的原因,社会道路的规划对我来说有一定难度,目前所能做的只有强迫自己去参与交流,走出自己的社交舒适圈,接触更多有趣有才的人。
3.2 你对于实现自己的梦想已经做了或者计划做什么样的准备?
如上一个问题中所述,同时还要在试错的过程中找到自己擅长的、感兴趣的方向。
3.3 你们马上就要面临实习了,你打算在企业内实习还是在实验室实习?
我打算在企业内实习。据了解到的信息,实验室实习是给出课题进行研究,以发论文为目标,而企业实习是参与到项目中,锻炼实际解决问题的能力。因为大学学习阶段,知识都停留在书本,我更希望体验知识所带来的实际影响力,这点企业实习能够提供更好的平台。
3.4 实习经验究竟有多重要?是否需要马上开始积累实习经验?
这点我没有发言权,因为我从未在企业或实验室中实习过,但我认为应该是十分重要的,因为能够了解到课堂以外的知识和领域内研究热点或技术热点。是否需要马上开始累积实习经验还要看个人情况,学院的课程压力比较大,我认为应该在基础扎实的情况下参与实习,而这也是我没有参加实习的原因,但我认为应该要尽快了。
四、写在最后
趁着这个机会回顾了自己走上计算机这条路的前前后后,感触良多。在迷雾中来回穿行,反反复复地问自己:这条路走对了吗?你的能力足够吗?你足够感兴趣吗?...翻阅过许多人的思考,阅读过许多名人的经历,乔布斯对科技与艺术的追求让我仰慕不已,即使他是个古怪的人,也许天才都比较古怪吧;Paul Graham拿到计算机博士学位后,远赴欧洲学习绘画,为“解决收入问题”创业,达成目的后又成立创业孵化公司,影响更多的人。
然而我的迷茫始终都在,导致在探索的过程浪费了许多精力,甚至失去探索的动力。这一次思考点醒我的是,总结与规划十分重要,它提醒我不应驻足现状,受限与迷茫,而应理清困惑,回顾总结,做好规划并继续前行,永远不停止思考。