每逢读书笔记上交作业时刻,班级blog页面上总能看到《人月神话》相关的读书笔记,本次软工课邓老师推荐的第一篇读书笔记也是写的《人月神话》,算是对它“耳濡目染”了。本周,我终于抽空读了这本书,感觉确实名不虚传。以下,我将从几方面谈谈我的感想。

一、焦油坑与银弹

  书中将大型项目形象地比作焦油坑,开发者往往在巨大的项目里遇到纷繁复杂的问题,并在其中越陷越深,难以掌握全貌和本质。在我看来,软件的开发确实存在其固有问题,在一个开发团队开始挖坑时,由于思路的些许偏差、交流和认知水平的些许欠缺或分歧,都会为将来项目的混杂、纠结埋下伏笔。在本次结对作业和单人作业中,我仅仅写了数百行代码,就已经面临这样的“焦油坑”问题:陷于细节,难以掌握整体开发思路。在写某个具体功能的函数时,我时常需要上下拉动滑条,阅读之前写的更高层次或更低层次的函数,以尽量保证其功能符合预期。有时一疏忽,就会把已经在其他函数中实现的某功能在这一函数中添加,导致多次处理、结果血崩。而大型项目的开发中,代码量是我的简单工程的数千数万倍,通过浏览相关函数来保证不出bug显然是非常困难的,加上不同开发人员之间理解、思路的差异,隐含的问题就会越来越多,最终形成“焦油坑”。避免这样的焦油坑的办法,据我所知有单元测试以保障代码层面正确性、每日立会以保障成员交流协调等,总而言之,防患于未然,时刻警惕才能避免项目变成一团乱麻。

  而银弹,则出自于另一个比喻:软件开发如同狼人,银弹便是解决狼人的杀手锏,能大大提高软件的开发效率。作者认为这样的银弹并不存在且未来一段时间内不会出现。而在我看来,作者在书中已经提供了很多种“弹”,虽然没有“银弹”那么行之有效,但也能极大地降低“狼人”的威胁。比如勤于交流、统一设计、编码规范等等。在结对作业中,我们定下的编码规范是默认VS自带的缩进风格与编码风格,大括号不换行,算是非常粗糙简陋的规范,但总比没有要好。交流方面,我们几乎每次编程都约在一起,保证相互之间都能清晰掌握整体思路和每个函数的功能。通过这些方式,我们在小小的范围内还算顺利地避免了作者提到的诸多大坑。而对于需要多人协作的团队项目,这样的沟通交流需要的时间成本会几何倍数增加,效果也会变差,如何平衡效率与团队交流、团队规范,是一门永恒的课题。总而言之,虽然“包治百病”的银弹短期内难以实现,但“铅弹”“铁弹”之流已经普及开来,用好子弹对抗“狼人”,是每个团队必须做好的工作。

二、人的作用与时间进度

  书中反复强调了人在软件工程中的作用。人,包括队伍结构、人手安排等。作者着力推荐了“外科手术团队”和“贵族式系统设计”,简单来说就是对于小项目,团队应当“小型、精干”;对于大项目,团队应该设定“小型、精干”的总设计组。这是因为精英程序员的效率远高于一般程序员,在他们的引领下才能有效率地实现项目。在我看来,这样的举措是比较科学的,在我们的团队作业开发中,比较有经验、知识面广的同学负责团队整体的设计和引领,具体功能实现交给其他同学完成,“小而精”的统一开发设计可以减少很多不必要的讨论和交流时间,更高效地完成任务。同时,我们保底每周开会一次,确保任务的推进顺利和组员之间的交流,避免闭门造车、自成一派等不和谐现象。

  时间进度则直接关系到项目的完成度和对组员的推动力。好的时间进度安排能让项目顺利进行、如期交货,也能不断push团队成员完成任务;不够好的时间进度安排轻则导致项目延期、成员消极怠工或揭竿起义,重则导致项目流产、团队分崩离析。在结对作业中,我们没有设置非常明确的时间进度,常常走一步看一步,好在项目工程量很小,这样做也没有出大BUG,最终还是如期完成了,但较大项目里若缺乏总体时间规划,往往只能走向失败。需要指出的是,此次作业老师险些安排同学们重写测评,给了同学们过大的push力,结果同学们纷纷反对,最终改为比较适当的收获总结作业。我认为合适的时间安排非常必要,不但要考虑工程进度,还要联系团队成员的实际情况,进行人性化调配。倘若只顾push,甚至要求成员顶着学业、考试压力仍然“出货”,往往只能适得其反。

  总而言之,《人月神话》一书包含了软件开发中可能遇到的种种情况,蕴含着许多令人称道的精髓思想,读之受益匪浅。

《人月神话》读书笔记 PB16110698 第七周(~4.19)的更多相关文章

  1. 《移山之道》第十一章:两人合作 读书笔记 PB16110698 第六周(~4.15)

     本周在考虑阅读材料时,我翻阅了<移山之道>,正好看到这一章:两人合作,心想:正好,我们正值结对作业的紧要关头,书中两人合作的宝贵经验和教诲应当对我们有很大帮助.于是,我开始一边在ddl苦 ...

  2. 《软件调试修炼之道》Part 1(CH1~5)读书笔记 PB16110698 第八周(~4.26)

    编程中,调试几乎是必不可少的,一劳永逸.一次完成预想功能而完全不出bug的情况凤毛麟角,出现bug→调试→再出现bug→再调试……基本是软件工程中的常态.可以说,软件调试是每个coder的必修课,而& ...

  3. 《创新者》读书笔记 PB16110698 第五周(~4.5)

    本周我阅读了某同学推荐的<创新者>,这本书实际上是两个世纪以来信息技术的编年史,从巴贝奇的差分机到如今互联网时代的超级计算机,作者通过各个时代里一位位杰出的创新者,将计算机诞生.发展.崛起 ...

  4. IT项目管理——《人月神话》读后感

    这也许是和候红老师的最后的几节课了吧,侯老师是一个很有思想深度,很关心同学的好老师. 一开学就布置了阅读<人月神话>的作业,说实话,我没有看,以我的速度可能2.3个小时就看完了,但是我觉得 ...

  5. 第八周读书笔记(人月神话X月亮与六便士)——到底什么才是一个程序员的自我修养?

    写了这么久的读书笔记,涉及到问题大多是一些如何把软件工程做好,如何把自己的职业生涯做好.但总感觉逻辑链上缺了一环,亦即:我们为什么要把软件工程做好,我们成为一名优秀的职业生涯的意义到底在于什么?我觉得 ...

  6. 读书笔记第三周 人月神话 刘鼎乾 PB16070837

    读书笔记第三周:人月神话   这本书主要讲述了如何管理一个软件开发团队的问题,其中如何提高团队的效率可以说是本书的重点之一了.感觉这本书地中文版翻译得比较晦涩,很多表达比较模糊,看起来有些吃力,因此下 ...

  7. 《Practices of an Agile Developer:Woring in the Real World》读书笔记 PB16110698(~3.22)第三周

    <Practices of an Agile Developer:Woring in the Real World>读书笔记  本周我阅读了<高效程序员的45个习惯:敏捷开发修炼之道 ...

  8. 软件项目发展历史<人月神话>这本书好

    几乎是计算机软件开发的发展历史     人月神话,增加人手并不一定能提高开发速度. 原因在于,有些任务是无法分解的,存在先后顺序.无法同步进行. 增加人手,增加的是沟通成本,相互牵制.可以分解的任务就 ...

  9. <<人月神话>>阅读体会(一)

    第一次听说人月神话还是在大一上学期的导论课那会儿,那会儿好像就已经确定了自己要学软件,于是就去问王建民老师能不能给我推荐几本软件工程方面的书,我想要提前自己学学,以为老师会给我推荐一些某种语言类的学习 ...

随机推荐

  1. Linux关闭端口

    1.  查看哪些端口被占用 $ netstat -anp | grep 2042 tcp 0 0 192.168.56.1:2042 0.0.0.0:* LISTEN 8974/python 2. 删 ...

  2. CH1201 最大子序和 (单调队列)

    题目链接: AcWing 牛客 题目描述 输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7 当 ...

  3. ALSA 更改默认声卡

    用 aplay -l 看一下各声卡的配置信息 创建 /etc/asound.conf,根据 aplay -l  的输入,选择需要的声卡信息,按如下格式添入,即可更改默认声卡 defaults.pcm. ...

  4. 详解Telecom

    学习目标: 掌握Telecom入口和分析方法 总结和演进Telecom交互模型 掌握Listener消息回调机制 学习CallsManager 为什么选择Telecom分析? 这是由于在Android ...

  5. (Struts2学习系列五)Struts2默认action

    当我们访问项目下一个不存在的Action的时候,页面就会报错,404找不到资源,这样对用户来说是非常不友好的,所以我们设置一个默认的Action,当找不到对应Action的时候,就会跳转到默认Acti ...

  6. python操作redis数据

    一.环境安装 1.redispy安装 (automatic) C:\Users\Administrator>pip install redis 2.检测是否安装成功 (automatic) C: ...

  7. html中没有不能随意嵌套的标签

    在HTML里有几个元素是比较特别的:<ul>.<ol>.<dl>.<table>,它们的子一层必须是指定元素,<ul>.<ol> ...

  8. Magento获取当前页面URL地址

    Magento获取当前页面URL地址 http://www.sunhaibing.com/?p=1260 在Magento中,可以通过core/url助手类中的getCurrentUrl()方法获取当 ...

  9. 在DELPHI中显示GIF动画

    想没想过在DELPHI中显示GIF动画?Delphi的用户是非常幸运的,因为有免费控件可以使用.最著名的控件是Anders Melander编写的TGifImage,并提供完整的源程序.它原来的主页是 ...

  10. NX二次开发-UFUN工程图表格注释获取某一行的tag函数UF_TABNOT_ask_nth_row

    NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...