Web开发这十年
2017-12-06

Web开发这十年都发生了怎样的变化?来看看Ivan Zarea总结的Web开发这十年。以下内容摘译自作者的博客,查看英文原文:How I would explain a decade of web development to a time traveler from 2007



亲爱的朋友们,希望你们喜欢我们现在的这个新世界。相比2007年,它已经发生了翻天覆地的变化。很高兴看到大家仍然喜欢电脑。我们现在拥有的电脑比十年前多得多,同时这也带来了新的挑战。可穿戴设备、口袋设备、家具智能设备、自动驾驶汽车,它们都是计算机。我们还教会程序玩各种游戏,并打败了人类。当然,或许也只有喝酒这件事是电脑无法与人类匹敌的。

Web应用

苹果之所以能够成为最大、最富有的科技公司,多半是因为iPhone和它的操作系统iOS。谷歌也有与之相匹敌的操作系统——安卓,微软也曾试图通过Windows Phone分得一杯羹,但没能成功。


2008年发布的iPhone 3GS和2017年发布的iPhone X

我们开始管程序叫App,有些网站称自己为Web App。2008年,谷歌发布了Chrome浏览器。9年之后,Chrome成为最流行的浏览器之一。

Chrome团队花了很多精力在JavaScript上,Web App使用了大量的JavaScript代码。

其他很多公司也在JavaScript上投入了大量精力,现在它可以支持类和模块。一些语言可以被编译成JavaScript,如TypeScript(来自微软)或Flow。

现如今,我们更多地使用JavaScript,因为很少人用Flash了。我们甚至在服务器端使用JavaScript替代了Perl,这个东西叫Node。


响应式设计

还记得Swing、SWT以及wxWidget这些东西吗?我们在浏览器上重新发明了它们,于是出现了一些新的UI编程模型,它们主要集中在组件化上。

我们必须想办法设计、构建和测试响应式App,同时还要保持它们不会太臃肿,虽然人们人手一部手机,但流量并不宽裕。

于是组件框架出现了,谷歌的Angular、Facebook的React和来自开源社区的Vue。

2007年,Facebook开始在美国雄起,到现在已经成为一个巨头公司。除了拥有大量的用户,Facebook也是世界上拥有最多代码的公司之一。

Facebook的开发团队开发了很多代码,并将它们开源。他们也有自己的开发者大会,叫作F8。大部分巨头公司都有自己的开发者大会。

新的App需要越来越复杂的UI布局,所以CSS也需要有所变化。我们不再使用table元素来布局图像,frame元素也差不多销声匿迹了。我们建立了新的标准,比如CSS Floats、Flexbox和CSS Grid。

人们不断地对这些标准进行迭代,开发出了各种框架,比如Bootstrap、Foundation等。我们还发明了一些语言,可以将它们编译成CSS。它们弥补了CSS的一些不足,如变量和模块化,但还不够完美。

迷茫是正常的

如果你们感到疑惑,这是正常的,事实上,我们都会感到疑惑。现在的开发者越来越多,科技公司也越来越成功。我们曾经使用“初创公司”来描述那些增长迅速同时有点无所适从的公司,不过即使是这个词到了现在也有点过时了。

数据

程序员、程序和设备越来越多,数据也越来越多。我们必须不断提升计算机的处理能力来处理它们,我们也开发了一些技术从数据中挖掘有用的价值。

首先,出现了数据科学,旨在从数据中抽取信息。

例如,有个叫作Waze的初创公司,他们让用户在手机上安装App,在用户开车的时候跟踪他们的移动轨迹。因为有很多人都安装了这个App,所以Waze就积累了很多汽车的移动数据。他们基于这些数据开发出了可以告知用户交通拥堵情况的程序。现在,用户在手机上打开Waze的App,就可以实时地看到哪里发生了交通堵塞,然后选择其他路线。

后来Waze被谷歌收购了,大部分初创公司都会经历被收购的命运。


一个用户在使用Waze,屏幕上同时显示其他用户的头像

数据科学主要面临三大挑战——数据存储、数据学习和数据应用。

数据存储

我们现在需要把大量的信息保存下来,并从中找出哪些是有用的。我们需要新的数据库,MySQL、PostgreSQL这类数据库已经无法用于存储TB级别的数据了(于是就有了大数据)。

互联网巨头公司时常面临这样的挑战,所以他们就成为这类技术的先驱。大多数技术都是在这些公司内部先发展起来,然后再开源。

后来出现了NoSQL,这类数据库对传统关系型数据库的某些部分进行了改造,成为新型数据库。

Hadoop可以将数据保存在很多离散的计算机节点上,并定义了MapReduce的数据处理方式。

接着Cassandra出现了,它通过键和列的方式(而不是表)将数据保存在不同的节点上,还可以保证在部分节点离线时不丢失数据。

还有MongoDB,一个十分方便用于构建原型的数据库。在2017年,我们对待技术的心态就像在10年前对待明星一样——有追捧也有痛斥。而MongoDB就相当于10年前的五分钱乐队(Nickelback)。

数据学习


使用机器学习技术将一张普通的小狗图片变成具有艺术风格的作品

在数据学习阵营,人们最为关注的是机器学习。数据科学家的技术工具箱里有各种各样的工具,从分类到深度学习。他们一般使用Python,并与开发人员一起将机器学习应用到各个领域。

在数据科学家的帮助下,Web App可以使用A/B测试技术。该技术使用了两个不同版本的服务器为相似的用户提供服务,看看哪个版本能够更快地达成预期目标。

Airbnb、Uber和Netflix等大公司同时运行着成千上万个A/B测试,确保能够为他们的用户带来最好的体验。 

微服务和云

像Netflix这样的公司拥有大量的用户,他们需要确保他们的服务无时不刻在运行。所以必须管理好服务器,必要的时候甚至需要新增数百台新服务器。

这在传统的数据中心是很难实现的,Netflix的工程师使用的是虚拟机。亚马逊于2006年推出了AWS,提供弹性云计算,也就是EC2,这样人们就可以使用亚马逊数据中心里的虚拟机。

亚马逊已经推出了80余种服务,帮助其他公司快速增长。我们称之为“云”,但其实这个名字很难有准确的定义。


亚马逊提供的云服务

谷歌和微软也推出了他们各自的云服务,抢夺云服务市场。这些聪明人之间展开竞争,各种疯狂的创新举动开始涌现。

首先,我们开始考虑如何让基础设施看起来更像代码。以前,我们必须先购买新服务器,接进键盘,然后安装各种依赖项。

而现在,我们使用管理配置工具(如Puppet、Chef和Ansible)来实现自动化服务器配置。我们使用编程语言(如Ruby)编写代码,根据配置来分配服务器。如果需要做出变更,只需要修改配置并更新服务器,最多就使用一下SSH。

然后容器出现了。EC2为我们提供了机器分配服务,所以我们的开发环境应该尽量与生产环境保持一致。

刚开始,我们使用Vagrant启动虚拟机,后来有了Linux容器,最后,Docker出现了。我们找到了一种可以在MacBook上运行Linux的方式,而且不需要安装完整的虚拟机。

通过使用Docker,我们可以创建与生产环境相似的开发环境。开发人员使用Docker镜像,将应用部署到容器里。


Windows 10发布会上有很多人在使用MacBook

云厂商也紧追不舍,直接在他们的云上运行容器,并提供了Marathon和Kubernetes这样的编配框架。有了这些框架,开发人员就不需要担心应用的伸缩、容错、监控和发现等方面的问题。服务器是可以被收回的,不过这一次我们不再给它们起什么好听的名字了。

开发人员可以创建小型的应用,叫作微服务,这些微服务独立运行。又因为微服务对外部依赖较少,我们开始尝试使用更多新的编程语言来实现微服务,比如Go语言和Java。

我们也可以使用基于JVM的Scala和Clojure,以及相关的类库。Airbnb就使用了多种不同的语言和数据库实现数百个微服务。

因为微服务的出现,我们不得不重新思考编程模型。因为现在我们需要协调更多、更小型的应用。

于是,Apache Kafka、Google PubSub和RabbitMQ出现了,它们旨在帮助服务器之间进行更好的交互。Kafka最初由LinkedIn开发,后来开源出来。

越来越多的开发者、软件和创意在涌现,我希望大家仍然对计算机保持兴趣。事实上,我们完全有理由这么做。

原文: http://www.infoq.com/cn/articles/web-development-ten-years