锻造车间 - 第 100 栏

作者:Reuven M. Lerner

欢迎来到《锻造车间》的第 100 期!是的,没错,这是我为Linux Journal以及之前的 SSC 的Websmith撰写的第 100 篇专栏文章,始于 1996 年春季。多年来,我一直很享受每月有机会探索 Web 和服务器端技术。

本月,我想回顾一下服务器端和 Web/数据库编程的一些历史,以便我们能够了解当前情况。然后,我们将探讨当今 Web 的现状,并考虑未来几年的发展方向。

回顾

今天,人们很容易将 Web 和互联网视为理所当然。我在 Web 上跟踪我的银行账户;我在网上书店买书;我使用基于 Web 的 RSS 阅读器阅读网络日志;我访问的新闻报纸比印刷版更新;我通过即时通讯程序与朋友和亲戚聊天,甚至通过 PayPal 收款。人们常说,曼哈顿的居民永远不需要离开家,因为一切都可以送货上门。无论好坏,互联网正在使这成为全球越来越多人的现实。

互联网在商业和娱乐方面的成熟是戏剧性转变的结果。最初,Web 服务器是共享存储的纯文本和 HTML 格式文本文件的机制。但在探索 Web 上相对有限数量的文档变得流行之后不久,就有人意识到 HTTP 固有的客户端-服务器性质使得动态创建文档以响应请求成为可能。从服务器请求文档的 HTTP 客户端无法知道文档是在服务器的文件系统中存放了几个月,还是在现场创建以响应此请求。这种洞察力永远改变了 Web,将其转变为实时文档生成和应用程序开发的平台,而不是静态文档的简单共享存储库。

这种动态革命的开端相当原始。第一个动态生成的内容只不过是对传统 UNIX 命令行程序(如 mail 和 finger)的简单包装。例如,我和我的朋友编写的第一个程序之一是一个简单的程序,它可以搜索我们报纸的在线档案内容。当然,我和我的朋友本可以创建具有此功能的专用 HTTP 服务器。对我们以及所有 Web 开发人员来说幸运的是,NCSA httpd(Apache 的前身)的设计者使得服务器上的任何程序都可以通过其通用网关接口(通常称为 CGI)使用 HTTP 进行通信。CGI 意味着我们服务器上的任何程序都可以通过 Web 访问,只需将其包装在 CGI 程序中即可。

在那些早期,事情仍然很粗糙。我们都认为 Web 本质上是无状态的,当 Netscape 宣布创建 cookie 时,我们感到惊喜,这使得服务器可以跟踪用户特定的信息。当时还没有程序可以报告 Web 流量,更不用说处理与 Web 编程相关的底层细节的库了。调试包括查看 Web 服务器的错误日志。并且使用比简单文本文件更复杂的东西被认为是复杂的数据存储技术。

此时此地

当然,今天的 Web 开发与那时相比已经大相径庭。下载和安装最新版本的 Apache 是一件微不足道的事情;在访问 www.apache.org 几分钟后,您就可以在您最喜欢的计算机上运行最先进的 Web 服务器。关系数据库几乎是您可能想要创建的任何复杂 Web 应用程序的隐含要求。但在很多时候,您甚至不必创建自己的程序——现在可用于创建 Web/数据库应用程序的库、应用程序和框架的数量已经变得令人眼花缭乱。过去,您需要到处搜索才能找到适合您需求的开源应用程序。如今,找到合适的应用程序仍然需要时间,但这仅仅是因为您需要筛选掉太多糟糕或不合适的应用程序,才能找到最适合您的应用程序。

此外,开发人员社区在过去几年中也变得非常成熟。服务器端编程世界的新手从来不缺乏善意或帮助,但经常缺乏经验,因为尝试过的东西太少了。在某些方面,早期的 Web 编程类似于研究实验室网络,每个实验室都会与社区的其他成员分享其经验。今天,开源社区和公司内部都积累了大量经验。有兴趣创建新应用程序的年轻程序员几乎可以从无穷无尽的书籍、杂志、网站和源代码中学习。

同样真实的是,用于创建 Web/数据库应用程序的最流行的编程语言——Perl、Python、PHP 和 Java——在过去几年中也取得了显着进步。但是,这些语言及其库的改进给我的印象不如计算机行业中高级语言的趋势深刻。

当 Web 兴起时,大多数人使用 C 和 C++ 开发软件。使用高级语言(如 Perl 和 Python)编程的人被视为光荣的修补匠,或者在某种程度上不如他们的编译语言同行认真的人。Web 改变了这一切;即使您只使用 PHP,现在也可以被视为认真的应用程序开发人员。当然,编译后的 C 代码的执行速度仍然比等效的高级代码快。但是,开发和调试时间方面的相应差异通常非常大,以至于几乎没有人用 C 编写 Web 应用程序。

我们越来越看到,主流公司正在普遍转向高级语言,并转向许多开源程序。从亚马逊到 eBay 的许多公司都发现,他们的程序员在使用高级语言时效率更高。Java 和 C# 是主流使用的最低级 Web 开发语言这一事实,充分说明了该行业的发展方向。使程序员能够专注于高级思想,而不是亲自动手处理各个位和字节的语言已成为主流。Java 在很大程度上作为桌面应用程序语言已经失败,但由于微软的 .NET 计划,C# 似乎正在加速发展——这意味着在未来几年内,大多数桌面应用程序可能会在缺乏指针并包含垃圾回收的语言中运行。

显然,程序员转向此类语言有很多技术和财务原因。但我毫不怀疑,Web 帮助将这个问题推到了最前沿。Perl 等高级语言非常适合 Web,它具有模糊的数据类型、对数据库连接的需求以及对易于使用、功能强大的文本字符串和字符串操作库的需求。Web 只不过是一堆通过网络传输的文本字符串,没有人能比高级开源语言更快或更远地传输文本。

用于创建服务器端应用程序的框架数量也出现了显着增长。即使您有一种易于使用的编程语言,您仍然需要实施自己的系统来管理用户、组、权限、内容和消息。通过使用现有框架,您可以避免这项工作,并利用别人的经验。框架朝着两个不同的总体方向发展——内容管理系统,它执行报纸和杂志的即时组装,以及应用程序服务器,它为开发人员提供创建应用程序的工具包。

从表面上看,您可能会认为 HTML::Mason、Zope、OpenACS 和 Java servlet/JSP 等应用程序框架几乎没有共同之处。但是,任何使用过不止一个这些系统的人都会很快发现,尽管每个框架都有自己的方法,但它们有很多共同点。从一个框架转移到另一个框架仍然可能很困难,但是一旦您对几个应用程序框架有了足够的经验,尝试其他框架就会变得相对容易。

是的,与十年前我们必须忍受的相比,成为 2005 年的 Web 开发人员是非常愉快的。软件越来越成熟,社区庞大且乐于助人,我们不再每隔一周就重新发明轮子,并且将站点转移到 Web 的组织数量意味着市场对我们的工作有一定的需求。

未来

鉴于对当今如此乐观的描述,我们未来的发展方向是什么?当我们度过 2005 年时,哪些趋势会加速发展?首先,很明显,我通常所说的 Web,即 HTTP、HTML 和 URL 的组合,正在慢慢分解成单独的组成部分。我一直认为 Web 非常强大,因为它结合了三种简单而强大的技术——HTTP、HTML 和 URL——它们协同工作良好。但我现在看到,每种技术本身都很有用,并且正在扩展到其他用途。

特别有趣的是 Web 服务,它代表了一种新的、丰富的、开放的通信协议,适用于 Web 浏览器以外的程序。当它们首次被公开时,我认为 Web 服务是一些简单的想法,搭上了 Web 的成功和名称识别的顺风车。尽管这可能是关于糟糕的名称选择的真相,并且尽管它们在理论上可能很简单,但 Web 服务确实非常强大。一个应用程序可以连接到另一个应用程序,而无需考虑操作系统或编程语言的想法简直令人惊叹。尽管真正好的 Web 服务用途仍然相对罕见,但亚马逊、谷歌和 Bloglines 正在证明,可以在不放弃商店的情况下向客户和其他外部人员公开您的内部 API。

类似的趋势是将 Web 浏览器用作桌面应用程序开发中的 integral 组件。现在,帮助系统是使用 HTML 和微型 Web 浏览器构建的,并且有一些成熟的应用程序,例如 ActiveState 的 Komodo,它们基于底层的 Mozilla 引擎。我经常说 Mozilla 是新的 Emacs。尽管 Mozilla 开发明显比 Emacs 定制难得多,但 Mozilla 为丰富的桌面应用程序提供了一个跨平台、可编程的环境这一事实令人印象深刻,并且很可能会进一步改进。

一个很有前景的应用程序是 Sunbird,Mozilla 日历程序,我已经在自己的桌面上使用了几个月。Sunbird 仍然存在许多问题和错误,但我最喜欢的功能之一是它使用 iCalendar 标准通过 HTTP 从互联网检索各种日历。是的,没错——我正在运行一个基于 Mozilla 的桌面应用程序,它通过 HTTP 检索 URL,但它不是 Web 浏览器!

在服务器端,协作是一个越来越重要的关键词。尽管它可能达不到商业百科全书的严格标准,但当我对某个主题感到好奇时,维基百科是我首先会访问的地方。并且由于成千上万的贡献者,它对于我的日常使用来说已经足够好了。管理这种协作绝非易事,而 WikiMedia 基金会的 MediaWiki 软件(基于 PHP 和 MySQL)正在悄然转变为用于集体写作和编辑的一流软件包。

最后,总是需要更好的调试和测试框架。这方面日益增长的趋势是更多测试,甚至是基于测试的编程。单元测试永远无法完全衡量软件是否正常工作——但是,您难道不希望在开始尝试集成所有程序之前,先知道它们是否都正常工作吗?测试驱动开发已被确定为过去几年中关键的方法论变革之一,我相信随着软件变得越来越复杂,它将继续变得流行。

结论

到目前为止,我很荣幸能撰写 100 期《锻造车间》。但正如您可以从我上面的热情中看出的那样,许多新的挑战在等待着 Web/数据库开发人员,这意味着至少还需要 100 篇专栏才能涵盖所有这些挑战。在接下来的几个月中,我们将研究本专栏中提到的一些想法,包括 iCalendar、Wiki 软件、Web 服务和测试驱动开发。

它可能已经有十多年的历史了,但 Web 仍然是一个有趣、令人兴奋且引人入胜的媒介。请发送电子邮件至 reuven@lerner.co.il,告诉我您认为 Web 的发展方向——以及您希望我在未来几个月和几年内涵盖哪些项目、技术和趋势。

Reuven M. Lerner,一位长期的 Web/数据库顾问和开发人员,现在是西北大学学习科学专业的博士生。他的网络日志位于 altneuland.lerner.co.il,您可以通过 reuven@lerner.co.il 与他联系。

加载 Disqus 评论