Logo
Section 1 / 3

可持续发展导论

了解可持续性及其在我们生活中的重要性。

导入

可持续发展导论

了解可持续性及其在我们生活中的重要性。

为什么这门课程存在?

Rails 可以实现可扩展性。但这到底意味着什么?我们该如何做到这一点?这门课程正是对这两个问题的回答。不过,我们不用“可扩展”这个词,因为许多开发者会将其等同于高性能。相反,我们使用“可持续”这个词。这正是我们希望从软件中获得的:能够长期持续维护和发展的能力。


为什么我们需要可持续性?

Rails 拥有许多功能,但我们未必都需要全部使用。或者,我们需要谨慎地使用其中一些功能。Rails 在应用架构上也留有空白,这些空白需要我们自己来填补(这也是合理的,毕竟 Rails 不可能满足所有应用的需求)。这门课程将帮助我们应对这些挑战。

在开始之前,我们要明确“可持续性”的含义及其重要性。同时,我们也需要说明本书写作时所基于的前提假设——因为并不存在放之四海而皆准的建议,只有在特定情境下才适用的建议。


什么是可持续性?

从字面意义上讲,可持续的 Web 开发就是能够持续进行的开发。

所谓“持续开发”,是指确保软件能够持续满足其需求。一个可持续的 Web 应用,应当能轻松应对新的需求、资源使用量的增长,以及开发团队规模或构成的变化。

如果系统难以修改,就难以持续;如果系统无法获取自身运行所需的资源,也难以持续;如果只有少数开发者能参与维护,同样难以持续。因此,一个可持续的应用,意味着无论明天要做什么改变,无论由谁来维护,这些改变都应像今天一样容易实现。这就是可持续性的定义。接下来,我们探讨它为何重要。


为什么关注可持续性?

大多数软件的存在是为了满足某种需求,如果这种需求长期存在,那么软件也必须随之持续存在。需求是主观且模糊的,而软件必须是客观且具体的。因此,构建软件往往是一个不断打磨和细化的过程,随着需求逐渐清晰化而演进。当然,需求本身也可能在过程中发生变化。

软件成本高昂

“软件成本高昂”指的是开发与维护软件所产生的巨大开销。这种高成本主要源于开发和维护软件系统所需的高度专业技能。具备编程能力的人才极为抢手,即使在入门级别也能获得全球顶尖的薪资水平。因此可以推断,如果某段软件随着时间推移越来越难增强和维护,它的成本就会不断上升,而价值却逐渐下降。

从经济角度看,可持续的软件能够有效降低长期成本。但除此之外,还有人的成本。在可持续的软件上工作更令人愉悦。人们常说员工离职是因为经理,但也确实有开发者因代码库而选择离开。

当然,抽象地关心可持续性是一回事,如何将其转化为实际行动又是另一回事。


可持续性就像一项投资。它不一定能在短期内见效,如果投资本身不稳健,最终也不会带来回报。因此,理解在当前情境下可持续性的价值,并尽可能获取充分的信息,来指导我们如何进行这项投资,至关重要。


如果我们是一名被雇佣的顾问,这些建议尤为宝贵。它为我们提供了一个成功的框架,尤其适用于信息极度有限的情况。策略——只构建你百分之百确定需要的功能——有助于快速交付软件并建立信心,但它并不必然带来可持续的结果。

例如,没有业务人员会要求我们添加日志语句以便在生产环境中理解代码;没有产品负责人会要求我们建立设计系统以加快界面开发;也没有人会强制要求数据库具备引用完整性。

软件的功能只是决定开发内容的一个输入因素,虽然非常重要,但并非唯一因素。为了做出更好的技术决策,我们需要掌握远超“用户想要什么功能”之外的信息。

我们是否清楚软件存在的经济或行为目标?换句话说:

  • 软件如何为支付我们薪酬的人创造收入?
  • 它预期会对业务带来哪些改进?
  • 企业的中长期发展计划是什么?
  • 是否需要显著增长?
  • 是否会有流量大幅增加?
  • 是否会有大量工程师加入?
  • 这些工程师是资深、初级,还是混合型?
  • 他们何时会被招聘,何时开始工作?

我们能获取的信息越多,就越有利于做出正确的技术判断,也能更准确地评估应用需要达到怎样的可持续程度。如果团队将迎来大量经验不足的开发者,我们的决策可能与仅招聘一两名资深专家时完全不同。

掌握了这类信息后,我们可以将技术决策纳入整体战略之中。例如,我们可以花几天时间搭建一个更可持续的开发环境。通过引用公司的增长预测和团队招聘计划,这项工作的合理性便很容易得到证明。

如果我们缺乏关于业务、团队或其他背景的信息,仅仅知道用户想要什么功能,那就很难开展可持续的开发工作。但这并不意味着我们不应主动去询问。

那些没有软件开发经验的人,未必能意识到这些信息的重要性,因此可能不会主动提供。但你可能会惊讶于,只要主动提问,就能获得多少有用的信息。

无论答案如何,这些信息都可以作为整体技术策略的一部分,而可持续性正是其中的关键一环。在本课程的学习过程中,我们将深入讨论各项建议和技巧背后的考量因素。它们未必都适用于你的具体情况,但其中许多都会对你有帮助。

这就引出了本课程所基于的一系列前提假设:换句话说,在什么样的情况下可持续性尤为重要?在哪些场景下,本课程的建议才真正适用?

序言

假设