zoukankan      html  css  js  c++  java
  • 北航软工热身作业

    软工热身作业

    项目 内容
    本作业属于北航 2020 年春软件工程 博客园班级连接
    本作业是本课程第一次个人作业 作业要求
    我在这个课程的目标是 收获团队项目开发经验,提高自己的软件开发水平
    这个作业在哪个具体方面帮助我实现目标 让我反思自己的计算机生涯,认识到欠缺之处

    第一部分:结缘计算机

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

    我最早开始接触编程是小学的信息技术课,当时学习的是 Logo 语言。这门语言有趣而强大,使用者可以通过程序来控制一只 turtle 在 GUI 界面中进行绘画,可以选择过程式或者函数式的范式对程序进行描述。我当时主要使用的是 GUI 部分,考虑的是如何画出来好看的图形,其中分形图形是我最喜欢的。为了画出想要的图形,我学会了一些“技巧”,譬如递归,尾递归优化(由于 PC Logo 这个 Logo 实现的问题,递归的效率会很低,为了能较快地跑出来结果,无意中完成了这一步操作)等等。现在回想起来,Logo 语言即使作为大一新生的程序设计入门课程也是毫不逊色的(当然,考虑到实际的应用,选择 Python,Common Lisp 之类的语言会更好)。后来还参加了中国青少年机器人竞赛,进行了一些类似于 Scratch 的编程实践。这些经历都使我对于编程抱有一定的兴趣。

    再后来,高考填报志愿,其实当时我对于物理的偏好甚于计算机,第一志愿选择的是南大的理科班,第二志愿才选择的北航信息类。算是机缘巧合吧,来到了北航信息类,然后是计算机系,也算是一个不错的结果。

    在上大学之前,我没有受到过比较系统的编程或是计算机科学的训练,也没有开发过能够实际应用的程序,起点是比很多同学要低得多的,更别提与轮子哥叶大等从较年轻时就已经进行了大量编程活动的前辈们相比。但总的来说,路是要一步一步走的,总归是要慢慢追赶的。

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

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

    我认为现在的问题主要由两点:怪异的课程安排,专业课不够专业。

    先从第一点说起,计算机系的必修课程中竟然有着物理实验、经管诸如此类的课程。诚然,多学一些课程对于学生的发展来说总体而言是有益的,但是将一些“锦上添花”的课程作为必修、作为毕业要求,这就是问题所在了。人的时间是有限的,修习这些课程不可避免地导致专业课程学习时间的下降,更毋论都是不能“怠慢”的课程。

    相对而言,第二点比较复杂。以最近的编译器设计课设为例,课程目标大致是为一个只有文法没有规格的类 C 语言编写一个生成到 MIPS 汇编码的编译器。首先,只有文法没有规格,这点我还是说的比较重的,规格是有一条的:“程序执行结果同 Clang 8.0.0 编译产物结果”,毕竟是能够将有栈溢出现象的程序当作正常测评程序的课程组。再以我担任助教的计算机组成原理课设为例,课程总体来说是完整的,让学生实现一个简易 CPU。但是计算机不只是由一个 CPU 组成的,还有其他很多的部分,各部分之间的沟通方式以及由这种沟通方式导致的各种影响也是十分关键的,难道学习计算机组成仅限于硬件个体吗?

    计算机科学与技术,北航是偏向于技术的,这有着比较深远的历史原因。但是现在教学讲述的技术还很不全面,谁能想到程序设计课程是学习 C 语言语法,而不是 C 语言及其相关的一整套工具链,谁能想到计算机组成课程还要求使用着与现在常用操作系统兼容性不佳的软件。

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

    我没有对代码数量做过统计,这一点不好衡量。总体而言,分为以下几种:

    • 刷题。主要是 codeforces,leetcode 等 OJ 上的算法题以及 codewars 上的 FP/PL 相关题。
    • 课程设计。计组的 CPU、OS 的“完形填空”、OO 的小 Project、简易编译器设计。
    • 工具。编辑器扩展、各种爬虫、各种库。
    • 课外工程。计组课设后台。

    最复杂的项目可能是编译器,主要由 Lexer(Source Code to Word Stream)、Parser(Word Stream to AST)、IR Codegen(AST to IR)、MIPS Codegen(IR to MIPS ASM)几部分构成。总的代码行数三千余,在对输入源代码做最坏打算的前提下进行优化,性能排名前列,我还是挺满意的。项目使用 Git 管理,每次写新 feature 的时候开一个新 branch,写完后发 PR,过一段时间自己 review 自己的代码,然后 merge 进 master,就像是自己和自己“演戏”。

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

    既然是“速成”,那就当然是有区别的。由于定位,培训班主要是教授学员一些能较快地转换成生产力的技术,底层原理与实现细节可能不会详细展开。而大学教育则会深入到细节,深入到底层,深入到数学原理来向学生教授科学与技术。譬如,同样地让培训班学员与大学学生来写一段 JAVA 程序,两者都能完成地很好,但是如果涉及到性能的调优,JVM 的调优等等,前者可能就比较难以解决,因为缺乏对底层的知识。但是现在的教育资源是十分开放的,无论谁都能接受优秀的教育,培训班学员亦可以通过持续的学习来补足基础,培训班某种程度上充当着领学员入门的师父的身份。

    第三部分:未来规划

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

    我对编程语言与编译技术相关的方向比较感兴趣,我希望将来从事的职业与之相关,我想为 LLVM,GHC 之类的项目贡献代码,我想参与到如 CPP、RUST 等语言的设计中。但是我深知我现在的水平远远不够工业界的需求,我这几年的大学生活是过得比较平庸而低迷的,接下来的时间我要用心学习。

    对于职业道路,之后我可能会先感受一下工业界的氛围,积累工作经验,了解一下行业方向,然后再做打算。毕竟时代变化快。

  • 相关阅读:
    利用Python进行数据分析(3) 使用IPython提高开发效率
    利用Python进行数据分析(2) 尝试处理一份JSON数据并生成条形图
    利用Python进行数据分析(1) 简单介绍
    在真机调试 iOS 应用:理解 Certificates, Identifiers & Profiles
    iOS: 在iPhone和Apple Watch之间共享数据: App Groups
    iOS: 在UIViewController 中添加Static UITableView
    iOS Interface Builder:在.xib文件中加载另一个.xib文件
    在项目中同时使用Objective-C和Swift
    iOS: 为画板App增加 Undo/Redo(撤销/重做)操作
    在iOS中实现一个简单的画板App
  • 原文地址:https://www.cnblogs.com/btapple/p/12395629.html
Copyright © 2011-2022 走看看