《构建之法》用生活中的一个实例启发我什么是程序,什么是软件,什么是软件工程。程序指的是源程序,就是一行行的代码。能满足各种功能的是应用软件。写代码并不等于软件开发。软件的开发也是复杂的,需要经过:构建管理、源代码管理、软件设计、软件测试、项目管理等相关活动。概括为:软件=程序+软件工程。软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。它包含多个领域,和多个学科相关。软件又有许多特性:复杂性、不可见性、易变性、服从性、非连续性。之后又给我们讲解了软件工程和计算机科学的不同之处。一个是偏理论,一个偏实践,两者并非水火不容,而是互相促进,共同发展的。而软件工程最主要的目标便是让我们学着去创造足够好的软件——用户满意度高,可靠性好,流程质量高,可维护性好。如果能知道了解这些,我们算是大体上认识了软件工程。
第二章中的个人技术和流程讲述了什么是单元测试,具体应该如何进行。软件是有多人合作完成的,我们写的模块不是仅仅为我们所用的,而是需要被其他人调用的。所以,在此过程中便容易会出现一些误解,进而产生一些错误。这时,为了保证模块的质量,单元测试就显得极为重要了。单元测试存在一系列标准:能测试一些最基本的功能和参数,测试应该交给熟悉了解此程序的人来完成,速度快,产生可重复一致的结果,独立,能覆盖所有的代码路径,可以进行保存和维护。还要记录自己的开发流程,以用来为以后提供经验和借鉴,并可以审视自己是否有所进步。在单元测试的基础上还有回归测试,为了避免程序回归到原来不正常的状态,把所有发现并修复的bug找出路。可以用VSTS来编写单元测试,它可以提供单元测试的基本骨架。
第三章中的软件工程师的成长,其中个人能力的衡量与发展中讲述了软件开发流程不光指团队流程,还包括个人开发流程,因为软件团队是由个人组成的。在团队的大流程中,是每一个具体的个人在做开发、测试、用户界面设计、管理交流等工作。因此个人在团队中也有独立的流程;软件工程师的成长包括积累软件开发相关知识,提升技术技能(如具体技术的掌握,动手能力)、积累问题领域的知识和经验(如对游戏、医疗或金融行业的了解)、对通用软件设计思想和软件工程思想的理解、提升职业技能(区别于技术技能)、实际成果;软件工程师的职业发展有许多方面,例如计算机的考级,职业成长级别,可以胜任更高异能的职位,影响力扩大,同时还需要自我的评估。
第四章中两人的合作讲述了在与他人合作时,应当注意代码的规范程序员写的代码给人看也给机器看但最终是给人看的,代码规范要求代码风格规范(原则简明,易读,无二义性)、代码设计规范;在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位,结对编程避免了“我的代码”还是“他的代码”的问题,使得代码的责任不属于某个人,而是属于两个人,进而属于整个团队,这样能够帮助团队成员建立集体拥有代码意识,在一定程度上避免个人英雄主义;两个人的合作要能够集思广益,而不是一人依赖于另一人,要有自己的思想同时也要能与人交流沟通;在阅读这几章之后明白了编程不仅仅包括个人的努力与付出还包括与团队的沟通与交流,不能闭门造车,要加强沟通协作,注意编程的规范。