//
我們開始管程序叫 App,有些網站稱自己為 Web App。2008 年,谷歌發布了 Chrome 瀏覽器。9 年之后,Chrome 成為最流行的瀏覽器之一。
親愛的朋友們,希望你們喜歡我們現在的這個新世界。相比 2007 年,它已經發生了翻天覆地的變化。很高興看到大家仍然喜歡電腦。我們現在擁有的電腦比十年前多得多,同時這也帶來了新的挑戰。可穿戴設備、口袋設備、家具智能設備、自動駕駛汽車,它們都是計算機。我們還教會程序玩各種游戲,并打敗了人類。當然,或許也只有喝酒這件事是電腦無法與人類匹敵的。
Web 應用
蘋果之所以能夠成為最大、最富有的科技公司,多半是因為 iPhone 和它的操作系統 iOS。谷歌也有與之相匹敵的操作系統——安卓,微軟也曾試圖通過 Windows Phone 分得一杯羹,但沒能成功。??
2008 年發布的 iPhone 3GS 和 2017 年發布的 iPhone X
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 被谷歌收購了,大部分初創公司都會經歷被收購的命運。??
數據科學主要面臨三大挑戰——數據存儲、數據學習和數據應用。
數據存儲
我們現在需要把大量的信息保存下來,并從中找出哪些是有用的。我們需要新的數據庫,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 開發,后來開源出來。
越來越多的開發者、軟件和創意在涌現,我希望大家仍然對計算機保持興趣。事實上,我們完全有理由這么做。