在 Forge - 第 200 期

作者:Reuven M. Lerner

所以,Linux Journal 已经达到了第 200 期!正如你们许多人所知,在很长一段时间里,我一直在为这本杂志撰稿。据我统计,这是我的第 168 篇月度专栏。我从 1996 年开始写作,那时我还没有结婚,没有成为父亲,也没有开始我的博士学位研究。很难回忆起 Linux Journal 不是我每月日程表上的固定项目的时候。

当我回顾这些年时,令人惊讶的是 Web 技术领域发生了多少变化。然而,也有许多东西保持不变。本月,我用一点怀旧之情来庆祝这本杂志的发行,提醒您我们曾经走过的路,并描述我们前进的方向。在此过程中,我将讨论我打算在未来在这个专栏中探讨的一些主题。

过去

至少有一些本专栏的读者可能还记得 Web 和互联网并不普及的时代。我的孩子们总是惊讶地听到我曾经是班级里唯一拥有家用电脑的孩子之一。他们很难理解,当我的母亲告诉我们应该查找一些东西时,她的意思是我们应该开车去当地的公共图书馆,在主题索引卡片中找到关于这个主题的书籍,并在这些书中搜索以找到答案。今天,互联网,尤其是 Web,已经成为我们日常生活中的固定部分。但在 1988 年,就在我刚上大学之后,当我问我的朋友们是否有互联网电子邮件地址时,他们给了我一个奇怪的眼神。当我们在 1993 年将麻省理工学院的学生报纸放到 Web 上时,我们不得不告诉人们如何在他们的计算机上安装 Web 浏览器。所有这些显然都已成为过去。至少,现在很难找到一个广告底部没有 URL 邀请您了解更多信息。

经过数十年的关于超文本系统的讨论和发展,万维网(蒂姆·伯纳斯-李的创意)会成为一个主要的流行事物,这并不一定是显而易见的。然而,对于我们这些在早期使用它的人来说,Web 比它的竞争对手有许多明显的优势。设置服务器和站点很容易。协议简单易懂,易于实现,易于调试(因为它们是基于文本的)。地址是唯一的、易于阅读和易于书写的。清晰性、易于实现和易于使用是启动 Web 革命的关键。简单、易于使用的方法的成功在今天也很容易看到——看看 Twitter、LinkedIn 或 Facebook 就知道了。

早期 Web 最大的缺失是编写自定义应用程序的能力。设置一个服务器,使 HTML(和其他)文件可供公众访问很简单。但是,CGI(一种允许 HTTP 服务器与外部程序通信的标准协议)的发明使得程序员可以编写动态 Web 应用程序。Web 是一种新的应用程序平台的想法对于我们许多人来说有点难以接受。我记得在 1995 年在时代华纳工作时,当我听到我的头衔是“Web 应用程序开发人员”时感到不满,说认为我们正在开发“真正的”软件应用程序是荒谬的。当然,今天,Web 应用程序在许多方面已经超越了它们的桌面对应物。

Apache Web 服务器是 Web 开发最重要的贡献者之一,它体现在许多方面。它是最早的著名的开源项目之一,明显优于任何商业竞争对手。(您甚至知道曾经有一个商业 HTTP 服务器市场吗?)Apache 的强大功能和灵活性使许多大型公司确信,他们应该与不直接与其核心业务竞争的开源项目合作和沟通,甚至为之做出贡献。如果我没有记错历史,我相信正是 IBM 对向 Apache 的开发捐款的兴趣,但开发人员缺乏任何可以接受这笔钱(更不用说签署合同)的正式基础设施,这导致了 Apache 软件基金会的成立,它是当今开源社区最杰出的参与者之一。

Apache 还展示了模块化软件设计的优势。因为 Apache 旨在服务于许多不同的群体,所以它的开发人员将其创建为一组模块,每个模块都可以根据站点的需求包含或排除在最终产品之外。

最后,Apache 使得创建自定义 Web 应用程序成为可能,而无需遭受与 CGI 程序相关的性能问题,或与编写自定义支持 HTTP 的应用程序相关的开发时间。通过编写您自己的模块(用 C 语言),您可以做几乎任何事情,将您的自定义功能附加到一个或多个 Apache 在 HTTP 请求的生命周期中发布的挂钩上。最终,可以使用 Perl 和 Python 而不仅仅是 C 来编写自定义应用程序成为可能——任何从 Perl 中的 CGI 程序转向 mod_perl 的人都从速度和灵活性方面都获得了巨大的提升。

到 1990 年代末,大多数人都在幕后使用关系数据库来跟踪他们的数据,因为他们发现文本文件不够快速或灵活来完成这项工作。许多应用程序使用商业数据库,希望有一天我们可以在不必向大型公司支付巨额资金的情况下享受 SQL 的强大功能。事实上,从 1990 年代后期开始,事情开始好转,无论是在开源许可还是功能方面。MySQL 在 GNU 通用公共许可证下重新发布,并开始朝着 ACID 合规性的方向发展,而 PostgreSQL 开始提高其可用性,摆脱了诸如可笑的小最大元组宽度之类的问题。

现在

今天,创建 Web 应用程序很容易。您可能需要的几乎任何技术基础设施部分——包括操作系统、数据库、编程语言和框架——都可以在开源许可证下获得。事实上,问题通常不是找到合适的东西,而是梳理许多相互竞争的开源项目,每个项目都有其自身的优点和缺点。

开源现在是常态,甚至在许多地方都是预期的。我最近在以色列的一个 Web 开发人员会议上谈到了 Ruby on Rails,其中一个主题演讲是由一位微软员工做的。他说的每隔一句话都谈到开源软件,让流行的开源软件包在微软技术下工作,以及中小型站点如何在达到一定程度的成功之前免费访问微软产品。换句话说,微软明白天平正在向开源世界倾斜,并且通过提供更高的标准合规性和更低的价格来竞争——开源倡导者可以将其视为某种程度的胜利。

现代 Web 开发通常发生在“框架”内,框架是使开发人员的生活更轻松的库的集合。一些最流行的 Web 框架是 Rails (Ruby)、Django (Python)、Symfony (PHP) 和 Catalyst (Perl),尽管对于这些语言和其他语言来说,还有几十个,甚至数百个其他的框架。通过使用框架,开发人员可以专注于他们的特定领域,而不是多次重新发明相同的基础设施。

这些框架中的大多数都使用 MVC(模型-视图-控制器)范例,该范例在 20 多年前由 Smalltalk 等语言开创,这不仅反映了 Web 应用程序日益增长的复杂性和成熟度,而且也反映了创建这样一个应用程序所需的团队的规模和多样性。在 MVC 框架中保持事物分离,确保设计师在开发过程中可能不会踩到开发人员的脚趾。通过采用 Ruby on Rails 开创的“约定优于配置”的思想,开发人员还可以避免关于每个文件应该放在哪里的讨论、争论和考虑。

今天,问题不是您是否要使用数据库进行数据存储,而是您想要使用哪一个数据库,它是关系型的还是非关系型的(“NoSQL”),以及您将使用哪种接口与之通信。大多数现代框架都无缝地处理关系数据库,通常为您提供 ORM(对象关系映射器),使您可以忽略您实际上正在使用 SQL 将信息存储在二维表中的事实。这些 Web 框架也越来越支持非关系数据库,从而可以选择哪种类型的数据存储最适合您的特定应用程序。

不仅框架发生了变化,语言也开始发生变化。Perl 在某些角落仍然很流行,PHP 仍然坚持着,但增长和行动似乎发生在 Ruby 和 Python 以及许多其他更新的语言中。事实上,我经常说 Perl 非常适合早期的 Web 应用程序,因为它的优势在于文本处理、网络和数据库——这正是 Web 应用程序所需要的。随着应用程序变得越来越大,这些优势不如维护代码的能力重要,而 Ruby 和 Python(在我看来)更适合维护代码。

随着我们走向未来,我们看到对函数式和分布式编程的需求,这使得 Scala、Clojure 和 Erlang 等语言更受欢迎。Scala 和 Clojure 虽然是非常不同的语言,但都是建立在 Java 虚拟机 (JVM) 之上的,jRuby 也是如此。JVM 作为非 Java 语言的底层基础设施的日益普及继续引起我的兴趣,并且它提出了随着这些语言变得越来越流行,Java 本身会发生什么的问题。

至少对我来说,也许最大的惊喜是 JavaScript 在过去几年中的增长,从一种几乎不用于为某些菜单添加动画效果的语言,到一种导致所有主要浏览器中引入了全新的 JavaScript 引擎,并创建了几个高质量的跨平台库的语言。我当然倾向于对 JavaScript 作为一种语言嗤之以鼻。在许多方面,我现在喜欢使用 JavaScript 的原因是因为库(例如 jQuery 和 Prototype)将我与该语言的一些问题隔离开来,而不是语言本身的变化。

JavaScript 也继续出现在浏览器以外的地方。JSON,JavaScript 对象表示法,已成为 XML 的一种非常流行的轻量级替代方案,用于在计算机之间传输数据。Node.js,一个用于使用 JavaScript 创建高性能网络和服务器应用程序的 JavaScript 库,已经开始取得 серьезные успехи。

一旦您将应用程序组合在一起,您将在哪里托管它?您仍然可以将其放在您拥有的服务器上,或者放在您租用的服务器的一部分上,但云计算已经占据了该行业,不仅因为它使托管变得容易得多,而且还因为它意味着您不再需要雇用完整的 IT 人员来运行服务器。

最后,虽然我们将 Web 应用程序视为与人有关,但事实是许多应用程序用于机器对机器的通信。各种微格式以及基于 JSON 和 XML 的系统的增长持续上升。此外,API 的增长(和重要性)在过去几年中呈爆炸式增长。虽然 Web 应用程序提供 API 曾经是一件好事,但现在几乎可以预期每个人都会提供 API,供桌面应用程序、移动应用程序、聚合系统或混合和匹配已完成工作的新用途使用。

现在,我们正在享受可能看起来是所有可能世界中最好的:简单、廉价和可扩展的托管,适合快速、可维护开发的编程语言和框架,以及灵活的存储系统,这些系统可以无缝连接到我们选择的编程框架。今天创建 Web 应用程序的主要限制更多地与技能和时间有关,而不是金钱,正如我们从 Facebook 上应用程序的快速增长中看到的那样。

未来

那么,事情将走向何方?

首先,我们已经可以看到,将 Web 视为人们浏览的东西,大型集中式服务器提供静态信息的概念在很大程度上是不准确的。人和机器都在上网,他们使用越来越多的不是 Web 浏览器,而是包含 HTTP 客户端库的程序来上网。服务器遍布各地,信息远非静态。就在我写这篇专栏文章时,谷歌宣布它已经改变了其搜索系统的工作方式,这样它会在您键入关键字时更新搜索结果页面,而不仅仅是在您单击“提交”按钮时更新。正如 Web 总是在变化一样,也正如每个人都看到 Web 的不同、个性化的切片一样,您的搜索结果现在也将为您提供您独有的数据视图。

我们还可以预期桌面软件会进一步衰落。对于 Linux 和其他开源操作系统的爱好者来说,这实际上是个好消息,因为这意味着 Windows 和 Macintosh 用户长期以来在他们的桌面软件中享有的质量、可用性和用户体验之间的差距将会缩小。正如 Marc Andreessen 在 Netscape 工作时预测的那样,Web 浏览器确实正在成为应用程序开发、部署和使用的主要焦点。即使是那些不是浏览器的程序也将成为浏览器,连接到互联网并检索(或发送)信息,与其他服务器交换数据。

当 Web 服务大约在十年前首次流行起来时,每个人都使用拼写检查器作为 Web 服务的示例,您的文字处理器可以连接到该服务。这个例子的原因不仅是因为它很容易理解,而且还因为我们不知道 Web 服务可以提供什么。如今,此类服务可以提供私人信息(例如联系信息)或公共信息(例如地图和照片)。我们将继续看到 Web 服务方面的增长,尽管在企业之外,开发人员似乎已经基本上放弃了 SOAP,转而使用更轻量级的技术。

基于 Web 的应用程序将变得如此出色的原因之一是 HTML5,它是 HTML、CSS 和 JavaScript 改进的组合,这些改进正在逐步实施,但它们加在一起将使浏览器远远超出通常应用于它的“现代哑终端”描述。新的表单功能、验证数据的新方法、更轻松地访问 DOM、新的 CSS 选择器和功能,以及 HTML 中更多种类的语义标记将使其成为非常重要的升级。我唯一的担忧和抱怨是,每个浏览器制造商都在不同的时间实施 HTML5 的不同部分,这意味着我们需要在一段时间内担心优雅降级。

未来专栏

那么,我打算在未来几期的“在 Forge”专栏中讨论什么呢?我当然会尝试涵盖一些对 Web 开发人员有用的基本技术,例如最近发布的 Ruby on Rails 3 和 PostgreSQL 9.0 的发布。我将花一些时间探索 HTML5 标准,既要关注我们可以在 HTML 中享受的新标签,也要关注我们可以在应用程序中使用的 JavaScript 改进。

我还打算研究一些新兴的语言,以及基于这些语言构建的 Web 框架。最让我感兴趣的三种语言和框架是 Lift(用于 Scala)、Compojure(用于 Clojure)和 Seaside(用于 Smalltalk)。

存储——非关系数据库将越来越受欢迎。更重要的是,它们将获得我们在关系数据库中期望的功能,例如连接和数据完整性。最终结果将是许多不同的非关系选项,可以为应用程序混合和匹配,就像开发人员可能混合和匹配数组和哈希的用法一样。它们会胜过非关系数据库吗?我对此表示怀疑,但我会尝试报道来自这个世界的发展以及它们如何影响开发人员,随着事情的发生。

最后,我打算研究“微格式”的增长,这是一种旨在简化机器对机器通信的微小的基于 JSON 和 XML 的文档格式。您如何使用微格式?您何时想要这样做?

继续为 Linux Journal 写作是一种荣幸。我喜欢听到读者联系我,并帮助告知其他开源开发人员关于 Web 技术前沿的最新信息。而且,我期待在八年后写一篇更全面的回顾,届时我们将达到 LJ 第 300 期。

Reuven M. Lerner 是一位资深的 Web 开发人员、架构师和培训师。他是西北大学学习科学博士候选人,研究协作在线社区的设计和分析。Reuven 与他的妻子和三个孩子住在以色列的莫迪因。

加载 Disqus 评论