天天看点

软工热身作业

项目 内容
本作业属于北航 2020 年春软件工程 博客园班级连接
本作业是本课程第一次个人作业 作业要求
我在这个课程的目标是 收获团队项目开发经验,提高自己的软件开发水平
这个作业在哪个具体方面帮助我实现目标 多人合作的软件开发,总结三年的学习成果

第一部分:结缘计算机

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

选择计算机专业有如下几个理由:

  1. 结缘:我第一次认识到计算机这门专业并不是游戏和可视化软件,是Pascal语言。可以说在了解Pascal语言的第一天,我便明白,计算机学科和计算机界的工业成果(游戏、软件、网络设备)是有一定距离的。而我追求这之间差距的道路,就是学习计算机专业的过程。
    • 了解程序设计语言
    • 了解计算机专业的理论基础
  2. 专业素养:在中学期间参加了算法相关的学科竞赛,有算法相关知识。
  3. 大师影响

和博主之间做了一个简单的比较

博主 和我的比较
博客I 为英语专业,并非本科计算机专业经历,这一点我更有优势
博客D 同样为计算机专业学生,博主喜爱工程,扎实肯干,在这一点我需要继续学习。
博客A 理智型人才,合理规划人生,按部就班的生活

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

要分领域而谈

计算机子领域 喜欢和擅长
复杂系统及其控制 不是特别喜爱,不是擅长
算法及其应用 擅长,非常热爱
计算机理论问题 有初步了解,很有兴趣,擅长其中一部分问题
传统人工智能 有初步了解,有兴趣,没精力擅长
深度学习人工智能 喜爱,较为擅长,有相关的工程和研究经历
网络相关 不了解,很好奇
程序设计语言 对函数式编程、模板编程、元编程等主题有一定程度的了解

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

如果说热爱,多年的编程经历已经让热爱这个词变得不值一提,现在算得上深爱,不是那种对新鲜生产力感兴趣的三分钟热度了,而是愿意二十年、三十年在这个领域里深耕,做出有价值有生命的工作,并将这样的情绪感染给更多的人。

我认为,对一个专业来说,不是去星巴克点杯咖啡一样简单的品浓度、闻香味、跟潮流,更应该考虑自己是否愿意在这个领域、为这份工作付出很长一段时间的不懈努力。所以光用热爱来驱动自己的专业,是不够的,如梦幻泡影,捺不住压力和寂寞。

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

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

大学生活的想象与现实

以一张对比的表格来说,总体情况如下。

场景 想象 现实
贴合实际科技发展 落后科技发展3年,新兴领域落后工业一个生产周期 落后于实际3~5年,部分内容与时代脱节
考核形式 任务考核、展示考核、知识考核 笔试分数考核依然存在、任务考核拘泥于抄袭和防止作弊(新意太少)、展示考核较少
工程体验 有和公司合作的教学project,有与实际工程相关的topic 需要自己找实习,没有相关的课程体验,了解的同学凤毛麟角
学术机会 有自由的学术free time,可以dedicate在自己喜爱的领域 被专业课和教学计划碾碎,没有完整的时间

分三个案例而谈

  • 计算机组成
    • Verilog的语言其实已经更迭了几次,我们可以对标龙芯杯做一定基础的任务,但实际是工具和设计都落后的体验,有更多具体任务需要发掘。
    • 笔试考试不知所云,考了满分也不知道笔试的很多过时概念会有什么样的新进展
    • 理论和实践没有很好的整合起来
  • 编译原理
    • 理论和实践完整脱节,理论上讲的很多技术在实践中来不及实验,缺少相关机会和准备
    • 没有从新的角度去介绍编译,甚至落后于很多年前出版的虎书ML版本
    • 编译课程的算法味、理论味、工程味在缺少具体指导的实验上无法体验(可以比较llvm tutorial)
  • 基础学科
    • 为大类统一开设,没有结合计算机领域做出相关介绍的应用课程(负责任的老师还是会介绍梯度方法的数学背景)
    • 缺少code实践,计算机世界的基础学科都是可以

      show me code

      的方式来体验的。
    • 基础学科的考核形式单一

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

写了多少代码这个问题要分三个层次来看:

  1. 代码总计:有github仓库的近1W行,台式机和笔记本还有服务器上加起来的有3~4W行
  2. 最大的工程:最大的工程项目是一个智能摄像头识别系统,有2W行的代码总量,个人的工作代码量有2k行,维护的代码有3k行左右。
  3. 最大的作业:3k行的

    c++

    代码(一个自指的C语言编译器,可作为交叉编译器),2.5k行的硬件描述代码,一个支持中断异常的基本5阶段流水线mips cpu。

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

区别有二:

  1. 学习任务的区别:北大青鸟的学习任务是完成某一具体任务,实现某一具体工程,或者是对某些工程需要的特性知识详细的了解,而科班出身走了一遍完整的计算机发展史和计算机发展与设计的逻辑,整个工程体系的能力从多个任务里面得到培养,保留了一定科学的学习方法。
  2. 学习内容的区别,北大青鸟不会去教基础学科(线性代数、数理分析、信号系统变换)会从应用的角度去介绍问题,不会从问题驱动的角度去发掘问题。
北大青鸟和科班的共性就是,都需要自主能力才能在计算机领域取得一定的成果。不能说哪一种好,哪一种坏,也不能否定科班的按部就班和北大青鸟的填鸭和热度教学,因为本就不是在培养同一种人才,都能培养出对社会有用的人才,一种是研究型人才,一种是实践型人才。

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

对比项目 速成班 MOOC 大学教育
时间 短时、集中 因人而异 相对较长
成果 知识体系破碎、碎片化教学 有motivation的同学可以学的很好,划水的同学可能一无所得 基本上同学的水平能稳定在一个baseline上,没有上限
老师水平 老师水平参差不齐,有好有坏 多为大学老师,水平和大学教育持平 大学老师

学线性代数和概率论的时候,你是否有过这样的疑问“我们为什么要学这么多数学,这和我们的计算机有关系吗”,你现在是否还有这样的疑问?对这个问题,你有自己的解答了吗?那么其他学科呢?

应用
线性代数 广泛的用于计算机上的优化问题、机器学习(无论是传统方法还是深度方法)、提供了更高的几何观点
概率论 系统介绍概率学知识,对优化问题、机器学习、数据挖掘、复杂系统可靠性、算法分析大有助益
数论 传统密码学、通信问题
复变函数 信号与系统、视频音频处理

第三部分:未来规划

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

未来的计算机领域一定是一个基础领域,也必定还是一个工业领域,会有越来越多的人接触和了解计算机和现实世界的

接口

,抽象的理解计算机的很多工作,学习编程、学会与计算机交互的人也会越来越多。所以和现在的发展不一样,要做计算机领域新技术的开拓者和探索者,从小处讲,是走在时代之潮流先;从大出讲,是探索未创造出来的虚拟世界和理论世界。

你对于实现自己的梦想已经做了或者计划做什么样的准备?

工业:参观过多家公司,对其模式和任务有一定的了解;在公司短期实习,体验工业生产环境和学校环境的区别。

学术:在实验室,从多个方面认真的掌握研究的方法论,为之后继续做研究:发现问题、思考问题。

你们马上就要面临实习了,你打算在企业内实习还是在实验室实习?

实验室,企业在任何一个有精力的年纪都可以去,但是错过了思维的黄金时期,可能再也没有体会思想交流乐趣的机会。

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

经验重要与否因人而异,需要看你的实习体验,是否沉浸。