本文选自 | 《敏捷中国史》

作者 | 熊节

责编 | linse

“我自己估算了一下,同样复杂的 Web 应用,用 Rails 做的代码量,比一般的 J2EE 少很多,大概只有几分之一。”石一楹语速很快,“代码少就容易维护呀,再加上自动化测试啦、自动化发布啦这些基础工具做得又好,开发效率真的比用 Java 高十倍不夸张呀。”

“高十倍这么厉害,那不是找到银弹啦?”

“哈哈哈……银弹不敢说咯,用着爽是真的呀。现在想要做个网站,真的不想动 J2EE 嘞,一想要配置 Spring、配置 Hibernate,提不起精神来开这个头呀。Rails 快呀,一两天就做个网站出来,不费劲呀。”

01

Web 2.0 创业神器:Ruby on Rails

2004 年以前,互联网的主要存在形式是网站。不论大型的内容网站,还是小型的个人网站和博客,大多以单向的信息传播为主,用户可以进行的交互非常有限。

2004 年底提出的 Web 2.0 概念改变了这种局面。提出这个概念的 Tim O’Reilly 认为,下一代的 Web 不再是单向的信息发布平台,而是“基于个性化微内容,提供注重用户体验、可以参与的社会化服务平台”,更是以服务形式提供给大量用户、充分发掘用户长尾需求的软件发行机制——很多 Web 2.0 的系统已经被称为“Web 应用”而非“网站”。

这些特征也就意味着,下一代的 Web 需要包含更多的业务逻辑、应对更多的变动和不确定性。因此 O’Reilly 也指出,Web 2.0 需要轻量级的编程模型,以开源、服务化、松散耦合的方式来开发软件。Ruby on Rails 正是在这个背景下诞生的开发框架。

出乎很多人的意料,Ruby 并不是一种很新的编程语言。日本人松本行弘 1995 年就发明了这种编程语言,只比 Java 略晚几个月。但是在随后几乎十年中,Ruby 的热度与 Java 可谓天差地别。有人打趣地考证,热门的编程语言发明者都有大胡子,因此没有胡子的松本发明的 Ruby 才一直不温不火。

2005 年,可能和松本蓄上了胡子有关,时年 26 岁的丹麦创业者 David Heinemeier Hansson(常被人简称 DHH)从他的创业项目 Basecamp(一个在线项目管理工具)中提取出来的开发框架 Ruby on Rails 在很短时间内风靡了整个 Web 2.0 社区,捎带着 Ruby(而非 Java)成了那一时期很多创业者的首选编程语言。

Rails 与敏捷之间有着先天的联系,第一本全面介绍 Rails 的图书《应用 Rails 进行敏捷 Web 开发》(被读者简称 AWDWR )不仅把“敏捷”二字挂在标题上,跟 DHH 合作的另一位作者 Dave Thomas 本身就是敏捷宣言的签署人之一。

两位作者开篇即强调:“敏捷是 Rails 的基础所在……这里没有繁重的工具,没有复杂的配置,没有冗长的过程……开发者所做的工作能够立即让客户看到……用户和开发者共同发掘需求、寻找实现需求的办法…… Rails 也鼓励用户与开发团队合作,一旦看到 Rails 下面能够以如此之快的速度响应变化……客户与开发团队之间的对抗将被建设性的讨论取代”。之所以能达到这种效果,其原因是“Rails 强烈要求——甚至可以说是强迫——遵循 DRY 原则……对单元测试和功能测试的强烈重视,以及对测试套件和 mock 对象的支持,又给了开发者一张可靠的安全网”。

Rails 社区经常提及的一个观念是约定俗成优于配置(Convention over Configuration)——这也是一个敏捷宣言风格的表述。Rails 给人留下的最直观的印象是简单、开发效率高,据称开发同等复杂度的 Web 应用,Rails 的速度是 J2EE 的 5~10 倍。

这种效率,很大程度上源于以约定俗成的形式规定了 Web 应用开发的最佳实践,从而消除了 J2EE 开发中常见的大量复杂的 XML 配置,使开发者专注于业务问题。并且 Rails 提供的不仅是开发 Web 应用功能的开源组件,还包含一套完整的开发工具与实践。这种“手把手规定怎么做软件”的风格,用时任《程序员》杂志技术主编孟岩的话来说,“令整个 Web 开发领域受到震撼”。

具体而言,Rails 以“约定俗成”的形式强烈要求、甚至强制灌输给开发者的最佳实践有几大部分。首先是架构实践,Rails 以应用脚手架的形式,规定了 MVC(模型—视图—控制器)架构和数据库存取的绝大部分技术要素,后来的版本以同样的方式规定了 RESTful 服务的风格乃至 URL 格式。然后是测试实践,Rails 规定了单元测试、功能测试、性能测试三大类测试的写法,甚至直接在代码脚手架中给出了测试样例。Rails 提供的自动化构建实践也相当完善,开发者可以完全不用修改构建脚本,用 rake 执行代码统计、测试、本地运行等常用任务。

更进一步,Rails 还提供了部署和生产环境运维的最佳实践。DHH 建议开发者“尽早开始部署……从实际的部署中找出问题,并且获得解决这些问题的经验……尽早了解用户对应用程序的想法,会对你的开发工作获得巨大的帮助”。在当时的行业环境下,这种打通开发与运维的做法是一个极具开创性的主张,完全契合了当时面临极大不确定性的创业者们的诉求

02

Rails 的应用情况

2006 年 3 月 21 日,在一次头脑风暴聚会活动中,时年 30 岁、尚在纽约大学读研究生的程序员 Jack Dorsey 提出了一个点子:提供一个在线服务,让一群人可以通过短信互相交流。当天晚上 9 点 50 分,Dorsey 和他的队友们用 Ruby on Rails 实现了这个点子的第一个原型,在刚刚开发的系统上发布了第一条“社交短信”。

这个像个小玩具一样的系统,在十年后会拥有 3 亿月活用户,并成为当年美国总统竞选期间最重要的信息源,单日发布 4000 万条与竞选有关的信息。这个系统就是 Twitter,Web 2.0 时代最重要的社交网络之一。

Twitter 的故事包含了 Web 2.0 创业神话的一切经典要素:孕育于一次头脑风暴聚会,起初只有一个异想天开的脑洞,极大的不确定性,没有缜密的验证,立即开始实现,一天之内拿出可以运行的原型,病毒式传播……Rails 给创业者们带来的不仅是一种便利的开发工具,更是一整套关于“如何在 Web 2.0 时代创业”的方法论。

这套方法论后来总结完善,被称为精益创业(Lean Startup),其核心就是通过“构建—度量—学习”(build-measure-learn)的循环,快速地把点子构建成可工作的软件、对软件的真实使用情况进行度量得到数据、并从数据中学习产生新的点子。Rails 提供了快速构建软件的可能性,把这个循环的周期压缩到了极致:在一天时间里就可以开发出可用的软件,甚至可以进行几次迭代。

这种快速开发、快速获得反馈的能力,使年轻的创业者们开始热衷于一种充满“极客”氛围的聚会活动:黑客松(Hackathon)。这个将“黑客”与“马拉松”组合而来的词,很好地表达了其内涵:黑客们聚在一起,像跑马拉松一样进行一段长时间、高强度的软件开发。

一次典型的黑客松可能从星期五下班后开始,到星期天晚上结束,历时 54 小时。参与其中的不仅有程序员,还有企业家、设计师等各种角色。他们组成队伍,在两天多的时间里几乎不眠不休,靠高热量食物和大量咖啡因保持精力,力争做出一个有趣的新网站、新 App。当时这类黑客松活动大多采用 Rails 作为开发工具,也能反映出 Rails 不仅开发效率高、而且开发体验良好,否则牺牲周末两天时间连续编程恐怕无法吸引程序员参与。

Rails 的高效在中国技术社区也引起了关注。2008 年,ThoughtWorks 在北京举办了一次黑客松活动,在周末两天时间里,帮助公益组织“乡村教育促进会”搭建了用于农村教师和志愿者交流教学经验的网站。

同一时期,国内的 Rails 社区蓬勃发展,涌现了财帮子、友播网、乐道等 Web 2.0 创业项目, 以及好几个专注 Ruby 和 Rails 的技术社区网站。JavaEye 也在这段时间改版,由原来的 PHPBB 系统改为用 Rails 开发的新系统。据范凯称,选择使用 Rails 重写 JavaEye 网站,是受到了石一楹的影响。

另一些团队在使用 Rails 接离岸外包的工作,帮助北美和澳洲的互联网企业实现他们的点子。

尼毕鲁科技的创始人杨祥吉当时就在接单北美金融服务公司的外包业务,他认为 Rails 的优势“不仅是快速高效,更重要的是优雅简洁”,并且强调敏捷(尤其是测试先行、结对开发、短周期迭代、每日晨会等实践)在此类项目中的重要性。ThoughtWorks 中国区也先后承接了来自喜达屋(StarWood)、LonelyPlanet、REA 等外国企业的 Rails 外包项目,并开发了在企业 IT 环境下支持 Ruby on Rails 的 RubyWorks 系列产品。到 2012 年前后,ThoughtWorks 在西安使用 Rails 的团队有数十人规模,可能是当时中国最大的 Rails 团队。

Rails 从核心哲学上就深受 Dave Thomas 等全球敏捷领袖的影响,引入中国时又与石一楹、范凯、ThoughtWorks 等敏捷先锋有着千丝万缕的联系,深植其中的测试驱动开发、快速迭代、持续集成等敏捷实践又通过众多创业团队和尼毕鲁这样的外包交付团队影响到更多的从业者。Web 2.0 浪潮把动荡、不确定的互联网时代真真切切地带到了中国 IT 从业者面前,让敏捷的原则和实践找到了用武之地

以上内容节选自《敏捷中国史》

扫码免费试读

GitChat 作者

熊节,现任宝尊电商成都研发中心总经理,曾任 ThoughtWorks 总监咨询师、 CSDN 技术主编。 IT 行业打拼 18 年,在金融、零售、政府、电信、制造业、全球医疗等行业的信息化建设方面有着丰富经验。

翻译了《重构》《软件工艺》《实现模式》等行业重要著作,是中国 IT 浪潮中敏捷发展的领航者之一。熊节拥有利物浦大学 MBA 学位。

插图 | 虎头锤,旅居墨尔本的老程序员,北邮博士、北大硕士,15 年编程经验。目前从事支付系统相关业务,曾转战区块链、通信行业。敏捷倡导者、手绘爱好者。

点击「阅读原文」了解中国软件工程 20 年发展脉络,与资深程序员突破技术瓶颈的故事。

Web 2.0 创业神器为何天生敏捷?相关推荐

  1. [文章]剖析WEB 2.0

    什么是WEB2.0? 要理解WEB2.0,先得看WEB的历史. World Wide Web,简称WWW,是英国人TimBerners-Lee 1989年在欧洲共同体的一个大型科研机构任职时发明的.通 ...

  2. 分享一款自带工作流引擎的NodeJS全栈框架,接单快手、创业神器

    CabloyJS是什么 CabloyJS是一款自带工作流引擎的Node.js全栈框架, 接单快手.创业神器, 基于koa + egg + vue + framework7 + mysql 在线演示 场 ...

  3. Web 2.0的八个核心模式与成功技巧

    Web 2.0是社会,经济,科技发展趋势这些下一代互联网的共同架构基础的一个集合体,它使互联网更成熟,具有更强的用户的参与性,开放性,以及网络效应等鲜明的个性. 读完John Musser2007年的 ...

  4. (zt)Web 2.0奔路进行时

    Web 2.0奔路进行时 作者 黄昆 Web2.0不是独立存在的,在2006年将会全面融入互联网,这种融入并不意味着Web2.0以及Web2.0所代表的创新浪潮的消退,反而将以这种充满活力的创新方式引 ...

  5. Web 2.0的个性化存储需求

    Web 2.0应用的数据类型有两种:一种是存储在相关数据库(如Microsoft SQL Server或 Oracle Database )中的数据,另一种是作为非结构化数据进行存储的固定内容(如音乐 ...

  6. 【推荐】Web 2.0 必读经典 !

    新的方式和规则显得扑朔迷离.这里选出24本最具前瞻眼光的专著,对提高Web 2.0悟性必有帮助. 如何了解用户的需求?如何让你的用户体验良好?你会发现,这些已经脱离互联网本身--互联网用户同时也可能是 ...

  7. 什么是Web 2.0——下一代软件的设计模式和商业模式 (全文翻译—1 博客版序)

    这篇文章,是经O'Reilly公司的Tim O'Reilly先生授权后,进行全文翻译.出版的.包括:杂志节选版和网络全文版.转载:请遵循CC版权,保留原文作者和翻译作者信息,以及文章链接. 感谢:互联 ...

  8. [溫習]什么是Web 2.0

    2001年秋天互联网公司(dot-com)泡沫的破灭标志着互联网的一个转折点.许多人断定互联网被过分炒作,事实上网络泡沫和相继而来的股市大衰退看起来像是所有技术革命的共同特征.股市大衰退通常标志着蒸蒸 ...

  9. 什么是Web 2.0

    2001年秋天互联网公司(dot-com)泡沫的破灭标志着互联网的一个转折点.许多人断定互联网被过分炒作,事实上网络泡沫和相继而来的股市大衰退看 起来像是所有技术革命的共同特征.股市大衰退通常标志着蒸 ...

  10. web 3.0 的个人理解总结

    web3.0 1.web3是什么: Web3.0将是一种"去中心化"的模式. 对于web3.0来说,用户自己就是平台.在这种环境下,用户不必在不同中心化的平台创建多种身份,而是自己 ...

最新文章

  1. elasticsearch 索引 red 状态恢复 green
  2. SpringMVC实战(注解)
  3. 遗传算法 差分进化算法 粒子群优化算法区别
  4. linux date -s_Linux炫技:左手密码生成器,解放右手生产力
  5. 定制geojson的一些小技巧和方法
  6. PHP与MySQL动态网站开发:第4版
  7. Android布局之表格布局
  8. MT6573添加新硬件模块驱动方法
  9. Banner加载轮播图
  10. 通过ESP8266手机或电脑浏览器网页能控制远程任意组任意路继电器开关并收发单片机指令 测试OK
  11. 自定义制作音频播放器_使用HTML5制作音频播放器,第1部分:功能和设计
  12. 华为p4支持鸿蒙功能吗_华为P40或用鸿蒙 鸿蒙系统支持哪些手机 鸿蒙系统什么时候能用...
  13. 8cm等于多少像素_1寸照片尺寸是多少,对应的像素是多少
  14. 支持苹果18W-60W PD快充协议芯片JD6606S
  15. 存在阿里云OSS的视频截取一张图片作为封面
  16. 一入IT深似海 从此妹子为路人
  17. AWT/SWT/SWING 区别和联系
  18. 国内外网站空间优劣势
  19. sift特征检测与匹配
  20. ecshop Strict standards: Only variables should be passed by reference in flashplay.php on line 181

热门文章

  1. 基础Constants用法
  2. 计算机关机界面卡住,电脑关机时卡在关机界面的解决方法
  3. Flask蓝本与子域名
  4. 基于Java Web的航空售票管理系统(酒店管理系统,图书管理系统、学生管理系统)
  5. 7z的压缩包linux下如何解压软件,7z(p7zip)压缩软件在Linux下的安装和使用
  6. android开发面试问题,这个回答让我错失offer!好文推荐
  7. Compose | 一文理解神奇的Modifier
  8. 《UnityAPI.ParticleSystem粒子系统》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Particle+loop+Emit+立钻哥哥++OK++)
  9. 2021-2027全球与中国自动卡车装卸系统市场现状及未来发展趋势
  10. 2个路由器串联做交换机共享网络的方法