反沉迷,我亲爱的轮子

在读书和刚毕业的时候,我是很迷信各种工具的。写代码,一定要那种提示齐全,语法检查机制完备的ide,为此,在念书的最后一年,为了开发一款h5游戏,花了很大量的时间在寻找ide上面。因为是用js来写,所以世面上很难找到代码提示和语法检查的ide,当时能够勉强达到要求的一个是aptana另一个是webstorm。因为找不到像vs或者eclipse那样猛的ide,我还经常吐槽,js真是难搞,连个像样的ide也没有。

后来在工作的过程中,这种迷恋工具的情节,被一步一步的削弱,最后竟然发现,远离这种功能完备的开发工具,竟然对我们自身开发水平的提高会有很大的帮助。

IDE使用历史

既然我们说到了ide,那我们就从ide中去找找我提出这个问题的答案吧。

记得进大学不久开始写c#,使用了vs2010,然后是写java,用到eclipse。这两款ide功能爆炸。尤其是vs这个东西,用地表最强编辑器来形容一点都不为过。

后来到开始写前端,接触了dreamweaver。说实话,确实被惊艳到了,html和css的提示,js的检查,而且还能预览页面。但时过境迁,如今你再看使用dreamweaver的那群人,他们的技术水平大部分和5年前应该几乎是一样的。

到了在学校学习的中期,我开始迷恋像aptana和webstorm这样的前端神器。完备的代码提示,出色的语法检查,让我在一段时间内简直对他们欲罢不能(尤其是在学校期间做游戏开发的那段时间,大部分的代码是用notepad++写的,由于机器的性能瓶颈,跑ws还是很吃力的)。

到了学校阶段的后期,发现这些ide虽然功能强大,但是对内存的要求实在是太大了,当时我的开发机器只有4g的内存,开了ide、网页和ps简直就不能动了。所以迷恋归迷恋,最后还是根据现实情况,找可替代的ide。这里我找到了三款,一款是adobe为了弥补dreamweaver在开发上的缺陷而退出的brackets,第二款是国内基于eclipese的h5builder,第三款是sublime text。第一款个人感觉还不错,习惯在dw上边预览边开发的小伙伴可以很轻松的上手,而且其补全也继承了dw的只能,有一些很不错的插件来辅助开发,但是缺点是不稳定,经常写着写着就崩溃,h5 builder如上的功能都有,而且还有一套移动端的ui框架,能直接在云端生成webapp,缺点是简直是慢成狗了(虽然他们号称写代码最快最爽),最后就是sublime了,很轻量级,几乎不占用内存,而且coding反馈很舒服,插件生态不错,虽然不能叫做ide,但是其功能一点不输。

这三者中我选择了sublime,只是最近换成了微软的vscode,不过sublime依然是我编辑器的主力之一,atom也使用过一段时间,但是体验远远不如vscode和sublime。

不要沉迷于自己的舒适圈

说了那么多我用过的ide,接下来要说一些重点了,虽然不见得100%正确,但还是可以稍微有所借鉴的。

为啥有一些ide会成为学习路上的绊脚石?

其中有一点我觉得是主要的原因,就是ide的功能过于冗杂,版本迭代相对缓慢,跟不上前沿开发技术的发展速度。当然,这个主要是针对目前前端的开发环境。服务端的技术发展是相对稳定的,不像目前前端技术栈疯狂一般的变化。可能前几年你用用dw来写页面还得心应手,但是到了现在,各种开发框架的环境配置,sass,less的引入,还有像typescript和coffeescript这样的语法糖的出现,使得像dw这样的重型ide疲于应对,语法提示,语法高亮,输入流畅性等重要的coding指标都难以达标。

但是像sublime atom vscode这种依赖于第三方插件来做功能拓展的编辑器来说,情况又是不一样了。基本在市面上新的技术栈流行的时候,相应的插件也就和我们见面了。

也就是存在这样的一种情况:可能我们很想学习一种新的技术(比如sass),但是无奈常用的ide不支持(比如老版本的dw),那么,很有可能就是我们会因为不舍得离开自己的舒适圈(自己熟悉的开发环境和ide),而放弃了这么技术的学习。当然,我这里只是拿了ide,这个我们日常开发中最最常用的工具来做了一个比喻,并不是说它不好。事实上更多的是,很多人因为不想放弃当前熟悉的编程框架或者编程工具而对新技术,新工具采取观望甚至抵制的态度。

我出来工作的时间有限,阅历有限,但是已经看到了不少以上的案例了,虽然自身的原因占了很多,但是沉迷于工具的舒适圈我觉得很大程度上妨碍了他们学习新技术的兴趣。

会用轮子,还要会造轮子

前面我只是用ide这个最显眼的案例,做了一个简单的分析。其实从前端的角度来看,我们或多或少都使用了前人留给我们的各种轮子。比如web开发中的万金油jquery,现在的主流开发框架angular,react,vue,流行的打包工具,gulp,webpack等等,这些东西毫无疑问,都是能提升我们工作效率和开发水平,我们不光要用,还得用好。但是,很重要的一点,我们不能为了使用这些轮子,而去使用它们。有很多人,你问他为什么用angular不用jquery,他给你的答案如果是“angular更流行呀”这样一类。这个答案显然不对,能够理解各个框架的个中差异,优缺点以及使用环境,甚至是作者的编程思想,这样的出发点才是正确的,才是你为什么使用新框架,新轮子的原因。

使用这些轮子,而且不沉迷于这些轮子,最后会自己造一些自己需要的轮子。我觉得这是一个优秀开发者要经历的三个过程。“你写的破框架难道能超过 xxx吗?”,“你写的工具难道比xxx好用?”,对于这样的问题我们完全没有必要较真。写轮子,只是为了让我的编程思想有一个慢慢沉淀的过程,并不是去与谁比较一个高下。程序员作为一个终生学习类的职业,如果丧失了自己去创造工具的冲动,永远生活在查看别人的帮助文档的日子下,我觉得是很悲哀的。

小结

说了这么多,写这篇文章只是为了让自己更好的警惕。不要沉溺于自己的工具舒适圈。觉得自己会用一两个框架,一两个引擎就有多厉害多了不起。学习是无止境的道路,让自己处于不满现状的道路上永远不会错的。会用轮子很重要,会造轮子更重要,而养成良好的编程思维,才是真正的目标。