01《构建之法》阅读笔记01

个人感受:

  我过去的做法:

  1、写程序以实现功能为主要目的,所以有时候为了功能的保证,会不太注重算法的使用。

  2、在团队项目中,习惯了个人编程,和团队成员沟通偏少。

  为什么这样不好:

  1、不注重算法的使用,会无端的浪费空间和运行时间,使程序效率大大降低。

  2、团队成员之间交流过少时,代码融合会经常出现问题,这是必然的。

  解决方法:

  1、在运行程序前不断比较各种算法的差距,择优使用。

  2、两天进行一次团队代码合并,防止出现差异过多难以融合的问题。

重点记录:

  《构建之法》,是一本非常接地气的讲《软件工程》的书,它的作者邹欣有长达20年的一线软件开发经验,他利用业余时间在数所高校进行了长达6年的软件工程教学实践,总结出了在16周的时间内让 我们通过 “做中学” ,来掌握实用的软件工程技术的教学计划。

  第一章《概论》,旨在说明软件工程的概念。

  软件工程可以定义为: 把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。它包括以下领域:源代码管理+需求分析+程序设计+软件构建+软件测试+软件维护+生命周期管理等,广泛意义的软件工程。还包括用户体验、用户界面设计等, 软件工程决定了软件质量。

  软件工程和计算机科学的关系,这也是容易让人迷糊的两个概念,像我们去年在高考填志愿的时候就不清楚他们的区别,到学校后发现学的东西差异也不是很大。而实质上,这是两个侧重点差异很大的概念:从知识领域上说,计算机科学包含计算机体系结构、操作系统、图形学、人工智能等,而软件工程包含软件需求、软件设计、软件维护、软件测试等。

  我印象较深的一句话是:软件=程序+软件工程。在我的理解中,程序、算法、数据结构是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量,商业模式决定了一个软件企业的成败。

  说到软件工程的目标,自然就是:创造足够好的软件。这个足够好的定义,可不仅仅是没有bug,评价软件的维度包括:用户满意度、可靠性、软件流程的质量、可维护性等。

  关于软件流程的质量,指的是软件团队和开发流程的问题太多,导致团队成员无法良好协作,按时交付。换句话说也是软件团队的bug, 流程的质量往往是我们的研发过程中最容易忽视的地方,反思目前我们的现状,很多研发团队的研发流程实质是处于真空状态,开发人员甚至不知道怎样才是软件开发的正确姿势。

  书中点的很明确,理解软件工程,无非三点:研发出符合用户需求的软件、通过一定的软件流程,在预计的时间内发布“足够好”的软件、通过数据和其他方式展现所开发的软件是可以维护和继续发展的。

  第二章《个人技术和流程》,旨在说明一个合格的软件工程师是应该具备哪些技能。

  合格的工程师,开发时需要同时考虑质量和效率,与之同时需要具备的技能包括:单元测试、效能分析、个人研发流程。在书中,作者也为我们罗列出了关于单元测试的正确做法:

  ① 单元测试应该在最低的功能/参数上验证程序的正确性。

  ② 单元测试必须由最熟悉代码的人来写。

  ③单元测试过后,机器状态保持不变。

  ④ 单元测试要快。

  ⑤ 独立性—测试的运行/通过/失败不依赖于别的测试。

  ⑥ 覆盖所有代码路径

  ⑦ 单元测试应该集成到自动化测试的框架中

  ⑧ 单元测试必须和产品代码一起保存和维护

  性能分析往往是开发人员容易忽视的步骤,这也是为什么我们不停做性能优化的原因。

  个人开发流程要着眼的是整个软件开发的流程,输出高质量的产品,需要从个人开发流程上去找bug,然后不断修正,工程师才会成长,产品质量才会不断提高。

  第三章《软件工程师的成长》,旨在个人能力的衡量与发展。 

  软件系统的绝大部分模块都是由个人开发或维护的,这些单个的成员在团队中的流程,以开发人员为例,流程如下:

  1、通过交流、实验、快速原型等方法,理解问题、需求或任务。

  2、提出多种解决办法并估计工作量。

  3、其中包括寻找以前的解决方案,因为很多工作是重复性的。

  4、与相关角色交流解决问题的提案,决定一个可行的方案。

  5、执行,把想法变成实际中能工作的代码,同时验证方案的可行性和其他特性。

  6、和团队的其他角色合作,在测试环境中测试实现方案,修复bug,如果此方案有严重的问题,那么就考虑其他方案。

  7、在解决方案发布出去之后,对结果负责每个人的工作质量直接影响最终软件的质量。

  软件开发的工作量和质量的衡量标准,无非就是:项目/任务有多大?花了多少时间?质量如何?交付的代码中有多少缺陷?是否按时交付?

  而对于交付这个定义,还有以下两种情况:

  1、在代码完成时,交付给测试人员的软件。

  2、最终发布时,交付给顾客可以用缺陷的数量来除以项目的大小。

  初级软件工程师成长阶段,需要掌握有以下几点:

  1、积累软件开发相关的知识,提升技术技能。

  2、积累问题领域的知识和经验。

  3、对通用的软件设计思想和软件工程思想的理解。

  4、提升职业技能。

  5、实际成果。

  我的感受:

  我们作为软件工程系的一名学生,要努力向这个方向发展,从而为以后成为一名多方面尽相完善的工程师打下坚实的专业基础。

posted @ 2018-01-01 11:11  我命倾尘  阅读(184)  评论(0编辑  收藏  举报