为什么我更偏好 CLI?

陈易生, tooling
Back

interstellar

Do not go gentle into that good night. -- The poem from Interstellar, originally by Dylan Thomas.

你的系统有一套 API,现在你想搭建 UI 与系统进行交互,你有两个选择:在终端使用的 CLI,和在浏览器或桌面使用的 GUI。你更偏好哪个?

这取决于系统的类型。对于面向完全非技术人员的系统,GUI 可能更适合;但对于只面向工程师的系统、还处在早期的系统、或是基于成熟开源软件封装形成的系统,CLI 是个更好的选择,因为 CLI 相比 GUI 有几大优势。

更容易自动化

CLI 可以很容易地在各种脚本中被调用,例如在 CI 中执行 git clone 把代码下载下来,用 make test 跑个测试,等等。此外,CLI 还可以很方便地和已有的 CLI 组合,发挥更大的作用,比如把 CLI 的输出 cat 出来然后 grep

GUI 完全没有这个能力。用户要想自动化,只能直接去调 API 了。

更高的使用门槛

CLI 更高的使用门槛带来的是:

举个例子。我在 Tubi 的时候,要想上线一个 A/B 实验,需要把一个实验配置仓库从 GitHub 上 clone 下来,去里面增加一个配置文件,提交 pull request,等待管理员 merge,通过 CI 才能被部署。我问 CTO 马老师,为什么不弄一个 GUI,这不是很简单吗?马老师说,我就是不想让这个事情变得那么简单,我想让大家都耐着性子看完文档,了解 A/B 实验的概念和公司内的最佳实践,最后才在有监督的情况下,提交实验请求。

更快的迭代

为什么 CLI 比 GUI 的迭代更快?因为 CLI 可以完全由搭建系统的后端工程师进行开发,而 GUI 的开发还需涉及产品经理、设计师和前端工程师。在大多数公司,产品经理、设计师、前端工程师和后端工程师这 4 个角色会由 >= 3 个高度异构的人来承担,引入很高的沟通成本。

更少的抽象

CLI 相比 GUI,在 API 的基础上引入了更少的抽象。更少的抽象带来的是:

总结

在了解 CLI 的优势后,我们一起回顾文章开头提到的几类更适合 CLI 的系统。

Do not go gentle into that Graphical UI.


© Yik San Chan. Built with Vercel and Nextra.