构建之法
读书笔记
第一章:
软件工程:把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试盒软件维护。
软件工程和下列的学科相关:计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、软件人体工学、系统工程、工业设计和用户界面设计。
第二章:
单元测试能够使自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证。
好的单元测试的标准:
1.应该在最低功能、参数上验证程序的正确性。
2.必须由醉熟悉代码的人来写。
3.单元测试过后,机器状态不变。
4.单元测试要快。
4.应该产生可重复,一致的结果。
5.独立性——单元测试的运行/通过/失败不依赖与别的测试,可以为别人构造数据,以保持单元测试的独立 性。
6.应该覆盖所有代码路劲。
7.单元测试应该继承到自动测试的框架中。
8.单元测试必须和产品代码一起保存和维护。
第三章:
初级软件工程师的成长:
1.积累软件开发相关的知识。
2.积累问题领域的知识和经验
3.对通用的软件设计思想和软件工程思想的理解
4.提升职业技能(区别于技术技能)
5.实际成果
第四章:
结对编程的好处:
1.在开发层次,结对编程能够提供更好的设计质量和代码质量,两人合作解决问题的能力更强
2.对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
3.在企业管理层次上,结对能更有效地交流,相互学习和传递经验,分享知识,能更好地应付人员
流动。Anyways,如果运用得当,结对编程可以取得更高的投入产出比。
我觉得结对编程还有一个好处,就是能够增进友谊,当彼此因为某个bug吵得不可开交到最后项目完成了,那种心情真的不知道怎么去形容,即使大家吵得不可开交,但是不会有人在意,因为其实这也是一种交流,特殊的交流、
第五章:
团队:
是为着某一具体目标而建立的,团队成员的联系较为紧密,工作需要和谐展开。因此,团队精神强调合作、协调和沟通,强调每个人的岗位重要性和工作的不可替代
集体:
集体内成员的联系较为松散,有些成员甚至没有必要发生直接联系。因此,在集体内更多的是强调对领导和指挥员的服从,对他人工作的配合。
我个人觉得一个好的团队更能够提高工作的效率和对工作的热情。因为每个人都有着共同的目标,大家都想齐心协力把工作做好,那么在这样一种范围中,工作的热情会提高,效率自然也会提高,当然,我说的是在比较理想的状态下的。
个人体会:
看完一到五章,我印象最深刻的就是第三章的3.3“技能的反面”。IT专业的大学生在简历上写“精通Visual Studio C#编程",但是他怎么定义数组都不确定,写代码会少了某个分号,断点不会设置等等。。。其实这个时候,我也在问自己:我会吗?是不是我和他一样,这些都要在百度找才知道呢?其实这两次的编程作业就有很多这种感觉,头文件要用哪个,不知道,因为平时都是百度然后复制黏贴的,冒泡排序怎么写,不知道,因为平时都是按照书本敲下去的,随机数怎么产生,噢,忘了,等等诸如此类的。以前我和别人讨论过我们需不需要记住某些用得比较多的函数的用法,当时我的看法是不怎么需要,因为在百度很容易就可以找到,但是我又会想,是不是每次写东西的时候都要去百度,百度这个百度那个,那写一个程序得百度多少次啊。虽然当时这样想,但是还是没有醒悟。现在我好像有点顿悟的感觉了,时间都花在了解决低级的问题,哪还有时间去思考更加有价值的。其实这些头文件,函数的调用,基本的算法思路,我们应该形成一种本能,你一说,我马上就能实现。这样我们才会有时间去思考更加深入的东西,这样距离优秀的软件工程师才会更加进一步。
最大的收获就是:醒悟了以后要记住基础的东西,形成本能,花时间多看看算法。
问题:
1.如果我们是一心想要钻研技术的,比如算法之类的,那么软件工程还是必须的吗?
2.软件工程是一个很笼统的概念,我们学习软件工程是否应该更加多的实践呢?
(个人觉得软件工程要更多去实践从而得出经验,“实践出真知”,所以多动手写项目,多与别人合作开发,我觉得这样学习软件工程这门课会更加好。之前在贴吧在看一个人写的帖子,里面有提到:在大学四年里面,组建一个开发小团队,每次开发项目时候,都必须有人担任项目经理,每个人都这样轮流,那等到大学毕业的时候,你理软件工程师会更近一步。因为软件工程师并不是只会敲代码,然而他们还需要很多其他的技能,语言沟通能力,协调能力,解决问题的能力,组织能力等等)
3.还是不懂怎么去编写单元测试? (开始的时候我的想法是用一个函数把变量初始化了,然后再把这个函数返回值传递给另一个需要的函数,如果与期望值相等,那么这个单元测试就是成功了。但是后来我发现了,原来不管是c还是java都是要用到外部工具的,不是简单的写一个小函数类似于printf这样去验证的,所以这个星期我得好好学怎么样使用Junit才可以,到时候专门发一遍博文来分享自己的心得还有代码)
4.软件工程师是不是更偏向于管理?
5.每种开发模式都有优缺点,那应该怎么去选择合适的开发模式呢?
-----------此次作业报告到此结束,谢谢老师审阅-----------