为什么要学习命令行
我们平时使用的“应用”大多是图形用户界面1 应用(以下简称“图形应用”),比如我们在手机、Windows 笔记本上用的聊天、购物、游戏、音乐应用;偶尔你还会注意到一些人通过键盘在“黑色的窗口”里输入字符运行程序,这个黑色的窗口我们习惯上叫它“命令行”(command line,或者console),那些运行在里面的程序就叫“命令行界面应用”(以下简称“命令行应用”)。如果你觉得前面的Matrix 虽然很酷,但有点儿摸不着头脑,那么接下来,我们就分三点简单直白地说说与图形应用相比,命令行应用的主要特点。
1“图形用户界面”的英文为graphical user interface(GUI)。对于图形用户界面应用,用户使用图形与之进行交互。“命令行界面”的英文为command-line interface(CLI)。对于命令行界面应用,用户使用文字命令与之进行交互。
学习曲线虽然先陡后平,但是掌握新工具的综合成本很低
图形应用用来娱乐和购物确实很方便,作为开发工具呢,一开始也是很方便的,但图形化的展示方式和开发模式,导致不同应用之间协同工作的难度很大,用户往往为了分析数据学习Excel,为了做Web后端开发学习在PyCharm 里写Django 代码,为了开发Java 代码学习Eclipse、IntelliJ,为了管理代码学习Sourcetree……好吧,那我们就拼命一个一个地学习,可是当我们终于熟悉了这些应用之后,发现大家又在用Python 做数据分析,用VS Code 写Java 代码了,之前学的Excel 帮不上忙不说,又冒出来个Anaconda 要学习……工具层出不穷,跟着走学不胜学,不跟着走又怕落伍。命令行应用正好相反,一开始需要花点儿时间熟悉它的套路,一旦掌握之后你就会发现:所有命令行应用的使用方法基本一样——一通百通,掌握新工具的成本接近于零。
功能强大效率高,硬件配置要求低
一个命令行应用就像一块积木,可以方便地与其他命令行应用组合在一起,进而完成高度复杂的任务。这就像只要掌握26个字母,就可以组合出近乎无限的单词。
你输入的每条命令都可以保存到文件里,变成脚本自动执行,还能通过自动补全功能将重复劳动几乎减少到零。
相较于命令行如此丰富、自动化的应用,它却几乎没有“启动”这个概念,按下回车键立刻开始工作。即使运行Windows、macOS 卡顿的老旧电脑,也能在命令行的世界里重返青春。
开源、免费、开放
绝大多数命令行应用是开发者为了解决自己遇到的问题而编写的,而不是专门为“用户”开发的,因为这一点,命令行应用的丰富程度远高于图形应用。而且命令行应用多采用开源方式分发,免费使用。如果你对实现原理感兴趣,可以方便地阅读、调试代码,还可以提出问题,与作者互动,甚至提交自己的改进,成为贡献者(contributor)——像那些科学家、艺术大师一样,在人类技术发展的长河里留下自己的名字2。
2参见GitHub Archive Program。