Web 开发之基本功

我感觉有些人学了 PHP 再学 ASP.NET 又学 J2EE,学了 struts 1.x 学 2.x,每学一种新的 web 开发技术都像是学一种完全陌生的技术一样。

实际上这么多种语言、框架并存,各有各的优缺点。然而所有这些语言、框架的基石,都是 HTTP 协议。最起码的,一个 web 开发者要知道,它是无状态的 (stateless)。客户端向服务器发起请求,通常是 GET/POST 方式,服务器通常返回一个 HTML 文档,有时候就是随意一种格式(比如图片、二进制或者纯文本)。HTTP 协议需要特别注意的地方还包括缓存 (cache control) 以及跳转 (301/302) 等。

我觉得,框架应该是归纳整理重复性的劳动,吸纳优秀的设计模式,而不是努力掩盖 HTTP 协议的本质。对 Web 开发者掩饰 web 的本质,是非常邪恶的一件事情。ASP.NET 就一直不遗余力地朝着这个目标发展,硬要把桌面程序的编程模式搬到 web 开发上来,Windows form、web form 的概念混为一谈,毒害了无数无辜的程序员。程序员接触到新的开发环境时,很可能到处碰壁,满地找牙(这个牙,可能就是 ASP.NET 给装的假牙——Event)。前段时间看了一下 Tapestry,发现该项目的老大有和 ASP.NET 类似的理念,按照他的说法,页面上的链接宁可在服务器端被 OnClick 处理一下然后 302 redirect,也不舍得直接指向实际的链接——声称这样更符合思维习惯。看到这个,我就明白了为什么 JavaEye 上有人惊呼,Tapestry 有点像 ASP.NET 啊,真好!说实话,看到这样的赞美,我就慌了。要 Tapestry 是我写的(假设而已,我现在还没这个能力),我就会反驳:“你才像 ASP.NET 呢!你们全家都是 ASP.NET!”.

同志们,看清本质吧。web 开发真正的核心是 HTTP 协议,至于 Java 还是 C# 还是 PHP,它们只是服务器用来生成发送给客户端的那个 HTML 或其它格式的文档用的。尽管它们会影响到程序性能、开发速度等诸多方面,但是如果你连 HTTP 协议都不了解,即使使用的语言、框架再好、再高性能,也如同把一座钢铁大厦建在流沙之上。

等了解了 HTTP 协议,再往上看哪种语言更适合 web 开发,哪个框架更好。否则就像是农民还没搞清楚土壤成分就随便种庄稼一样,收成是好不了的。

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.