所有编程皆为 Web 编程

Michael Braude对Web编程大受追捧表达了他的不屑:

大部分人想去做Web编程的原因是,他们不够聪明,因此也做不了别的事。 他们不懂编译器、并发性、3D或类继承。他们根本不明白我为什么要使用接口或者抽象类。他们不理解虚函数、指针、引用、垃圾回收、终结器、传引用与传值的 区别、C++的虚拟析构函数、或者C#的结构体与类之间的差别。他们对进程也一无所知。更别提瀑布、螺旋、敏捷了!他们从来没看过需求文档,也从来没写过 设计文档;他们从没画过一张UML图,甚至听都没听说过有“顺序图”这种东西。

不过,他们确实有些手段:他们知道怎样匆匆拼凑一个ASP.NET网页,向数据库发一些(写得很糟糕的)SQL指令,填上一个数据集,然后用网格控件展示出来。他们也就会这些了吧。而且,他们在弄明白这些东西的时候,很可能也没费多长时间。

因此,请恕我冒犯——我才不想当Web程序员呢!我有两个理由。第一,那对我太没有挑 战性了。第二,因为绝大多数互联网公司的工程师都很糟糕,更准确地说,因为你不必去琢磨深奥的东西就能成为一个Web开发者。在我看来,互联网正让我们变 得越来越弱智。拼凑出一个网页真的不需要你有那么聪明。

我真心希望大家都错了,希望不必所有的东西都“转向Web”。因为如果真这样的话,将来的某一天,我要么会不情愿地接受这种无聊的转变,要么只能换一个职业了。

Web开发没有挑战性,所以吸引了不够格的软件开发者?让我们姑且不讨论这种荒谬的观点。即使过去真是这样,如今的情况也已经不同了。

我其实不想在Michael面前扮演“坏人”,告诉他这个坏消息:对于越来越多的用户来说,桌面应用软件已经完蛋了。几年来,大部分桌面应用软件都被Web应用代替了。随着网络浏览器进化得越来越强大和健壮,每天都有更多的桌面应用被取代。

你希望不必所有的东西都“转向Web”?醒醒吧!这已经发生了!

任何学习计算机历史的学生都可以告诉你,Web应用成为主流正是“最不强大原则”(The Principle of Least Power)所预示的:

计算机科学界过去花了40年的时间,致力于让语言尽可能地强大。时至今日,我们必须感 激那些让我们选择不是最强大的解决方案(而选择最不强大的方案)的原因。计算机语言越不强大,你对用那种语言存储的数据能做的事情就越多。如果你以一种简 单的陈述形式来书写,任何人都可以写一个程序去分析它。比方说,一个呈现天气信息的网页使用RDF(译者注:资源描述框架,一种用于描述Web资源的标记 语言)来描述数据,用户可以把它装进一个表格,也许再做一下平均计算,绘制图表,然后结合其他信息做出某种推断。另一种极端的做法是,天气信息通过巧妙的 Java小程序描绘出来。尽管这种方式可能做出很酷的用户界面,但它完全不能被分析。找到这个页面的搜索引擎将无法判断那是什么数据或者那些数据有什么 用。要想知道一个Java小程序是做什么的,唯一的办法是亲眼目睹它运行起来。

互联网恰恰是做最简单(或者说最傻)而靠谱之事的具体表现。如果这吓到了你(让你感到不安了),那么我要小声地告诉你,你没有理由成为一名程序员。

所有应用都应该成为Web应用吗?当然不是。总有一些重要的例外,有些种类的软件跟网络也毫无关系。但是,这些是少数情况,是一些特殊应用。它们固然是重要的小生态环境,但不管怎么说,就只是“小生态”。

如果你希望尽可能多的用户来使用你的软件,绝没有比把它做成Web应用更好的方法了。对于现存软件来说,互联网是最高效、最普遍、最直接的分发网 络。任何用户只要能连上网,有一个浏览器,不管他身处世界的任何一个角落,只须点两下鼠标就能与你写的软件开始交互了。哪怕是最蹩脚的Web应用,它的受 众面和传播度都是令人震惊的;而且还在每天扩大着……我也曾因此杜撰了“阿特伍德定律”:任何可以用JavaScript来写的应用,最终都将用JavaScript来写。

从工程的角度来看,用JavaScript来写Photoshop、Word或Excel毫无意义。但是,这是不可避免的。这事会发生的。实际上,这事已经在发生了。环顾一下你的四周吧。

作为一名软件开发者,最让我开心的是编写有人使用的软件。如果你的软件委身于一个二进制的EXE文件,它必须被购买、授权、运送、下载、安装、维护 和升级,你的技艺又有什么意义呢?考虑到程序员与用户之间的所有这些传统障碍,软件行业居然还能生存下来,这真是一个奇迹!然而,在华丽而崭新的Web应 用世界里,那些制约已经不复存在。边界没有了。软件可以无处不在!

Web编程还远远没有达到完美的境地。其实,还有点乱!没错,随便会写点代码的人就能三下两下地搞出一个糟糕的Web应用;也确实,99%的Web 应用都似狗屎一堆。但是,这也意味着,相当“聪明”的程序员们正在将他们的成果展现在成百上千(或者成千上万,甚至几百万)的用户面前,而这在互联网盛行 之前是绝无可能的。在我看来,让代码遭受冷落、让它们就此孤独终老,没什么比这更让人感到悲哀的了!把软件按照Web应用的形式重整一下,即使软件本身并 不怎么样,这也使得程序员们能够把他们的软件展现在某个地方的某人面前。

如果受众面和技艺方面的观点不足以说服你,那就从商业的角度来考虑一下吧。Mark Fletcher曾经给出过一份创业规则,其中就有这么一条:

你在做一个Web应用,对吧?这不是20世纪80年代了!纵然你的竞争对手把(桌面)应用软件做得别致优雅,你那简陋而寒酸的Web应用也仍然会比它更加成功。

要不了多久,所有编程都将是Web编程。对于普通的在职程序员来说,如果你不认为这是一个值得庆贺的理由,你也许应该转行了。

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-09-15 09:44:12

所有编程皆为 Web 编程的相关文章

面向桌面编程模式和web编程主要区别是是什么

问题描述 面向桌面编程模式和web编程主要区别是是什么?java编程可以编写面向桌面的软件吗? 解决方案 解决方案二:1.交互性:桌面是双向的,而web只能是server回应client请求,一般不主动询问.2.多线程:桌面要看实际情况程序员自己而定,web服务器端是天生的多线程,程序员无需考虑.解决方案三:区别是使用swing/swt与使用html解决方案四:一看web就联想到网页网站你就应该.想到和桌面程序的区别了吧解决方案五:java编程当然可以编写面向桌面的软件

WEB编程开发常用的代码

web|编程  1. ASP与Access数据库连接: dim conn,mdbfile  mdbfile=server.mappath("数据库名称.mdb")  set conn=server.createobject("adodb.connection")  'conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfileco

教你如何使用JSP面向对象web编程技术实现树形控件

js|web|编程|对象|控件 树形控件是一种人们熟悉的用户界面控件,广泛地用来显示层次型数据. 树形控件具有独特的扩展和折叠分支的能力,能够以较小的空间显示出大量的信息,一目了然地传达出数据之间的层次关系.凡是熟悉图形用户界面的用户,都能够自如地运用树形控件. 图一:用java script实现的树形控件 HTML本身不支持树形控件,但我们可以通过一些java script脚本代码实现.为了提高控件的可重用性,我们要充分运用java script对面向对象编程技术的支持.本文的树形控件适用于I

使用WCF的Web编程模型开发REST风格的Web Service

WCF中的Web编程模型提供了一种以REST风格来设计Web Service的功能,它不同于以往基于SOAP或者WS-*规范的Web Service,而是以URI和http协议为中心的.对于操作的每一个资源有唯一的标志符,而利用不同的http动作(例如GET,POST,PUT,DELETE)来对这些资源进行相应的操作.同时该模型中还提供URI Template,它是用来定义参数化的URI,使URI的某些部分作为参数在服务中使用.可能这样解释十分含糊不清,下面用一个小例子来说明这种Web编程模型.

asp.net WEB编程 如果获取剪切板里的多条数据复制到gridview中?

问题描述 先从excel表中复制多条数据,再把这些数据粘贴到gridview中!web编程引用不了system.window.form! 解决方案 解决方案二:最好有实例!自己顶一下!!解决方案三:up...............解决方案四:如果是web的话,你需要先把excel文件上传到服务器,然后在读取这个文件....

vo封装-Java web编程基础 在线考试系统源代码

问题描述 Java web编程基础 在线考试系统源代码 一.功能说明 1.学生 学生使用学号和密码登录系统,实现在线答题,提交试卷后可以直接查看测试成绩. 2.教师 教师使用教师号和密码登录系统,可以实现题目表question的维护工作(增删改查). 二.结构说明 采用JSP+JavaBean模式,利用VO实现对象的封装. 三.界面说明 界面设计合理.友好,可操作性强,充分考虑用户的使用需求. 四.数据库说明 三张表: 1.学生表student:记录学生的学号.姓名.密码.测试成绩 2.教师表t

入门问题:请指一条学习之路!(网络编程/网页编程/Web编程)

问题描述 入门问题:请指一条学习之路!(网络编程/网页编程/Web编程) 我之前兴趣一直在单机方面的编程,但是网络早已铺天盖地,不搞网络编程是就成了井底之蛙.但是网上.书店有关网络编程/网页编程/Web编程的内容让我眼花缭乱,感觉无从下手,所以请前辈帮我一条学习之路.比如先学什么技术,再学什么等等,最好推荐几本有名的书.谢谢! 解决方案 先挑选一种语言,比如PHP.Java或者C#,然后挑选一个方向,比如前端或者后端.然后才好谈到怎么学和看什么书. 推荐你用这种语言作为关键字在amazon中搜索

Java web编程上传图片

问题描述 Java web编程上传图片 if(p.getContentType().contains(""image"")){ ApplicationPart ap=(ApplicationPart) p; String fname=ap.getSubmittedFileName(); p.write(path+""/images/""+fname); request.getSession().setAttribute(&qu

在Java的Struts框架下进行web编程的入门教程_java

当点击一个超链接或提交一个HTML表单在Struts2 的 Web应用程序,输入所收集被发送到一个Java类称为操作控制器.当动作执行后,结果选择了一个资源来呈现响应.资源通常是一个JSP,但它也可以是一个PDF文件,Excel电子表格,或一个Java applet 窗口. 假设已经建立开发环境.现在让我们继续为第一个 "Hello World" 的 struts2 项目构建.这个项目的目的是建立一个Web应用程序,它收集用户的姓名,并显示"Hello World"