| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 2021春季软件工程(罗杰 任健) |
| 这个作业的要求在哪里 | 2021年软工-热身阅读作业 |
| 我在这个课程的目标是 | 学习软件开发的工业化流程,锻炼团队合作能力 |
| 这个作业在哪个具体方面帮助我实现目标 | 小组化分工合作,迭代开发 |
第一部分 结缘计算机
1.1 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?
谈及为何选择计算机专业,就必须回溯到高三的那个暑假去。当时的我刚刚从高三紧张的学习生涯中解放出来,就立刻投身到选专业的过程中去。但事实上我也没在众多的专业中“乱花渐欲迷人眼”,在看了一些热门专业和一些可能感兴趣的专业(如数学、理论物理等),我最终还是选择了计算机专业。这不仅是因为当年深度学习火出圈,使得我看完 3B1B对深度学习的介绍视频 后,对这个领域所能到达的无穷可能性的憧憬,也是因为自己确实很想学习一些编程知识,使自己能够设计一些自己想要的程序。
考虑到进入计算机专业之前,我和计算机的交互仅限于在网页上浏览一些内容,最多止于对 Microsoft Office 的使用,甚至当我看到同学在命令行中键入一些命令就能实现很多功能时都大感讶异,我的条件可以说是相当的差。
相比于博客I的博主“第一次上课,眼睛里看见的是一台台白色的机器,带了个像电视的东东,能显示东西,真神奇”,因为 2010 年之后电脑相对普及,且图形界面比较主流,我并没有像他一样因为对电脑的兴趣进而在 DOS 下接触了 Pascal 这些编程语言,而是在大一才开始系统地入门计算机。所以尽管初高中时互联网的发达已经为我们学习计算机提供了相当大的方便,我在选择计算机专业时的条件还是比较差的。
1.2 计算机是你喜欢的领域吗?是你擅长的领域吗?
计算机是我喜欢的领域。现代科技的许多领域如今都和计算机进行了紧密的融合,同样如此的还有我们的生活。因此计算机是很容易就做出一些和生活有关的成功,这无疑是很让人兴奋的一件事。当看着计算机“吃”进去一些数据,“吐”出来一些精美的结果时,我的脑海里涌现出的是一个精密的、现代的、自动化的流水线结构,其中的机械臂、激光等对着原材料有序地加工,使其一步步变成我们所熟悉的现代工业产品,这样精致的结构从某种视角来看似乎与艺术品无异,同样让人陶醉。
是我擅长的领域吗?我恐怕既不能给出一个肯定的回答,也不能简单地否定。计算机科学虽然相对于其他经典学科问世较晚,但是其在理论和实践上的发展日新月异,化用一个经典的梗:“你可以(1)在一段时间内擅长计算机的所有分支领域,也可以(2)在所有时间内擅长计算机的一个分支领域,但无法(3)在所有时间内擅长计算机的所有分支领域”。而作为一个大学生,我觉得学习计算机的曲线应该是先满足(1),从广度上对计算机进行了解,然后再满足(2),选定一个特定领域做出长足的研究。
1.3 你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?
热爱。
说到热爱这个词,很容易联想到罗曼·罗兰所说的「世界上只有一种真正的英雄主义,就是认清了生活的真相后还依然热爱它」。同样地,对计算机的热爱也同样可以形容为「认清了计算机的真相后还依然热爱它」。我们很容易从感性上认识到计算机的美,事实上那些较早的有关于计算机的理论,例如图灵机、冯·诺依曼结构,第一次接触到的时候很难不说一声精妙。很多时候,我们对计算机的热爱往往因此而起。
但是计算机这个学科同样有他丑陋的部分,很多工程上的标准因为对未来的认识不足(千年虫问题)或者历史的包袱(x86指令集向后兼容),以现代人的眼光看来虽然可以理解是历史的局限性,但是它仍然以一种相当别扭的方式影响着我们,不由得让人畅想如果能一开始就能做成完全统一,该是多简洁啊。但是房间里的大象就在那里,我们无法视而不见。事实上,我们很可能是必须接受这个丑陋,并做好与它长期作战的准备,在这个过程中,我们不免会迎来痛苦,对计算机的热爱也可能因此而消磨,但是如果「认清了计算机的真相后还依然热爱它」,就可以越挫越勇,不止将热爱流于口头,我也希望能做到这样。
第二部分:在计算机系里学习
2.1 你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。
2.1.1 你对你的大学生活有什么想要吐槽的地方吗?
哈哈????,这个时候如果不提一下北京航空航天大学计算机学院的教务处似乎有点说不过去。教务处似乎总是以一种比较奇特的方式横亘在学生和他感兴趣的课和需要的课之间,整个选课的过程就是和教务处作斗争的过程,在此不再细说,不然可能会充满个人的负面情绪。
2.1.2 你理想的大学教育应该是什么样子的?
我理想中的大学教育是饱和式的:大学提供多于学生所需要的教育程度,学生在学习一些必要的基础知识后(最好再接触一些前沿的学术和工业的研究方向),能够对接下来学习的方面进行选择,然后再深入学习。
2.1.3 跟学校给你的有什么区别?
可以看出,计算机学院也是正在进行一部分的改革。而且回过头来看,学院也努力地提供着自己的教育资源,一些计算机学院的经典课程,例如 OO、CO,理论和实践紧密结合,很好地为学生打好基础,而且大一时的计算机导论也为我们介绍了许多前沿方向(只是当时还不太在意这些)。除了细分到各个方向上的教学资源相对有限(由于客观条件确实难以解决),不同学生之间的基础千差万别所导致的有人吃不饱,有人吃不消的问题之外,学校所提供的教学资源还是比较令人满意的。
2.1.4 你的老师和学校能做到和国外那样吗?
根据博客O的说法,美国研究生期间的计算机课程作业“要求明确,目标清晰“、”难度适中“、”及时反馈”、“严格要求”,这方面我校还是比较接近的。但是博客N给出了作者本科学校的一些特质:“老师准备充分“、”互动频繁“、”教学时效性强“、”良好的人文关怀”,是我们学校有所不足的地方。
2.1.5 如果不能,请分析一下为什么。
在这些方面的不足,前三方面可能是因为学校除了本科生教育之外,还需要兼备研究生、博士教育以及前沿学术研究,相对于博客N里的学校是以本科生精英化教育为主要核心有所差距。而人文关怀的缺失,我觉得更多源自于人与人互动的缺失,更多的是人和理论、人和工具的互动,这方面可能需要学校更多的引导。
2.2 迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。
| 项目 | 行数 |
|---|---|
| 大一C语言相关(C) | 2000+ |
| 计算机组成原理(Verilog) | 2000+ |
| Java程序设计大作业(Java) | 2000+ |
| 面向对象设计与构造(Java) | 4000+ |
| 操作系统(C) | 1000+ |
| 编译原理(C++) | 4000+ |
| 编程语言学习(Python、Lisp) | 1000+ |
累计有1W5左右的代码行数。
最复杂的软件项目就是编译原理课上实现的类C文法的编译器:
- 开发环境: C++11,Clang 8.0.1
- 项目简介: 实现了一个源语言类似于 C 语言的子集,目标语言为 Mips 汇编语言,支持错误处理的编译器。 采用了递归下降子程序的方法进行语法分析,支持常数传播优化和算术优化。
2.3 科班出身和北大青鸟有什么区别?速成的培训班和打基础的大学教育还有mooc之间有区别吗?
在读到了博客E“一个人无法明白,他没有理解的东西”时,我觉得科班出身和培训班在学习计算机知识时有着比较大的鸿沟。科班出身可以用四年时间来接受系统的本科教育,每门课老师可以用一段时间引导同学入门,从而获得更平滑的学习曲线。但是培训班以进入企业进行编程工作为目标进行培训,感觉更类似于驾校一样,无论你之前是否接触过相关知识,给你的教学过程都基本一样,很多时候培训教师自带知识诅咒,难以想象不了解计算机的人居然可以这么不了解。
至于大学教育和mooc之间的区别,经历过疫情期间在家网课之后,更能认识到线下的交流是多么重要,很多时候自己思考许久的问题经别人轻轻点拨就可以避免陷入窠臼。
但总而言之,计算机这一领域包含的知识太多太多,无论是科班学习基础知识,还是培训班学习网站开发等,都是对计算机的一个小小切片进行学习。但是很大的不同是科班的学习是对计算机进行横切,切出了计算机的基础部分,这样之后学习其他部分都是基于这个基础。而培训班则是纵切(可能还切的不深),之后一旦涉及其他工作就需要从头学习。
2.4 学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?
过去没有,现在也没有。
学习线性代数时,我恰好在看图形学相关书籍,彼时但凡涉及矩阵运算基本抓瞎,随着线性代数的学习才逐渐理解该部分的内容。至于概率论,贝叶斯定理引入的先验和后验概率,相当反直觉地揭示了一些数学上的真相(可见 医检阳性≠得了病?重新理解贝叶斯定理 ),让我觉得非常有趣。
而现在在做一些图像编码相关的工作,其中的数学原理也不一而足:比如变分自编码器中将 \(p(X)=\sum_{Z} p(X \mid Z) p(Z)\) 的后验分布 \(p(X \mid Z)\) 约束到标准正态分布,使得我们可以保证模型的生成能力。如果没有概率论的基础就不太能较好地理解这些工作。
第三部分 未来规划
3.1 对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路?
梦想:尽管也想做一些机器学习的研究性工作,但是对一些开源开发者的传奇经历也有着很大的憧憬。也许这两者之间我最终一个都不会选择,但是现在正在朝着这些方向而努力着。
技术道路:努力拓展自己的技术能力,希望什么时候如果脑子里冒出什么想法,马上就可以动手实现出来。
职业道路:这个方向很难在这个时候给出一个确定的规划,只希望努力提升自己,当机会来临时能够抓住它。
社会道路:希望能有用而不作恶地应用自己的技术。「人的一生,应当这样度过;每当他回首往事时,不会因为碌碌无为而悔恨,也不会因为虚度年华而羞耻。」
3.2 你对于实现自己的梦想已经做了或者计划做什么样的准备?
目前我正在商汤科技进行实习,做一些图像编码在深度学习方向的探索。
3.3 你们马上就要面临实习了,你打算在企业内实习还是在实验室实习?
因为已经在企业内进行实习了,这个问题我显然是会选择前者。
企业内有着更全面的技术链支持,许多实习之外的事情不太需要更多操心,比如算力资源和IT支持。而企业也有着更多的技术积累,我总是能在内网的博客里找到前辈踩过的坑,从而轻巧避过。
3.4 实习经验究竟有多重要?是否需要马上开始积累实习经验?
我认为实习经验非常重要。
在实习岗位上,有着更强的驱动力--企业的业务有着更强的落地要求。因而更有可能让自己跳出舒适区,做一些稍稍超出自己能力的事,同时逼迫自己去更踏实地学习,毕竟你学习的结果直接就有可能和业务打交道。
马上开始。
时不时就听见大二甚至大一的同学已经在联系实验室和企业,因此我觉得实习的开始永远都不嫌早。我们总是需要一段时间来适应实习和学校之间的不同节奏,越早开始就越能准备充分。