《人月神话》读书笔记 PB16110698 第七周(~4.19)
每逢读书笔记上交作业时刻,班级blog页面上总能看到《人月神话》相关的读书笔记,本次软工课邓老师推荐的第一篇读书笔记也是写的《人月神话》,算是对它“耳濡目染”了。本周,我终于抽空读了这本书,感觉确实名不虚传。以下,我将从几方面谈谈我的感想。
一、焦油坑与银弹
书中将大型项目形象地比作焦油坑,开发者往往在巨大的项目里遇到纷繁复杂的问题,并在其中越陷越深,难以掌握全貌和本质。在我看来,软件的开发确实存在其固有问题,在一个开发团队开始挖坑时,由于思路的些许偏差、交流和认知水平的些许欠缺或分歧,都会为将来项目的混杂、纠结埋下伏笔。在本次结对作业和单人作业中,我仅仅写了数百行代码,就已经面临这样的“焦油坑”问题:陷于细节,难以掌握整体开发思路。在写某个具体功能的函数时,我时常需要上下拉动滑条,阅读之前写的更高层次或更低层次的函数,以尽量保证其功能符合预期。有时一疏忽,就会把已经在其他函数中实现的某功能在这一函数中添加,导致多次处理、结果血崩。而大型项目的开发中,代码量是我的简单工程的数千数万倍,通过浏览相关函数来保证不出bug显然是非常困难的,加上不同开发人员之间理解、思路的差异,隐含的问题就会越来越多,最终形成“焦油坑”。避免这样的焦油坑的办法,据我所知有单元测试以保障代码层面正确性、每日立会以保障成员交流协调等,总而言之,防患于未然,时刻警惕才能避免项目变成一团乱麻。
而银弹,则出自于另一个比喻:软件开发如同狼人,银弹便是解决狼人的杀手锏,能大大提高软件的开发效率。作者认为这样的银弹并不存在且未来一段时间内不会出现。而在我看来,作者在书中已经提供了很多种“弹”,虽然没有“银弹”那么行之有效,但也能极大地降低“狼人”的威胁。比如勤于交流、统一设计、编码规范等等。在结对作业中,我们定下的编码规范是默认VS自带的缩进风格与编码风格,大括号不换行,算是非常粗糙简陋的规范,但总比没有要好。交流方面,我们几乎每次编程都约在一起,保证相互之间都能清晰掌握整体思路和每个函数的功能。通过这些方式,我们在小小的范围内还算顺利地避免了作者提到的诸多大坑。而对于需要多人协作的团队项目,这样的沟通交流需要的时间成本会几何倍数增加,效果也会变差,如何平衡效率与团队交流、团队规范,是一门永恒的课题。总而言之,虽然“包治百病”的银弹短期内难以实现,但“铅弹”“铁弹”之流已经普及开来,用好子弹对抗“狼人”,是每个团队必须做好的工作。
二、人的作用与时间进度
书中反复强调了人在软件工程中的作用。人,包括队伍结构、人手安排等。作者着力推荐了“外科手术团队”和“贵族式系统设计”,简单来说就是对于小项目,团队应当“小型、精干”;对于大项目,团队应该设定“小型、精干”的总设计组。这是因为精英程序员的效率远高于一般程序员,在他们的引领下才能有效率地实现项目。在我看来,这样的举措是比较科学的,在我们的团队作业开发中,比较有经验、知识面广的同学负责团队整体的设计和引领,具体功能实现交给其他同学完成,“小而精”的统一开发设计可以减少很多不必要的讨论和交流时间,更高效地完成任务。同时,我们保底每周开会一次,确保任务的推进顺利和组员之间的交流,避免闭门造车、自成一派等不和谐现象。
时间进度则直接关系到项目的完成度和对组员的推动力。好的时间进度安排能让项目顺利进行、如期交货,也能不断push团队成员完成任务;不够好的时间进度安排轻则导致项目延期、成员消极怠工或揭竿起义,重则导致项目流产、团队分崩离析。在结对作业中,我们没有设置非常明确的时间进度,常常走一步看一步,好在项目工程量很小,这样做也没有出大BUG,最终还是如期完成了,但较大项目里若缺乏总体时间规划,往往只能走向失败。需要指出的是,此次作业老师险些安排同学们重写测评,给了同学们过大的push力,结果同学们纷纷反对,最终改为比较适当的收获总结作业。我认为合适的时间安排非常必要,不但要考虑工程进度,还要联系团队成员的实际情况,进行人性化调配。倘若只顾push,甚至要求成员顶着学业、考试压力仍然“出货”,往往只能适得其反。
总而言之,《人月神话》一书包含了软件开发中可能遇到的种种情况,蕴含着许多令人称道的精髓思想,读之受益匪浅。
《人月神话》读书笔记 PB16110698 第七周(~4.19)的更多相关文章
- 《移山之道》第十一章:两人合作 读书笔记 PB16110698 第六周(~4.15)
本周在考虑阅读材料时,我翻阅了<移山之道>,正好看到这一章:两人合作,心想:正好,我们正值结对作业的紧要关头,书中两人合作的宝贵经验和教诲应当对我们有很大帮助.于是,我开始一边在ddl苦 ...
- 《软件调试修炼之道》Part 1(CH1~5)读书笔记 PB16110698 第八周(~4.26)
编程中,调试几乎是必不可少的,一劳永逸.一次完成预想功能而完全不出bug的情况凤毛麟角,出现bug→调试→再出现bug→再调试……基本是软件工程中的常态.可以说,软件调试是每个coder的必修课,而& ...
- 《创新者》读书笔记 PB16110698 第五周(~4.5)
本周我阅读了某同学推荐的<创新者>,这本书实际上是两个世纪以来信息技术的编年史,从巴贝奇的差分机到如今互联网时代的超级计算机,作者通过各个时代里一位位杰出的创新者,将计算机诞生.发展.崛起 ...
- IT项目管理——《人月神话》读后感
这也许是和候红老师的最后的几节课了吧,侯老师是一个很有思想深度,很关心同学的好老师. 一开学就布置了阅读<人月神话>的作业,说实话,我没有看,以我的速度可能2.3个小时就看完了,但是我觉得 ...
- 第八周读书笔记(人月神话X月亮与六便士)——到底什么才是一个程序员的自我修养?
写了这么久的读书笔记,涉及到问题大多是一些如何把软件工程做好,如何把自己的职业生涯做好.但总感觉逻辑链上缺了一环,亦即:我们为什么要把软件工程做好,我们成为一名优秀的职业生涯的意义到底在于什么?我觉得 ...
- 读书笔记第三周 人月神话 刘鼎乾 PB16070837
读书笔记第三周:人月神话 这本书主要讲述了如何管理一个软件开发团队的问题,其中如何提高团队的效率可以说是本书的重点之一了.感觉这本书地中文版翻译得比较晦涩,很多表达比较模糊,看起来有些吃力,因此下 ...
- 《Practices of an Agile Developer:Woring in the Real World》读书笔记 PB16110698(~3.22)第三周
<Practices of an Agile Developer:Woring in the Real World>读书笔记 本周我阅读了<高效程序员的45个习惯:敏捷开发修炼之道 ...
- 软件项目发展历史<人月神话>这本书好
几乎是计算机软件开发的发展历史 人月神话,增加人手并不一定能提高开发速度. 原因在于,有些任务是无法分解的,存在先后顺序.无法同步进行. 增加人手,增加的是沟通成本,相互牵制.可以分解的任务就 ...
- <<人月神话>>阅读体会(一)
第一次听说人月神话还是在大一上学期的导论课那会儿,那会儿好像就已经确定了自己要学软件,于是就去问王建民老师能不能给我推荐几本软件工程方面的书,我想要提前自己学学,以为老师会给我推荐一些某种语言类的学习 ...
随机推荐
- 20. Jmeter抓包之APP请求
APP测试过程中我们经常需要抓包,通常我们使用fiddler或者Charles.但是jmeter也可以抓包,而且非常好用,闲话不多说,下面进入正题. 步骤: 1.选择测试计划,添加线程组 2.选择工作 ...
- svn 类似.gitignore功能实现
svn propset -R svn:ignore -F .cvsignore .
- 剑指offer——43数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值.我们 ...
- nginx基本配置各个参数说明
#运行用户user nobody;#启动进程,通常设置成和cpu的数量相等worker_processes 1; #全局错误日志及PID文件#error_log logs/error.log;#err ...
- java-day24
JDBC控制事务: 1.事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败. 2. 操作: 1. 开启事务 2. 提交事 ...
- 案例2:tab栏切换
<style> body,ul,li,div{margin:0;padding: 0;} ul{font-size: 0px;} .tab_list{ border: 1px gray s ...
- 支付宝支付接口-运行支付宝demo
运行deme 提供了 支付 查询 退款 交易关闭几个简单的接口demo 下载 https://docs.open.alipay.com/270/106291/ 转为mave项目 1.创建一个空的ma ...
- 爬虫那些事儿--Http返回码
由于爬虫的抓取也是使用http协议交互.因此需要了解Http的各种返回码所代表的意义,才能判断爬虫的执行结果. 返回码如下: 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部 ...
- IDEA中@Autowired 注解报错~图文
- 【JZOJ6409】困难的图论
description 给定由 n 个点 m 条边组成的无向连通图,保证没有重边和自环. 你需要找出所有边,满足这些边恰好存在于一个简单环中.一个环被称为简单环,当且仅当它包含的所有点都只在这个环中被 ...