使用vi 开发软件,已经快三年多了,在三年期间,有辛酸,有痛楚,有纠结,更有收获。在这之前,也有使用过vi编辑器,那个时候,只用了vi的几个基本的命令,如yy,dd之类的。更多的时候,是项目要上线了,到linux上修改配置文件,偶尔用一用。
还记得2010年的时候,我在客户那边用java开发一套管理系统,编译器当然是用的明星级的eclipse。到了项目上线的时候,我的老大,要到线上部署环境,他之前对linux系统不熟悉,在linux上修改一些配置文件颇为费劲,然后就问,谁会使用vi,我当时就说,我会使用vi。老大让我在linux服务器上修改了一些文件,感觉还不错,于是就把我带着,到客户的机房参观了一下,让我熟悉一下环境及机器的配置,说以后项目上线这些事情,叫我一并参加,我当时还挺高兴的,觉得这次vi为我挣取到了一次很重要的机会。在这次项目上线中,我把vi的基本操作又熟悉了一遍,觉得自己长进不了。
到2011年的时候,我有幸遇到我人生中的一个贵人,是他让我彻底改变了我对vi的认知。记得那是2011年的一个夏天,上面的领导叫我开发一个工作流的项目,并给我安排了一个产品经理。因为是小项目,所以项目组就两个人,我一个,还有一个是那个产品经理。我负责编码,那个产品经理负责做设计,验收等工作。当时那位王经理看了我的程序及使用的开发工具后就说,你可以尝试使用vi开发java,我当时听了后非常的震惊,vi还可以写代码吗?我印象中的vi就是用来修改配置文件等等。我当时难以相信他说的话。从这以后,我陆续发现有其它的同事使用vi来开发软件,最让我震惊的是,公司里有几个在国外大公司,如google,hp,oracle呆过的大牛,一直都是用vi开发软件的,我发现他们可以用vi编写各种语言的code,如c/c++,java,go,python等等。我当时就感觉,这么牛的人,都在使用vi,说明这个编辑器真有它的好处,于是我试着用它来写代码,我尝试用vi写了一些简单的代码,发现使用它太痛苦了,就我掌握的一些vi命令,很难完成代码的编写工作,于是我放弃了。继续使用eclipse作为开发工具。有一次,那王经理叫我演示一下我写的代码,因为使用eclipse开发,如果演示的话,一般会直接在eclipse中启动java虚拟机,然后在下面的console窗口查看输出,你懂的。王经理就说,我建议你做成命令行的形式,这些大家都可以使用。我当时就说,eclipse下开发的java代码,不方便做成命令行的形式,我们一般都是直接在eclipse下调试的。他笑了笑说,如果一个不懂java的人来使用你开发的东西,你说叫他如何使用。于是他帮我把代码修改了一下,引入了一些包,做成了以命令行的方式启动的形式。在这个期间,这位王经理直接用vi编辑了我的代码,三两下就修改完了。我当时就问他,vi不是用来修改配置文件的吗?难道也可以用来开发代码?他笑了笑说,你们现在使用的eclipse,我们从来都不用,eclipse这个IDE太笨重,又不方便,经常使用,让人的思维变得迟钝,让人变懒。最好用的工具,就是70,80年代,那些大牛开发出来的编辑器,那才是真正程序员的编辑器。你如果经常使用vi写code,你就会觉得你对代码的理解变得更深刻,你对计算机的理解会更深刻。他最后还说了一句,你用eclipe编的代码,在vi下查看,非常的乱,代码整洁,就是你的脸面,以后一定要注意。听了他了话之后,对我的触动非常的大,我又联想到公司的世界级的程序员都使用vi编辑器,让我觉得,我必须得用vi来开发。不过,我当时心里还有是疑问的,为什么说使用eclipse会让我变笨,变懒,而用vi,让人对代码理解得更深刻。于是我在网上搜索了大量关于使用vi的心得,都没有找到我想要的东西,大部分人使用vi都是把它配置成IDE,让它有提示的功能。
过了一段时间,我开发的工作流已经接近尾声了,我也被调到其它的项目组开发其它的项目去了,和这位王经理,接触没有原来那么多了。在空闲的时候,我还在网上搜索使用vi的好处。终于有一天,我和同事们聊起了vi编辑器的事情,其中的一位同事就说,在我来之前,公司的老板曾经要求所有的软件工程师,必须得使用vi开发软件,当时公司全民学习vi,场面是相当的壮观。推行了一个月不到,员工是怨声载道,都说vi的开发效率低,门槛太高了。听了这些话之后,我为之一惊,心想,老板曾经是雅虎的架构师,连他都这么说,这次我得必须学习用vi写code了,我们几个同事还说,我们大家一起学习vi.于是,我和几位同事天天作分享vi的使用等心得。我用vi写了几天的code之后,发现虽然慢点,但对vi的使用已经入门了。使用vi三个月后,我基本上可以用vi写任何的代码了。
我学习vi的心理路线上非常曲折的,自己曾经的纠结,迷茫,让我走了不少的弯路。我下面就来谈谈使用vi开发的一些好处。我重点从两个方面来阐述。一方面是使用vi编写代码方便的地方,另一方面是从使用vi之后,对代码,对计算机的理解上来说。
vi编辑器的方便之处
1. vi的快捷键,有好几百个,如果能熟悉运用,基本上可以手不离键盘。我今天在这里不讲vi的快捷键,但是我要提醒大家的话,在使用vi的时候,一定记得要使用j,k,l,h这四个键来移动。我看到许多使用vi的人,还用的方向键来移动光标的。为什么要使用j,k,l,h这四个键呢,大家来想想,我们的手指是离这四个键近呢,还是离方向键近呢。基于这一点,我就觉得vi专门为程序员设计的编辑器,想想这些vi的发明人,想得是多么的周到。说到这里,有人就要问了,那为什么在vi中,从编辑状态,切换到命令状态,为什么是esc键呢,esc键离我们的手指太远了,不方便。对于这个问题,我要说的是,在70年代,键盘和我们现在使用的键盘不一样,那个时候的esc键,在我们现在键盘的tab键的位置,出于使用习惯的考虑,使用esc键还一直延用至今。
2. 使用vi,你的两手,可以不用离开键盘,就可以完成代码的编辑及编译。非常的方便。我们可以和eclipse对比一下。我们在使用eclipse的时候,虽然它也有快捷键,但是,它的快捷键,没有vi的强大,所以,大部分时候,我们得借助鼠标来完成代码的编辑工作, 于是,我们可以观察使用eclipse程序员,基本上是右手一会在键盘上,一会在鼠标上,右手在键盘和鼠标上来回移动切换,光凭这一点,它就已经输给了vi编辑器了。
3.你可以用vi编辑器开发各种语言,如java,python,c/c++,bash shell,go,js,等等,这样,你就省了为了使用某种语言,去费心找开发工具的烦恼了。vi可以通吃。有人又要说了,eclipse也可以啊,它不光可以开发java,还可以开发c/c++,python呢。是的,eclipse的确可以开发其它的语言,大家如果用过eclipse开发过c/c++,python的话,大家都明白,eclipse对java的支持是最好的。不过话又说回来,对于一些新的语言,如go语言,eclipse目前有对应的插件支持吗?
4. vi属于GNU家庭的成员,它继承了unix的设计哲学,并将unix设计哲学发扬光大。它只做一件事,并把它做到最好。我们想想eclipse这些IDE,论编辑功能,没有vi强大,轮构建功能,没有ant,maven强大。eclipse是什么都做,什么都没有做到最好。
vi 隐藏背后的力量 对代码,对计算机体系的理解
在我使用vi的过程中,除了使用方便之外,让我对代码,对整个计算机的体系理解得更深刻
1. 我在使用vi时,不配置它的代码自动提示的功能,代码自动提示功能,使用eclipse及vc++的人,应该非常的熟悉,代码提示给我们带来方便的同时,也让我们失去了许多的东西。有人说,没有代码提示功能,就没有办法开发代码了。代码提示,从某种层面上来说,让我们变笨了,过了依赖提示,让我们太被动。如果没有代码提示功能,当我们遇到一个陌生的API,我们就得去查看docs,在看docs的同时,你有可能还关心一下其它的API,这样方面知识的积累,根据我的经验,文档最多看三遍之后,API的参数及返回值,你已经烂熟于心了。因为你记得了这个API,你在开发的时候,当你想设计其它的API时,你就会去借鉴之前java中大牛设计的API的参数及结构。久而久之,你也成了大牛了。当你感慨大牛设计的API的精妙时,你就会去看看这个API的源代码,有一些想深入理解,学习的冲动。这种状态非常适合我们去代码的理解,知识的积累。我们想一想,我们在上学年代,特别是学习语文的时候,老师会叫我们找一些美文背诵,这样你在写作时,就会借鉴大家的文笔,自然你的文章就会写得好。我们学习程序道理也一样啊,当我们心里有了足够的大牛的代码时,我们也成了大牛了。
2. 使用vi,非常适合学习新的编程语言。就拿我最新学习python来说,我因为我熟悉vi,就可以直接用vi来编写python的代码,轻车熟路,如果你不熟悉的话,你可能第一件事是找一个合适的编辑器,然后配置一堆的环境,这样非常的浪费时间,如果我们配置成功了还好说,如果配置失败了,非常的影响我们的学习热情。当我们学习一些新事物时,如果没有在每一时间内上手,以后再来学习的话,可能性就比较小了。我开始用vi写python,不懂的APi太多了,我去查阅文档,顺便积累一些API。这种学习方式,让我在短时间内学会了python的使用。
3. 使用vi,许多东西都不是现成的,都要自己去理解代码的一些细节,这些细节可能在IDE中被隐藏掉了,对于一个程序员来说,理解了许多细节,让你对OS,对其它的软件设计了如指撑,这样提高就非常的快了。