11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

37 Signals 的实用最小主义实践

  • 2008-08-01
  • 本文字数:2856 字

    阅读完需:约 9 分钟

尽管有那些可能性——复杂度、延误和不可预知的改动——还是有许多软件写出来、交付出去、而且最终被使用。偶尔软件会很好。在一些罕见情形下,软件的确有创新和价值。在一些案例中,还真按计划达成了目标。

在这些稀有案例中,成功往往是铁一般纪律的副产品——一种坚决做出又在每次遇到挑战时大声重申的选择,限制着项目的范围。在软件的成功故事中,你总 能发现善于拒绝的人们。如同有意只在调色板上涂抹一种颜色的画家、宁肯写十四行诗也不写自由体诗歌的诗人,或者只固守小规模优势产品线的厂商一样,成功的 程序员也在约束中成长,而非没有约束。有时候,约束是环境的产物——预算少、时间紧、目标有限。有时,约束是有经验的程序员或经理强加给自己的,他们懂得 如何避开结局不可预料的——以软件界的说法来讲,“未绑定的”——项目。无论哪种情形,都更多地考虑“大即险”,而不是“小即美”。

约束是打造伟大产品的关键

有家位于芝加哥、名为 37 Signals 的小公司,正是这种拥抱限制的方式之代表者。37 Signals 最初是一家网页设计资讯公司,后来为了满足自身需求而将业务扩展到软件开发领域。他们编写了一些用于项目管理的内部工具。为了和客户沟通, 就向客户开放了部分系统。公司创始人和总裁杰森•弗瑞德(Jason Fried)解释说,在他们自己意识到之前,已经做出了一套基于网页的应用。又做了 4 个月,他们把软件转换为称作 Basecamp 的服务。 Basecamp 发布于 2004 年 2 月,很快在类似 Flickr 和 Google 的 Gmail 等新 Web 富应用天堂中名列前茅。

Basecamp 只是这家公司花一年多时间投入少量程序员做出来的一系列值得注意的小而精的产品之一。Basecamp 之后是 Ta-da List,用于保存和共享待办事项(及类似事项)列表。几个月后推出了 Backpack,它允许用户保存和共享便签及文件。每种产品都可靠并易于使用,而 且都是精心设计的。每种产品通常也都只包括少量新特性。例如,Basecamp 就有一些精巧的电子邮件功能:和其他服务和程序一样,也可以设置邮件到达提 醒——还可以从另外的计算机或手机等移动设备向 Backpack 网页发送邮件,邮件文本就会在页面上显示出来。

我刚开始使用 Backpack 时,是用来保存本书的零散调研笔记。2004 年秋天在一个技术大会上偶遇弗瑞德,我问他 37 Signals 怎么能在如此之短的时间内做出这么有用的软件。他大力鼓吹自己的方法——他公司开了个名为“制作 Basecamp”的训练班,将所用原则做 成了一套 PowerPoint 幻灯片——而且逼着我在酒店大堂里听了 45 分钟关于其方法论的概要介绍。

首先,37 Signals 只有一位开发者,所以就避开了布鲁克斯法则的泥沼——就像米奇•卡普尔最初做 Lotus 1-2-3 那样,当时也只有乔纳森•萨赫斯(Jonathan Sachs)一位程序员。开发者之间的协调不成问题。37Signals 唯一的开发者戴维•海因梅尔•汉森(David Heinemeyer Hansson)住在丹麦,就连这似乎也不成问题。弗瑞德说,在大多数公司里,地理上的分隔会被看做是严重问题,不过时差却让他们真的只有区区几个小时可 以讨论,所以他们会高效利用这点时间,跟着开发者们就能平心静气地写代码,不受干扰。

照 37 Signals 的做法,约束是朋友。“约束是打造伟大产品的关键,”弗瑞德说,“约束产生创意。如果有人说,给你全世界的财富,让你做任何想做的东西,那这东西多半永远发布不了。给我一个月就好!”

实用最小主义的基础——Web 应用

37 Signals 生产优秀软件的另一关键要素是紧抓 Web 应用不放。所有东西都通过网页浏览器运行,所以程序可以在任何能运行浏览器的计算机和操作系统上工 作。版本更新可以很容易地在运行服务的服务器上做到,用户无须下载和安装更新。汉森还热衷于 Ruby,一种面向对象动态编程语言。Ruby 近似于 Python,不过较少为人知,汉森发现它简化了自己的工作。最后,37 Signals 的方式还避开了编写规约的环节;相反,一开始就做用户将看到的详细网页。这些页面设计成了规约。弗瑞德说,他的团队很少会长时间争辩页面上 的每个词、按钮和方块。

37 Signals 只做小程序,不做野心勃勃的新平台或应用程序框架。但在打造 Basecamp 的过程中,汉森还写了一些有用的创新代码,改善和简化了所有 Web 应用在保存和获取数据时都要执行的细节基础操作。Basecamp 发布后,他和 37 Signals 决定把这部分工作拿出来,作为一套开源平台发布,名字是 Ruby on Rails。这套将被命名为 Rails 的框架在某种程度上通过约束程序员的可选手段使得编写 Web 应用更为简单。“灵活性被过分高估——约束才是解放,” 汉森说。Rails 也具备实现 AJAX 风格增强界面的能力,这种新界面风格让基于 Web 的程序足以与桌面应用抗衡。

37 Signals 从 Basecamp 中抽出 Rails 的同时,还从 Basecamp 的经验中归纳出一套设计哲学,体现为一系列小警句:“精简代码。”“拒绝 在先。”“找对人。”“与其做半成品,不如做功能减半的优质品。”这些短句是为了通过幻灯片快速演示,不过合起来却是一整套软件开发方法——姑且称之为实 用最小主义。它也许不能满足鼓舞了如此多程序员的改变世界之瘾。你也可以批评它是锋芒尽失的表现。它看似不适用于那些别无选择只能做大的软件。用程序员们 的话来说,就是“配不上”。

Google 也实用最小主义

不过依据 37 Signals 一直以来的跟踪记录,有个最大的推荐理由:它的行事方式看来的确有效。类似的方式在一家规模更大、也更为著名的软件公司中已经获得空前成功 ——甚至可以不太夸张地说,获得了改变世界式的成功。Google 遵循一种听起来很像杰森•弗瑞德推崇的那种软件开发哲学,成长为规模达数十亿美元的巨 兽,并且开始挑战微软:每个新项目专设一个小团队,开发期限紧迫,做出目标集中的网页产品,然后再根据用户反馈和领域经验加以逐步改进。Google 也让 开发者把五分之一的工作时间花在个人项目上。这“20% 时间”的劳动成果可能会变成很酷的新产品——或者不会。不用担心,Google 安抚员工说:尽管开 干,挠你自己的痒处。

Google 因打造了工程师天堂而获得赞誉,算法称王、编码者说了算。那些有幸受雇于 Googleplex 的人——包括安迪•赫兹菲尔德和 2005 年加入的 Python 发明人圭多•范•罗萨姆——暂时在这里逃离了软件时间的困境。Google 做出过一些半成品,但无人能质疑其成功的价值——从最初的 搜索引擎到基于关键字的广告业务,以及流行的新免费电子邮件服务。

实用最小主义在 Google 用得很好。而且它现已成为一家声名显赫的公众公司,面对着跟上成长步伐和找到新收入来源的压力。对于许多人来说,看似 Google 正在一手制造硅谷的新泡沫。如果它在这种情形之下坚守其方法论,想出如何在不变慢、不变笨的前提下成长得更大,那么它将是软件业历史上独一无 二的。


作者 Scott Rosenberg 和译者韩磊的简介见:《梦断代码》中文版官方网站

本文摘选于博文视点公司出版的《梦断代码》,题目和小标题为 InfoQ 中文站根据文章含义拟定,已经征得译者同意。另征得出版社和译者同意,InfoQ 中文站独家发布《梦断代码》第 9 章样章试读,欢迎下载。本书已经上市,欢迎登录中国互动出版网购买

2008-08-01 02:011802

评论

发布
暂无评论
发现更多内容

消息队列:Kafka Consumer源码解读

正向成长

kafka

阿里IM技术分享(四):闲鱼亿级IM消息系统的可靠投递优化实践

JackJiang

架构设计 即时通讯 IM

linux之软连接和硬连接的区别

入门小站

Linux

2021西部云安全峰会召开:“云安全优才计划”发布,腾讯云安全攻防矩阵亮相

腾讯安全云鼎实验室

云安全 峰会

被阿里奉为神册!2021公认最权威的分布式微服务指导手册

Java 架构 面试 程序人生 编程语言

阿里藏经阁天花板:高性能Java架构核心原理手册,一定要偷偷看

Java 编程 架构 面试 程序人生

时间转换不在变bug

卢卡多多

时间戳 时间转换 9月日更

java 虚拟机 GC 学习笔记三

六维

GC 9月日更

千万级学生管理系统的考试试卷存储方案

毛先生

Base64编码对照表

入门小站

工具

成为一名月薪2万的web安全工程师需要掌握哪些技能??

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

陌陌和它的解药,聊聊出海社交产品的思路

拍乐云Pano

社交APP出海 社交APP 泛娱乐出海

喜讯 | 拍乐云创始人赵加雨荣获「2021企业数智化转型升级先锋人物」奖

拍乐云Pano

音视频 数智化

连锁便利店:夕阳产业还是明日之星

石头IT视角

Prometheus 2.28.0 新特性

耳东@Erdong

Prometheus 9月日更 relaese

读懂Redis源码,我总结了这7点心得

Java redis 架构 面试 后端

J2PaaS低代码开源版,10月1号即将上线,企业数字化转型优选!

J2PaaS低代码平台

低代码 零代码 开发工具

网络攻防学习笔记 Day148

穿过生命散发芬芳

等级保护 9月日更

2021年金九银十必问的1000道Java面试题及答案整理

Java 架构 面试 程序人生 编程语言

深耕与构建:华为数字能源的立体版图

脑极体

WebRTC是如何设置视频编码偏好的?

liuzhen007

音视频 引航计划 领航计划

阿里大牛再写传奇:并发原理JDK源码手册GitHub下载量已破百万

Java 编程 架构 面试 程序人生

阿里资深架构师整理分享全套Java核心技术面试题及答案

Java 编程 架构 面试 程序人生

架构实战营 设计千万级学生管理系统的考试试卷存储方案

💤 ZZzz💤

架构实战营

模塊九 畢業設計

孫影

架构实战营 #架构实战营

架构实战营-模块四作业

南山先生

「架构实战营」

考试试卷redis存储详细设计

小智

架构训练营

从浏览器地址栏输入url到显示页面的步骤

Augus

浏览器 9月日更

MyBatis Plus 批量数据插入功能,yyds!

王磊

mybatis springboot

26. 自动驾驶的六个级别

数据与智能

人工智能

模块4作业

4anonymous

37 Signals的实用最小主义实践_敏捷_Scott Rosenberg_InfoQ精选文章