cnbeta上面关于vim今天吵开了。接二连三的稿件投上来被采用,评论也是几百字几百字的上,果然有吸引力啊。。
来吧。看他们是怎么说的
第一篇:
- 大家都说用VIM的是高手,我说不对,随便看一下程序图片,简直就是绝世高手用的编辑器。我折腾了半夜,反而被它给折腾了,因此为了朋友们的幸福着想,我不再一一列举它的用法。其实最大的原因是:不好意思,我也没能学会传说中的绝世武功。
- 据说,VIM(编辑器)+GCC(编译器)+GDB(调试器)是Linux下最常用的开发工具链。自小被VS2005浸染的我,不习惯VIM,不习惯GCC,不习惯GDB,叫我怎么敢跑到Linux下写程序。高手们似乎很喜欢用VIM加上一大堆插件来写程序,根据我看到的做法,要想有VS那样的智能补全功能,VIM首先要Ctags(这是要输入一长串命令的),接着输入几个字母再按一下Tab键(需要SuperTab插件),才能出现智能提示。
- 这还不是最紧要的,在VIM里面,删除一行字,请按d两下,删除一个字,请按一下x。以及一长串的需要记忆的命令列表,例如gg是跑到文章的最前面,shift+4是跑到行首,等等。我不自觉地想起了小学五年级那个暑假学的WPS,要输入一大堆的指令才能输出一篇格式整齐的文档,在别人眼里看起来绝对是很牛的事情。现在会用Office2007的,也不止你我他吧?至于那个时候所学的一大堆WPS控制指令,还有五笔字型,到现在全忘了。
- 我肯定不是个记忆强的人才。帅哥拿起个Ubuntu,手中熟练地敲打着一堆我看不懂的指令,看得我眼花缭乱。用Linux,我最头疼的事情是干什么事情我都要先敲入一个命令,然后–help找帮助来看,否则绝不会记得那个命令是怎样用的。一开始还说这是学习阶段要好好熬,尝试多了以后就会觉得这事真的很折腾。
- 你说,好好一个软件为何就不写个gui界面,非得让我敲命令去记忆每个参数什么意思,好好一个配置为何就不写个gui界面,非得让我把整个配置文件研究完才知道我该去哪里修改配置参数。
- 他们说:Unix哲学是:一个程序只做一件事,并做好。但是不知道为什么,Linux下的软件作者似乎就是懒得写个gui,或者他们认为他们只需把软件的逻辑做好就可以了,至于gui方面,根据简单原则,应该由其他有兴趣的人去做。其实我觉得原因有二,一则是没有强大的开发工具(要像C#那样拖个控件就可以写gui),二则程序员也懒。
- 为什么没有强大的开发工具呢,为什么Linux下没有VS这样的重磅武器?我再从VIM+GCC+GDB说起吧。VIM的难刚才说过了,GCC的话,要是有几个文件你非得自己手动写一个makefile不可,GDB我基本没试过,据说也有些图形界面的调试工具,可以像VS那样按一下快捷键就能调试(这个肯定也是要配置N久的),我看过一份GDB的使用手册,又要记忆很多调试指令,我觉得我快要崩溃了。
- 上面所说的“一个程序只做一件事,并做好”现在已经造成了许多弊端,最可见的是依赖性。
- 相信在Linux下稍微深入过进行开发的知道,GCC的版本号是件很痛苦的事情,有些程序要A版本的GCC编译,有些程序要B版本的GCC编译,高点低点版本号都不行。再加上相应的头文件库文件版本号,你是不是有种抓狂的感觉。悄悄地,我再告诉你,Linux现在发展很快,版本号一直在不停地变,你可以去发疯了。
- 譬如,A作者维护一份A程序,B作者维护一份B程序,两个程序之间是有依赖的(可能的情况是B程序是A程序的gui),突然B作者想去周游世界不继续开发B程序了,A作者继续开发下去,接口变了,那B程序基本就没用了。作为使用者的你,要么只能怨天尤人,要么改行帮B继续开发。
- 开源模式无疑是有很多长处的,但是其短处一直没有被正视。开源意味着源代码开放,人人都可以修改提交,可是就实际情况而言,更多的是做横向的,而不是做纵向的。我所说的横向是指开发配套软件,纵向是指对软件进行更深入的开发。因为横向的容易,只需要知道要配套的接口就可以了,而做纵向则需要将源码读懂。
- 继续说为什么Linux下不可能出现VS这样的重量级应用。VIM+GCC+GDB一样可以实现VS的功能,可以进行编码,编译以及调试,但为什么它们合起来就不是VS?因为没有架构。
- 现在开源的开发模式说到底还是陈旧的开发模式。软件工程的概念已经提出来好几十年了,可是当你想深入了解某个开源软件,接着去下载其源代码的时候,会很悲哀地发现:你找不到任何对应的开发文档。所有能帮助你理解源代码的只是程序源代码中的注释。
- 假如你很牛,想要做一个Linux下比VS还强的IDE,要用到VIM、GCC和GDB,你要做哪方面的工作呢?以进行一次小小的开发为例吧。先不管VIM中代码智能提示是怎么来的(至今我还不知道如何写好函数名后提示我参数列表),辛辛苦苦写好代码后,要编译是吧?假设编译出错了,GCC会提示你哪里错了,还显示出一个行号提示是哪里的错误,错误是什么。想快速定位到错误的地方吗?不好意思,GCC说我是编译器这事不归我管,VIM是个编辑器,这事归它管。可我总得知道是哪里错吧?谁给我这个定位的参数?GCC只能输出信息,它意识不到VIM的存在。这时候你得写个适配接口,将GCC的输出信息转换一下,然后提交给VIM,VIM再跳转到出错的地方。当然这个VIM插件是有的,叫做quickfix。
- 诸如此类的问题很多,VIM、GCC和GDB是基本没什么关系的软件,要想使它们可以通信,你必须写一大堆的适配程序,写适配程序还得考虑VIM的接口是怎样的,GCC的接口是怎样的,GDB的接口又是怎样的,这些你又得去学习。而在VS中,这是一个设计好了的架构,不同模块之间的接口是已经定义好了的,它们之间传输的数据也是定义好了的,想要通信是吧?简简单单在内存传送一个变量过来就可以了。而在VIM+GCC+GDB的通信中,数据的传送是很麻烦的事情,有时候还要通过写入读出硬盘,很神奇吧?
- 由于没有架构,所以要写一大堆的适配器才能将它们集成起来,还有些是适配器做不了或者做得不够好的功能,譬如刚才所说的代码智能提示,的确是有 VIM插件可以做,但是如果你看过写C#时候VS的行云流水,就知道那些插件做得远远不够。这不是插件的问题,而是VIM+GCC+GDB们在该内聚的时候没有内聚。当然这也不是它们的分内事,它们本来就不是打算做IDE的。这时候你还会觉得“一个程序只做一件事,并做好”是绝对好事吗?
- 知道了没有架构之后,你可能会想,要是有了架构,是不是就可以做出VS那样的IDE了?这还得考虑开源开发者的软件工程水平。就我看来,还是有许许多多的开源开发者基本是没有软件工程概念的。在现实中,你可以要求一个开发者按照你的思路你的文档去开发,因为你掌握着他的薪酬。而在网络中,一则没有软件工程开发观念,二则他们也不会去学习新的一门学科,各种各样的软件工程开发模式,咱做开源只是兴趣而已,此处不留爷,自有留爷处。你拿什么来管理这些不想被束缚的开发者们呢?
- 除非,有架构,而且VIM和GCC和GDB按照架构去做,否则绝不会做出VS那样的IDE。可是几乎在一盘散沙各自为政的开源界,有可能吗?所以我断言,开源界不可能出现VS那样的重量级应用。
第二篇:
- 十年前,会打字就叫做计算机高手了。今天,会写程序也叫做计算机高手了。我相信过了十年后,写程序会是件相当普遍的事情。打字是表达思想,写程序也是表达 思想,我个人觉得,无谓为了这些艰难的入门而浪费用户有限的精力,同时可以将用户的精力用于更关键的地方,这才是开源界所要做的工作。
- 粗粗看过文后的评论,不出所料地引来骂声一片。再不出所料的是,反驳我的评论无一例外地对作者本身先做一番评论再对文章说事,甚至再加上对作者身份的断定(肯定是在线大学生写的云云),好比骂人前先扣一尿盆子到头上再开骂不迟。这些尿盆子是:自我感觉太好、无知、自己水平差(所以就别乱说)、白痴等等。其实我想说,心态很重要,您如若抱着这样的心态我们继续讨论下去,大家都不愉快,我不如打白旗率先退出为好。
- 至于质疑我用的是不是正版VS的问题,以至于质疑我不尊重软件价值的问题,这也是个扯开话题攻击人身的问题,尽管回答这个问题很没有必要,我还是做出回答,我所用的VS和OFFICE都有授权的。希望我们不要扯到正版盗版的问题方面去,继续问我电脑里面所有的软件是不是都是正版的,就算是正版的又怎样,你还会进一步质疑我肯定听过MP3,看过RMVB吧,这些作者都付费了吗?
- 何况质疑我的大多热门评论里面提到的都是VIM。我无意加入Emacs和VIM和各种编辑器之间的骂战,更无意想强加我对萝卜青菜的喜欢于各位。我只是通过VIM来引出我对开源项目管理模式的不满而已,何故各位对我的萝卜青菜之爱严加指责呢?另我感到惊愕的是,大家都在对我不爱VIM表示了很大的不满,而对我说的项目管理模式丝毫不提及。须知道,编码只是最底层的一个工作,而我说的是上层建筑的架构有问题。至于怎么编码,这是个人喜好的问题。
- 而我说的那些依赖性的问题,各个软件之间配合工作的问题,等等,有人肯质疑吗?
- 有网友提出我文中工具链的说法是错误的,我查了一下,的确我的提法是错误的,感谢指正。
- 先说效率问题。有人评论说VIM高效,这点毋庸置疑,我同意。有人评论说VIM使用面广,我也同意。可问题是我质疑的不是这个呀,我只是说VIM命令繁多,记忆困难而已。
- “如果你还在编码,这文章等你10年后来看看,不知道你会不会觉得当年很无知”。请容许我举个例子,现在的十年前,打五笔的笑打拼音的,五笔打字的确是快,比拼音快多了。到现在,五笔还是比打拼音的要快,可是现在打五笔的还有几何?一个Coder好比一个打字员希望看稿打字一样,当然希望拿起详细设计直接就来编码。这时候,编辑器的效率是很重要的。但是做上层设计工作的知道,脑子其实比手动得慢,一个程序编码的时间比思考的时间少多了,整个项目中,编码时间只占10%左右的工作时间。
- 好比写文章和看稿打字的区别。写文章用五笔,思路好不容易整理好,打字的时候发现有个字五笔不记得怎么打,是件很恼火的事情。用VIM写程序,逻辑设计好以后,编码又不记得某个函数的参数列表的先后次序,也是件很恼火的事情,再加上繁文缛节一般的操作命令,我不知道我是专注于程序多一些还是专注于VIM多一些了。当然看稿打字那就容易多了,所全神贯注的地方是如何把每个字打好了,而不用考虑整篇稿子的起承转合问题。
- GUI和文本模式各有优缺点,只是在未来的潮流发展中,哪个利多弊少的问题。当年DOS下的WPS是很牛,可是也被现在的WPS取代了,当年DOS的《仙剑奇侠传》是赚取了大量热泪,但是现在再出一个同样品质的《XX传》,会有人买账吗?VIM若是现在冒出来的,会有那么多人捧场称颂吗?无非是习惯作用罢了。我还记得VIM有个列块操作,DOS版的WPS也有,在教程中还专门写上了,可是真正用得上列块操作的人又有多少呢?
- 我还想起了Linux下compiz桌面特效可以画一团火,初看是很帅,实际上后来根本就没人会无聊到在自己桌面上花一团火出来玩。
- 试问,十年后,一定就会知道鹿死谁手吗?我说的是我是那样的一种懒惰的人,而且深信正是懒惰使世界进步,而且我相信这种人不在少数,如果觉得VIM更适合自己的,无妨忽视我。
- 再说Eclipse和NetBeans。相信同时深入用过VS和Eclipse的人都知道就开发(不分语言)而言,孰优孰劣。Code::Blocks我也用过,就C++开发而言,跟VS就不是一个重量级的。(我说的不是VC6,是VS2005,不要拿98年的VC6来和现在的比)
- 我文中提到开源模式的问题,似乎没有人做出反驳,只是针对我的个人喜好做出来驳斥,倒是赞同的有一些,其实我拿VIM说事的重点是开源模式有问题,希望大家可以在这方面对我进行批评。这里我再提一句,Eclipse和NetBeans一开始都不是开源的,它们之所以成为重量级IDE,它们的架构是一早就规划好的了,我没发现开源之后它们的架构有哪方面重大的变化(以至于我阴谋地怀疑它们开源的原因只是想利用开源界的编码力量而已)。
- 再说LaTeX。用过LaTeX的相信都是被其强大的数学公式编辑功能所吸引过去的。OFFICE2007里面也有,LaTeX的文法,可视化的数学公式,不用再编译生成就可以知道自己输入的是什么东西,这不更好吗。
- 批评我浅尝辄止的话,有一个评论说得很对,我们应该把精力放在关键的地方(只是可惜不知道为什么,没人支持也没人反对)。世界上好玩的东西很多,不是什么东西都可以弄精通的。假设我才智中等,把VIM弄精通了,把GCC弄精通了,把GDB弄精通了。这就意味我要放弃另外一些也很好玩的东西。我的意见是对每样东西都浅尝辄止,只对自己很有兴趣的进行深度挖掘。至于VIM对我而言,它只是个工具,还没有上升到设计甚至思想方面的高度,不是说它不好,而是就算精通了我又能怎样,打字快点而已吗?计算机永远只是一个辅助工具,对人的辅助作用始终是有限的。
- 再到gui的问题。有人说不需要gui,因为不需要gui也工作得很好,因为服务器要gui是要耗费资源的。先弄明白gui是干什么用的,不是机器要看到 gui,而是人要看到gui。gui只有在需要的时候才需要被启动。好的gui可以使人工作效率提高,如apache为例吧,我是赞成apache用文本配置的,尽管我第一次配apache,sendmail这些花了老半天时间,因为一般用户用不上,这些事情应该由专业的网络管理员去做。
- 十年前,会打字就叫做计算机高手了。今天,会写程序也叫做计算机高手了。我相信过了十年后,写程序会是件相当普遍的事情。打字是表达思想,写程序也是表达思想,我个人觉得,无谓为了这些艰难的入门而浪费用户有限的精力,同时可以将用户的精力用于更关键的地方,这才是开源界所要做的工作。
终于有人忍不住了:
- 作为程序员,我们应该对开发环境和工具软件有着严肃的态度,真正弄明白各类工具的用法和用途,好歹这些是我们吃饭的家伙,是不是?不会使用各种开发工具的程序员,不是个好程序员:你拖了团队的后腿,减少了大家的工具选项,降低了团队的开发水准。另一方面,不知道该在什么项目中采用什么开发工具的,也不是好 的team leader,眼界太窄,更可能影响开发的成败。强大的开发工具并不是在各方面都强大,尺有所短,寸有所长。
- 不想当将军的士兵不是好士兵,在我眼你,不愿意研究开发工具的人也不是个好程序员,这样的人很多很多,浮躁而不自知,自大而不自信,不尊重自己的工作,也不知道尊重前辈的知识。就这么浑浑噩噩在开发圈子里混着,一年两年,逐渐对自身的待遇不满,也逐渐不能胜任工作的要求。
- 10年前,正是互联网泡沫第一次开始破灭的开端,一家家公司接连倒闭,很多刚入职几个月的计算机专业的学生很快又得再次求职……程序员的贬值,程序员队伍整体水平的滑坡,正是从那时开始的。回忆当时,一般的程序员还真不敢自称高手。
- 作为一个断续做了6年windows开发,断续做了11年Linux开发(中间有重合的交集)的老程序员,我换过若干家公司,经历过一些不同性质的项目,windows下mfc的,纯sdk的,数据库的,c/s、b/s的,ddk的(有早期的vxd,也有后来的wdm)经历过,linux下的小驱动,通讯设备研发,媒体设备研发也做过不少,还有业余做的php、ror项目,现在更是专职在做大流量高并发的……在线游戏后台,为玩家们提供坚固的精神鸦片支撑。用过的语言和工具比较多了,从在校学习的tc2、bc++3开始,到自学的vc、delphi、bcb,还有些忘了名,但第一份工作用的工具vc。从vc4开始的,后来一直升级,到最近的vs2008,我甚至业余做过VS和BCB的插件。另一方面,自己笔记本上始终安装的是linux,最初是 redhat后来是slackware,debian,ubuntu,arch。也尝鲜过一些别的发行版,其他os这里就不提了。长期做嵌入,自然长期用 GNU/Linux (这是正式的名称)。我想不管是对于windows还是对于linux下的各种工具,我自认了解程度和使用经验,应该为比《别碰我,VIM》的作者要更多。我就倚老卖老吧,希望作者能听几句老家伙的废话。
- 作为程序员,我们应该对开发环境和工具软件有着严肃的态度,真正弄明白各类工具的用法和用途,好歹这些是我们吃饭的家伙,是不是?不会使用各种开发工具的程序员,不是个好程序员:你拖了团队的后腿,减少了大家的工具选项,降低了团队的开发水准。另一方面,不知道该在什么项目中采用什么开发工具的,也不是好的team leader,眼界太窄,更可能影响开发的成败。强大的开发工具并不是在各方面都强大,尺有所短,寸有所长。说到这里,相信你也明白钻研的重要性了吧,更不要轻视业界都依赖的重要软件。你是非常聪明的,大家的智商也不会有多低下。一个如此差劲的软件偏偏那么多人喜欢去用,事出反常必有妖,这里的怪异之处,难道不值得去仔细思考吗?
- 接下来我说说《别碰我,VIM》里的一些小问题,希望作者,也希望有兴趣的围观者能有点小收获。都是些常识话,主要是说给有志于软件开发事业的人,可能比较无聊,而且刺耳。无兴趣就不要看了。
- 软件间依赖性问题称为耦合,这是包管理器自动完成的事情,对用户而言是自动的,透明的,使用者没有必要去关心这些,而开发者自然应该知道这些。这实在不该是指责某个软件的理由。linux的工具是相当精干的,工具间相互配合,胜任各种复杂任务,我看不出这是什么缺点。如果有一个开发软件,很庞大,不依赖别的什么软件,自身就可以完成全部开发所需的功能,这样的软件就是好的吗?记住一句常识吧:不要重复发明轮子。当然这在windows下是不可能的,因为 windows系统根本就没有开发用的任何轮子,所以,各个开发商,必须自备轮子。以至于很多人已经习惯了自备车轮,该换个角度思考问题了。
- 接下来说说效率问题,编程不等于打字,程序员总会有更多独特的要求。写过很多程序,维护过很多程序之后,你就会明白为什么vim比vs更好用了,这是用了才能体验的事情。我感觉在和你讨论“子非鱼,安知鱼之乐”了。哎,vim对coder们的体贴之处,怎么是几句话能说清的呢?总而言之:快捷键,正则式、以及!执行等等功能,对程序员而言,都是相当重要的,这些vim有而vs没有的功能,让我极大的感觉到vim的爽,以及vs的不便之处,只写hello world是无法了解这一点的。程序员们热爱vim到什么程度了呢?firefox都有vim插件,让我们能够以vim的操作方式看网页。用久了vim,你会上瘾。一个能让人上瘾的软件,绝不是会是你眼中的废品。当然另外一面,如果你不是长期写程序,没有那些特殊的需求,你就不会觉得vim有任何的好处。如果只准我用vs会有什么感觉呢?就像一个专业的车手,不让开赛车,让我用强大而舒适的自动波,那是很郁闷的。作为程序员,本着对工作负责的态度,不管开发工具有多糟糕多难用,你也应该掌握,这是本职所在。况且效率上vim其实更高,而现在不专业的你,还没学会,完全对vim没有应具备的认知。
- 懒惰使世界进步,所以我们我们用使工作效率更高的软件,而不是相反。公司对效率的追求是没有止境的,程序员绝对不是个舒适的职业,你可以想办法更省事的完成任务,但绝不要笨鸟还不飞。懒惰到一定程度,连什么工具干活更快更省都不清楚,那就有生存危机了。你也许觉得写程序,大部分时间都在思考,打字速度无所谓。但很多公司的程序员试用期都会考核英文打字速度,这就是对效率的追求,绝不是无聊。在校学生,职场新人,都要有这个心理准备,不要以为编程的工作多轻松。
- 至于compiz什么的我不多说,这与程序员无关。我是用compiz + cairo-dock的,只是为了养眼,没有提高或者降低工作效率。
- 再说Eclipse,这是很多公司的标准开发环境,不管你是不是喜欢,不管你的VS用得多好,都要面对这个现实。说些废话:我接触的用Eclipse的薪资水平比用VS的基本上要高,用VIM的又更高一点。国人浮躁,用金钱衡量价值显得权威一些,如果我说技术水平……大家不服气,呵呵。就冲着RMB,大家还是多掌握些手艺吧。二者的优劣,我不想多说,这是见仁见智的问题。VS就像IE,Eclipse就像Firefox,跨平台,功能要靠扩展的,当然我个人是更喜欢Eclipse。
- 至于开源模式。这个话题相当有分量,我不认为这是现在的你能谈论的。什么是开源什么是自由软件?什么叫分布式协同开发,什么叫持续集成滚动更新什么叫永远的beta版?Agile是什么Scrum是什么?呵呵,相信我,这只能是做过很多个不同模式的项目管理的人,才能有体验的。软件架构和开发模式,目前离你都比较远,没有实践而探讨,就成了空话。你真的应该相信长者,去看前人的经验和教训的总结,《大教堂与集市》这样的文章,真不是垃圾。
- 就我所知道的,业余参与GNU项目的,大部分都是公司的牛人,而专职的自由软件开发者,基本上都是业界的顶尖人物。如果连你都轻易的发现他们的开发模式错了,那全球软件行业还真是脑残集中营了。否决这么一大票牛人还真是需要勇气的。
- LaTeX可以直接用,也可以用来实现可见即所得的编辑器,攻击排版软件的基石也需要极大的勇气啊。Openoffice.org很好用,甚至国产的 WPS Office也都很好,为什么要花那么多钱买Office呢。我的windows里安装的还是Openoffice.org,公司采购的是WPS。在 Linux里,大部分时间我是用简单的abi的,对我够用了,用不着那么多复杂功能。
- 世界上好玩的东西很多,不是什么东西都可以弄精通的,但吃饭的家伙还真得精通。厨师不能靠意念炒菜、司机不能靠意念开车,你也不能靠意念写程序,人不能活在想象之中,电脑帮我们写程序的科幻时代还没到来。学不好,是你没刻苦努力,与你的才智无关。我从小就很普通,父母说我呆,同学说我笨,从小学到大学习成绩都不太好,大学挂掉n门课,但这并没妨碍我把VIM弄精通了,把GCC弄精通了,把GDB弄精通了,把几个专用的嵌入式操作系统弄精通了。只要功夫深,铁杵磨成针,大道理不多说,你别总给自己找借口,这些软件都是你应该精通的。这些其实也都是很无聊的,并不是什么有趣的东西。学习它掌握它,精通它,是你的责任,不管是不是有兴趣都要去做到。
- 最后说场合问题:无GUI的环境永远会存在,不是所有的设备都必须连接键盘鼠标。服务器永远都不需要GUI,这与时代进步无关。做windows开发用 VS是天经地义,做服务器、嵌入式、Linux或者跨平台开发,用VIM也是很适合的选择。我不明白为什么作者要把两个在工作中很难有交集的东西做对比,这就是本文标题的由来了。如果硬要做对比的话,我要说,windows 开发真tmd不爽(个人喜好,请勿模仿),我就是不喜欢不对我公开的东西,就是不喜欢难调试的东西,就是不喜欢开发速度慢的东西,就是不喜欢负载能力低下的东西……个人情绪宣泄而已,就是这样。不要上纲上线的谈tmd什么模式、技术水平,这是我个人的情绪和喜好,没有理由。
- 不想当将军的士兵不是好士兵,在我眼你,不愿意研究开发工具的人也不是个好程序员,这样的人很多很多,浮躁而不自知,自大而不自信,不尊重自己的工作,也不知道尊重前辈的知识。就这么浑浑噩噩在开发圈子里混着,一年两年,逐渐对自身的待遇不满,也逐渐不能胜任工作的要求,逐渐一个个消失在开发界。而我这样的老家伙们,渐渐的成了你所不能理解的人。
第三篇相对比较客观。我不用VIM,因为我不会用,但insert和保存退出还是需要的,毕竟我在ssh的时候,总不能使用gui界面的程序吧?