这周是本学期的第二周,也是我实行我本学期阅读计划的开端。在这一周,我仔细阅读了《构建之法》这本书的第一、二、三章。首先,在第一次粗略阅读,我知道这三章大致是针对个人来讲解的。在这三章的学习中,我学到了很多东西。

      软件=程序+软件工程,程序,指的是源程序,也就是一行行代码,软件工程的核心部分是和软件开发活动相关的内容,还有一个推论就是软件企业=软件+商业模式。软件开发有不同阶段,即玩具阶段、业余爱好阶段、探索阶段、成熟的产业阶段。软件具有特殊性,体现在复杂性、不可见性、易变性、服从性、非连续性。计算机科学与软件工程具有不同的侧重点。而软件工程的目标是创造足够好的软件,而不是绝对完美的软件。

      在第二章的学习中,我接触到单元测试这个词,我通过自己动手操作去编写一个简单的单元测试,并根据Right-BICEP要求来选择测试用例。对于一个好的单元测试,应该准确、快速地保证程序基本模块的正确性。验证单元测试的好坏,有它自己的一系列标准。同时,在单元测试的基础上我们就能建立关于这一模块的回归测试。最后,我接触到了PSP,即个人软件开发流程。这是CMU的专家们针对软件工程师用来衡量能力的一套模型。对于PSP0,我了解得比较多,我们需要写项目计划日志,时间记录日志,以及缺陷记录日志,写这些日志的时候必须严格仔细。PSP有它自己的特点,能更好的衡量一个工程师的能力。

      关于软件工程师的成长,我有了一些浅显的认识。对于初级软件工程师,我们需要积累软件开发相关知识,提升自己技术技能,积累问题领域的知识和经验,提高自己的思想,提升职业技能,以及通过自己的实际成果。用我的理解,就是不断写代码,不断实践,积累经验,不断学习。软件工程师的职业,必然需要考级,通过证书来证明自己。职业成长对于不同的人来说有不同的成长路径。我们要知道,技能的反面是解决问题,我们不是去模仿,我们需要学会自己创新。

       通过这次阅读,我有了自己的一些感受。在过去,我编写程序的时候,完全不考虑边界问题以及其他一些我认为这种情况出现的可能性很小的问题,甚至一个程序编写出来后要求别人只能按照我要求进行使用,不然程序就会出现bug。尽管我知道这样不对,我却想着反正没什么影响,只要老师没看到就可以了。然而我在阅读的过程中发现,这种做法完全是错误的,正如书上所讲,一架民用飞机上有一个功能,用户使用它的概率是百万分之一,按照我以前的做法就是忽略了这个功能,但是如果这是飞机的安全功能呢,一旦出现这个bug,结果是会致命的。从这个例子,我明白了,就算我们目前能力有限,但是我们考虑问题也要全面,就算某些情况出现的概率很小,我们也要考虑这个问题,解决这个问题。我们不能因为这只是一个小程序就完全不在意细节的问题。通过这次的学习,我想我会改变自己以前的编程习惯,养成在每次编写代码的时候时刻提醒自己按照标准编写单元测试、按照Right-BICEP要求选择测试用例、在自己能力范围内不忽略每一个会出现bug的情况的习惯。