《人月神话》读书笔记

前言

《人月神话》是一本永不过时的经典,尽管写在四十多年前,然而书中的观点和方法论,放到如今的软件开发中仍然适用,甚至有一些可以作为今后软件开发的指导。笔者拜读完《人月神话》这本软件开发届的神品之作,不禁感慨其思想博大精深,字字真言,精读之有不尽的趣味,因此作读书笔记一篇,记录引起笔者共鸣的佳句与笔者的思考。


焦油坑

编程为什么有趣?作为回报,它的从业者期望得到什么样的快乐
首先,这种快乐是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到快乐一样,成年人喜欢创建事物,特别是自己进行设计。我想这种快乐是上帝创造世界的折射,一种呈现在每片独特的、崭新的树叶和雪花上的喜悦。
......
编程的快乐在于它不仅满足了我们内心对于创造的渴望,而且还唤醒了每个人内心的情感。

相信绝大多数同学在高考结束后,填报志愿时都有纠结过专业的选择。今后要做什么工作,从事什么行业,笔者在茫茫专业中选择了软件工程,当时觉得软件开发是一件相当具有创造性的活动,能够通过编程把脑海中的想法加以实现,能够通过编程解决生活中的实际问题,能够通过编程完善一些APP的功能......

经过大学期间紧凑的软件开发技术训练,以及课外项目实践,笔者编程能力和软件开发能力有了一定的提升,而自己对软件开发的乐趣也发生了一些变化,不再满足于单纯的创造带给笔者的乐趣,屏幕上输出的“Hello, world!”已经不能让笔者眼前一亮,而是追求将高复杂度的模块组件拼装在一起,形成完整的系统。例如在某次课程作业中,为了满足多种非功能需求,需要对整体系统进行详细的架构设计,并应用多种未接触过的技术和框架,尽管开发过程充满了挑战,bug频出,接口易变,但是在克服完重重障碍后,得到一个高可用、高性能的完整系统,完成时的成就感是无可比拟的。

本科毕业阶段,笔者以实习生的身份加入到腾讯公司,参加企业级别的真实系统开发,体验到真实生产环境与学校内实验环境的巨大差别,企业团队的规模往往比学校课程作业团队的规模大的多,10-15人的规模较为常见,这种情况下进行软件开发的流程与小规模团队大相径庭,首先团队需要频繁的进行会议交流,确定开发进度、商讨下阶段开发计划、解决问题冲突等等,因此分配给系统计划和设计的时间大大增加了,此外还需要协同编写各种文档和说明,用于规范需求、架构、接口等,虽然系统开发的复杂度高出了几个数量级,但是规范化后的团队合作给笔者带来了莫大的乐趣,团队中每个人都在制作零件,并根据严谨的接口定义,将这些零件有效地啮合在一起,所有的零件都以精妙的方式运行着,构成了企业级的真实系统,这种高度规范化的团队合作使笔者乐在其中。


人月神话

所有的编程人员都是乐观主义者: "一切都将运行良好"。
由于编程人员通过纯粹的思维活动来开发,我们期待在实现过程中不会遇到困难,但是我们的构思本身是有缺陷的,因此总会有bug。

对于编程人员的乐观主义,笔者深有体会。在完成课程作业时,经常会出现这么一个现象: 在只有大体思路,而没有做出清晰详细的设计方案时,就开始盲目的编程,写一段看一段,再进行大量的调试,得到最终方案,然而耗费的时间总是远远超过预计。因此笔者认为,不论是设计课程作业这种规模较小的程序,还是参与企业级开发的大规模程序,编程前的精细设计都是必须的,并且需要摒弃"一切都将运行良好"这种过于乐观的观念,并为编程后的测试工作预留充足的时间,不论是单元测试、集成测试还是系统测试。


贯彻执行

手册或者是书面规格说明,是一个非常必要的工具,仅有文档是不够的。手册是产品的外部规格说明,它描述和规定了用户所见的每一个细节;同样地,它也是结构师主要的工作产物。
修改的阶段话是很重要的 -- 在进度表上应该有带日期的版本信息。
手册的作者必须注意到自己的思路和语言,达到所需要的精确程度。

实习期间,编写文档和手册的时间不亚于编写代码的时间。不同开发阶段,不同职责的开发人员需要编写不同的文档手册,并作为团队开发的标准。笔者作为基础的编程开发成员,参与了下表中的 3. 和 4. 文档手册的编写,在需要与他人模块交互时,可以通过文档手册快速明确交互的方法和各种条件。

  1. 产品经理制订出需求文档
  2. 开发组长(1-2人)制作体系架构文档,UI设计组制作原型
  3. 系统详细设计,确定模块功能,进行接口定义,形成详细设计文档
  4. 实际开发过程中,编程人员制作功能说明概要设计,详细定义接口,例如接口输入和输出的格式和边界条件、各种异常处理、各种情况的测试用例等
  5. 开发完成,测试组制定测试流程,生成测试报告和文档
  6. 所有的文档更新时,都需要明确标注,进行版本控制,版本兼容等

未雨绸缪

唯一不变的就是变化本身
为变更设计系统,为变更计划组织架构
软件维护主要包含对设计缺陷的修复,软件变更通常包含了更多的新增功能

软件发布的越久,用户越多,用户提出的新需求也就更多,因此系统应当具备易拓展的特性。因此,在初始设计整个系统时,就应当把易扩展列入考虑范围内。

  1. 体系架构设计,比如设计网站架构时,针对100人同时在线的网站,可能无法处理10000人同时在线访问,那设计时应当如何进行负载均衡和集群设计
  2. 数据访问设计,当前的数据库可以做到读取KB-MB级别的数据,用户多了数据也多了,如何快速扩展成可以处理PB级别的数据
  3. 模块设计,Release Reuse Equivalency Principle (重用发布等价原则)和The Common ClosurePrinciple(共同封闭原则)作为面向对象开发中模块开发的重要原则,可以有效地将包组织成易扩展的形式
  4. 类设计,Single Responsibility Principle(单一职责原则)和The Open-Closed Principle (开闭原则)作为面向对象开发中类开发的重要原则,可以有效地将代码组织成易扩展的形式

没有银弹

人工智能AI-2:使用启发式或基于规则的特定编程技术。在这种方法中,对人类专家进行了研究,判断他们解决方法的启发性思维或者经验法则,程序被设计成以人类解决问题的方式来运行......

专家系统是人工智能领域最先进的、被最广泛使用的部分,是包含归纳推纳引擎和规则基础的程序,它接收输入数据和假设条件,通过从基础规则推导逻辑结果,提出结论和建议。

人工智能领域近几年又重回人们的视角,人工智能里许多方法的确能很大程度的提升软件开发的效率,然而其是否能够泛化成一套解决软件开发问题的系统,还值得商榷。不过机器学习中,不少算法正朝着人工智能AI-2中的定义发展,笔者认为最具特色的是Neural Networks(神经网络),神经网络模仿了人类大脑的神经元的工作方式,以人类解决问题的方式来处理各种复杂的非线性问题。

基于最初始的ANN,机器学习领域的研究者们不断优化神经网络,开发了卷积神经网络(CNN)、循环神经网络(RNN)、R-CNN等一些高级的深度学习模型,并且可以运用于计算机视觉、自然语言处理等等领域中,目前还有很大的提升空间,即使人工智能不能成为解决软件开发问题的银弹,但其在提升效率方面做出了很大贡献,值得我们在这方面继续深入。


总结

《人月神话》涉及广泛,笔者只摘取了某些章节中引起共鸣的语句,实在是一本值得不断回味的经典之作。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • 推荐理由: 作为一部在软件领域40年畅销不衰的传奇经典,很少能有像《人月神话》一样具有深远影响力和畅销不衰的著作。...
    Summery阅读 3,828评论 1 4
  • 人月神话读书笔记 焦油坑 为什么两个人的创业团队可以超越大公司9倍以上的效率开发任何程序。而大公司的产业化团队效率...
    陈浩要安静阅读 18,419评论 3 34
  • 看了宋老師今天的蛻變指引,有兩句話對我很有觸動,同時我也有同感: 因為苦過,所以能苦別人的苦。 因為受過傷,所以能...
    静心_安心阅读 122评论 0 1
  • “你是不是把吃饭前都省下来理财了?”自从我开始学习理财,我父母就抱着一种超级警惕的态度——我们家的白菜不仅...
    Tsingtao蛋蛋阅读 835评论 6 3