## 未来物联网全栈开发 JavaScript or Python? >近几年伴随传感技术、云计算、大数据、人工智能技术的日益成熟,物联网呈现出快速增长的趋势,并逐渐渗入家居、交通、医疗、汽车等新的领域及应用场景之中。在如此庞大的物联网体系下,想要成为一名优秀的全栈开发者不仅需要熟悉整个开发流程,也需要选择适合自己的开发利器,来解决碎片化开发、冗长的开发周期等问题。 JavaScript 和 Python 是两种覆盖面广泛的主流编程语言,其中 JavaScript 支持 HTTP 和 JSON、函数式编程、可提供交互式环境等特点堪称适用于物联网全栈开发;Python 作为一种胶水语言,在物联网及嵌入式系统中承担大量任务,相较而言,究竟哪一种在未来的物联全栈开发中更胜一筹呢?本文集结物联网行业的技术专家们各自对于 JavaScript 和 Python 用于全栈开发的观点,希望为物联全栈开发的道路上的开发者提供一些技术参考。 ### JavaScript——开发成本低、性能最优 如何才算真正的物联网全栈开发语言?只有能涵盖物联网嵌入式设备、移动设备、Web 前端、后台服务器的开发语言才是真正的物联网全栈开发语言,才能开发出完整的物联网解决方案。对于物联网嵌入式设备开发,JavaScript 有 Duktape 和 JerryScript 这样强大的 JavaScript Engine,可以轻松地在内存小到 64KB 的设备上运行;对于移动设备开发,Python 并没有一个很成熟的解决方案,而 JavaScript 既有像 Cordova、Ionic 这样基于 Webview 的混合手机应用开发框架,也有像 React Native 这样的原生手机应用开发框架,使得跨平台移动设备开发变得极为轻松;对于 Web 前端开发,Python 更是望尘莫及,几乎世界上所有主流网站都使用到了 JavaScript,它也是唯一一个所有浏览器都支持的语言;对于后台服务器开发,Node.js 的横空出世也使得 JavaScript 在对于后台服务器开发领域占据了一席之地。 JavaScript 是真正的物联网全栈开发语言,舍我其谁? ——韩骏 微软中国云计算与企业事业部研发工程师 *** 如果选择 Node.js 作为后端开发框架,意味着你选择了统一而非分散的技术栈,即基于 JavaScript 语言。由此开发者不用再去寻找 Ruby 或 Python 中的 Lodash 工具库了。同时有人说 pip install 和 bundle install 用着很顺手,其实最后还得解决 JavaScript 的依赖关系。但如果直接选择 Node.js,则可使用 npm install 安装所有的东西,无论是在客户端还是服务端。移动应用、Bot Frameworks、物联网、3D 游戏甚至是虚拟现实都可以采用 JavaScript 进行开发。作为全栈开发者的一个最大好处就是能持续地学习新事物,将其内化并掌握,此外个人认为全栈开发者将重心放在打磨自己的前端开发能力上,同时也要留30%给后端,确保不被落下。未来物联网的全栈开发,JavaScript 就是你的画布! ——韩俊强 CSDN 博客专家 *** 对于物联网节点来说,开发不仅有性能的限制也有成本的限制。由于性能的限制,大家无法将体验做得和 iPhone一样好;因成本的限制,我们总是希望以最少的开发成本及最简单的系统设计完成尽可能多的任务。这导致在设计过程中需不断做减法。通过使用手机进行控制,免去了输入输出设备;通过使用基于 JavaScript 的 HTML5 免去了开发与安装手机 App;通过使用 Node.js 作为 Web 服务器,免去了使用别的语言开发 Web 服务器。因此使用 JavaScript 做全栈开发,在物联网节点运行 Node.js 做 Web 服务专注于节点的控制,使用手机运行 HTML5 专注于图形化与用户体验,无论是在开发成本还是在性能上都是目前最优的物联网解决方案。而利用 NPM 的大量现有开源 JavaScript,可以非常容易而快速地搭建起一整套物联网系统。 ——李知周 中国科学院微系统与信息技术研究所博士 *** 使用 JavaScript 开发,更适合全栈物联网。因为 JavaScript 可以用于开发各种原型软件及大部分的客户端软件: 1. Node.js 可以实现高并发的物联网应用; 2. 使用 Electron 开发桌面客户端; 3. 使用 React Native、Ionic 开发手机 App; 4. 使用 Ruff、Tessel 开发硬件端的应用; 5. 编写微信小程序直接访问蓝牙设备,进行交互与数据传输; 6. 在嵌入式系统 Linux 上,又可以制作 UI 界面来加速开发。 但如果是在真实场景下,我比较偏向于 JavaScript 和 Python 两种语言的结合。因为 Python 在科学、大数据与人工智能领域有更广泛的应用,而在这些领域 JavaScript 只是可以实现,但做不成最好。因此,我们可以将 Python 作为物联网智能的核心,剩下的内容都交给 JavaScript 来完成。 ——黄峰达 ThoughtWorks 软件开发工程师 *** ### Python——语法简单,易上手 我们从2015年初到现在完整的开发了 LoRaWAN 的节点、网关、云平台和若干示范应用包括垃圾桶空满、车位、呼叫按键等。从实践上来看,物联网的全栈开发比 App 及网站的全栈开发包含了更多内容。在应用角度包括了(移动)互联网全栈开发的前端和后端(服务器),又增加了物联网感知、传输部分的嵌入式开发和边缘计算(网关开发)的部分。范围更广、任务更重。而这些工作 Python 几乎全部可以胜任,比如中间的一段网关、数据汇聚服务器,同时应用的后端 Python 占有比例更高,其次在数据分析大数据、人工智能领域中 Python 也占了主流。只有因为浏览器的原因 JavaScript 不可替代,但 Python 依然可以发挥作用,例如 Bokeh、Web Player 等尝试。 JavaScript 是近年才进军后台,虽然势头很猛,但大多数是极客们的试验项目。物联网要求的是高可靠性、高效率、低成本而不是进行各种不停地修改与升级。由此物联网的全栈开发语言当然是 Python。 ——吴双力 中国科学院计算机网络信息中心工程师 *** 个人觉得 Python 主流且更具有优势。JavaScript 有一定的局限性,如各浏览器厂商对 JavaScript 支持程度不同、.NET大 多数攻击都是通过 JavaScript 运行脚本注入。Python 是一种 C 和 Shell 之间的语言,功能全面,易学易用,可拓展。未来物联网发展离不开一样东西,那就是智能化与科学计算。国外近几年比较主流的是 MATLAB,但它是商用,和 Oracle 一样,需要付费,且价格不菲。如果使用 Python 做科学计算,一方面完全免费,同时众多开源的科学计算库都提供了 Python 的调用接口,用户可以在任何计算机上免费安装 Python 及其绝大多数扩展库;其次 Python 是一门更易学、更严谨的程序设计语言,它能让用户编写出更易读、易维护的代码;最后 Python 有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用 Python 实现完整应用程序所需的各种功能。 ——杜锦阳 CSDN 博客专家 *** 物联网的开发链条涉及到芯片原型、系统原型、设备域终端的硬件与固件、组网堆栈与仿真、联网协议、网关设备的硬件与软件、服务器的前后端软件与架构、数据分析的持久层设计与数据分析平台、用户端的 App 软件,以及开发辅助工具箱。而 Python 语言支持多种编程范式,从面向过程、面向对象、函数式编程,均可以支持。同时采用 PyPy JIT + Libuv,Python 服务器运行起来速度堪比任何一种编译型语言。此外 Python 的多种实现,可以访问底层实现语言如 C/C++/C#/Java/Go 的库函数;可以充分利用底层编译型语言的执行速度。嵌入式领域,Python 在 FPGA/CPLD/Spice 仿真/设备模拟/自动测试/代码生成多个环节提升开发效率。物联网虽然复杂,只要你愿意,都可以通过 Python 语言快速整合出一套完整系统。 ——刘凯 前飞利浦半导体资深工程师 *** Python 与 JavaScript 相较而言,两者都支持多种不同的编程范式,但是在面向对象的编程上,JavaScript 是基于原型(Prototype)的,而 Python 则是中规中矩的基于类(class)的继承,并天然的支持多态(PolyMophine),Python 写起来要比 JavaScript 舒服很多;JavaScript 的世界中没有多线程的概念,所有的 JavaScript 程序都运行在一个线程中,Python 通过 Thread 包支持多线程;Node.js、Python 都覆盖嵌入式、桌面、服务器,此外 Python 还覆盖到 IC(VHDL)、科学数据分析、金融数据分析; JavaScript 设计本身有许多缺陷,毕竟当时设计的时候只是作为在浏览器中做一些简单任务的 Script,所以代码一旦庞大,维护还是有困难;除了 Lua,没有其他语言可以比 Python 的扩展性更具便利了,对于计算密集型的业务或者功能可以轻而易举的使用 C 语言来自定义扩展。何况 Python 自身还存在几何倍数于 NPM 的扩展包,且开发者还可以直接对框架层面进行修改跟自定义(当然在许可的条件下),重新定义引擎行为、Event Loop 行为,自由度高。综上,个人认为未来物联网全栈开发主流语言是 Python,JavaScript 为辅。 ——刘畅 CSDN 博客专家