虽然这个老问题又推到了我的时间线。但我觉得,时至今日,我有一些新的感受。
这些感受来源于一位知友的观点:编程语言与其相关的基础库绑定。一种语言的基本库或者框架代码的流行决定了这种语言的生命力。
这个观点推广开来就是:围绕一个产品的应用生态决定了这款产品的生命力。
C跟C++语言在很长的时间里都是编程届最流行的语言,这是为什么呢?因为它具备极其庞大的软件生态,整个Linux系统中有成千上万的供C语言链接的编程库(C++也因为可以原生链接C库而沾光)。所以这造就了C语言的生态,也造就了历史上的一个辉煌时代,在那个时代作为一个程序员,学会使用Linux系统就是绝对的人上人,使用Linux系统意味着掌握了更先进的生产力,毕竟,Linux系统提供了对大量的开源C/C++库的原生支持,在Linux中引入C开源库要比使用其它操作系统要方便得多。(Linux就是免费的Unix,所以你可以把Linux以及BSD都当作类似Unix的系统)
然而,Java作为后起之秀,用更好的办法解决了这个问题:maven库,比C/C++依赖甚至更加好用,在这个体系下也发展到了gradle等编译机制,因为Java本身就是一个平台,所以不再需要操作系统级别的依赖管理支持,而是将依赖管理直接做到编译构建系统中去!这个体系客观的说,确实使得程序员对Linux系统的依赖大幅度降低了。
类似的体系在各种语言中蓬勃发展,比如还有js的包管理体系,python包管理体系等等。——凡此种种,以至于到了后来,没有一个靠谱的包管理体系,依赖包安装体系,已经很难成为一种流行的现代编程语言。
其它语言要异军突起,恐怕只有曲线救国。
比如,创造一套独一无二的编程框架,使用这套编程框架必须绑定某种语言,用这种方式强推某语言。
比如,直接使用java虚拟机,蹭java软件生态(跟C++蹭C语言软件生态差不多的道理)。
话扯远了,那么说回到编辑器之争,它真的仅仅只是编辑器之争吗?
不,其实它并不仅仅是编辑器之争,还是应用生态之争。
在编程届早期的几十年里,没有任何编辑器,在插件系统等方面构建了像 emacs, vim 那样成熟的生态。使得他们蓬勃发展,成为了傲视其它IDE的王牌编辑器,因为客观的说,在那个时代,emacs 跟 vim 在功能上远远强过当时的 IDE。——所以那句经典的名言,并不是个段子,而是当时客观存在的真实:世界上只有三种编辑器,vim,emacs,其它编辑器。
不过,历史是在发展的。越来越多的新的编辑器或者 IDE 构建了属于自己的插件生态。
这里边比较优秀的有 Jetbrains 系列:它旗下的IDEA,PyCharm,AndroidStudio,CLion等等IDE都是共享插件生态的。
还有Visual Studio Code:是Eclipse的原作者跳槽到微软之后的新作品,构建了一套全新的通用插件体系,使得VSC有成为任何语言IDE的能力。VSC的插件生态也非常的发达。
至于Eclipse的插件体系相比前两者就差多了。不过好歹还是基本可用的。
不过编辑器届的特例依然还有几个:
一个是像XCode那样的特例,它的本质就是:将iOS编程框架强制绑定到这个IDE,然后将IDE强制绑定到某个操作系统,将某个操作系统强制绑定到某个品牌的电脑。只要你被迫使用这个编程框架,那么你就得被迫使用这个IDE,进而被迫使用某个操作系统,以及某品牌电脑。因此,你会见到有很多程序员使用 xcode,但说它好话的程序员真的不多,除了一些只用过很少种类ide的新程序员以外。毕竟,这个ide根本没有做得更好用的动力,再怎么不舒服你不是还得捏着鼻子用么。
二个是像vim这样,不仅是一个编辑器,同时还是一种编辑器的模式:非常多的程序员即便不使用vim编辑器本身,也会选择在各主流编辑器中安装vim支持的插件。这样就能在不同的IDE中获得基本相同的编辑体验。客观的说,vim自身的包管理系统已经跟不上时代了,它的插件应用生态发展速度已经明显放缓,而vim语言本身并没有能够撑起一个独立的应用生态,但vim编辑模式却依然作为它的核心价值观,在各种新生代编辑器中发光发热。
三个就还是emacs本身,因为它是lisp届的扛把子,所以它始终有自己的一席之地,因为它的应用生态与这个语言本身的应用生态高度绑定。而这个语言本身,确实有很多程序员因为要学习这个语言而接触这个编辑器。
最后,切个题:
atom大概率是要被vsc打败了,不是技术上的原因,而是生态上的,vsc的应用生态已经崛起,atom很难再与之匹敌。
vim作为一个独立编辑器,它的应用生态确实不容乐观。但 vim 本身作为一个编辑器模式,具备自己独特的魅力,能够完美的适配进所有当今主流编辑器与IDE,所以它正在以全新的形式活跃着自己的生命力。
unix,以及从unix哲学诞生出来的linux跟bsd,是C语言依赖包管理体系的一部分(C++因为蹭了C语言的应用生态所以通常也被归类到C语言生态,合并称为C/C++),这整个系统都是为C语言编程而诞生,只要C语言依然还是世界上最流行的语言(TIOBE排名没有掉出过前3,大量时间里稳居第一),那么unix类的系统就依然还是对程序员来说非常重要的值得学习的操作系统。——C程序员懂unix类操作系统的重要性,就跟java程序员懂maven依赖库的重要性差不多。
至于emacs,则是本身与 lisp 生态高度绑定,难以被其它生态取代,也难以取代其它生态。
你所学习的那门课程要求 lisp,那么,学习 emacs 肯定也是对此有帮助的。