大部分人想去做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编程。对于普通的在职程序员来说,如果你不认为这是一个值得庆贺的理由,你也许应该转行了。
原文出处: codinghorror
相关推荐
Web编程指南 Web编程指南 Web编程指南 Web编程指南
Go Web 编程.pdf
总结,实现“最新ie编程web编程软件实现web通讯”需要全面理解Web通讯的各种技术和IE的特性,通过兼容性处理、性能优化和安全措施,构建出能在IE上顺畅运行的Web应用。同时,持续关注Web技术的最新发展,以便及时...
《Go Web编程》这本书主要涵盖了使用Go语言进行Web开发的各种核心概念和技术。Go语言,也称为Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言,特别适合构建高性能的Web服务。...
【WEB编程技术复习材料】 WEB编程技术是计算机科学领域中不可或缺的一部分,它涵盖了网页设计、交互性、服务器端脚本以及数据库集成等多个方面。这份复习材料旨在帮助学习者巩固和深化对WEB编程的理解,提高实际...
少儿编程-少儿编程系统-少儿编程系统源码-少儿编程管理系统-少儿编程管理系统java代码-少儿编程系统设计与实现-基于ssm的少儿编程系统-基于Web的少儿编程系统设计与实现-少儿编程网站-少儿编程网站代码-少儿编程平台...
《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境...
从给定的信息来看,标题、描述以及标签都指向了同一个主题——“Lotus Domino Web 高级编程8.pdf”,这表明我们正在讨论的是一本关于Lotus Domino Web高级编程的电子书。Lotus Domino Web是一种集成了邮件服务、文档...
Java网络编程 JAVA web开发实例讲解 宠物分类展现web项目 第01章 项目背景知识(共15页).ppt Java网络编程 JAVA web开发实例讲解 宠物分类展现web项目 第02章 用HTML+CSS实现宠物分类展现静态网页版本(共44页)....
这本书是GOweb编程的电子版,就是那本新加坡的,内容清晰,目录齐全,就是内容排版有一丁点问题。绝逼可下载。
在IT领域,特别是软件开发,系统编程、网络编程和Web编程是至关重要的组成部分。Python作为一门强大且广泛应用的编程语言,对于这些领域的支持尤为出色。本文将深入探讨这些主题,并结合给定的压缩包文件内容,提供...
GO web编程,高清版,有书签
《Android Web应用高级编程:移动与嵌入式开发技术》内容简介:熟悉Web app开发的开发人员可以掌握如何为Android移动平台开发Web app。, 阅读完《Android Web应用高级编程:移动与嵌入式开发技术》一书后,你不仅能很...
《Go Web编程实战派从入门到精通》是一本专注于Go语言在Web开发领域的专著,其开源的随书源码库名为"Go语言-Web-goWebActualCombat",压缩包内的主要内容是goWebActualCombat-master目录,这代表了一个完整的Go语言...
《快意编程:Ext JS Web开发技术详解》是笔者在多年项目开发过程中的经验总结,它通过丰富的实例由浅入深、循序渐进地介绍了目前采用Ext JS进行Web开发的使用方法,从而帮助软件设计人员快速掌握Ext JS开发技术的...
2. **Web编程基础**:书中涵盖了Web开发的基本概念,包括HTTP协议、请求与响应、URL、Cookie、Session等,这些都是构建Web应用的基础。 3. **Go Web框架**:Go语言中有多个知名的Web框架,如Gin、Echo、Beego等,...
本书从超文本标记语言、Java编程、CGI编程、JavaScript语言四个部分全面地介绍了Web编程的各个方面。本书适合没有Web编程基础的读者学习,也可供有一定经验的技术人员参考。 目录 第1部分 超文本标记语言 第1章 用...
通过阅读“ASP.NET MVC4 Web编程(jb51.net).pdf”这样的资源,你可以深入理解这些概念,并逐步建立起开发高效、可扩展的Web应用程序的能力。在实践中不断探索和应用这些知识点,你的技能将得到显著提升。