Web开发这十年都发生了怎样的变化?
亲爱的朋友们,希望你们喜欢我们现在的这个新世界。相比 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就使用了多种不同的语言和数据库实现数百个微服务。
因为微服务的出现,我们不得不重新思考编程模型。因为现在我们需要协调更多、更小型的应用。于是,ApacheKafka、Google PubSub和 RabbitMQ出现了,它们旨在帮助服务器之间进行更好的交互。Kafka最初由 LinkedIn开发,后来开源出来。
越来越多的开发者、软件和创意在涌现,我希望大家仍然对计算机保持兴趣。事实上,我们完全有理由这么做。
对于初学者来说,要怎样学习才能达到企业的招聘要求呢?
发展期的小伙伴,如何提升自己来增强自身实力呢?