IDE 的未来在哪里?
2021-11-29
来源:CSDN
周末的晚上,百无聊赖,于是我摆弄起 JetBrains 的 Projector。IntelliJ 是一款非常强大的 IDE,而 Projector 就是安装在远程服务器上、能够通过浏览器访问的 IntelliJ。
我想试试看,如果将一些繁重的计算任务(比如训练和评估大型机器学习模型)从本地转移到远程服务器上,会不会影响编程用户的体验。
项目的设置非常容易,从点击 AWS 上的“创建实例”,到我的 iPad Pro 上运行一个成熟的 AI 项目,前后花了不到一个小时。
感觉一切都很神奇。
将开发环境从本地机器上移动到远程服务器,这个概念大胆而新颖。这种方式可以有效地将工作流集中到大型服务器上。那么,此时的 localhost 是什么呢?
当然,这个想法并不是 JetBrains 独有的。微软的 Visual Studio Code 也在朝着相同的方向发展,不仅已有了在线服务,而且所有 GitHub 代码库现在都支持在线的 VSCode。Replit 之类的小公司也在尝试将 IDE 转变为多人体验。
在自己的服务器上编程也不再意味着必须依赖本地设备了,因为这种方式本质上是将编写代码的机器与实际运行代码的机器相分离。
这个想法打开了新的机遇与大门。
软件与硬件的独立
从软件方面来说,完全远程的环境可以让开发人员不再受双启动、驱动不兼容等问题的烦扰,开发环境就在 Ubuntu 服务器上,所有工具的使用都会变得更加容易。同时,我还可以本地 macOS机器上保留 Lightroom、Cinema 4D 和 Photoshop。理论上你甚至可以将部分 Adobe CreativeCloud 打包成 Docker,但是否合法就未可知了(毕竟听上去这种想法不太正常)。
更有趣的是硬件的独立。将计算全权委托给专业的供应商,我们就可以获得巨大的灵活性,同时也不必再纠结一些权衡利弊,例如 CPU 与电池、硬盘与价格、电池与重量等。
我可以在小巧的 iPad 上写代码,配备 XHDR 显示器,电池寿命更长,内部驱动器相对较小,同时我仍然在 Linux 环境中工作,不仅有 CUDA 驱动程序,而且还可以访问 Nvidia GPU 或 Google TPU。如果临时需要更多 RAM 来训练大型模型,则可以扩展我所消费的服务,完成之后再收缩。
因此,非常经济实惠。
如果我的远程实例24小时全年无休地运行,则每月大约需要支付 35 美元。但是,我可以在周末(甚至晚上)关闭实例。这样就可以节省35%~50%的成本。另一方面,成熟的MacBook Pro 以每月 50 美元的速度贬值,因此算下来成本反而增加了 40%~50%。这些节省下来的成本可以投资购买屏幕更大、重量更轻、电池寿命更长的客户端设备。
此外,远程开发环境的扩展性也很好,团队越大,远程开发服务器的效率就越高。数据科学等大型团队已经采用了这种方式:在远程实例上运行 Jupyter notebook 是很常见的做法,团队可以远程连接到服务器,然后迭代AI 模型。随着支持多人协作的成熟云 IDE(比如JetBrains 的 Code With Me、VisualStudio 的 Live Share)的发展,从理论上说,这一概念可应用于不同的开发团队,从而大幅削减成本。
我并不是第一个有这种想法的人。
例如,MightyApp 将 Chrome 虚拟化,他们的目标是用户无需购买昂贵的硬件,将运行现代网络应用所需的计算能力外包给他们,这样既能享受高性能,同时也能节省维护的成本。
然而,隐私方面的影响也是深远的。这就是为什么虽然 Replit 和微软希望我们朝着这个方向迈进,但我不认为专有云 IDE 将成为现代软件开发的未来的原因之一。如果开发人员输入的每一个字符都会被记录或汇总成报告,那么他们就不太可能会冒险,不论这种方式有多么合适,他们也不会调整自己的工作安排。如此一来,开发人员学习和工作的速度都会受阻,他们的表现可能会回归到团队的平均水平。而这绝不是我们希望看到的局面。
但隐私只是一个方面。大多数远程开发服务器的优势都在于拥有对整个技术栈的控制,尤其是服务器本身。
你不需要再关心底层的机器,也不再需要旁门左道,而且还能获得更多的微观管理机会。云 IDE 最吸引用户的地方莫过于外包原始的计算能力,同时保持对底层硬件的控制。
这是编程的未来吗?
说实话,我也不确定。
尽管我非常喜欢在 iPad 上运行 Tensorflow,但我也有两个疑虑。
首先,苹果 M1 芯片的成本效益带来的冲击很大。有些人报告说他们的开发速度有了数量级的提升。如果能够拥有如此强大且廉价的本地机器,又何必使用开发服务器呢?随着计算能力需求的不断增长,PC 的性能也在持续提升。这种趋势与需要在浏览器中运行的 IDE 截然相反,而且这种趋势不会轻易消亡。
其次,事实证明,跨平台移动开发只是一个破碎的美梦(苹果和 Google 为此付出了太多努力)。原生客户端的表现更佳,它们的速度更快,延迟更低,并且可以更好地与本地机器交互(比如快捷键就是个很大的问题)。移动应用的问题不仅限于计算能力,现代手机芯片很强大,但与原生应用相比,React Native 简直不堪一击。在浏览器中运行的 IDE 能够提供与原生本地实例相同的用户体验吗?
我有点矛盾。
我希望能够将开发环境转移到远程服务器,同时研发更好的本地设备,与客户端更好的交互,而不是更快的机器来运行代码。
但目前我们还没有发展到这个水平。
Chromebook在朝着正确的方向发展,这绝非偶然。Google 试图实现“一切皆云”的宏伟愿景。但是,我觉得 Chromebook 不适合编程:糟糕的键盘、糟糕的屏幕、糟糕的 shell 体验。
我们需要将这个概念提升到一个新的水平:让远程服务器完成所有繁重的工作,同时投资硬件和软件工具,改善开发人员的体验。
我很好奇,能否有人打开新局面,并彻底地改变我们与机器的交互方式。