软件的熵

虽然软件开发不受绝大多数物理法则的约束,但我们无法躲避来自熵的增加的重击。

熵是一个物理学术语,它定义了一个系统的“无序”总量。不幸的是,热力学法则决定了宇宙中的熵会趋向最大化。当软件中的无序化增加时,程序员会说“软件在腐烂”。

有些人可能会用更乐观的术语来称呼它,即“技术债”,潜台词是说他们总有一天会偿还的——恐怕不会还了。

不过不管叫什么名字,债务和腐烂都可能失控地蔓延开。

有很多因素会导致软件腐烂。最重要的一个似乎是项目工作中的心理性状态,或者说文化。即使是一个单人团队,你的项目的心理性状态也是个非常脆弱的东西。即使有最合理的计划和最佳的人员,项目还是可能在生命周期中逐步荒废、腐烂。但也有一些项目在经历了巨大的困难、持续不断的挫折之后,成功地对抗了天然的无序化倾向,走出了困境。

是什么造成了差异?

在城市中心,有些建筑干净漂亮,而另一些则破落不堪。为什么会这样?一些犯罪和城市衰败领域的研究人员发现了一个有趣的触发机制,只需一样东西就能非常迅速地把一幢干净完好的宜居建筑变成一个破败的废弃物。

一扇破窗。

一扇破损的窗户,只要一段时间不去修理,建筑中的居民就会潜移默化地产生一种被遗弃的感觉——当权者不关心这幢建筑的感觉。然后,其他的窗户也开始损坏,居民开始乱丢废物,墙上开始出现涂鸦,建筑开始出现严重的结构性损坏。在一段看上去很短的时间内,建筑的损坏程度就足以打消业主们想修好它的期望,被遗弃的感觉最终变成了现实。

为何造成这样的影响?心理学家的研究表明,绝望是会传染的,就像狭窄空间中的流感病毒。无视一个明显损坏的东西,会强化这样一种观念:看来没有什么是能修好的,也没人在乎,一切都命中注定了。所有的负面情绪会在团队成员间蔓延,变成恶性循环。

不要放任破窗

不要搁置“破窗”(糟糕的设计、错误的决定、低劣的代码)不去修理。每发现一个就赶紧修一个。如果没有足够的时间完全修好,那么就把它钉起来。也许你可以注释掉那些糟糕的代码,显示一行“尚未实现”的信息,或用假数据先替代一下。采取行动,预防进一步的损害发生,表明一切尽在你的掌握中。

现在我们了解了一旦窗户开始破裂,运转良好的干净系统会迅速恶化。还有一些其他因素会导致软件腐烂,我们将在别处探讨,但与其他任何因素相比,漠视会加速腐烂的过程。

你或许会觉得,没人有时间来来回回清理项目中所有的碎玻璃。如果你真这么想,劝你还是趁早多想想怎么料理这个项目的后事,或是直接离开是非之地。不要让熵赢得胜利。

先勿伤害

多年以前,Andy 认识一个土豪。他的房子富丽堂皇,屋子里摆满了无价的古董,到处陈列着精美的艺术品。有一天,一张挂毯因为离客厅壁炉太近而着火了。消防员奋勇冲进去救民于水火,当然主要是火。但是在把巨大的水管拖进屋子前,他们停了下来——尽管里面火势紧急——毅然选择先在前门和火源之间铺上垫子,因为觉得水管太脏。

他们不想弄坏地毯。

现在听起来这很偏激。消防部门的首要任务当然是灭火,何必管过程中的那些附带损害呢?但是他们在清醒地评估了形势后,出于对自己控制这场火势能力的绝对自信,还是尽力兼顾了不对财物造成不必要的毁害。这也是软件开发中应该遵循的方法:不要只是因为一些东西非常危急,就去造成附带损害。破窗一扇都嫌太多。

一扇破窗——一段设计糟糕的代码,一个让团队在整个项目周期内都必须要遵守的糟糕管理决定——就是一切衰退的开始。如果你发现自己正处在有几扇破窗的项目中,就非常容易陷入这样的想法——“反正代码所有其他部分都是一坨屎,我只是随大流而已。”项目运作在这个时间点前是不是一直良好并不重要。在最初启发“破窗理论”的实验中,一辆废弃的汽车完好无损地停放了一个星期。但是一旦有一块玻璃被打破,这辆车在几个小时内就会被扒光并翻了个底朝天。

出于同样原因,如果身处一个健康团队,你们项目的代码如此完美——编写清晰、设计优良、简洁优雅——你就会倾向于格外地小心,不把它弄糟。就像那些消防员一样,即使屋内火势熊熊(截止时限、发行日期、销售演示,等等),你也不想成为第一个弄乱它、造成附带损害的人。

一定要告诉自己,“不要打破窗户。”

石头做的汤和煮熟的青蛙

有三个战场归途中的士兵饥肠辘辘。他们看到前方有一座村庄,顿时重整精神——他们觉得村民们会给口饭吃。可是当他们抵达那里时,却发现四处门窗紧闭。多年战乱下,村民们食物短缺,仅有的存粮都藏了起来。

士兵们没有气馁,他们烧了一锅水,小心翼翼地在里面放了三块石头。诧异的村民们都跑出来围观。

“这叫石头汤。”士兵们解释道。“你们在汤里只放这个?”村民们问道。“对——不过有人说如果加点胡萝卜味道会好一些……”一个村民转身跑回了家,从自己的窖藏中拎来了一筐胡萝卜。

几分钟之后,村民们又问道“这就可以了吗?”

“可以了,”士兵们说道,“加几个土豆或许更有味道。”另一个村民听到后跑开了。

在接下来的一个小时内,士兵们列出了更多食材:牛肉、韭菜、盐及各种香料,说能让汤做得更加鲜美。每次都有不同的村民跑回去取来自己的私藏。

最后,他们煮了一大锅热气腾腾的汤。士兵们把汤里的石头扔掉,和整个村子的村民一起分享了一顿美餐,这是他们所有人几个月以来吃的第一顿饱餐。

石头汤这个故事讲述了很多道理。村民被士兵骗了,士兵利用了村民的好奇心来获取食物。不过更重要的是,士兵充当了催化剂的角色,将村民们组织了起来。这样他们才能聚在一起做出他们无法单独做到的事情——一项协作的成果。最后所有人都是赢家。

从现在开始,你要考虑仿效这些士兵。

你可能处在这样一种状况下——清楚地知道需要做些什么,以及怎样去做。整个系统就在你的眼前——你知道这样做就对了。但当你为做整件事去征求意见的时候,见到往往是推脱和茫然的眼神。人们想成立一个委员会,然后申请预算,之后事情会变得异常繁杂。每个人都会守着自己的一亩三分田。有时我们称之为“筹备期的劳累”。

这个时候,就该拿出石头了——找出你合理的请求,然后不断完善。一旦有成果产出,展示给人们看,让他们大吃一惊。现在可以用上“当然了,它还可以更好,只要我们再加点……”这句话,而且要假装你并不在意。这时先坐下来,等他们开始问你要不要加些你原本想要的功能。人们都觉得,加入一个推进中的成功项目更容易一些。因为只要一窥未来,大家就能团结在一起。

做推动变革的催化剂

换个角度来看,石头汤的故事讲述的是一个温和渐进的骗局。因为过于将注意力集中在石头上,村民们忘却了石头外的世界,这很像我们每天陷入俗事缠身的状态。

项目进展缓慢,完全失去了控制——这是很常见的症状。大多数软件灾难都始于微不足道的小事,项目的拖延也是一天天累积而成的。系统一个特性接一个特性地偏离规范,一个接一个的补丁加到代码上,最终原始代码无影无踪。往往就是一件件小事的累积破坏了团队和士气。

以上节选自《程序员修炼之道 通向务实的最高境界(第2版)》,现在你有机会获得TA!:

#欢迎来留言#

你的修炼之道是什么?

留言点赞数量最多的第一名

程序人生携手【电子工业出版社-博文视点】送出

《程序员修炼之道 通向务实的最高境界(第2版)》一本

截至5月18日12:00点

欢迎来留言哦!

更多精彩推荐
☞28 岁裸辞转行程序员,一年的心路历程大曝光!
☞完了!CPU 一味求快出事儿了!| 原力计划
☞开源软件如何活下去?硅谷技术专家告诉你!
☞发家致富靠 AI ?使用 keras 预测NBA比赛赚钱,回报率达136%……
☞看完这篇操作系统,和面试官扯皮就没问题了!
☞赠书 | 要解决区块链的可扩展性问题,有哪些可行的方法?
你点的每个“在看”,我都认真当成了喜欢

赠书 | 程序员修炼的务实哲学相关推荐

  1. 好教程推荐系列:《程序员的自我修养》和《程序员修炼之道:通向务实的最高境界(第2版)》

    1.<程序员的自我修养-链接.装载与库> <程序员的自我修养:链接.装载与库>网易云风力荐:莫到用时再读书!主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两 ...

  2. 《程序员修炼之道(第2版)》!屹立20年王者归来!

    推荐语:收到博文视点的新书<程序员修炼之道(第2版),反复拜读,确实非常全面,涵盖编程,并发,架构,程序员个人修炼,团队,项目等方面 标题已经完全代表博文菌想说的话了! <程序员修炼之道( ...

  3. 程序员修炼之道:从小工到专家pdf

    下载地址:网盘下载 内容简介 编辑 <程序员修炼之道>(The Pragmatic Programmer)由一系列独立的部分组成,涵盖的主题从个人责任.职业发展,到用于使代码保持灵活并且易 ...

  4. 《程序员修炼之道》给所有毕业生的18条建言

    2020毕业季已到,一大批新人程序员正在进入职场. 职场不像学校,有人在这里获得了成功,也有人工作了很多年依旧默默无闻,甚至被埋没.从校园到职场的环境转变,从大学生到程序员的身份转变,你准备好了吗?面 ...

  5. 程序员修炼之道:从小工到专家阅读笔记01

    个人感受部分: 01.总是想要塑造一种自己全能的形象,害怕承认自己的无知和错误. 02.好的程序员对他或自己的职业生涯负责,并且不害怕承认无知和错误,直视我们的缺点--我们必须诚实.责任是我们要主动承 ...

  6. java程序员修炼之道 pdf_?活动丨和大咖云风来场1对1交流,分享《程序员修炼之道》心得...

    曾经获得无数赞誉,畅销20年经久不衰的IT领域经典著作--<程序员修炼之道>,多年来频繁出现在众多行业大咖和广大读者的推荐书单中.如今,这本广受推崇.好评无数的经典之作出新版啦! ▊< ...

  7. 《程序员修炼之道》笔记(一)

    这几天开始看<程序员修炼之道>,也许不少人看了书的标题,第一时间会觉得这是鸡汤一类的书.但至少以我自己的感受来看,这是很棒的书,现代人文主义不是提倡自我意识嘛,自己感觉好的就是好的.况且人 ...

  8. 知识资产投资——《程序员修炼之道》的建议

    <程序员修炼之道:从小工到专家>曾经获得第14届JOLT大奖,很多程序员可能都知道甚至看过.我还没看完,初步给我留下三个印象: 书上的例子还比较有趣,仔细品位又是觉得很有哲理,比如那个&q ...

  9. 程序员修炼之道 pdf_程序员修炼之道-注重实效

    本篇文章是阅读<程序员修炼之道--从小工到专家>第一章 "注重实效的哲学" 的笔记.有了一些开发经验后再看这本书会比较有感触,本书第一章讲了一些对程序员最基本的要求,如 ...

最新文章

  1. 安装确认书模板_Aion S车讲堂 | 关于充电桩安装的N个问题
  2. 产品经理装逼词汇大全
  3. 贪心——今年暑假不AC(hdu2037)
  4. 微课|中学生可以这样学Python(例5.4):计算决赛现场选手得分
  5. cas client 更新ticket_有人知道 cas单点登录系统是怎么样取得proxyticket的?
  6. TransE 论文笔记
  7. python编程课件_Python面向对象程序设计ppt课件.ppt
  8. 学编程脚本 android,Android开发之--脚本编程
  9. 计算机信息管理调查报告模板,精选市场调查报告模板锦集九篇
  10. 激励视频广告 Android,激励视频广告
  11. mysql中 创建函数失败_Mysql创建函数出错
  12. php控制树莓派GPIO
  13. 用html制作王者荣耀的界面,《王者荣耀》操作设置详解
  14. 中科曙光 量子计算机,中科曙光 量子计算机 量子计算机的曙光
  15. 主板常见故障维修24例(新手必备)
  16. 微信公众号 二维码场景统计 场景二维码
  17. 常用的RFID卡 14443A/B, 15693
  18. 纽约大学计算机专业研究生学费,纽约大学学费_纽约大学研究生留学费用
  19. 图扑数字孪生智慧灯杆,“多杆合一”降本增效
  20. 奶爸日记25 - 笛子

热门文章

  1. 377-379自制mac系统 (李游精品前端课程笔记)
  2. 什么是ForkJoin
  3. 跨站脚本攻击 XSS原理
  4. 服务器实例(server instance)
  5. 安装和部署WSUS和应用
  6. 性能优化专题八--webp图片压缩实战
  7. chatGPT的谷歌浏览器Monica插件的使用
  8. 绘图制作java程序设计_系列效果图手绘加软件绘图
  9. Godaddy打不开和支付时没有支付宝选项的解决方法
  10. 计算机毕业设计ssm公交电子站牌管理系统软件9430l系统+程序+源码+lw+远程部署