树莓派虽小,但五脏俱全和普通电脑无异。

电脑能做的大部分事情,在树莓派上都能做,而树莓派以其低能耗、移动便携性、GPIO等特性,很多在普通电脑上难以做好的事情,用树莓派却是很适合的。

树莓派是什么

树莓派是一系列为编程教育而设计的只有信用卡大小的微型电脑(单板计算机),拥有丰富的硬件接口,能够安装任何_ARM_平台的操作系统,比如Linux的一些发行版、Android、Windows IoT等。下图是当下的一款RaspberryPi 4 Model B 图片来源

作为一台个人电脑,树莓派可以…

树莓派4B出来的时候,某些标题党自媒体宣传“替代PC”,但Linux系统的PC市场份额很低,桌面软件生态不完善,作为PC用途而言,注定只是一个小众选择。我其中一台树莓派4B来当PC用,总体体验不错,下面从一个软件开发者的使用角度一一分析。

办公用途

阿特伍德定律告诉我们:一切可以用Javascript写的东西最终都会用Javascript写,推导一下就是:一切以前在客户端做的事情,最终都将可以在浏览器上做。

各种软件的Web化,让浏览器成为操作系统之上的“操作系统”,树莓派3B+就可以比较流畅地运行Chromium,树莓派4B表示打开数十个Web页面毫无压力。所以,能跑浏览器就可以满足大多数普通办公场景,树莓派CPU和GPU的算力也完全足以应对简单的_办公场_景了。

那么办公用途安装什么系统合适?对于普通终端用户,安卓系统的软件生态则更加繁荣,装Android可以覆盖更多办公娱乐场景(毕竟已经破产锤子TNT工作站已经验证了安卓PC的可行性 );专业领域用户装Raspbian则更合适,比如我这样的程序猿。

教育用途

树莓派基金会是一个慈善组织,让更多人可以接受到编程教育是树莓派的初衷。买一个老少皆宜的树莓派给孩子玩,比去什么少儿编程强多了。

个人认为孩子参加少儿编程课程是没有必要的。计算机科学是建立在基础学科根基上的,而编程语言又是建立在计算机科学上的,连数学物理基础都没有的低年级孩子学积木式编程,如建空中楼阁。让孩子玩的开心、锻炼逻辑思维的方式很多,除非孩子对计算机有极大的兴趣,否则我不建议低年级孩子刻意参与编程教育课程。

但在树莓派上参与编程和计算机相关教育活动,是有别于现在市面上的课程的,因为玩树莓派学计算机更具有灵活性,Raspbian系统自带各种真正的编程教育软件多种语言的初级IDE软件,有兴趣可以自由地深入探索,无兴趣不如多去读读书或者参加户外活动。

下图是经典的编程教育软件Scratch的截图(Scratch当前版本也已经Web化,甚至无需安装客户端也可以玩,不一定要在树莓派上运行,图片来自Scratch网站

###游戏用途

树莓派可以玩Minecraft,也可以运行复古游戏机模拟器,比如RetroPie。能在树莓派上玩的游戏有限,可能更适合小众动手能力很强的Geek的需求。

###编程开发用途

  • Python开发:非常棒,现在Python不仅在机器学习领域是头把交椅,在嵌入式开发也是动态脚本语言第一。树莓派上使用Python的优势在于:
  • 树莓派上Python的硬件开发库非常完善,甚至很多库都兼容Arduino上跑micropython
  • Python本身的跨平台特性,脚本写好放在哪都能跑,比如在树莓派上跑Tensorflow甚至是PyTorch都可以!不过在机器学习方面,树莓派的算力就捉襟见肘了。
  • Golang开发:差强人意。能写能跑,但调试不方便,因为Go的Debug工具dlv对ARM的支持2020年才初步解决(https://github.com/go-delve/delve/issues/118)。另一个问题是Go的主场不在嵌入式开发,硬件相关库兼容性和稳定性不足。
  • JS/TS开发:还不错。VS Code作为JS/TS,甚至是C# .Net Core开发的最佳工具,既可以本机直接运行VS Code也可以用VS Code Remote模式大部分常用的VSCode插件在树莓派上都能正常运行,具体来说:
  • 前端开发体验完美,虽然Webpack构建时间比Intel i7的机子大概慢一倍多,但Hot Reload仍然是秒级,丝毫不影响开发
  • 使用JS/TS开发NodeJS后端体验完美,常用的带C++ Binding的npm库也都能在ARM下正常编译
  • 嵌入式开发不够好,生态不完善,一些硬件模块在npm找不到合适的库,目前rpi-gpio库在树莓派4上有问题,毕竟ECMAScript的主场在大前端领域,不是Python的对手。

###小结

通过上面几个例子可以看出,作为开发者是可以尝试使用树莓派来替代PC做日常开发的,主流编程语言及其工具链、三方库大多保持着对ARM平台的兼容性。中小型项目在开发阶段对计算资源要求并不高,树莓派接上屏幕配个键盘,或是VS Code Remote进行远程开发,都挺好的。当然其局限性也不少,比如:ARM Linux下很难做传统C/C++的客户端软件开发;算力有限,大型项目和一些细分领域的专用软件只能用x86平台的中高端PC。