高明的 UNIX 程序员不用 IDE,IDE 从来就是给初级 Windows 程序员用的。
你看看大型的 UNIX 程序,包括 Linux 内核,各种网络服务程序,Xwindow 程序在内,哪一个是 IDE 搞出来的?我们实验室的 EDA 程序也没有一个是 IDE 弄的,我还知道Candence, Synopsys,Mentor 的高性能的图形界面 EDA 程序也都不是 IDE 写的。你信不信,微软的人在写 Windows 本身的时候也根本不用 IDE。微软内部程序员最喜欢的编辑器其实是 VIM,用 VIM 的微软程序员上次向乌干达的可怜儿童捐助了1000多美元,这是值得称赞的。
有一次某杂志采访一些出名的 Linux 内核程序员,包括 Linus 在内,没有一个人用IDE,有的人用 VIM,有的用 Emacs,只有 Linus 说"GNU Emacs is evil",但是其实他用的是一种跟 Emacs 有同样键绑定功能的 MicroEmacs。大家都是用编辑器编辑了程序文件,然后用 make 这样的自动工具调用 gcc 编译器完成编译工作的。甚至高级的 Windows 程序员也不用 IDE,他们可以从命令行调用 cl,nmake 来编译自己的程序。虽然这样的 Windows 程序员很少,但是他们却是最了解 Windows,最高明的Windows 程序员。
为什么 UNIX 程序员不用 IDE?明白了这个道理你就能体会到 UNIX 的设计思想了。首先,一个 IDE 集成了编辑器,编译器,汇编器,调试器,跟踪器…… 这个编辑器功能肯定比不上 VIM 或 Emacs,编译器比不上 GCC,汇编器比不上 as,调试器比不上 gdb,ddd, 跟踪器比不上 strace, ltrace, truss。你得到的是一套整合的低能的程序。如果你对调试器的功能不满意,你只好换用另外一套 IDE,但是这套 IDE 的热键,菜单,编辑器功能,按钮…… 跟原来那个有很大不同。你不得不花很多时间来熟悉新的环境,而不能保持原来的某些东西。
而在 UNIX 下就不一样了。你可以用你最喜欢的 VIM 编辑程序,你在 VIM 里可以调用GNU make,make 可以调用 gcc, ld, ... make 的出错信息可以被 VIM 捕获,VIM 能帮你在源程序里定位。你如果喜欢 icc, 你可以让 make 用 icc 而不是 gcc。你如果觉得 gdb 跟踪变量时比较麻烦,你可以用 ddd 来显示各种数据结构之间的关系。你还可以在 Emacs 里调用 gdb,那样就可以同步显示源代码了。而且 VIM 和 Emacs 还可以编辑很多其它东西,比如信件,LaTeX 文档,HTML,配置文件…… 你不用另外找一个什么编辑器来干这些杂活了。很多程序比如 Mutt, tin 都可以在内部使用 VIM,这样就更方便了。实际上 make 在其它方面还能帮你很多忙,我的每一个比较大型的 LaTeX文档都是用 make 维护的。
Linux 能干的高精尖的事情 Windows 都干不了
当然有很多事情是Linux/UNIX的专利了。因为 Windows 只能装在 PC 机上,好像以前也有 Alpha 可以使用 Windows NT,但是就是没见到有人用。PC 机的能力是很低的,像我们编程序处理 NP-Hard 问题的人,用 Windows 的机器显然速度不够,而且有时一个问题算上几天甚至几个星期,Windows 机器是以"死机"著称的,我们怎么能放心?所以几乎所有科学计算程序,EDA 程序,高性能图像处理程序都不是 Windows 的。他们有时也会移植一些给 Windows,但是常常降低那些程序的能力。你比较过 Windows 版本的 Mathematica 和 Linux 的有什么区别吗?
IBM 制造的最大的并行计算机有 8000 多个处理器,Windows 不可能有能力管理这么多处理器,它用的是什么操作系统?答案是 Linux。
《泰坦尼克号》电影里的三维动画,那么细腻逼真,Windows机器能做出来吗?不行。那也是 Linux 机器做的。
民航总局用来训练地情人员的虚拟现实训练设备,Windows 当然无能为力。那都是商业的 IRIX 机器。
UNIX 是最早支持 TCP/IP 网络协议的系统。它上面有很多可以互相协作的网络服务程序,它们经过多年的使用和修订,已经达到比较完善的程度。而就在1997年,微软的比尔盖茨还在扬言:"Internet 是没有前途的。" 微软的这个"远见卓识"大家应该都已见识,它后来加上的网络服务程序IIS漏洞之多,让公安部都频频发出警报,大家也是见识了的。
其实你知道了,Windows 没有一样有用的事情能比 UNIX 干的更好。
Linux 干不了的有用的事情 Windows 照样干不了!
当然 Linux 不是万能的。它也有不能干的事情,电脑也有干不了的事情。但是 Linux干不了的事情,Windows 肯定也干不了。这些事情就是我们需要探索,需要努力的事情了。在你探索的过程中,Linux 必定是你的好伙伴。
不要把Linux和Xwindow掩盖起来!不要把我们的用户当成傻瓜。
什么?你早就知道 Windows 是垃圾?噢!你怎么不早说呢!害我废话这么多。嘿嘿。
"好了。你知道 Windows 是垃圾,你现在用什么?quot;
"Linux + Xwindow"
"那我问你,Xwindow 是什么样的?"
"不就是跟 Windows 差不多吗?只不过 'Start' 按钮比较方,而且上面不是一个Windows 标志,而是一个脚丫子。点击一下居然还有很漂亮的中文菜单。我喜欢!"
"你知道什么是'根窗口'吗?"
"不知道。从来没听说过呢?"
"根窗口就是遮盖整个屏幕的那个最大的窗口。"
"哪儿有什么窗口啊!我没有看到呢?"
你发现了问题吗?这些 Linux 用户说是在用 Linux 和 Xwindow,但是他们对 Linux和 Xwindow 几乎完全不了解。很多人用了那么久 Xwindow 都不知道根窗口是什么东西,不知道其实按钮也是窗口,不知道窗口管理器和其它程序有什么关系,大家都以为窗口上面的按钮是程序自己放上去的,不知道窗口?quot;class name","resource name"是什么东西。他们也不知道 .Xdefaults 是用来干什么的。特别是他们很多人都不知道 Xwindow 的字体是如何命名的,什么是 fontset,有了一个新的字体也不知道怎么安装。
他们被遮在 Linux 之上的一层一层的包装迷惑了,他们等待有图形界面的工具来帮助完成一切事情,他们认为 Linux 跟 Windows 一样,只是麻烦一点。他们知道 Linux内核很好,但是他们感觉不到 Linux 和 Xwindow 在操作层面的天生的先进性,随后不久就把 Linux 完全删除掉了。你发现没有,要用户理解 UNIX 和 Xwindow 的操作层面的先进性,才是留住用户的最好办法。如果用户体会不到操作时的方便和高效,内核再好他们也不会理会。
但是用摹仿 Windows 的作法来吸引用户,永远会失败的。因为 Linux 如果摹仿Windows那一套低效率的方式,那么 Linux 的这套"低效率方式"永远比不上Windows 的那一套"低效率方式"。那么用户就会说:"这个 Linux,没有一样比的上 Windows。"
Linux 天生就是继承了 UNIX 的高效的工作方式,为什么我们要把它掩盖起来?我们为什么只告诉用户 KDE 的菜单怎么用?我们为什么不能像早期的 Xwindow 书籍那样第一节就告诉用户什么是 X server, 什么是 X client,什么是 Window Manager, 什么是根窗口。第二章就告诉用户窗口有哪些属性,什么是 classname, resource name, hint,怎样使用 .Xdefaults, xrdb ……
在这里我又不得不说一下那些 Linux 的发行公司和写书的人,他们把 Linux 和Xwindow 包装起来,却没有从基本上告诉用户 Xwindow 的工作原理。很多书籍讲授的层次就是在Gnome, KDE 的菜单操作的层次,靠大量抓图来占篇幅,"繁荣"Linux 书籍市场。
现在很多人已经把能够利用别人的库写出一个好看的程序作为自己编程水平的象征。在这?quot;图形化","可视化" 的年代,你如果还在用 troff, LaTeX 写文档,你还在用VIM 自己编辑 HTML,用 Mutt 处理邮件,你还在用文本模式的 gdb 调试程序,你还在用Xlib 写程序, 你还在用 tin 上 USENET,你还在自己写 Makefile,写机器代码,你还在玩 Clossal Cave 这样的字符模式冒险游戏,那你就是老古董。
其实这种思想是错误的。虽然你是一个坚决的 Linux 支持者,但是你的思想是 Windows的思想。你认为图形界面,菜单,按钮就可以解决一切问题,就可以给你高效方便。你还是没能摆脱微软给你的潜移默化的东西。你其实离不开 Windows 那样的环境,你迟早会删掉自己的 Linux。
GUI vs. CLI
做一个坚定不移的"两面派"
大家看到这个标题是不是热血沸腾?两派大虾都可以围攻我了:
GUI派用户:"哇!我一看你这小子就是 CLI 的。要不然自己写什么 Makefile?用什么Mutt?"
CLI派用户:"切~ 你还用 X!高手都不用 X。你是 GUI 那边的。"
可怜的我:"555~~ 你们都不要我~~ GUI 和 CLI 就那么水火不容吗?"
计算机界这样的门派之分还很多。很有特点的就是 CLI 和 GUI 了。CLI (Command LIne)的狂热份子声称永远不用 X。我上次在实验室看到一个同学用一个 SecureCRT 登录到Sun 机器,然后用一个 vanilla vi 编辑程序,我建议他启动一个 GVIM 过来显示在Exceed 上可以有语法加亮。但是他坚决反对,说:"高手不用X。你想想,要是我在一个很慢的网络连接怎么用 X?而且好多服务器没有装 X 程序。"
但是我们实验室的网速可够快,Windows 机器都有 Exceed 啊,而且 Sun 机器有全套X 客户程序包括 GVIM。他说他是 CLI 的坚决拥护者,但是他却在用 Windows,他后来打开了好几个 SecureCRT,每次从文本框输入地址,用户名和密码,从下拉菜单选择"SSH2",然后点击"Connnect"。他还不断的夸SecureCRT是"网络管理员投票选出的最受欢迎的登录方式"。老天,SecureCRT 本身就是个 GUI 啊,他其实没有明白Xwindow 的好处。
你说我是 GUI 的?我虽然很少在 console 下工作。但是我对 bash, VIM 很熟悉,我可以让 bash 按照我的键绑定方式来工作。我可以在 rxvt 里使用 Mutt 来收发 email。我的每个桌面上都常常堆放着一打不同大小的 rxvt。我用 VIM 编辑 LaTeX。我自己写Makefile 来维护 LaTeX 文档。我有时用 mpg321 来放 mp3。我上BBS用的我自己写的expect 脚本。 好了,CLI 派的朋友可以收我做盟友了
你说我是 CLI 的老古董?我的 FVWM 被我配置为可以"手写操作",我只要画一个"r"就可以启动 rxvt,我只要画一个 "U" 就可以启动 GVIM,…… 我用 GVIM 语法加亮模式编辑程序,我用 Mozilla 浏览网页,…… GUI 派的现在好像认我做朋友了
好了。CLI 派的朋友,虽然我很喜欢命令行,但是我有时在屏幕上左右画一下就可以执行:
Module FvwmConsole -terminal rxvt -geometry 45x5-0+0 -bg gold -fg midnightblue -fn "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*"
你是不是现在又想把我逐出师门?
GUI 派的朋友,虽然我很喜欢窗口。但是我可以在 FvwmConsole 里输入:
All (rxvt) MoveToDesk
把我所有的 rxvt 移动到我现在工作的桌面。"这家伙,怎么这么快就叛变了!"
其实何必分什么 GUI 和 CLI,UNIX 和 Xwindow 都是工业标准,它们从设计那天开始就有非常灵活的用法,各个程序,不管是 GUI 还是命令行的都可以互相协作。UNIX 和X 是一家,何必搞的那么偏激,非此即彼?你从我上面的行为可以看出 GUI 和 CLI的模糊界线吗?我就是坚定不移的"两面派"。
本文由 远方的雪山 作者:萨龙龙 发表,转载请注明来源!
想想第一次装上了ubuntu之后那疯狂地找qq来安装的劲,也是搞笑
哈哈,都曾为ubuntu疯狂过!
我也很喜欢Linux,不过,因为工作的原因,只能是兴趣了,等我的笔记本回来了,我就装个LIUNX去!继续用!
绝大多数了解linux的人没有用linux都是因为linux下的软件太少,不然我也一直会用linux。
现在除了网银用win外,一直用linux呢
网银?都别说支持linux,在win下面只有IE才能正常浏览。
我第一次体验用Linux,感觉linux不错,很稳定,Windows的话太操蛋了。。我现在下载雨林木风4.0再体验下。虽然Ubuntu不错,还是用国产的吧。
呵呵,09年我刚接触linux就疯狂的迷恋上了,但因为软件的原因,还是没能完全linux工作与学习,只是偶尔体验linux神奇的世界。