原文作者:Jeff Atwood   原文链接:http://blog.codinghorror.com/all-programming-is-web-programming

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

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

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

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

我真心希望大家都错了,希望不必全部的东西都“转向Web”。由于假设真这样的话,将来的某一天,我要么会不情愿地接受这样的无聊的转变,要么仅仅能换一个职业了。

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

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

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

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

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

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

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

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

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

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

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

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

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

要不了多久,全部编程都将是Web编程。对于普通的在职程序猿来说,假设你不觉得这是一个值得庆贺的理由,你或许应该转行了。

全部编程皆为Web编程的更多相关文章

  1. [转]所有编程皆为 Web 编程

    Web编程还远远没有达到完美的境地.其实,还有点乱!没错,随便会写点代码的人就能三下两下地搞出一个糟糕的Web应用:也确实,99%的Web 应用都似狗屎一堆.但是,这也意味着,相当“聪明”的程序员们正 ...

  2. 物联网网络编程、Web编程综述

    本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真 ...

  3. MVC 5 Web编程2 -- URL映射

    ASP.NET MVC 5 Web编程2 -- URL映射(路由原理) 2015-02-12 08:50 by hangwei, 704 阅读, 5 评论, 收藏, 编辑 本章将讲述ASP.NET M ...

  4. PHP求职宝典系列——PHP Web 编程篇

    PHP Web 编程篇 form表单 1.简述 POST 和 GET 传输的最大容量分别是多少? GET 方法提交的表单数据被附加到 URL 上,并作为URL 的一部分发送到服务器端. URL 的长度 ...

  5. Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”

    Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...

  6. Java Web 编程

    Java Web 编程 21天学通JAVA-WEB开发:http://files.cnblogs.com/files/maven-chao/Java_Web.zip

  7. python web编程-概念预热篇

    互联网正在引发一场革命??不喜欢看概念的跳过,注意这里仅仅是一些从python核心编程一书的摘抄 这正是最激动人心的一部分了,web编程 Web 客户端和服务器端交互使用的“语言”,Web 交互的标准 ...

  8. Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结

    Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结 1. 服务端table控件的几个流程周期 1 1.1. 确认要显示 ...

  9. 《Web编程入门经典》

    在我还不知道网页的基础结构的时候,我找过很多本介绍Web基础的书籍,其中这本<Web编程入门经典>,我认为是最好的. 这本书内容很全面.逻辑很严谨.结构很清晰.语言文字浅显易懂. 看这本书 ...

随机推荐

  1. HDU--杭电--4504--威威猫系列故事——篮球梦--DP

    威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  2. Handler和HandlerThread

    1.什么是Handler? SDK中关于Handler的说明例如以下: A Handler allows you to sendand process Messageand Runnable obje ...

  3. 在VC++中启用内存泄露检测

    检测内存泄漏的主要工具是调试器和 CRT 调试堆函数.若要启用调试堆函数,请在程序中包括以下语句: #define CRTDBG_MAP_ALLOC#include <stdlib.h># ...

  4. Delphi TStream 详细介绍

    Delphi TStream 详细介绍Stream对象,又称流式对象,是TStream.THandleStream.TFileStream.TMemoryStream.TResourceStream和 ...

  5. Static关键字的作用及使用

    1.使用static声明属性 如果希望一个属性被所有对象共同拥有,可以将其声明为static类型. 声明为static类型的属性或方法,此属性或方法也被称为类方法,可以由类名直接调用. class P ...

  6. java中Hashtable中的t为什么是小写(转)

    因为在很多年前刚学java的时候用到Hashtable的时候比较好奇为什么第二个t是小写,这不符合sun的风格啊,整个jdk都是标准驼峰,于是带着这个疑问翻过 很多书,看多很多资料,最后的结论是: H ...

  7. HDU/HDOJ 2612 Find a way 双向BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 思路:从两个起点出发,有多个终点,求从两个起点同时能到达的终点具有的最小时间,开两个数组分别保存 ...

  8. Installing SSL on CentOS | My Virtual Time Capsule

    Installing SSL on CentOS | My Virtual Time Capsule Installing SSL on CentOS Extracted from the Sourc ...

  9. Managing Data in Containers

    Managing Data in Containers So far we've been introduced to some basic Docker concepts, seen how to ...

  10. Apache配置虚拟文件夹

    作为一个Android开发人员,一直以为,至少应该有一个server语言,最近慢慢学习php,当然学习Apache使用.本文介绍Win7环境下,怎样配置Apache的虚拟文件夹. 首先,找到我们Apa ...