记得刚开始接触代码的时候已经是大学一年级了。在此之前,对写代码的印象一直停留在改游戏配置文件写外挂上。虽说也挺有意思,但总归是不务正业。况且当时我脑海里只有逆向工程的概念,让想象中的编程凭空增加了更多的难度。

直到后来上大学让写C语言,才发现写代码这东西没有那么高不可攀。不过这个时候已经不早了,其他大神们在我刚开始接触编程语言的这个年级,已经有能力把自己写的程序已经卖出去大价钱了。惭愧的是我到现在也还没有这个能力。。。

接触的晚不说,也没有什么好的学编程的环境。虽说当时跟着一百多人一起上的课,很多人其实压根不听,课后几百个练习题很多人也是从网上抄的答案。我平时并没有抄作业的习惯,所以隐约记得那一整个学期有一半的晚上我会从吃晚饭后的六七点一直做编程题做到十二点左右熄灯。经常因为一个不等号折腾好几个小时。开始做题的时候才刚吃过饭,等一个bug改完,就已经该要睡觉了。

这对于当时的我简直就是打开了新世界的大门,人生苦短,让时间消失的魔法就这样找到了。

现在回想起来,用c起步对于普通人来讲确实难了点:而我就是个普通人。如果当时用的是python,可能我的人生会快乐很多。让我人生更悲惨的是,我们当时对IDE完全没有概念,对debug更是一窍不通。老师说,推荐大家用VC++,然后我就用VC++。老师说,codeblocks是个好东西,有更高级的功能,于是我又在电脑里装上了codeblocks,同时和一起装了codeblocks的舍友一起鄙视其他用VC++的同学。现在想想真是可怕,对代码一窍不通的我竟已经开始了针对IDE的攻击活动。

后来再过了一年,莫名其妙进了基地,并且作为软件组的一员,和其他很多计算机专业的同学开始了半正经的代码活动。国内教育奇怪的一点是,即使他们是计算机专业,在大一的时候也没有几门专业课,有不少人的代码水平甚至和我差不多。这让我有了很大自信。然后一群小码农聚在一起,交流起来哪个IDE好用,最后我个门外汉默默下载了VS。

当时VS还没有community版本,所以安装的都是盗版,当然用起来肯定美滋滋,各种自动化debug,让年幼的我体验到了高科技带来的便利。

不过问题在于,我做什么事情都有一种『原教旨主义』的倾向,即使是娱乐活动也会最终变得莫名其妙地正经起来。对IDE的选择更是了。但在对IDE行情不了解的情况下,也只能随波逐流,哪个好用哪个了。但是在用VS的时候,我已经久仰vim大名。传说中这是一个可以完全不用鼠标操作的编辑器,或者说有鼠标也没有用的编辑器。很多人一入vim深似海,从此再也出不来,只能默默网上搜,vim如何退出来。

其实在最终尝试vim之前,我已经有个这个概念了,即IDE在很多时候都是小题大作,毫无必要的。此外再加上对c++更熟悉了一些,因此最终抛弃了vs,跑去用最新出来的atom。atom刚出来的时候声势浩大,给人一种,只要你牛逼你就肯定喜欢atom的感觉。结果并没有让我失望,atom确实看起来很牛逼,相比vs来讲清爽了不少。于此同时偶尔写写Makefile,用终端编译运行,也比用vs看起来高级了不少。毕竟更贴近『原教旨』了。

但其实没过多久,微软又出了与atom针锋相对的vs code。这可谓是大厂一出手,就知有没有。vs code在性能上比atom以及其他同类别的编辑器好了很多,而且支持各种插件和皮肤,对于当时的我又是巨大冲击。于是还没捂热的atom又被晾在了一边。

vs code太受欢迎,以至于在这几年内见到的大部分人都在用。既然大家都再用,那肯定不会是很专业化的东西了。于是我终于将魔爪伸向了vim。

伸向vim是有契机的,因为用ssh连实验室的服务器,并没有其他编辑器可以用,只好绞尽脑汁用无处不在的vim。众所周知,vim的学习曲线是非常抖,然而我强行把它的曲线拉平了。早在大学和舍友一起吐槽别人用vc++的时候,我们就尝试了用vim的hjkl作为方向键。隐约记得当时还有几个可以用来练习vim键位的小游戏。同时vim的几个模式我也都大概清楚了。总之,想写东西就按i开始,想挪光标去其他地方就hjkl,想退出就:wq。知道了这几个,其实也就可以坑坑巴巴用起来了。

所以等到要在实验室服务器上改东西的时候,我其实已经可以很自然地用hjkl操作了,甚至会用w和b跳来跳去。

另一个更重要的契机是,有一天,神奇的youtube算法给我推荐了Goerge Hotz的直播视频。当时苹果的M1芯片刚出来没有多久,大家都还在M1性能和效率的巨大冲击中,我也是。Goerge Hotz在直播里就用逆向工程猜如何破解M1芯片的神经网络单元的限制。因为这个计算单元似乎只是对苹果自身的深度网络加速用的。然而Goerge Hotz对此并不是很满意,他想让他自己的开源深度学习库也能用上这个单元的加速。

于是他花了好多天,每天十几个小时,一点一点破解每个函数是怎么调用的。整个过程表现出的毅力和专注程度对我来说也是大开眼界了。另一个让我印象深刻的就是他的vim技术,现在看来并不是什么很高级的操作,但确实让当时只会用hjkl的我大喊牛逼。于是我又一次试图抛弃vs code,开始了vim的征程,而这就发生在几个月前。

我郑重其事装了十来个插件,学会了大部分常用的指令,终于在大半个月后可以比较熟练地进行所有能在vs code上完成的任务,只用键盘。这简直是生产力的巨大飞跃。我甚至在键盘上把caps lock和esc换了位子,让切换模式更舒服。

如果只是这样的话,我的人生又会简单很多。因为 vim 尽管学习曲线很抖,但它也只是一个小而美的编辑器,就像锋利的刀片一样,掌握好就可以到处用。直到有一天我有了更多的想法,比如 todo list。

我想,如果 vim 里能有个 todo list 该多好,不用鼠标就能很快记录。于是我开始找插件,倒是找到了不少,但是出现了个问题:似乎在这件事情上,emacs 更好用一些。所有人都在说,既然这样了,何必不去用 emacs 的 org mode 呢。

于是我就去用 emcas 了,为了心中的 todo list。这就导致了更多的问题。首先,从软件工程上来讲,emacs 是个更好的软件。他可扩展性极强,有自己的编程语言,可以完成大部分人上网需要完成的工作(除了看youtube吧)。这也就给它带来了很多额外的学习难度。比如 org mode,比如比 vim 更复杂更庞大很多个数量级的配置文件,比如没有 tabs 只能像疯了一样不停切换 buffer。。。

至于键位安排,感谢 evil mode,让我切换到 emacs 几乎没有什么压力,只是花了一些时间学习怎么用 buffer 代替 vim 里的 tabs,其实也没有花很多时间。在写代码层面上的迁移,只花了一个周末(其中一整天都在调试代码的自动监测语法错误。。。)。其余我在vim里用的各种操作,evil mode 里竟然都有对应,并且高亮等做的更好,让我又有了一种当年用vs的高级感。

关于键位另一个问题就是,一旦开始了这个路子,就越来越发现普通的键盘键位分布真的是让人无法忍受,而好几千人民币的HHKB,传说中程序员的最爱,键位配置果然名不虚传。然而,不知道这笔开销可以拖到什么时候。。。有钱咯吧,有钱咯吧。