Linux就是我的IDE

我很少使用诸如Visual Studio、Eclipse、IntelliJ IDEA、Qt Creator等等之类的集成开发环境(IDE,Integrated Development Environment),因为我有一个更好的“IDE”,那就是Linux。

这么说吧,以上提到的哪个IDE,是不能在Linux这个更大的“IDE”里运行的?就连微软的 Visual Studio 都已经拥抱了 Linux 平台,你可以在 Linux 下用它进行开发。包括 Linux 自己,也能通过虚拟机的方式,在一台 Linux 机器下运行更多的 Linux 环境😁。

关于 Linux 其实是一个集成开发环境,还可以这么看:其祖先 Unix 系统,你能找到一些非常经典的编程书籍,里面都有环境两个字,比如 《Unix编程环境》 和 《高级Unix编程环境》。

一旦你开始把 Linux 当成一个集成开发环境之后,你会发现自己好像进入了一个更广阔的天地,不再拘泥于以前那些非常华丽的 IDE 的诸多限制。

1 所有程序,都是文本

集成开发环境很大的一个限制是,它们一般只能支持一种或者有限的几种语言。这对于总喜欢探索一下新语言的人是很痛苦的,如果他投资很多精力熟练地掌握了一种IDE之后,发现自己换了个语言之后,这个IDE突然就没什么用了。所以你在职场里经常能见到一些工程师,他们被贴上了标签,比如“我是个VC工程师”,“我是个MFC工程师”,“我是搞Qt编程的”… 因为他们被自己的IDE绑架了, 不敢越“雷池”一步😅。

而如果你坚持用Vim/Emacs这样的Linux通用编辑器进行编程,那么当你想要切换一种编程语言的时候,会发现你掌握的很多高级的文本编辑命令都还能继续使用。

比如我,一直用Emacs写Qt程序,只是在想生成一些ui的时候,才打开Qt Creator,生成完ui之后,马上又切换回Emacs继续打字😁。

2 传统集成开发环境的“盲肠”

大家都知道,人体的盲肠是个没什么用的东西。传统的集成开发环境也一样提供了一些没什么用的东西,比如这个Qt Creator的projects栏:

qt-creator-project-panel.png

从中大家可以看到,它提供了所有代码源文件的一个列表,方便你用鼠标点一下以打开某个文件。

这东西有什么用呢?如果你把Linux当成一个IDE的话,想打开文件就到命令行上输入 vim main.cpp 或者 emacsclient main.cpp 就好了啊。

尤其是项目一旦变得很大之后,这个列表就更不靠谱了,因为文件太多,程序会变慢,图形界面的东西,一旦慢到一定程度,用户体验立马就下来了。解决的方法,可以比如把项目拆成N个小项目,可是问题又来了,这下涉及到了从一个项目跳到另一个项目的问题。有时候刚跳出来,马上又要跳回来。

比如我做安卓开发,所有的源代码有9个G,我曾经试过把所有的文件都放到 Eclipse 底下去,结果一天一夜之后,Eclipse还没弄明白我到底放了些什么文件在里面,这也是我为什么写了 Ajoke项目 的原因。

你可能会说,你看这个Qt Creator里,帮你把所有.h/.hpp头文件和所有.cpp文件分开,排好了序,一目了然——可是,这在Linux的bash下面是多么容易就实现了呀! ls *.h *.hpp|sort 就可以了。

《Coders At Work》里有个大牛程序员(Brad Fitzpatrick)被问道“你如何快速熟悉一个新的项目”时,他是这样回答的,一般我就先用ls/find看看项目里有什么文件,就能知道这个项目大概是怎么组织的了。

3 使用Linux当IDE的无限可能性

有些工具集成了文档,比如在Visual Studio里,在 printf 函数上一按 F1,它就会帮你打开MSDN,跳转到 printf 的帮助页面。

——上面这个当然是极好的,可是,如果你要做 Qt 编程的话呢?Visual Studio就没法用了。

我在Emacs下结命Linux的一些工具,比如beagrep,Firefox,sawfish等,也可以做到不管是 java、qt、php 程序,我按一下 F1,系统就会用 Firefox 帮我打开相应的帮助页面。比如我在写一个Qt程序,想打开 QDialog 的帮助,我就先用代码搜索引擎 beagrep 在 /usr/share/doc/php-doc/html 下搜索哪些帮助页面包含了 QDialog 这个关键字,然后把它们按相关性排一个序,把它们列出来让我选打开哪个——一般第一个就是我想要的。