GUI 和 CLI 也算是使用软件的两大流派吧,Win 下几乎都是 GUI 程序,Linux 下几乎都是 CLI 程序.因为两者面向的用户不同,
初衷也不同.今天看了<程序员修炼之道>这本书,可谓是有了更深入的了解.GUI 侧重于易用,CLI 则侧重于效率.
对于使用 Linux 的程序员,工作台就是命令 shell.在 shell 提示下,你可以调用你的全套工具,并使用管道,以这些开发者从未想过的方式
把他们组合在一起.在 shell 下,你可以启动应用、调试器、浏览器、编辑器以及各种实用程序.你可以搜索文件、查询系统状态、过滤输出.
通过对 shell 进行编程,你可以构建复杂的宏命令,用来完成你经常进行的各种活动.在 shell 下面,可以高效率的处理事务,并且 shell 可以完成
在 GUI 下几乎所有的任务.GUI 和 IDE 会让程序员变得更懒,更无知,各种辅助工具,例如自动补全可能让某些程序员连 asynchronous 这个单词都无法完整的拼写出来.
对于在 GUI 界面和集成开发环境(IDE)上成长起来的程序员,这似乎显得很极端.毕竟,用鼠标指指点点,你不是也同样能把这些事情做好吗?
简单的回答:"不能".GUI 界面很奇妙,对于某些简单操作,它们可能更快、更方便.移动文件、阅读 MIME 编码的电子邮件以及写信,这些都是你可能想要
在图形环境中完成的事情.但如果你使用 GUI 完成所有的工作,你就会错过你的环境的某些能力.你将无法使常见任务自动化,或是利用各种可用工具的全部
力量.同时,你也将无法组合你的各种工具,创建定制的宏工具.
GUI 的好处是 WYSIWYG--所见即所得(what you see is what you get).缺点是 WYSIAYG--所见即全部所得(what you see is all you get).
GUI 环境通常受限于它们的设计者想要提供的能力.如果你需要超越设计者提供的模型,你大概不会那么走运--而且很多时候,你确实需要超越这些模型.注重实效的程序员
并非只是剪切代码、或是开发对象模型、或是撰写文档、或是构建过程自动化--所有这些事情我们全都要做.通常,任何一样工具的适用范围都局限于该工具预期要完成的任务.
例如,假定你需要把代码预处理器集成进你的 IDE 中(为了实现按合约设计、多处理编译指示,等等).除非 IDE 的设计者明确地为这种能力提供了挂钩,否则,你无法做到这一点.
你也许已经习惯于在命令提示下工作,这种情况下,本文就可以忽略啦~ 否则,你也许还需要我们向你证明,shell 是你的朋友.
作为注重实效的程序员,你不断的想要执行特别的操作--GUI 可能不支持的操作.当你想要快速地组合一些命令,以完成一次查询或某种其他的任务时,命令行要更为适宜.
例如:
在上周哪些 Java 文件没有改动过?
Shell
find . -name '*.java' -mtime +7 -print
1
GUI
点击并转到"查找文件",点击"文件名"字段,敲入"*.java",选择"修改日期"选项卡. 然后选择"介于".点击"开始日期",敲入项目开始的日期.点击"结束日期",敲入 1 周以前的日期(确保手边有日历).点击"开始查找".
这样的例子很多.shell 命令可能很晦涩,或是太简略,但却很强大,也很简练.同时,因为 shell 命令可被组合进脚本文件中,你可以构建命令序列,使你常做的事情自动化.
希望你看完这篇文章能逐渐接受 CLI 并熟悉 shell.多用你的命令 shell,你会惊讶他能使你的生产率得到怎样的提高.