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