物聯網浪潮之下,前端工程師如何迎刃而上?

作者 | 黃峰達

責編 | 屠敏

經歷了過去幾年的發展,Node.js、Angular.js、Vue.js 等前端主流技術框架填補了原有技術的空白與不足,日漸趨於成熟。然而信息時代的來臨,任何的技術不會趨於穩定而止於腳下,現如今物聯網、人工智能、虛擬現實等新領域的出現,意味著前端下一風口的來臨,新的技術革新與發展機遇悄然而至。在火熱的物聯網浪潮之下,作為一名前端開發工程師,如何迎接這一風口?JavaScript、Python 等腳本語言又會與物聯網碰撞出怎樣的火花?真正的轉型需要學習什麼樣的新技能?未來發展前景如何?基於此,我們採訪了 ThoughtWorks 軟件開發工程師黃峰達,請他分享自身的前端開發經驗以及物聯網的探索之路。

物聯網浪潮之下,前端工程師如何迎刃而上?

ThoughtWorks 軟件開發工程師 黃峰達

前端開發之路

CSDN:請您做個自我介紹,包括個人經歷以及正在做的事情?此外您目前主要關注哪些技術?

黃峰達:從小學參加 LOGO 語言比賽起就開始了我的編程生涯。畢業於西安文理學院電子信息工程專業,現就職於 ThoughtWorks 深圳。長期以 Phodal 這個 ID 活躍於軟件社區,如開源軟件社區 GitHub、CSDN、知乎,目前專注於物聯網和前端領域。著有《自己動手設計物聯網》、《全棧應用開發:精益實踐》,並譯有《物聯網實戰指南》。曾作為技術專家審閱,英國 Packt 出版社的《Learning IoT》、《Smart IoT》等物聯網書籍。

在工作上,我主要做的是一些移動開發的工作。並嘗試遷移一些混合應用到 React Native,如編寫的開源應用 Growth。業餘時間,我會關注物聯網相關的內容。開發物聯網相關的開源軟件、維護一些相關的物聯網文檔(如 awesome-iot)。

對於物聯網而言,目前我主要關注於 Amazon Alexa 語音技術、物聯網中的區塊鏈技術。

CSDN:現如今隨著企業業務需求的不斷增大,對前端工程師的要求也逐漸提高。您認為前端工程師應該在哪些方面進行積累?包括語言、工具、框架等方面。

黃峰達:前端應用的代碼規模,是在最近幾年裡膨脹起來了。在這個過程中,我們可以看到兩個比較明顯的問題:JavaScript 語言的缺陷與前端工程化實踐的不足。

值得注意的是,IE 的兼容性在過去是一個主要的問題。但是由於最近幾個項目中,逐漸不支持早期的 IE 版本(禁止早期版本的 IE 用戶使用),我覺得這一點在未來就不需要考慮了。

從 CoffeeScript 到 ES6、TypeScript 的受追捧,表明了 JavaScript 有諸多需要改進的語言缺點。這些缺點會影響前端代碼的質量,導致出現一些意料之處的 Bug。對大型應用來說,使用一個強類型的語言,如 TypeScript 會幫助前端項目構建出更穩定的應用。因此,我推薦喜歡 ES6 的用戶,可以嘗試使用 TypeScript。

同時,建議工作一年左右的前端程序員,應該掌握從頭構建一個完整的前端項目。即,能設計好一個前端項目的工作流——掌握好 gulp、grunt、npm 等構建工具、風格檢測、測試框架等等。

按國內的趨勢來說,Vue、React、Angular 是現有主流的三個前端 SPA 框架。一個好的前端工程師,不應該只會使用這些框架,而是能理解他們背後的原理的相似之處與不同之處。也不應該滿足於可以使用 Vue 來完成工作,應該嘗試使用 React、Angular 這種複雜的框架。如 React 框架,從思想上來說,我們只需要學會 React,就可以輕鬆地構建其他 UI 應用。

CSDN:從業過程中,您如何提升自己的職業技能,是否有比較好的學習方法或技巧?

黃峰達:對於前端來說,要提升技能最好的方式還是靠刻意的練習——大量的編碼。工作的時候,大家都忙於實現業務功能,沒有時間能讓我們提升技能。因此,要提升主要還是要靠刻意的練習。至於練習,我一般是採用這樣的步驟:

  1. 買本相關的書籍,或者尋找份教程、官方指南。

  2. 再找個合適的 Demo,熟悉基礎概念,並掌握好相關基礎。

  3. 在 Demo 的基礎上,實現一些業務功能,瞭解各種功能、特性。

  4. 查看官方文檔,查有有沒有漏掉了什麼重要的東西。

  5. 撰寫博客、日誌來記錄這個過程。

物聯網的前端開發經驗分享

CSDN:作為一名前端工程師,是什麼吸引著您關注物聯網領域的呢?

黃峰達:大學的時候,我主要學的是電子信息工程。在學校會和朋友一起做一些網站來賺買書錢。平時,便通過 Web 技術來結合硬件做一些內容。在現在,看來它們便是一些物聯網應用。

CSDN:在龐大的物聯網體系下,前端工程師從何入手物聯網開發呢?可否結合您的個人經驗具體談談?

黃峰達:今天的物聯網應用,本質上還和 Web 應用的區別不是特別大——使用數據庫存儲數據、使用傳輸協議來傳輸數據、使用客戶端作為 UI 界面等等,主要做的工作也是數據傳輸。

在一些資源豐富的設備設計上,我們仍然可以使用 HTTP API,仍然可以使用腳本語言編程,如 Python、JavaScript。因此,建議前端工程師可以將 Web 視為物聯網的基礎,先在資源豐富的設備上,如 Raspberry Pi、Tessel、Ruff 學習物聯網開發。

在這之上,再去考慮資源受限的設備,如 Arduino 便是一個很好的入口。這個時候,就需要學習更多的硬件知識,如底層編程、不同協議的數據傳輸等等。而事實上,有相當多的物聯網應用並不需要在底層硬件上進行編程。

如今天流行的共享單車,便是最典型的物聯網應用。除在單車本身,大部分的模型還是和 Web 相差無幾,除了使用 HTTP 作為數據傳輸協議,還有可能使用 MQTT 來傳輸數據。而在單車上,它使用了 GPS、藍牙低功耗來進行數據傳輸。

由於各種物聯網雲服務已經成熟了,因此在學習的過程中,推薦前端工程師可以直接採用各種雲服務,如 AWS IoT、Azure IoT、IBM Watson IoT;又或者採用一些開源的物聯網雲軟件。最後,再去編寫相應的客戶端軟件。

CSDN:物聯網開發涉及面龐雜,開發週期長,所以我們必須尋找一種覆蓋面廣的編程語言和方法。JavaScript 支持 HTTP 和 JSON 、支持函數式編程、可提供交互式環境等特點堪稱適用於物聯網全棧開發;Python 作為一種膠水語言,可在物聯網及嵌入式系統中承擔大量任務,並部分替代以上語言。由此就 Javascript 和 Python 兩種腳本語言來看,您認為哪一種在物聯網全棧開發中更為適合?具體理由是什麼?

黃峰達:我偏向於使用 JavaScript, 更適合全棧物聯網。但是如果是在真實場景下,我偏向於結合兩個語言。JavaScript 可以用於開發各種原型軟件、及大部分的客戶端軟件:

  • Node.js 可以實現高併發的物聯網應用

  • 使用 Electron 開發桌面客戶端,來幫助傳統

  • 使用 React Native、Ionic 開發手機 APP

  • 使用 Ruff、Tessel 開發硬件端的應用

  • 編寫微信小程序直接訪問藍牙設備,進行交互與數據傳輸

  • 在嵌入式系統 Linux 上,又可以製作 UI 界面來加速開發

而我們知道 Python 在科學、大數據與人工智能領域有更廣泛的應用,而在這些領域 JavaScript 只是能做,但是做不了最好。因此,我們可以將 Python 作為物聯網智能的核心,剩下的內容都交給 JavaScript。

CSDN:從開發者的角度來看,物聯網開發主要面臨什麼樣的技術挑戰?開發者在面臨這些挑戰是會有什麼樣的誤區?

黃峰達:個人認為,物聯網開發的主要挑戰是:如何快速開發出穩定、安全的系統。這裡的『快速』指的是,比以往更快的速度。硬件開發,有一個開發週期長的問題,從設計製造出開發板、硬件原型,到最近的產品,是一個漫長的過程。它不能像 Web 應用一樣,快速推出一個 MVP 產品,從市場中接受反饋。因此不僅僅對流程的要求高,還依賴於大量的經驗豐富的程序員。

對於走迭代流程的 Web 應用來說,當線上出線 Bug 的時候,我們可以快速發佈一個新的版本,或者回滾到上一個版本。可對於硬件應用來說,如果沒有在一開始設計好更新策略,那麼就只能召回這個產品。如果只是軟件上有問題,那麼還能通過軟件更新來解決這個問題。如果是像三星 Galaxy Note 7一樣的硬件問題,那麼不僅僅會影響公司的發展,還會危險用戶的生命安全。

又如,去年出現的 Mirai 蠕蟲事件,今年出現對對抗Mirai 的白色蠕蟲 Hajime,表明瞭如果一個用戶眾多的物聯網產品受到威脅時,它將影響到全球互聯網。

CSDN:要成為一名優秀的物聯網全棧開發工程師,需要什麼樣的條件?

黃峰達:我理解的全棧是,一個人可以完整的開發物聯網系統,並不是指什麼知識都會。而要成為物聯網全棧開發工程師是蠻難的一件事,更何況是優秀的物聯網全棧開發工程師。我離物聯網全棧開發還有點遠,按我的理解:物聯網開發是一個知識面廣、特定領域要求深度的領域。它需要結合前端、後臺、硬件層的硬件設計、硬件層的軟件(C語言)等等的知識。在這個其中,最難的地方是設計出可靠的硬件,它依賴於多年的豐富經驗。

在軟件開發方面,先掌握好主流的 Web 開發技術,再去理解物聯網領域的技術,並深入理解硬件運行的機制,那麼就差不多可以做到軟件層上的全棧。

CSDN:依您經驗來看,前端工程師進入物聯網領域有什麼樣的職業機會,您有什麼建議想要對開發者分享?

黃峰達:前端工程師在物聯網領域的主要開發內容還是一樣的:客戶端開發,與用戶進行交互。除了 Web 前端,還會有一些移動端開發的內容,除此還有大量的數據可視化工作。

除此,我們還可以看到諸如 Chrome 瀏覽器、微信小程序,都可以讓開發者使用 JavaScript 連接藍牙設備,實現數據傳輸。相信在未來,手機便是最好的物聯網載體,它可以讓我們更好也與周圍的設備進行溝通。

在過去的一年裡,我看到一些國外的創客們,使用 Slack、Telegram 製作一些聊天機器人來簡化物聯網開發。每次都能有一些啟發,進行物聯網開發設計的時候:考慮使用成熟的工具來製作 MVP。

物聯網時代下,前端開發前景

CSDN:您如何看待“物聯網開發是前端工程師的新藍海”這個觀點?

黃峰達:關於這個觀點,我覺得這裡有一個誤區:寫 JavaScript 的程序員就是前端工程師。前端工程師一定是 JavaScript 程序員,但是 JavaScript 程序員不一定是前端工程師。

所以,我覺得物聯網開發不僅是前端工程師的新藍海,還是硬件工程師、後臺工程師的新藍海,只是前端開發者因為使用 JavaScript,才有機會去接觸更大的領域。

CSDN:對於物聯網軟件、硬件的開發工具、標準、協議等方面,您最期待哪些方面的完善?

黃峰達:物聯網領域,我並不期待有一個統一的標準出來,這是一件相當難的事。不同的協議適用於不同的場景,而受限於不同的硬件設備,有時候我們只能使用某一特定的協議。在協議方面,我比較看好 CoAP,但是無疑 MQTT 是最近採用的熱門標準,當然傳統的 HTTP 協議也是。

同時,我比較期待的是一些新的開發流程,如上所述,傳統的硬件開發流程太慢了。去年在和 NodeMCU 創始人聊天時,聽他談起一個觀點:雲端構建『固件』。如同 package.json 一樣,我只需要引入這個庫,那麼集成電路圖、引入相關代碼等等,剩下的事就水道渠成了。如 Ruff 已經可以做到部分的功能,可是這條路還是很慢長。

CSDN:未來您會從哪些方面提升自己?

黃峰達:主要是一些軟技能,諸如如何有理的分析問題、解決問題方面。

相關推薦

推薦中...