在互聯(lián)網(wǎng)上瓢对,經(jīng)常有物聯(lián)網(wǎng)全棧開發(fā)編程語言的選擇這一議題。這是一個(gè)很無聊胰苏,而且被反復(fù)咀嚼的問題硕蛹,卻總是被各類媒體、包括新媒體硕并、出版社妓美、雜志社用來吸引眼球。工程技術(shù)人員被迫站隊(duì)鲤孵,把純技術(shù)的爭(zhēng)論上升到類似宗教壶栋,“面子”的高度,很容易對(duì)事不對(duì)人普监,彼此之間黨同伐異贵试。
工具鏈的選擇因素
互聯(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í)可以不去考慮运准。
從很多角度看,工程中使用何種工具鏈取決于:
- 組織機(jī)構(gòu)的慣例缭受;
- 現(xiàn)有代碼胁澳;
- 工程實(shí)現(xiàn)所需的框架成熟度;
- 開發(fā)者的技術(shù)背景米者;
- 效率要求韭畸;
如果是嵌入式系統(tǒng)硬件領(lǐng)域開發(fā),那么C/C++作為首選工作語言蔓搞,那么選擇Python可以幫助擴(kuò)展到全棧開發(fā)胰丁。詳情請(qǐng)看我所著的《從芯片到云端: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++對(duì)接 | Python/Node.js | cffi |
C#對(duì)接 | Python | IronPython/Mono |
Java對(duì)接 | 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)行綜合選擇和組合。