这一周的主要授课知识点是软件工程相关概念,软件工程和计算机科学的关系,源代码管理。实践内容是简单的源代码管理操作。
首先我们应该认识到我们在学习时,软件工程可分为以下阶段:需求分析,设计阶段,实现阶段,稳定阶段,发布阶段,维护阶段。但是在现实工作时,实习生往往是先从维护阶段开始,学习并维护一些已有的软件,接着能够在项目中改一些bug,发布小规模的更新版本,之后有机会重写一些较小的模块,没有多少文档,自己要写很多代码,表现好的员工有机会设计比较大的模块,自己写一些文档,最后可以有机会计划新的项目,因此我们的学习也可以仿照这样的流程。首先维护,找bug,少部分增量开发,分析需求,设计开发,回归测试,发布并收集反馈。
其次我们的师生关系不是餐馆和食客,老板和雇员,保姆和幼儿,哥们和哥们,路人甲和路人乙,狱警和犯人,应该是健身教练和健身学员之间的关系,教练是很有经验的身体力行者,并有足够的理论知识,可以随时指出学员的进步和不足。我们应该主动学习理论知识并且积极实践,按照科学的学习方法来循序渐进,不断总结和完善,提高自己的实际能力。
一个复杂的软件不但要有合理的软件架构,软件设计与实现,还要有各种文件和数据来描述哥哥程序和文件之间的依赖关系、编译参数、链接参数等。构建管理、源代码管理、软件设计、软件测试、项目管理相关的内容是软件工程的核心部分。软件=程序+软件工程。软件开发的不同阶段可以类比:玩具阶段的纸飞机->业余爱好阶段的飞屋->探索阶段的莱特兄弟的飞机->成熟的产业阶段的商用飞机。软件开发有以下几点特别的难题:1.复杂性(大型软件有超过百万行的源代码,上万个不同的文件) 2.不可见性(软件工程师可以看到源代码,可是源代码却不是软件本身)3.易变性(软件看上去很容易修改,但是正确地修改软件却不是一件容易的事)4.服从性(它要服从系统中其他组成部分的要求,以及用户和行业系统的要求) 5.非连续性
软件工程的目标就是创造足够好的软件,bug的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护度。