IoT全棧開發(fā)鏈的選擇路徑

在互聯(lián)網(wǎng)上,經(jīng)常有物聯(lián)網(wǎng)全棧開發(fā)編程語言的選擇這一議題。這是一個(gè)很無聊,而且被反復(fù)咀嚼的問題,卻總是被各類媒體、包括新媒體、出版社、雜志社用來吸引眼球。工程技術(shù)人員被迫站隊(duì),把純技術(shù)的爭論上升到類似宗教,“面子”的高度,很容易對事不對人,彼此之間黨同伐異。

工具鏈的選擇因素

互聯(lián)網(wǎng)全棧開發(fā)來自JavaScript的宣傳,特指Web前端和后端。物聯(lián)網(wǎng)時(shí)代則帶來了新的概念,加入了終端設(shè)備及網(wǎng)關(guān)的固件開發(fā),以及后面延展的數(shù)據(jù)分析、機(jī)器學(xué)習(xí)和人工智能。當(dāng)然,ML/AI已經(jīng)單獨(dú)成為一個(gè)門類,我們可以暫時(shí)可以不去考慮。

從很多角度看,工程中使用何種工具鏈取決于:

  1. 組織機(jī)構(gòu)的慣例;
  2. 現(xiàn)有代碼;
  3. 工程實(shí)現(xiàn)所需的框架成熟度;
  4. 開發(fā)者的技術(shù)背景;
  5. 效率要求;

如果是嵌入式系統(tǒng)硬件領(lǐng)域開發(fā),那么C/C++作為首選工作語言,那么選擇Python可以幫助擴(kuò)展到全棧開發(fā)。詳情請看我所著的《從芯片到云端:Python物聯(lián)網(wǎng)全棧開發(fā)》,但是Python在Web前端、可視化領(lǐng)域需要配合JS進(jìn)行工作。

如果是IT/CS/Web領(lǐng)域的工程人員,使用過C#/Java/JavaScript,選擇JS領(lǐng)域,尤其是Node.js的覆蓋范圍下,也可以實(shí)現(xiàn)全棧開發(fā)。但是在嵌入式開發(fā)所需的芯片仿真、邏輯設(shè)計(jì)、輔助工具、數(shù)據(jù)分析方面還需要補(bǔ)強(qiáng),需要Python的支持。

工程實(shí)踐中的工具鏈搭配

本節(jié)僅僅從開發(fā)效率出發(fā),推薦IoT常用的工具鏈。

任務(wù) 語言 工具或框架
電路邏輯設(shè)計(jì) HDL/Python MyHDL
模擬電路仿真 C/Python eispice/PyOPUS
網(wǎng)絡(luò)仿真 TCL/Python NS
固件開發(fā) C++/Python/Js MicroPython
網(wǎng)關(guān)開發(fā) C++/Python/Js MicroPython/Python/Node.js/Node-RED
設(shè)備連接服務(wù) Python/Node.js Twisted/Tornado/Node.js/Node-RED
Web服務(wù) Python/Node.js Flask/Django/Express
GPU編程 C++/Python PyOpenGL/PyOpenCL
FPGA編程 C++/Python PyNQ/Zynq
3D/VR/AR Js/Java/Python VPython
Web運(yùn)維 Python Fabric
Web爬蟲 Python/Node.js Scrap
Web前端 Js JQuery
C/C++對接 Python/Node.js cffi
C#對接 Python IronPython/Mono
Java對接 Python/Node.js Jython
數(shù)據(jù)分析 Python SciPy/NumPy
數(shù)據(jù)可視化 Python/Js Matplotlib/D3

以上僅僅是典型案例,實(shí)際上可選的工具遠(yuǎn)不止這些。

敏捷開發(fā)的選擇

我日常開發(fā)所用的技術(shù)組合是:

任務(wù) 語言 框架
ARM內(nèi)核設(shè)備固件開發(fā) C/C++ mbed/Arduino
其他內(nèi)核設(shè)備固件開發(fā) C/C++ Arduino
Linux網(wǎng)關(guān)軟件開發(fā) C/C++/Python/Node mosquitto/node-red/Twisted
其他網(wǎng)關(guān)軟件開發(fā) C/C++/Python Arduino/MicroPython
設(shè)備接入服務(wù) Python/Node Twisted/node-red
Linux Web Python/Js Cyclone/Flask/jQuery
Web前端 Js JQuery/Boostrap

眼下,在這些技術(shù)棧組合上利用Python/Js的組合進(jìn)行一些代碼生成器,以提高開發(fā)效率。目前,暫未涉及Mobile APP的開發(fā)。

總結(jié)

IoT全棧開發(fā)鏈的選擇路徑,是Python,還是JavaScript,還是Python+JavaScript組合?選擇結(jié)果因人因事而異。

IoT的復(fù)雜度需要我們站在前一代成熟語言C/C++/Java/C#基礎(chǔ)上,選擇各類VHLL語言進(jìn)行更加高效的開發(fā)。所以不要考慮語法,和語言原生能力,因?yàn)檫@些都是可變因素,比如PyPy/TypeScript/WebAssembly等,更多的是就事論事進(jìn)行綜合選擇和組合。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容