軟件開發不是一份穩定的工作:每年都會涌現一個又一個新的技術,每隔幾年都會出現一些革命性的技術。盡管從代碼、表現及差異上來看,新技術和舊的技術有一些概念上的相似,但是在使用的過程中,仍然是需要花費時間去學習的。
除了,加深自己對現有一些語言、技術、軟件工程的領域深度。為了保持一定的技術洞見,每年我們都會學習一些新的技術,使用一些新的技術棧。因此,這篇文章就是介紹一些我對于新技術的感受,以及在這一年學習中的一些經驗。
本文主要包含以下內容:
回顧前端:超越交互
回顧移動開發
技術投資策略
物聯網與去中心化
AI 與技術成熟度
Serverless 與事件驅動
區塊鏈評估
(PS:本文的閱讀時間大概 10 分鐘)
回顧前端:超越交互年初,我在寫電子書《我的職業是前端工程師》的時候,已經 “欽定” 了 React、Angular(沒有.js)、Vue 作為未來前端開發的主流趨勢。在國內來說,還是以 Vue 為主,Vue 好上手,但是不都是所有的用戶都是小白 :) 。但是作為一個前端開發人員,你把時間投資在 React 和 Angular 上,在未來你會有更大的贏面。
Facebook 一系的 React,還有 React Native 和 React VR,未來可能還會有 React Game。Angular 受奧斯本效應的影響,采用程度受到一定的影響。在目前來看,對于開發人員的主要成長得益于 TypeScript,對于項目的優勢主要靜態類型使得代碼更加強壯。
可是這一年 AI 的火熱,讓我開發思考 AI 帶來的一些交互上的變化。現在,我們所指的前端多數是一些 Web、移動端相關的 UI 開發,其本質就是與用戶交互。諸如前幾年火熱的虛擬現實、智能音箱,都是一個交互的新入口。
可視化仍然是人類最好的獲取數據的方式。可當用戶大量的日常工作,被 AI 自動化之后,有些工作就變得有些多余。如你出門前要看的天氣,以決定穿什么衣服,它都可以由計算機算出來。帶不帶雨傘,都可以由雨傘提醒你。如 Amazon 設計的 Dash Button,可以讓你不需要任何的 UI 就可以購買日常用品。
回顧移動開發今年,我在工作上主要做的都是移動開發相關的工作,從基于 Ionic 與 Cordova 的混合應用,到嵌入 WebView 到 React Native,再到年底的 Android 原生應用,中間寫了一些 Cordova 和 React Native 的 Android、iOS 插件。也算是見證了移動應用的不同技術選型,成為了 3/4 個移動應用開發,對整個移動端的技術有所了解。
在最近幾年里,原生移動應用開發沒有像過去那么火熱。一來是,受到混合應用和 React Native 的影響;二來是,移動端的開發技術已經趨于成熟;
盡管在年初,看到越來越多的原生應用開發人員正在轉向 React Native。過去,我們認為的操作系統市場份額是這樣的:
但是實際上,在討論市場份額的時候已經是這樣了:
以 VR、AR 和 AI 的技術趨勢來看,移動平臺才是未來的重點——除非有更好的平臺出現。觸手可及的技術,擁有更多的可能性,也擁有更多的數據及美好的未來。
技術投資策略(PS:在這里,所謂的技術投資是指,在一定時期內向一定的新領域投放時間來學習新技術。)
新的技術每天都在不斷地涌現,很多就是黑天鵝一樣看不出。并且,一來我們已經習慣了新的輪子的產生,二來我們也沒有那么多的精力去關心每一個新技術。可是當有一些技術在不斷被提及被應用的時候,你就差不多應該關注、學習、采用了。
如我在年初看到那一本《灰犀牛》:灰犀牛體型笨重、反應遲緩,你能看見它在遠處,卻毫不在意,一旦它向你狂奔而來,定會讓你猝不及防,直接被撲倒在地。你明明看得見,新的趨勢在那里,卻固執的不肯去了解。那么,未來你就輕松地進入了中午危機。
在 Gartner 的技術曲線上,定義了五個階段:科技誕生的促動期、過高期望的峰值、泡沫化的底谷期、穩步爬升的光明期、實質生產的高峰期。對于個人來說,這個技術曲線就沒有那么復雜。
成為早期投入者對于一個技術人員來說,這個流程就比較簡單了。通常來說,作為一個初入這個行業幾年的 “新人” 來說,我們是沒有經驗、能力去開擴一個新的領域。這時成為早期投資者,可能就是最早期的選擇了。
在新技術的早期就采用它,是一件相當有風險的事,也可能會有相當大的收益。新技術在早期充滿了不確認性,如果你押錯了,那么你在這段時間的時間可能就白費了。因此,一般是到一個新的技術、概念出現一段時間后,去填這些相關的坑。
如我在這一年進入 Serverless 的坑一樣,雖然有一些晚,但是好在國內的云服務產商的服務還不怎么行。通過使用感受、社區及 Google Trends 來看,來看看是否押錯地方。
在光明期前采用通常意味著,這個新技術棧還有很多坑。但是,大家都認可它是一個有前途的技術。如在今年被大規模采用(淘寶、QQ 等,有一些因為版權已經換坑了)的 React Native 就是一個很好的例子。
一般來說,經歷了一些大公司的踩坑,以及網上的一些踩坑經驗,那么就意味著采用它已經沒有多少問題了——前提是你已經做好了技術儲備。這個時候你就可以為了今年的 KPI,去說服你的領導了。我們應該這么做,xx 公司都已經上線了,而且這些 blabla 的優勢很明顯。
跟隨項目使用當一個新技術的采用,已經在市場上達成共識。那么,也不要再采用舊的技術了。
到了今天,前端的單頁面應用已經是 React、Angular、Vue 的天下了。這時要開發一個復雜的前端應用,那么你應該從這些主流的框架中去選擇,而不是采用早期、過期(已經不維護)的技術了。除非,你們是一家大公司,有自己的輪子。
當然,只在該用某技術的時候,才在項目上使用新技術。對于一些簡單的頁面,jQuery + Bootstrap 還是萬能的。為了使用新技術,而在項目上使用,有時候容易造成問題。
物聯網與去中心化在這一年里,為 InfoQ 編寫《物聯網周報》的時候,我花費了大量的時間在索引互聯網上的 IoT 相關內容。隨之也翻譯了一系列的文章,也有了 “玩點什么” 網站 、APP和小程序,其目的主要用于儲備技術。通過翻譯一些物聯網及前沿的技術實踐——持續關注某一領域,可以通過翻譯相關的文章來投資。將一些國內沒有的,又可能在未來用到的技術翻譯成了中文,再增加一些提升 SEO 提名的文章。(PS:因為在我的技術博客)上,650+ 的博客大部分都是原創的技術筆記,所以不打算放在我的博客上——同時,也可以避免版權帶來的問題。)
除了,我大學學的電子信息工程;還有一點,硬件是虛擬世界與現實世界的接口,而物聯網則可以讓我們真實的、從遠程訪問世界的各個角落。于是,在年中的時候,我花費時間去研究各式各樣的智能家居系統,也有了我的?smart-home?項目。
當自己擅長的技術,有一些新的突破,那么就應該去學習它。
2017 年里,IoT 領域的技術趨勢,已經在不斷地結合各種時髦的技術,如:
Serverless Framework 與 AWS IoT 構建 Serverless 的花園監控系統
Raspberry Pi 教程:在 Docker 上使用 Go 點亮 LED
Raspberry Pi 與 OpenFaaS 構建 Serverless Kubernetes 集群
Raspberry Pi 自動駕駛:使用 Keras 與 Tensorflow 構建車道跟蹤自動汽車
他們解決了一些嵌入式設備的自身缺陷,不過在一年里,安全仍然是這方面的主流考慮。
當一個流行的技術能在 PC 上運行,它也終將在智能手機、Raspberry Pi 這一類小型計算設備上運行。
在數字化浪潮不斷擴張的今天,物聯網作為一個底層的技術合集,越來越受關注。但是,這不意味著它會馬上火爆起來,只是我們可以看到它在不斷地被應用。
在這上面花時間,不一定有收益,但是總覺得自己改變了什么。
AI 與技術成熟度AI 火熱的這一年,在為玩點什么做應用的過程中,便想結合一些機器學習的技術。所以我又復習了一下機器學習,順便打算 GET 一下深度學習的技能。也就有了玩點什么的推薦系統?,也應用上了 jieba 分詞,加上之前對于樸素貝葉斯、聚類等的研究。發現一般的機器學習,對于我這種已經遠離高等數學的人來說,還不算太難,概念上基本能理解得差不多——主要是這些算法,都能應用到一些真實的場景。
于是,我打算試水一下深度學習。然后,我發現我 TM 的數據都沒有,下載個數據都要半天。再看看書上的理論,我發現我抽不到足夠的空余時間來學習——我的意思是,足夠集中的學習時間。還有一個問題是,沒有數據——盡管網上已經有大量的公開數據,但是這些公開數據多數是英語的。這些基于英語語言的數據,會導致出現的算法以英語為主,導致算法本身難以采用,這一類問題最常見于 NLP(自然語言學習)。
假使我將一個周末的兩天 + 每天三個小時的晚上時間都投在上面,那么從短期來看收益太少——我可以花這些時間,強化我在其它領域的知識。
好在深度學習的 API,也很容易上手。這一點與我之間在試水智能音箱有點類似,實現一個簡單的智能音箱本身并不需要太多的新算法——利用一些現有的公開 API、公開算法,我們可以輕松也用深度學習做一個音箱。但是我們缺乏足夠的音頻數據,它將會導致我們無法進入下一步。
這就是為什么 Mozilla 會推出 Common Voice Project 項目的原因,沒有足夠的財力就不會有足夠的數據;同理于,今年阿里在雙 11 送的大量 99 元的天貓精靈一樣,只有大量的數據才能造出 AI。只能有足夠的數據或者財富,才能擁有與之匹配的人工智能。
Serverless 與事件驅動在第四個季度里,我花費了大量的時間在學習 Serverless 系統,編寫大量的 Serverless 應用。有興趣的同學可以了解?花了 1000G,我終于弄清楚了 Serverless 是什么,以及基于 Serverless 架構的?簡單日志系統 molog、表單系統 moform,這些 Serverless 應用都可以在一天內開發、上線。
Serverless 事件驅動的特性,使得它適合物聯網、人工智能、數據分析等場景。其按需付費,又能讓我愉快地(畢竟窮)各種 Serverless 應用。
如上所示,Serverless 將是一種新的技術架構趨勢。而 Serverless 本身算不上一個新的技術,只是 FaaS 結合一堆現有的技術組成的技術架構。因此我將學習 Serverless 的行為,定義為一種 “短平快” 的學習投資。
由于國內的內容匱乏,我采用的策略是:邊寫 DEMO,邊寫文章、編寫自己的 Serverless 應用、寫一系列的總結文章、整理成電子書。這樣一來在 2018 年,我的博客可能就會受長尾效應的影響,帶來額外的更多流量。
區塊鏈評估我對區塊鏈采用的是評估,也就是還沒有進入我的采用、Demo 期——主要是因為區塊鏈技術采用的領域有限。早期我在思考在邊緣計算、物聯網領域引入,但是場景有限。不過,在未來我應該會嘗試引入這個技術的。
常規的物聯網系統都是中心化的,采集數據、加工數據、存儲數據、可視化數據、預測數據,它也不需要擔心中間的數據修改。如果以一個傳感器采集點,作為一個節點,采用區塊鏈的存儲成本過高。如果以一個區域作為結點,它也不需要擔心其它結點的數據的修改問題。
只當每一個節點自身需要記錄變更的時候,那么這個物聯網應用才適合采用區塊鏈技術,如物流場景等等。
又或者是,在你的智能家居系統的每一個控制節點上,都記錄每一次控制的變化。如你使用手機控制了臺燈的開和關,這個數據就會同步到你的手機上。問題是,控制個燈都需要記錄一下的場景,這可能是監獄吧?
或許,我還需要一個區塊鏈的 markdown 同步工具,而不是使用 GitHub 或者各種云筆記。這樣我的?markdown-improve?計劃,又多了一個新的成員了。
結論從上述的學習經歷來看,學習技術的期限主要是:
短期學習未來將采用的技術
中期了解一些新的技術知識
長期接觸自己喜歡的技術
不過,簡單的來說,這一年的經驗就是:
持續關注某一領域,可以通過翻譯相關的文章來投資
當自己擅長的技術,有一些新的突破,那么就應該去學習它。
如果一個與自己工作相關的技術是未來的趨勢,那么請擁抱它。
如果有一個新的技術可以影響到你的生活,不妨去學學它。
你說呢?
來,明年一起開黑。
評論