每逢读书笔记上交作业时刻,班级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. html01. <!DOCTYPE html>

    解释 在HTML文档初,往往会有这么一句话<!DOCTYPE html>,它是html5标准网页声明,全称为Document Type HyperText Mark-up Language ...

  2. 作用域 {}代码块 const修饰符 引用

    简单分为:全局作用域.局部作用域.语句作用域 如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::” ::aver=20 #include<iostream> usin ...

  3. JAVA单元测试的用法和要点(入门篇)

    一.单元测试的目的?      单元测试是编写测试代码,用以检测特定的.明确的.细颗粒的功能!  严格来说,单元测试只针对功能点进行测试,不包括对业务流程正确性的测试.现在一般公司都会进行业务流程的测 ...

  4. OpenFileDialog 打开图片存储到电脑本地上

    替换图片 private void btnSkin_Click(object sender, RoutedEventArgs e) { string fName; OpenFileDialog ofd ...

  5. USACO2012 Moo /// 模拟 oj21548

    大致题意: 递归地描述序列:设S(0)为3个字符的序列“mo o”.然后在较长的序列小号(ķ)通过取序列的拷贝获得小号(ķ -1),则“摩... O”与ķ 2 O公司,然后该序列的另一个拷贝小号(ķ  ...

  6. Size Assert

    判断返回内容的大小

  7. 搭建WordPress博客程序库

    搭建WordPress博客程序库 wordpress简介 wordpress是一套利用PHP语言和Mysql数据库开发的开源免费的Blog(博客,网站)程序,用户可以在支持PHP环境和Mysql数据库 ...

  8. vue与webpack

    由于最近在vue-cli生成的webpack模板项目的基础上写一个小东西,开发过程中需要改动到build和config里面一些相关的配置,所以刚好趁此机会将所有配置文件看一遍,理一理思路,也便于以后修 ...

  9. ARM 汇编指 跳转指令 b , bl

    1. 跳转指令 [ b ] [ bl ]   指令格式:<opcode><cond> <address> 不带返回的跳转指令:b mov r0, #0x12 mov ...

  10. js用正则判断身份证号码

    在用户注册或修改信息时会用到正则表达式判断身份证号,直接调用该函数即可 //判断身份证号码 function idCardFn(idCard){ }(||)?\d{}([-]|[])([-]|[]\d ...