现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

一家之言:所有编程皆为Web编程

2014-09-30 05:30 工业·编程 ⁄ 共 2287字 ⁄ 字号 评论 7 条

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

作者:happydeer

目前有 7 条留言    访客:7 条, 博主:0 条

  1. 爱求索 2014年10月04日 5:34 上午  @回复  Δ1楼 回复

    满足用户需求才是关键,谁会关注你是怎么实现的。也没有用户管你是b/s还是c/s结构。

    当然,部分朋友可以继续去“理解虚函数、指针、引用、垃圾回收、终结器、传引用与传值的区别、C++的虚拟析构函数、或者C#的结构体与类之间的差别。” 甚至可以开发全新的操作系统,创造新的计算机语言。

  2. 爱求索 2014年10月04日 5:41 上午  @回复  Δ2楼 回复

    各有各的优雅,感觉还是要看你想把编程当做什么来看, 当做一种艺术还是当作一种谋生手段。 当做谋生手段开发者关心的当然是如何能赚钱。 这方面web编程相对有优势,开发成本低,见效快。 如果当成一种艺术,那可能就要理解计算机,学习算法,体会程序设计的乐趣,代码都是精心设计出来,不是赶工编写出来的。你从中获得极大的乐趣。艺术的过程都是不赚钱的。

    大学开始学软件的时候,本人对什么都好奇,算法,linux系统到ARM都看都学, 后来再到一下就有效果就有成就感的web(ASP.NET, 拖拖拉拉,后台绑个数据库,太方便了)。最后还是觉得Linux 的乐趣比较大,哈哈

  3. 爱求索 2014年10月04日 5:42 上午  @回复  Δ3楼 回复

    其实,从本质来说,CS并不会落没,因为,浏览器本身就是客户端软件嘛。WEB程序再流行,没有浏览器也没用啊。
    但大多系统,都有现成的浏览器可行,这本身也为用户省了安装软件的麻烦,直接输入IP地址就好了。
    WEB程序确实是大主流方面。
    只是,当前,浏览器门派众多,很多标准不统一,新老版本混杂,也很让WEB程序员头痛不以啊,我敢说,当今,没有一个WEB程序,能兼容所有的浏览器。(单单IE5,6,7,8,9,10,11都做到兼容,就由你受的呢)
    未来,各门派都支持全部100%支持HTML5的时候,才是完美的WEB程序时代。

  4. 爱求索 2014年10月04日 5:43 上午  @回复  Δ4楼 回复

    不仅仅是那些编译器、并发性、3D或类继承等东西,还包括网络里的协议、规范。这些东西都是人为设计出来的,其存在性建立在合理性、市场需求之上,即只要合理好用、满足市场需求即可。这种根基肯定是不稳定的,随着技术的发展他们终将会被更优秀的方案所代替。其实IT行业的不稳定也一部分源于此,我们把青春花在这些人为设计出来的理论、协议、规范上。一旦这些理论、协议、规范被改变,那么我们的时间至少有2/3是被白白浪费了。诺基亚的塞班一扔,这让从事这项研究的工作人员浪费多少青春?曾经,一个校内网起来了,我发现竟然还有硕士论文去研究与校内网之间的互通协议!但以校内网现在的状况来看,他的研究有什么意义?所以,那些人为设计的知识,必定会随着人为设计基础的变动而变动,永远都是不稳定的。但是对于那些具有自然科学性质的知识,情况就不一样了,自然定律 基本上 永恒不变,不会随着市场的变动而变动,经济学所蕴涵的定律也不会随着一个公司的倒闭而变成谬论。你说的数学知识、算法研究、还有经济学原理等也都大致上属于这些范畴,这些知识难以被更新或替代。所以,编程语言充其量只是一种生产工具,时代性很强,就算不知道编译器、并发性、3D或类继承等东西,也不代表什么。编程语言只要能完成它生产和制造应用程序的使命就可以了。我认为应该把时间用在研究客观的知识上,而不是用在背诵那些人为设计的说改就改的理论、协议、规范。

  5. 爱求索 2014年10月04日 5:44 上午  @回复  Δ5楼 回复

    web应用由于基于浏览器的这种天生的局限性,终究会面临性能瓶颈,另外如果应用本身自带非常多的资源,终究也是需要在线下载的。然而,直接编译执行的桌面程序没有性能问题,下载也是一次性的,可以直接发挥出平台的强大威力。这是基于浏览器的一切应用所不能够做到的。除非浏览器本身发展为平台,不过到那时候,web应用本身就已经转变成为了本地应用。终究只是转了一个大大的圈子而已。

    • 爱求索 2014年10月04日 5:44 上午  @回复  ∇地下1层 回复

      你的目光应该放长远一点,首先,现在网速越来越快,你说的那些资源,还真没多大影响,其次,现在页游都知道用缓存,我虽然没做页游,但是我也知道肯定不会每次打开游戏都去下载那些资源,再其次,web浏览器也并不是一成不变的,任何东西都是适应需求而生,有这方面需求就会有人去做这方面瓶颈的突破,任何东西都是用来打破的,而不是你用来反驳的借口。

  6. 爱求索 2014年10月04日 5:45 上午  @回复  Δ6楼 回复

    1.桌面(本地应用)还是web(网页)放在移动端讨论或许还有些意思,放在pc端这个讨论已经过时,pc编程的主流早就是web;2.手机上目前为止用户(市场)更偏好本地app,尽管html5是“技术”上的趋势;3.web的底层是java/c/c++;4.作为一个程序员,要了解各个语言的适用场景和市场占有率,结合自己的兴趣和能力做选择,web工程师可以做更多用户侧的事情,而c/java程序员可以做更多系统侧的事情。

给我留言

留言无头像?