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

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编程。对于普通的在职程序员来说,如果你不认为这是一个值得庆贺的理由,你也许应该转行了。

from: http://blog.csdn.net/happydeer/article/details/24105959

所有编程皆为Web编程相关推荐

  1. 全部编程皆为Web编程

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

  2. java web 编程技术 pdf_Java WEB编程技术.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspJava Java WEB编程技术.pdf289页 本文档一共被 ...

  3. 《jQuery与JavaScript入门经典》——第 1 章 动态Web编程简介 1.1理解Web服务器浏览器范式...

    本节书摘来自异步社区<jQuery与JavaScript入门经典>一书中的第1章,第1.1节,作者:[美]Brad Dayley著,更多章节内容可以访问云栖社区"异步社区&quo ...

  4. 一切皆文件的编程思想

    一切皆文件的编程思想和通信的思想类似,都是建立联系然后进行操作. 在常规的文件操作中,这个联系表现为文件的句柄: 在网络通信中,这个联系表现为socket连接: 在变量操作中,这个联系表现为变量和指针 ...

  5. 搞懂了这几点,你就学会了Web编程

    做了那么多年Web编程,仔细想想, 其实本质上就那点事儿, 你抓住了几个重点问题, 学起来一点都不难. 1.  理解浏览器/服务器结构 (B/S) B/S 是从 90年代的客户端/服务器端发展而来, ...

  6. 物联网网络编程和web编程

    本文是基于嵌入式物联网研发project师的视觉对网络编程和web编程进行阐述. 对于专注J2EE后端服务开发的同学来说,这篇文章可能略微简单.可是网络编程和web编程对于绝大部分嵌入式物联网proj ...

  7. Java Web 编程入门知识

    Java SE 的内容基本都讲完了. 但是 Java一般用于网络编程, 就是所谓的web编程. Java SE讲的基本上都是本地程序的内容. 而Java web编程需要在两个程序中传输数据, 以后就是 ...

  8. url能访问但new file()找不到文件_Go Web编程给自己写的服务器添加错误和访问日志...

    错误日志和访问日志是一个服务器必须支持的功能,我们教程里使用的服务器到目前为止还没有这两个功能.正好前两天也写了篇介绍logrus日志库的文章,那么今天的文章里就给我们自己写的服务器加上错误日志和访问 ...

  9. 用 Go 语言,做 Web 编程开发

    人民邮电出版社和实验楼合作的第 15 本书来了! Web 介绍 Web 应用在我们的生活中无处不在.看看我们日常使用的各个应用程序,它们要么是 Web 应用,要么是移动 App 这类 Web 应用的变 ...

最新文章

  1. 把 Eclipse 中的工程 Push 到 Github(适用 Windows 平台)
  2. 用宏定义实现函数值互换
  3. C++各大著名程序库
  4. poj 1144 割点和桥
  5. 浙大翁恺pat练习题_单词长度(翁恺老师C语言入门第八周测试题1)
  6. 浅析 Linux 初始化 init 系统,第 2 部分: UpStart
  7. 信息学奥赛一本通C++语言——1123:图像相似度
  8. poj 3260 The Fewest Coins(多重背包+完全背包)
  9. hive的row_number()函数
  10. table height 100%问题
  11. linux串口输出重定向到文件,DOS 下将屏幕打印输出重定向到指定文件中(或重定向到并口/串口)...
  12. paip.提升效率---------文件搜索工具总结
  13. 超全蓝牙芯片原厂总结(含芯片型号)
  14. Android 如何获取系统签名 并使用系统签名
  15. 95后阿里P7晒出工资单:真的是狠狠扎心了...
  16. 极域电子教室师生端连接不上怎么解决
  17. Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1), thread 261 (servicemanager)错误
  18. windows php进程数,win10的进程数应该多少?
  19. 计算机科学报数学竞赛,五大学科竞赛参加哪一个科目?五大学科竞赛赛程设置分析!...
  20. 读书笔记-精准努力-思考时间和精力的分配

热门文章

  1. 为了让AI不断打怪升级,DeepMind打造了一个“元宇宙”
  2. 【百度联盟峰会】李彦宏详解AI时代思维方式,算法驱动的降维攻击
  3. 百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率?
  4. 开源后5个月,Google的深度学习都有哪些改变?
  5. 鸿蒙45000,华为发布鸿蒙系统沟通口径通知 网友表示支持国货
  6. mysql数据库密码转换_MySQL数据库root账户密码忘记两种处理方法转载
  7. 实现正则表达式的*和?匹配
  8. Spring-AOP @AspectJ切点函数之execution()
  9. SpringtBoot+SpringSecurity+Jwt+MyBatis整合实现用户认证以及权限控制
  10. mysql 线程池源码模块_易语言Mysql线程池2.0模块源码