## 《人工不智能》5:软件开发的六个经验

今天咱们把布鲁萨德的《人工不智能》这本书给讲完。这本书的主题就反对技术沙文主义，破除人们对计算机技术的迷信。前面我们讲了人工智能技术的种种缺陷。最后我们结合布鲁萨德本人的经历，把“软件开发”，也给来个去神秘化。

这年头如果你说你是个建筑工人专门负责砌墙，人们就会觉得你很一般。如果你说你是个程序员专门开发软件，人们就对你肃然起敬。那砌墙和写程序到底有什么本质区别呢？

今天我们一提软件开发，总觉得这是高科技、充满创新精神、动不动就一夜暴富。可是你要知道，计算机这种东西上世纪50年代就已经有了，现代人已经跟计算机生活了很多年，软件开发根本就不是什么新行业。

而即便如此，这个行业还是不靠谱。比如你参加一个会议，好像每个人做报告之前永远都得花十分钟调试设备，才能用会场投影仪把自己的 PPT 正确显示出来。你平时用电脑也就看个电影，可还是得整天搞升级之类的系统维护。

所以软件开发是个特殊的行业。布鲁萨德分享了自己的经验，我把这些经验总结成六条。如果用一句话概括这些经验，那就是软件开发不是生产流水线那种标准化的操作，它更像是一门匠人式的手艺。

布鲁萨德参加过一次创业大赛，叫“创业大巴（Startup Bus）。比赛过程是各个团队坐上主办者提供的大巴，在三天的时间内，从美国各地前往同一个地点。车一边开你们一边编程，最后看哪个团队的产品好，可以得到金钱奖励。

![图片](https://piccdn3.umiwi.com/img/201805/28/201805282049580268901967.jpg)

![图片](https://piccdn3.umiwi.com/img/201805/28/201805282050414417959411.jpg)

像这种创业大赛都号称要孵化真正的公司，而事实上大家心里都明白，根本就没有哪个项目最后真的推向了市场，人们只是在假装运作一个公司。

什么项目能得奖呢?首先它不能太大，得在三天内能做完才行。其次它得能调动兴趣，让程序员愿意做。再者，你这个项目最好跟当前的技术热点有点联系，比如有人说我们要做一个虚拟现实的舞会应用，评委肯定赞成 — 当然，前提是你们得能在三天之内做出来。

事实是常常整个团队不眠不休干三天，最后什么也没得到。那为什么还有这么多人愿意参赛呢？因为这种比赛能锻炼人。

程序员们把创业大赛当成编程大赛，还有个专门的名词叫“hackathon”，也就是“编程马拉松”，或者叫“黑客松”。几个高水平程序员凑在一起摸爬滚打，发挥团队精神而且还是连续作战，这是难得的经历。

布鲁萨德的第一条经验，是一定要面对面交流。

看书、网上学点教程，也能学会编程，但是你谈不上高超的技艺。想要成为编程高手，最好的办法是和高手在一起工作一段时间，看看别人怎么干的。面对面交流的好处就是你在单位时间内能获得的信息密度非常高。聊几句，屏幕前面给你指点指点，你能捕捉到别人语音、表情和动作的微妙差异，这就是很大的帮助。

程序员是手艺人。他们不像建筑工人是“一群一群”或者“一队一队”的，他们各有各的风格，是“一个一个”的。

布鲁萨德的第二条经验是“投掷”想法很重要。

布鲁萨德也编程，但是她在团队里更重要角色还是负责演示和推广。她要给潜在的投资人打电话，要把产品展示给评委。最终她们团队获得了比赛的冠军！而得奖的关键就是布鲁萨德的最终产品演示打动了评委。

现在创业圈管这种演示已经不叫“present”了，有个更形象的词，叫“pitch”。就好像投掷棒球 — 这种演示，是你要把产品和想法“投掷”给观众。这不是例行公事，你得像棒球运动员一样讲究用什么投掷动作。

![图片](https://piccdn3.umiwi.com/img/201805/28/201805282051501039178919.jpg)

创业比赛结束，布鲁萨德除了冠军奖金、编程水平、投掷想法的能力和几个高手的联络方式之外，什么都没得到。

后来布鲁萨德真的开发了一个能用的软件系统，叫 Bailiwick。这个系统能通过自动的数据分析，帮记者寻找新闻线索。布鲁萨德关注的领域是美国政治竞选的经费使用。

![图片](https://piccdn3.umiwi.com/img/201805/28/201805282053199366538304.jpg)

这个背景是这样的。如果你支持哪个政客的竞选，你可以给他捐钱。但是这个钱不能给政客本人 —— 不能让政客拿竞选经费回家买房 —— 你只能捐给他的竞选委员会，要专款专用。但是给竞选委员的捐款是有限度的，每人最多只能捐2700美元。

那你说我特别支持特朗普，我就想给特朗普捐100万美元，那该怎么办呢？你不能捐给特朗普，也不能捐给特朗普的竞选委员会，你可以把它捐给另外一个独立于特朗普的竞选委员会。

美国法律规定，这种第三方委员会可以给特朗普拉票，但是它不能跟特朗普控制的委员会有任何协调机制，说白了就是它不能听特朗普指挥。而好处则是，这种第三方委员会收捐款没有限制。

调查记者喜欢故事。哪里有很多钱，哪里就可能有故事。布鲁萨德这个软件，就是要从竞选经费的资金数据里面发现故事。所有非营利组织都必须向税务部门提供财务报表，布鲁萨德的软件专门分析这些报表。

比如说，竞选委员会和第三方委员会的花费项目，有没有重合的地方。如果有很多重合，比如他们都用了同样的公司去做同样的事，那可能就是有协调的，就可能有报道价值。

还有，美国政府要求非营利组织用于这个组织本身目的的花费应该占到总花费的80%以上。比如你这个竞选委员肯定要花多钱都用来聘请工作人员，那么你给这些人的工资总数就不能超过总经费的20% —— 否则你这个组织就成了养着人吃饭的地方。你必须把绝大大部分经费用在购买电视广告这些直接跟竞选有关的事儿上才行。那如果软件发现竞选委员会人员工资花费太高，这就可能指向一个故事。

但要点在于，布鲁萨德的软件只起到一个辅助性的作用。记者没有办法自己研读和统计所有的财务报表，软件帮记者做这个研究。但是软件发现异常之后，到底是不是一个好故事，还得记者本人判断才行。

这就不是把决策权完全交给人工智能，而是人工加智能。

这个软件用的人不算多，但是布鲁萨德从中又得到四条经验。

正所谓不当家不知柴米贵，布鲁萨德拉起人马开发自己的软件，感觉做事真是不容易啊。她本来想弄一个有色人种组成的纯女性团队，结果发现优秀人才实在不好找也实在是贵，最后团队是三男两女。

布鲁萨德的第三条经验是你没有办法估计项目完成时间。

砌墙这个活的好处是工作速度是固定的，人手增加一倍完成时间就能缩短一半 — 但是软件开发不行。任何软件都是*新的*软件，特别是如果你要的是以前没有实现过的功能，那就更是每个人都是第一次做。没人能预期中间会有什么困难，没人能估计需要多长时间做完。

第四条经验是一个人犯的错误，全团队都受影响。

软件开发是一环套一环，有很多全局性的东西，不能隔离分工。布鲁萨德在程序里犯了一个错误，又没做好版本控制，结果把所有人的工作都耽误了。

第五条经验叫“MVP（Minimum Viable Product）”，也就是最低可行产品。

软件产品，你不需要把什么东西都搞得非常成熟了再推向市场。你应该先做一个最低可行的产品，只有最基本的功能，勉强能用，只要能给人展示，也就行了。

你要做的是先把这个最低可行产品投掷出去再说。只要能吸引到一部分消费者或者投资人，你就有钱搞进一步开发，逐渐完善这个软件。房子住进去人了不能总改，但是软件可以慢慢升级。

![图片](https://piccdn3.umiwi.com/img/201805/28/201805282055529682614326.jpg)

你不是非得造好一辆汽车才交付用户。你可以先给用户造个滑板先用着，然后慢慢升级到自行车、摩托车，最后才是汽车。这样你有充分的资金支持，允许逐步提高水平。

布鲁萨德的第六条经验是人工成本其实是用了一般人想象不到的地方。

软件开发中，60%的开发费用和70%的人工都用在了日常的软件维护上，而不是最初写的那些代码。

以前我听说过一句话叫“哪怕一个程序只有三行代码，它将来也会需要维护。”

![图片](https://piccdn3.umiwi.com/img/201805/28/201805282057001580475014.jpg)

哪怕你说这个软件已经做成了，不需要新功能了，你还是得花钱找人维护它。计算机硬件会升级、操作系统会升级，你的软件就必须得跟着升级，这还不算用户随时发现的新错误。有些软件之所以好好的就被公司给下线了，就是因为维护成本太高。

作为一个调查记者和大学教授，布鲁萨德并没有开发过什么特别大的软件和人工智能系统。也许咱们读者就有更好的经验，欢迎你在留言区分享！

但是我们从布鲁萨德的这些经验中也能看出来软件行业的一些特点。并不是所有软件都能达到什么“颠覆式创新”，甚至很多软件根本就没市场 —— 但是有一点你得承认：每个软件都是新的。程序员是个永远都在做新东西的职业。他们真不是砌墙，他们就好像搞艺术创作一样，讲究手艺。

![图片](https://piccdn3.umiwi.com/img/201805/28/201805282057408573533144.jpg)

### 💡 精华要点
- 软件开发有以下六条经验：
- 1. 要面对面交流
- 2. 要“投掷”想法
- 3. 不要预估项目完成时间
- 4. 一个人犯的错误全团队都受影响。
- 5. 在推向市场之前要做一个最低可行产品。
- 6. 人工成本其实用了一般人想象不到的地方。
