《构建之法》(第四、十七章)读书笔记

一、关于代码规范

1.1

因为软件开发多数是一个团队的事情,所以需要格外注意代码规范。我们的代码日后通常是需要去维护的,是需要去给别人看的。但是,不同的编程语言对代码规范的要求是否相同呢?

因为在工作室学的是前端语言,我对前端的代码规范比较了解。

有一位博主总结的前端代码规范,个人感觉非常好:https://www.cnblogs.com/qinyi173/p/7150644.html

1.2

书中(P63)页提到 ”匈牙利命名法“  ,并说到:

”在这类语言中,前缀就不是很必要,匈牙利命名法并不适用。微软的.NET框架就不主张用这样的命名法则。“

这句话说明不同的语言、不同的框架,所适合的命名法则是不同的。那我们常用的命名法则有哪些呢?

我上网搜索了一下这个问题,找到了一篇博客:https://www.cnblogs.com/Offie/p/5021368.html

这篇博客中提到了3种命名方法:驼峰命名法、帕斯卡命名法、匈牙利命名法。

以下,简单总结一下这3种命名法的特点:

驼峰命名法:函数名中的每一个逻辑断点都由一个大写字母来标记。在许多新的函数库和Microsoft Windows这样的环境中,它使用得当相多。

帕斯卡命名法:与骆驼命名法类似只不过骆驼命名法是首字母小写,而帕斯卡命名法是首字母大写。

匈牙利命名法:通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。顺序是先m_(成员变量), 再指针,再简单数据类型,再其它。

以下是3种命名法的举例:

MyData 就是一个帕斯卡命名的示例
而myData是一个骆驼命名法,它第一个单词的第一个字母小写,后面的单词首字母大写,看起来像一个骆驼
而iMyData是一个匈牙利命名法,它的小写的i说明了它的型态,后面的和帕斯卡命名相同,指示了该变量的用途.

二、关于代码复审

之前我们了解了单元测试,是确保代码质量的一种方法。乍一看代码复审,好像功能与测试差不多,但其实这是两件不一样的事情。

书中(P72)说到:

“要注意避免不必要的繁文缛节,我们做代码复审的目的是为了减少错误的发生,而不是找一个人来对着你的代码点头。一些简单的修改不是非得要一个复审者来走一遍形式。在项目开发的早期斤斤计较于一些细枝末节(例如:帮助文件里的拼写错误,数据文件格式不够最优化等)也是于大局无补的,但是,这些问题并不是不用处理了,我们可以建立一些优先级较低的工作项来跟踪处理。”

我觉得,书中这一段说得很好,代码复审的过程就如同我们解决问题的步骤一样。

做一件事情,我们要不时回过头去查漏补缺一番,在查漏补缺的过程中,我们要给发现的问题确定优先级,从而判断这个问题是否亟待解决。

所以,我想知道,在代码复审的过程中,哪些问题是属于优先级低的问题?

我查了一些相关的博客,主要有以下观点:

1:Code review 不应该承担发现代码错误的职责。

Code Review主要是审核代码的质量,如可读性,可维护性,以及程序的逻辑和对需求和设计的实现。

代码中的bug和错误应该由单元测试,功能测试,性能测试,回归测试来保证的(其中主要是单元测试,因为那是最接近Bug,也是Bug没有扩散的地方)

2:Code review 不应该成为保证代码风格和编码标准的手段。

编码风格和代码规范都属于死的东西,每个程序员在把自己的代码提交团队Review的时候,代码就应该是符合规范的,这是默认值。

属于每个人自己的事情,不应该交由团队来完成,否则只会浪费大家本来就不够的时间。

而代码复审需要注意的问题在书中(P73)的核查表中已有详细说明。

三、关于敏捷开发

书中(P75)提到:

“结对编程随着敏捷思潮的兴起而广为人知,然而这种实践早已有之。”

什么是敏捷思潮?这是怎样的一种开发模式?

我在百度百科上找到了详细的关于敏捷开发的介绍,并仔细地阅读了。

其中,敏捷开发的宣言原则叙述得既有艺术性又简洁明了,故摘录如下:

“最重要的是通过尽早和不断交付有价值的软件满足客户需要。

 我们欢迎需求的变化,即使在开发后期。敏捷过程能够驾驭变化,保持客户的竞争优势。

 经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。

 业务人员和开发者应该在整个项目过程中始终朝夕在一起工作。

 围绕斗志高昂的人进行软件开发,给开发者提供适宜的环境,满足他们的需要,并相信他们能够完成任务。

 在开发小组中最有效率也最有效果的信息传达方式是面对面的交谈。

 以工作的软件是进度的主要度量标准。

 敏捷过程提倡可持续开发。出资人、开发人员和用户应该总是维持不变的节奏。

 对卓越技术与良好设计的不断追求将有助于提高敏捷性。

 简单——尽可能减少工作量的艺术至关重要。

 最好的架构、需求和设计都源自自我组织的团队。

 每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。“

但是,看了书中关于结对编程的内容,仍然有一些疑问。书中也提到,程序各方面的质量取决于一对程序员中各方面水平较高的那一位(P76)。按这样的逻辑,理应是两个互补的人结对编程会提高效率,因为每个人都有各自擅长的部分,代码中各部分是取决于水平高的一方,代码质量自然提升。但是两个互补的人因为不了解对方擅长的部分,一个作为“驾驶员”的时候,另一个并不能胜任“领航员”的角色,这样是否失去了结对编程的意义?因为他们完全可以分开完成各自擅长的部分。或者说,结对编程对两个人的要求并不是互补,而是水平相当、擅长技术相似的两个人?

四、关于牛仔式编程

名词解释:“牛仔式编程”,这个词我们用来描述那种直接在生产环境服务器上修改代码的行为。“戴着粉红色的大檐帽”表示你要严格的检查,谨慎的决定。

书本在第77页提到 “牛仔式编程” ,这是一种不提倡的行为。

五、关于提意见

书中(P81)中提到的4种影响他人的方式,分别是断言、桥梁、说服、吸引。

”没有绝对正确或错误的方法,只有合适或不合适的方法。“

书中讲的是我们要根据不同的情形,选择说服别人的方法,温和的方法有助于彼此的理解,但遇到紧急情况就要态度坚决。

我觉得,这4种方法是否不仅可以根据不同的情形选择使用,还可以根据不同的用户性格选择说服的方式,使用户与开发者的目标达成一致呢?

在 “如何正确地给予反馈” 这一节里,我学习到,你批评别人的不同层次会给别人带去不同程度的影响。

应该要这样做,不论你多么生气,都不要评论别人的本质和固有属性,尤其是对待你的亲人和朋友,永远都别说出最伤人的那句话。

六、关于猪、鸡和鹦鹉

书中大致是这么为3种动物的贡献排序的(如果我没理解错的话):猪 > 鸡 > 鹦鹉。

因为猪是 ”全身心投入“(Committed)、鸡是 “参与”(Involved)、鹦鹉是 “围观”(Bystander)。

但我觉得,这么说是不合理的。这3种动物的特长不一样,他们在团队中都贡献了自己擅长的部分。

比如在一个企业中,鹦鹉好比是市场推广,或者是领导人员,他们虽然不像一线程序员那样埋头苦干,但他们只要是全身心的为这个项目筹划,就是全力以赴的“猪”。

我们不能用做的事情类别去定义一个人的贡献度,企业需要分工,每个人在自己的岗位上全力以赴,才能完成项目,不是吗?

因为常看见软件行业的一些求职鄙视链,我觉得这是不好的。

由这个话题引申,我觉得对于我们本科生,应该尝试着去发现自己擅长的部分,为以后我们的职业定位做一个基础。

七、关于绩效管理

绩效管理确实是提升团队绩效、提升部门乃至企业效率的好方法。我觉得,我们应该学习绩效管理。但这个不适合在我们的组队作业中实行。

首先,绩效管理其实是有淘汰制的,他在企业中是用利益驱动的。但我们的团队成员是我们的同学,我们的目的是互相帮助、互相学习,我们可以在讨论的情况下确定每个人的贡献比,因为这是有目共睹的,而不是采用淘汰制。

其次,取得好成绩是团队共赢的模式,而内部竞争会导致内部损耗。企业由于人数多,每个人之间的联结小,共同利益少,因此需要个人为单位的竞争。但我们的学生团队本就有共同目标,应该 ”一致对外“、一起努力才对。

最后,在百度百科中有关于绩效管理的这句话:

“绩效管理体现着“以人为本”的思想,在绩效管理的各个环节中都需要管理者和员工的共同参与。”

绩效管理一定需要一个管理者,那在我们的团队中如何确定这个管理者呢?不管是对推举形式上,还是管理者的个人素质都有很高的要求吧。

总之,我觉得绩效管理应该用于较多人数的团体,因为这个管理做不好是会带来矛盾的,而小团队的内部崩坏无疑于是灭亡。

八、last but not least:职业道德

这里引用一篇关于软件工程师职业道德规范的博文:https://blog.csdn.net/dipolar/article/details/61413999

我们学习的计算机这门技术,有很大的功用。如果被居心不良的人随意使用,后果会很严重。所以,职业道德是第一位的。

各种职业道德的文件都表明:计算机专业人员应当以公众利益为最高目标

原文地址:https://www.cnblogs.com/aspirinone/p/8658302.html

时间: 2024-12-19 10:04:42

《构建之法》(第四、十七章)读书笔记的相关文章

《构建之法》第四&十七章读书笔记

 <构建之法>第四&十七章读书笔记 一.         前言 再次阅读<构建之法>,愈发被其中生动有趣的举例吸引.作为一本给予软件工程学生的书籍,其不以枯燥的理论知识为核心,而是基于对知识和方法的引导.本次研读的这两章内容主要涉及了代码规范,两人结对与多人合作的团队方面等相关知识,从其中逐渐明白与人相处作业等方面的技巧与艺术.以下是我对这两章节的思考与疑惑. 二.        第四章<两人合作>. 本章主要涉及代码规范,极限编程,结对编程,两人合作不同阶段,

《构建之法》第13-17章读书笔记

第13章: 软件测试有许多种测试方法,有单元测试.代码覆盖率测试.构建验证测试.验收测试.回归测试.伙伴测试.效能测试.等等.还要写测试设计说明书,告诉别人如何测试,测试报告说明书该怎么写呢? 第14章: 质量保障软件的开发过程有三个主要的特性“好”“快”“便宜”.通俗的软件在功能.成本.时间三方面满足利益相关的需求.理解是测试的角色要独立出来么?独立出来的测试角色怎么才能发挥作用? 第15章: 稳定和发布阶段.一个里程碑结束了,团队接下来要干什么?产品怎么才能做得更好? 第16章: IT行业的

《构建之法》第三章读书笔记

看到第三章,发现软件工程开发一直强调团队的重要性,但同时,每个人也发挥着重要的作用,在一个开发团队中,每个人都是一个环,环环相扣才能实现软件的开发.在大部分成功的软件团队模型中各个角色考虑问题的出发点是有区别的.不同意见的冲突在所难免,一个好的团队流程能把冲突的积极方面(各自尽力把自己的工作做好,说服别人)释放出来,避免消极方面(因为冲突而产生的消极.抵触情绪等). 在团队中,IC需要做到:通过交流.实验.快速原型等方法,理解问题.需求或任务:提出多种解决办法并估计工作量:与相关角色交流解决问题

《构建之法》第五章读书笔记

第5章 团队和流程 一.非团队和团队 团队的共同特点: 1.团队有一致的集体目标,团队要一起完成这目标.一个团队的成员不一定要同时工作,例如接力跑. 2.团队成员有各自的分工,互相依赖合作,共同完成任务. 二.软件团队的模式 软件团队的模式最初是混沌的一窝蜂的形式:一群人开始写代码,希望能写出好软件.随着团队的成熟和环境的变化,团队模式会演变成下面几种模式之一. 1.主治医师模式:这样的软件团队中有首席程序员,他负责处理主要模块的设计和编码,其他成员从各种角度支持他的工作(后备程序员.系统管理员

构建之法4,17章读书笔记

一.前言 经过上一次的阅读经验,这一次再阅读起来便顺畅得多了,顾名思义,这两章就是在讲我们如何在项目开发合作过程中更加顺利,软件工程既然有着"工程"二字,那就说明它并不是一个人的事情,软件工程离不开团队合作,而团队合作的最简形态就是两人合作. 二.分析与问题 引用:               既然代码复审能发现这么多问题,有这么好的效果,如果我们每时每刻都处在代码复审的状态,那不是很好么?事实上,极限编程(Extreme Programming)正是这一思想的体现--为什么不把一些卓

《构建之法》第六章读书笔记

一.敏捷的流程简介 敏捷开发的原则是: 1.尽早并持续地交付有价值的软件以满足顾客需求 2.敏捷流程欢迎需求的变化,并利用这种变化来提高用户的竞争优势 3.经常发布可用的软件,发布间隔可以从几周到几个月,能短则短 4.业务人员和开发人员在项目开发过程中应该每天共同工作 5.以有进取心的人为项目核心,充分支持信任他们 6.无论团队内外,面对面的交流始终是最有效的沟通方式 7.可用的软件是衡量项目进展的主要指标 8.敏捷流程应能保持可持续的发展.领导.团队和用户应该能按照目前的步调持续合作下去 9.

《构建之法》第十七章读后感

通过阅读<构建之法>第十七章,不能说对我造成了什么深远的影响,但是还是感触颇深: 第一,工作分配的重要性,说道工作分配,不得不说我们个小组的组长们,组长不仅仅是一个团队的领导者,更是这个团队的灵魂.它不仅需要了解随时掌握各组员的动向,更重要的是,他需要了解各组员的能力,然后根据个人的能力,然后再去非陪相应的任务,只要这样才能做到“物尽其用”,才能更好的完成我们的项目,有时甚者能更创造出以外的效果,达到更完美的状态.这不仅是组长的能力  其实其无时无刻也体现着我们这个小组的团结力和创造力.当初选

构建之法第十三~十七章阅读

不知不觉,<构建之法>已经读到了最后..... 十三章:软件测试 本书里面写了好多软件测试的方法,我该怎么选取呢 十四章:质量保障 质量保障可以通过用户的反馈来体现吗 十五章: 稳定和发布阶段 软件发布以后,可以怎样的情况来更新维护 十六章:IT行业的创新 我觉得创新是在你已经对本行业已经有一定的了解,但是我们好多基本的都还没掌握,该怎么创新呢 十七章:绩效和职业道德 在出去工作以后,公司都是以绩效和职业道德来恒定员工的吗

《Linux内核设计与分析》第十七章读书笔记

设备与模块 关于设备驱动和设备管理,四种内核成分. 设备类型:在所有Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支持面向对象的简单操作,还支持维护对象之间的父子关系. sysfs :表示系统中设备树的一个文件系统. 17 .1 设备类型 在Linux 以及所有Unix 系统中,设备被分为以下三种类型 块设备 字符设备 网络设备 块设备通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同

《构建之法:现代软件工程》读书笔记

第一章 软件工程就是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.包括软件需求分析.软件设计.软件构建.软件测试和软件维护几个过程.涉及计算机科学.计算机工程.管理学.数学.项目管理学.质量管理.软件人体工学.系统工程.工业设计和用户界面设计等学科.不只是软件工程,其他工程(如机械工程)也可分为需求分析.设计.构建.测试和维护这几个阶段. 对其中的软件开发的不同阶段和航空产业的比较感觉挺有趣的.从玩具阶段的纸飞机到业余爱好者阶段的气球再到探索阶段的莱特兄弟,最后成熟产业阶段