软件杂谈(4)- 前端记事
前端发展史一直是大叔想写的,苦于话题多且杂,实在无从下手,也就一拖再拖。
前端技术从诞生至今有二十多年,说长不长说短不短。种种机缘巧合,大叔恰巧经历了前端技术变迁的全部历程,多少曾经的快乐痛苦兴奋迷茫都湮为回忆。
事如春梦了无痕,往事如烟,又恍若昨日。
倘若用一个词来形容前端技术变革,那便是无常,成住坏空遍计其踪。
而又有多少今日的事实,会成为明日的无常?技术也罢,生活也罢,大多如此。
不敢以史相称,暂且唤作记事。星罗一些可提的旧事,间杂前瞻,希望对大家有所帮助。
-1- 缘起 (1994)
齐秦的《往事随风》收录于他的专辑《痛并快乐着》,发行于1995年9月1日。
这是一首曾被无数人翻唱过的老歌,承载着一两代人满满的回忆,有痛也有快乐。
“就让往事随风 都随风 都随风 心随你动,昨天花谢花开 不是梦 不是梦 不是梦”
大叔打开蓝牙音响,特意选了这首歌,让思绪随风,飘向那如梦般的青葱岁月。
放牛娃也有春天,大叔也曾年轻过。
1994年冬季,正是大四下半学期,学校里的课程基本结束,唯有毕业设计与论文需要准备。
忽然有一天,辅导毕业设计的老师说:“最近新出现了一种叫做超文本标记语言(HTML)的技术,你们可以了解了解。”
大叔最初曾误以为这是一种新的多媒体描述文档,这也不全怪我,因为那时候还没有互联网,更不要说网吧什么的。大叔的大学生活除了学习以外,很难跟如今的大学生比,可以说是单纯得很不完美。
这是我第一次听闻HTML这个词。就好比第一次喝啤酒一样,并没有被打动多少。
HTML文档需要使用网景公司开发的一款叫作Netscape Navigator的软件打开,Code Name叫Mozilla。
什么???这么巧,也叫Mozilla? 不是巧,这正是前端工程师太熟悉不过的Mozilla的由来。
Netscape Navigator其实就是一款浏览器,曾经称霸一时,无人可敌。只是由于种种原因,在后来的浏览器大战中失去阵脚,逐渐被淘汰,被收购,被开源,被遗忘。开源后由Mozilla Foundation维护,几经挫折又灵魂附体,以Firefox重生,成为一只不死的火狐。
-2- 互联网的春天 (1995-1996)
1995年开学季,大叔开始了研一的学习生活,还在西安交大,还是计算机专业,并追随归国不久的博导侯义斌教授。
那时候已经有了手机,是一种称为大哥大的砖头大小的通话设备,可防身更可彰显身份。
多数人则使用BB机,有汉显和数显之分。如果你看到谁把BB机拴在皮带最显眼的位置,不用说,那一定是汉显。
这一年发生了很多事情,中国互联网正式接入国际互联网,国内第一家互联网服务供应商瀛海威成立,国内第一个BBS水木清华开通,HTML 2.0发布,Window95发售,Sun公司将Oak语言改名为Java, 网景公司把一种能够嵌入Navigator的脚本语言LiveScript改名为JavaScript。
人们对世界的好奇,对互通互联的渴望,再没有比那个时代来的强烈,一切都方兴未艾,充满生机。
更不可预料的是,这个可以窥探世界的窗口,有一天会被筑起高墙,以避免人们过于好奇墙外的世界。
互通互联会开启智慧,对某些人来说,我猜想这一定是一件很可怕的事情。
96年春季,导师访问荷兰回国,把几个弟子叫到一起聊到:“这次荷兰之行,看到HTML技术在互联网上的应用,这个技术一定会改变我们的世界。”
导师的这句话对我触动很大,直到现在还记忆犹新。而触动的原因其实是疑惑,我不明白这种字符型文档,会如何改变整个世界?
现在看来,导师毕竟是导师,见得多,看得远。当年荷兰埃因霍芬大学就是因为导师留学期间成绩过于出众,遂决定只要是西安交大推荐的留学生,一律免试。能跟随侯老师学习,是幸运的。
这就好比平地里无故冒出一颗竹笋,有的人看到了一片竹林,而有人则看到一盘腌笃鲜。
那个看到腌笃鲜的人就是平时超爱做饭的大叔我了。
-3- 混沌与荒蛮 (1996-1998)
1996年,网景公司发布Netscape 3.0,宣称支持JavaScript 1.1。
同年8月,微软推出Windows 95 OSR2,以捆绑销售的方式推出IE3.0,首次支持自己的脚本语言JScript。
明眼人很容易就看出来,两家公司同时推出类似的产品,这是要打起来的节奏。而实际上发生的却是一场激烈的浏览器争夺战,并引发了著名的针对微软的反托拉斯诉讼案。
“微软以大欺小,玩不过了就上手段,这TMD不是耍流氓吗?” 年轻时的我曾经满怀正义感的这么想过。
随着年龄增长,各种无耻耍赖见多了,这点事儿还真不是事儿。一个公司用钱把对方玩死,已经算仁义。倘若遇到权势,连玩的机会都不一定给你,这才叫流氓。
混沌与荒蛮是那个时期前端发展的特点。
混沌源于没有标准,JavaScript和JScript按照各自的设计实现,浏览器互不相认,需要写两套代码来保持兼容。
这就迫使欧洲计算机制造商协会(ECMA)以JavaScript1.1为蓝本,制定独立于厂商的,灵活的脚本语言标准。大名鼎鼎的ECMA-262由此而来,版本1诞生于1997年。
1998年,Windows98发售,捆绑了IE4,并且首次把IE嵌入操作系统桌面。同年,张朝阳创立了搜狐,马化腾创立了腾讯,王志东创立了新浪。
这一年,大叔硕士毕业步入社会,除了年轻和对技术的执着,一无所有。
-4- 缓慢发展 (1998-2006)
在较长的一段时间里,前端技术进展缓慢,与之不协调的是,人们对Web应用的需求却与日俱增。
很多桌面系统纷纷转向BS结构,新系统如果不是BS结构的,你都不好意思给人说。
DHTML成了热词,与此同时,ASP, PHP, JSP, ASP.NET, ROR, Django等Web框架相继出现,各领风骚若干年。
大叔给这个阶段总结出这么几个特点:
1)前后端不分离
前后端相互牵连,貌离神合,感觉上更像是具有Web UI的桌面系统。
2)前端发展缓慢
技术重点放在了如何完善BS体系上,而忽视了前端的发展。
唯一值得一提的也许就是AJAX的出现。
AJAX最初被用来实现局部刷新UI,其实还是为了模拟桌面系统。后来证明这个方向是错误的,也就不再提。
3)浏览器差异大
这一阶段浏览器几乎是IE、Firefox和Opera的天下,差异大,给开发人员带来很多不便。
4)艰难中没有放弃对美的追求
在如此艰难的条件下,并没有阻止人们对美的追求。
没有渐变效果,用图片铺展。没有圆角,用图片拼凑。没有阴影,用图片模拟。更有甚者,后端来动态生成图片。实在是苦中作乐。
-5- 工具与框架出现 (2006-2012)
人类进步离不开工具的发明与使用,前端亦是如此。
2006年,惊天一声雷,经历了长久的沉闷,jQuery诞生了。
你是电 你是光 你是唯一的神话 我只爱你
jQuery的诞生,给前端带来一股无以言表的清流。它小巧、简洁,链式语法写起来很自然,具有丰富灵活的选择器。
而在大叔心里,所有这些都无法与之另一项特点相提并论,那就是jQuery对浏览器差异做了处理。
就好比有一双充满爱的手,把大叔的累累伤痕抚平,直到现在,大叔依旧爱jQuery。
常有人问,随着脚本语言发展和浏览器趋于标准,jQuery会消失么?
大叔的回答是:“会的,总有一天会退出舞台,可不是现在。”
jQuery不应被过早的抛弃, 否则是不理智的。多数前端框架都有一个显著特征--排它性,一种框架写的组件,无法用在另一种框架中。jQuery却具有开放的、兼容并包的思想精神。
黑格尔有句名言:“不要在倒洗澡水的时候把孩子也一起倒掉”。我们选框架,不一定要完全抛弃jQuery。
其实,jQuery的思想已经慢慢渗透到了新的ECMA语言标准中去了,我们需要再给它一些时间,直到它彻底完成历史使命。
同一时期,前端还涌现出一大批基础类库和框架,大体可分为两类:
1)面向对象类型
基于原型链技术演化出的面向对象的环境与工具集合。例如:Prototype, Mootools,DojoJS, ExtJS。
2)Model-View类型
Model-View概念开始在前端出现(MVC/MVVM),数据绑定、模板、路由、重用、依赖注入等概念也被相继引入。例如:AngularJS, Knockout, Backbone, EmberJS。有些库已经成为企业级框架,被大型前端应用采用。
-6- 工程化与大变革 (2012-2017)
如果说蒸汽机的出现导致了18世纪英国工业化进程,那么NodeJS则拉开了前端工程化与大变革的序幕。
谁也未曾想到,这款最初只是为了实现轻量级Web服务的JavaScript虚拟机,从它脱胎于Chrome V8引擎那一刻起,就彰显出超群的表现,在性能上远远甩开Ruby和Python。
只用一种语言就能够统领世界,这不仅是假想,也成为可能。巴别塔的雄心再一次被燃起。
2012年,包与工程管理器NPM被开发,以JavaScript语言为基础的代码库开始迅速壮大。
一批在其它技术领域成熟的项目管理理念(Ant, Maven等)开始在前端项目上实现。
先是任务队列运行工具Grunt、而后是Gulp。围绕这些工具产生出几千个插件,用于前端项目的构建。编译和打包的概念应运而生,前端开发越来越像后端的模式。
2015年ES6发布,脚本规范静默多年,终于放出了大招。脚本语言在书写上更像面向对象语言,一批语法糖出现。
AngularJS被彻底重写,改称Angular,与前端框架的黑马ReactJS, VueJS形成新的三驾马车,开启了组件化的潮流。
前端的大变革时代到来了,这是一个眼花缭乱的时代,是一个追逐时髦的时代,是一个最容易迷失自我的时代。
-7- 展望
说展望不如说猜测,也不一定准确,重点还是要做好当下。
大叔猜测的前端趋势大体是:
1)ECMAScript标准按承诺一年一更新,但近期不会有太大的变化。
2)脚本语言下一个大地震将是强类型化。
3)语言会支持图形功能。
4)DOM引擎支持模板。
5)浏览器性能提升,更充分利用多核,Firefox重振雄风。
6)VueJS备受欢迎(酒香不怕巷子深,目前只是亏在鼓吹能力而已)。
7)你当前写的代码,用不了几年就需要重写。
8)下一个框架是.....我们要不要一起写一个?
-8- 结语
三十功名尘与土,八千里路云和月。莫等闲,白了少年头,空悲切。
等到一切都看透,也白了头,也空悲切。
前面说过,前端技术变化的最大特点就是无常与空。
无常并不代表不学新技术,而是要在变化中能看到本体,不被变化牵绊。
空也不代表什么都不用做,前端工程师不仅要把工作做好,还要用匠人精神去做。
前端技术变迁是一个苦旅,需秉持过往不恋,未来不迎,当下不负的态度,把工作当做修行,在磨难中前进。
在快节奏的时代,我们更需要静下心来,去除浮躁,用接近真实的方式实现前端。
这里借用五代时期僧人契此的一首禅诗送给大家:
手把秧苗插满田,低头便见水中天。
心地清净方为道,退步原来是向前。
午夜已过,今天是大叔生日,打一听啤酒,自己庆祝一下。
-2018. 2. 22 蘭山-