软件工程学习体会

软件工程
研究生的课程基本上都快结束了,说一说这个学期所学课程的一个宏观感受吧,纵观学院开设的这些课程,(如下图)

  • 软件项目管理
  • 软件过程管理
  • 软件需求管理
  • 软件架构设计
  • 面向对象程序设计
  • 专业英语
  • 研究生英语
  • 高级数据库
  • 高级Java编程
  • 数学建模
  • 中国特设社会主义(这个必须的)

从这个课程设计来看,我个人认为这些课程主要是偏理论,实战性不是很强,包括Java也是偏理论,当然了,Java的学习主要还是自己在下面多花时间去实践。说一说我对这些课程的感受吧。

管理类课程

先说说管理类的课程,软件项目管理,软件过程管理以及软件需求管理。软件项目管理主要是偏向项目管理这一块,比如项目评价,项目集管理,项目策划以及风险管控等等。这一门课程呢,主要是偏向那些致力于成为项目经理的同学(当然了,成为项目经理肯定需要多方面的能力)。软件过程管理这一门课程主要是介绍了软件过程相关的知识,另外介绍了几种非常使用的模型,最典型的当然是CMM(Capability Maturity Model)能力成熟度模型了,这个是衡量一个企业的在软件过程(管理过程,支持过程以及实现过程)几个方面的能力的模型。CMM一般分为五个等级,等级越高,能力越强,说明项目管理越规范,项目风险越低。

软件需求管理主要是讲需求工程的,包括需求如何确定,需求说明规约如何编写等等。本来还在想这门课其实应该是一门水课,但是老师在这个上面花的功夫让我们很惭愧,其实这门课很不错的。其中有一个概念国内基本上还没有太多企业采用,但是国外已经完全普及了,那就是架构假设条件(AA[Asumption of Architecture]),这门课程我们一直在维护需求方的AA,同时我们自己也是另一个项目的需求方。AA描述的是我们这个软件设计过程中我们期望的样子(功能性的和非功能性的),但是不是所有的假设条件都能成为AA,AA必须是要花很大代价才能改动的,因为涉及到架构的变动。

架构类课程

再说说软件架构设计,这应该是我最感兴趣的一门课程了,这门课程重点介绍了软件架构设计中的思想,还有介绍了很多软件架构的实例,比如SOA架构,BS/CS架构,实时系统架构,以及并发系统架构等等。面向对象程序设计主要是介绍了UML,个人认为和前面的课程比较重复。通过这门课,主要学习了如何去设计一个系统,通过什么样的方式去表示一个系统的架构,最简单的比如使用用例来表示一个系统的功能性需求。通过系统的类图表示系统的各个组件之间的组成关系。

Java编程和数据库

接着说说我认为实战性稍微强一点的Java和高级数据库。Java课程一直是备受关注的,即使老师宣布不点名,但依然还是有很多的同学来上课。桂浩老师的课程干货很多,让我们收获很大,高级Java课程主要介绍了Java的内存模型,Java8的相关编程,JVM虚拟机底层原理。其中让我收获最大的是Java内存模型和JVM虚拟机底层原理。Java内存模型中主要介绍了Java内存清理的集中算法,比如标记标记-清除算法,复制-清除算法以及二者综合的算法,Java的内存结构(比如堆结构里面的新生代,年老代以及永久代)等。JVM虚拟机主要讲了Java Class文件的文件结构,以及ClassLoader类加载器相关原理,受益匪浅,感谢!

高级数据库是董红斌老师给我们授课的,董老师的课程讲解非常清晰,数据库高级课程主要是讲了数据库的底层实现,数据库性能优化(比如索引优化,事务设计)等。虽然目前感觉东西太过于底层需要时间消化,但是有一个基础为日后自己深入理解数据库有相当大的帮助。现在我主要是在研究MySQL和PostgreSQL数据库,这两个都是非常优秀的开源数据库。

实验室研究

嗯,以上一对于一些专业课程的相关感受和想法。现在说一说我在实验室的感受,实验室里面主要在研究机器学习中自然语言处理相关的方向,目前在研究LDA主题模型。感受最深的是这个算法真的很实用,能自动的根据文档生成相关的主题,比如给定一条新闻(比如昨天卡斯特罗逝世),我们通过这个算法就能自动贴上相关的主题标签,这样就能帮助搜索引擎自动分类相关的新闻。

博主的学习路线

继续深入学习Java编程,深入学习Python编程,踏踏实实写Shell脚本,熟练进行Linux编程,深入理解数据库原理,继续研究算法!!!,这个是内功。然后就是继续关注大型网站架构相关的走向,并学习相关的构建之法。

机器学习和数据挖掘的道路还很远,我还只是刚刚开始,但是满怀信心和期待并踏踏实实地做研究,相信结果不会令自己失望。

分享到