我对于计算机的思考 —— 软件工程热身作业

项目 内容
这个作业属于哪个课程 2020软件工程
这个作业的要求在哪里 第一次作业-热身!
我在这个课程的目标是 系统性地学习软件工程理论,并开展实践
这个作业在具体哪个方面帮助我实现目标 计算机专业:总结、反思和展望

第一部分:结缘计算机

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

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

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

相比于大部分通过高考选择计算机专业的同学,我与计算机的结缘算比较早了,从幼儿园时我的父亲带我接触到CRT显示器开始,我便特别沉浸于研究各类计算机的软件工具;初三的一次科创比赛,同校一位高中学长的计算机课题给我留下了很深刻的印象,在同一个代表队中的所有课题中,就只有这个课题连名字都看不懂,再配上他高冷的态度,关于计算机的神秘感油然而生。到了高中,还好这股神秘感顺利地“孵化”成了兴趣(而不是畏惧),我在物理、生物和计算机三门学科竞赛中选择了计算机,开始了从研究软件到编写代码的转变,高中期间折腾的东西可不少:信息竞赛、实验室科研、创新比赛,虽然不是每段经历都有美好的结局,但是每段经历都有爆肝的热情。高中对于信息学的日积月累,当到了高考志愿填报时,每所学校的专业志愿就成了不争的事实:计算机科学与技术、电子信息工程、软件工程。

下图是我在高中竞赛集训时,自行设计的第一道OI题目(只可惜OJ平台已经关服了)。

阅读完这么多博主所写的鲜活经历,可以说我和他们在计算机功底上还差得远,但我非常幸运地能够在专业教育最重要的时刻在国内第一梯队的大学中学习计算机专业。但是,优秀的外在环境必须加以强大的内在驱动力,博客M作者的大学经历就展现了当“模拟股市”后自负自卑的心理消失,转而向老师和同学敞开心扉后,在学业上呈现的强大动力,在我学习计算机的过程中,也时常有类似的体会:心理学中有一个“心流”的概念,用以形容在从事热爱事务时疲惫消失、忘记疼痛、时间变慢的过程,这种状态,在我坐在教室里按照纸上画出的CPU架构或对象设计图后敲代码时最容易出现,这种“弹琴”让我非常享受(当然副作用便是事后腰酸背痛、极度疲惫)。

当然,对于到底热爱用计算机做什么,与身边许多颇有“极客”风的同学不同,我似乎更偏爱研究,回想起自己曾经在一场笔试的作文中这样描写到计算机:“计算机所创造的,是一个完全不同于现实世界的空间,不受到自然法则的约束,人就是造物主,任何事情都机会成为可能。” 因此,现在看来,我热爱计算机这门学科其实不仅是构建代码后的功能实现的享受,更是只有计算机这门学科拥有如此巨大的创造的空间




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

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

我理想的大学是学者会萃的思想“圣殿”,在教学上依托基础课程和专业课程的教学内容,每位老师用独到的见解带领学生深度地领略学科的历史和发展,激发学生对于学科纯粹的兴趣。然而在现实的大学教育和理想情况确有差异,整体来说便是比我想象得更“实用”,实用在轻数理重实践的课程安排,实用在部分师者在课堂中功利或不合体的观点言论,实用在学生群体间的浮躁和从众。此外,还有些现实吐槽:

  • 数理课程与专业课程的错位:大一刚到学校,就听到大肆宣扬北航特色的工科数学分析/工科高等代数,用以让所有理工科学生有更扎实的数理基础,然而大类招生的严苛要求下,任课老师力求步伐一致、关注班级成绩,顺应教学大纲刷题练习而轻视了引导学生做更深的整理和思考:我们可能对如何求满秩方阵的特征向量滚瓜烂熟,但是却不知道特征向量从空间上有什么意义;我们可能背下了许多常用函数的泰勒展开公式,但几个学期后几乎没有同学能再记住它的用武之地。由此可见,难度不小的数理基础课并未给学生留下深的映像,这对于后期在专业上获得突破是很不利的。
  • 评分标准:计算机专业的老师大多具有很强的技术功底,也有着技术人都有的自动化习惯,凡事都可成为标准量化的指标,而不顾及标准的周全行和人性化。我曾在知乎中见到了许多同学的吐槽,看到热爱和兴趣被冰冷的成绩所冲散。不过反过来想,这样的设计未尝总是问题,反过来倒锻炼了在今后工作中的抗压能力,就像国乓名将邓亚萍提到在国家队的日常比赛中,就是要故意引入裁判的错罚,以此构建稳定的心理状态。不过现实也要有度,低头看路,梦想就没了,这使得学生需要自己去平衡。
  • 繁重的课业压力:促成这样的现状有客观原因,也有主观原因。客观上,计算机学院重实践轻理论,实践队正确性要求极为苛刻,使得很多课程设计都呈现2:8的时间配比,真正高效学相关知识的仅占20%,为何不可把测试留在软件工程能力的教学线(面向对象、软件工程)上集中考察,而在其他课程上释放学生的时间呢?主观上,学院同学之间的竞争压力很大,课程和老师的选择关乎成绩结果,我的观点是保守的,在自己感兴趣的课程和有助于学业的课程之间,我倾向取并集并全身心投入,这也常令我倍感压力。

在我看来,在现有的国家需求和教育体制下,中国对大批量人才的需求迫切,学术和教育的评价体系存在很多漏洞和错误引导,老师和学校在压力面前还很难做到国外大学的学术教育和通识教育,但是“无法做到“和”争取做到“也有差异,在有限的活动空间中,学校、老师还是应该在教学设计上投入更多精力,尽力向更优质的教学环境靠拢。


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

问题的答案比较模糊也比较不靠谱,10000(高中信息竞赛)+1000(高中科研)+2000(数据结构)+2000(计组)+5000(面向对象)+ 500(操作系统)+3000(编译器)= 23500行。

而最复杂的项目莫过于操作系统和编译器,这两者的复杂度在不同方面,对于手写的类C编译器,复杂度在其工程性和代码量,实现了将教学C语言所编写的字符文件转换为MIPS汇编指令代码,并多遍尽可能地进行优化;而操作系统需要补充的代码虽然不及5%,但为了填空和修复bug,可能需要阅读90%的代码,花费大量时间理解原理,实现计算机操作系统中所需要的内存管理、进程管理、文件系统和管程等。在软件工程和将来,操作系统型的复杂性应该更加普遍,需要培养理解和测试能力。

此外,我还想谈谈我对最复杂这个词的理解,阅读到一些大佬的博客,都提到了学校教学内容的局限和实习的重要性,认为实习中所面临的复杂工程性问题远比课堂上复杂,收获大很多。但其实这还是有些事后诸葛亮,没有前面基础教学的铺垫,哪里给你敲门砖敲开企业的大门?仔细回顾我一路走来的实践任务(算法编程->数据结构->计算机组成->面向对象->操作系统->编辑原理),其实可以说在过去每个时刻都认为自己的项目是最复杂的,这种状态其实就和博客M所说的“难一点”原理相同,保持自己在过程中的上坡路即可,不要低估时间积累的力量。

在这个过程中我深刻的感觉到,如果要快速提高自己的编程水平的话,你必须总是去做一些你做得出来,但是难度大到只要再难一点点你就做不出来的事情。再这么坚持好些年之后,肯定会进入高手的行列。

——博客M


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

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

在回答上述两个问题前,我想先来谈谈自己先前看到一个类似问题:“是不是科班出身的就比北大青鸟强?”,这其实是一个模糊的问题:

  • 概率分布 —— 科班出身的(everyone/someone)比北大青鸟好?:每年科班数以万计地学生拿到毕业证书并就业,然而众所周知,庞大的毕业生群体中并不是确定而是存在随机性的,何况还有博客H、博客F的非科班作者厚积薄发在职业路上快速赶超的可能性,因此必然存在一定可能性科班的毕业生在多年以后不比北大青鸟好。因此,博客E中作者发出“我就是半路出家的,哪点比科班出生的差?”的感叹在我看来便是个体之偶然和群体之必然,但从宏观的分布和期望上观察,我认为科班的整体水平要高于北大青鸟。
  • 强是什么?—— 修饰词?:衡量一个人的标准千差万别,也没有人是万能的。狭义地理解上述问题,可能是指学科基础、编程能力和工程素养,也可能是指工资收入、社会地位。然而还有许多其他的评判标准,因此没有办法比个高低。

“博学之,审问之,慎思之,明辨之,笃行之。”

——《礼记中庸》

《礼记中庸》中提到了学习的境界,指出学习的最高境界在于将博采的知识用以培养好奇心,用审慎的态度思考和分辨所学知识,最后知行合一将所学变为所用。在大学的科班教育中,相较于速成培训班的工具化教学,固然重视专业基础和学习能力的培养,使学生在现在飞速发展的信息行业中跟上步伐,然而,大学作为高等教育,更重要的是在各类课程中潜移默化地培养学生正确的世界观、价值观和人生观,使我们用独立思考和专业素养相结合去实现价值,从“峰终定律”来说,在漫长的人生中自我实现的质量不求多,但求高。

峰终定律:这是我们潜意识的特点,我们对一项事物的体验之后,所能记住的就只是在峰与终时的体验,而在过程中好与不好体验的比重、好与不好体验的时间长短,对记忆差不多没有影响。

——丹尼尔 卡曼

随意地举个例子,普通程序工程师踏实工作过上了宽裕的生活,而有的人则在实践中做思考总结,为开源社区贡献了卓越的开发工具;有的学者像论文收割机每年在会议中发表大量中看不中用的论文,而有的学者潜心钻研做出突破型的贡献,亦或是深耕能够培育成百上千学生的教学研究,润物细无声。

因此最后说到速成的培训班、MOOC和大学教育三者的差异:前两者之差异在于课程体系与大纲的不同,速成班以快速掌握现有技术与工具为主,而MOOC的体系更完整,可以将更注重基础能力的培养;而后两者之差异在于人格健全和生命教育,课堂上老师随性抛出的一个观点、同学间深层次的对话,都可能触发思考,这是通过MOOC和自学的方式所无法得到。




第三部分:未来规划

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

从高中以来,我便发现了自己在研究创新上的兴趣,读大学至今,期间所经历的讲座、助教、项目、实习等,我也愈发坚定将来从事科研的目标,在计算机这个潜力无限的领域创造价值。

上学期读到爱德华·威尔逊所著的《写给年轻科学家的十封信》,其中一句话给我启发:“科学家本是一群爱做梦的人,喜欢天马行空探索世界,坐在实验室中勤恳地工作不过是谋生的职业样子罢了。” 这是一个很理想的科学家状态,但也提醒着我在计划自己未来发展的同时勿忘内在本质的想法。

因此,我更偏向将计算机作为热爱的平台和工具,计划将来在学术更加纯粹和自由的环境中深造,而后在噪音更小的环境下做研究(要说具体职业:学者?)。至于具体的研究方向,我比较赞同博客D的白纸理论和博客K所说“小白先钻研技术,学会做人和做事,30岁以后再谈发展”,现在决定还为时尚早,研究生阶段也还是培养学术研究能力为主,能力到位了,认知和方法论掌握了,后面切换到任何方向都为时不晚。


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

我个人认为大学阶段的实验室/企业实习很重要:

  • 但重要的是经历:实习经历是侦察兵,为了健全自己的思考,去走进那些看着美好的东西,真实摸摸看。经历丰富了,才能明白自己想要做什么,在综合考虑感性(兴趣爱好)+理性(能力品质)后做出决定。
  • 不必累积经验,若要积累一些,一定要沉下去:
    • 本人慢热型选手,最近加入到实验室科研,同时又有本科的学习,我常常发出感叹“如果给我像研究生一样大把的时间,专注研究和实验多舒服啊!”,同时我们还欠缺许多研究/开发方法论的引导,因此现阶段强调对实习经历的经历必然会挤压原本属于本科时间,而且质量不高,要耐心成长,不要早熟。
    • 其次,计算机行业高速发展,工具化经验的保质期不长,对于实习中的经验需要总结内化,否则是没有意义的。



说在最后,感谢软件工程这门课给了这么一次反思过去,展望未来的机会,让我集中地做了一些思考,不过照我经验,博客字写多了,很多内容就冲淡了,更需要回过头来再多看看。对于文中的观点也欢迎讨论~

引用

博客M - 进入2012 -- 回顾我走过的编程之路

博客E - 达内,青鸟!你们使多少花朵误入歧途!

博客H - 【野生程序员】:优先招聘

博客F - .net程序员工作两年总结

博客K - 谈谈职业规划——CSDN对我的采访

博客D- 一直在路上——记我从初中到本科近十年的学习成长历程

posted @ 2020-03-03 13:13  youzn99  阅读(327)  评论(2编辑  收藏  举报