了解 vim
Vim 被誉为"编辑器之神",这可不是虚的。
在我用了 vim 半年之后,我建议我身边的每一位程序员都去学习 vim 。
因为一旦你学会了 vim 的操作,你就像中了毒一样,你会讨厌鼠标,讨厌在你敲着敲着键盘,突然又要去移动光标,因为把手从键盘移动到鼠标上的时间远远大于手指在键盘按键的切换。
而且你会希望在所有的编辑器上都装有 vim 插件,不管是 vscode,还是 idea,还是 emacs;不管是自己的电脑还是别人的电脑;不管是敲代码的编辑器还是用来看网页的浏览器。
还好,所希望的都有,每一个可以装插件的编辑器都有 vim 插件,甚至浏览器也有 vimum。
当你真正习惯上了 vim 以后,你会迫不及待的想要一个机械键盘,因为你敲代码大部分时间都用在了键盘上,鼠标已经不再那么重要了。
机械键盘推荐红轴,青轴和茶轴虽然自己敲着很舒服,手感很好,但是比较影响其他人,键盘声太吵了,黑轴就不考虑了,码字太累了,不适合程序员。
我个人用过青轴和红轴,青轴给我的感觉就是码代码是一颗一颗的,听着那声音自己觉得很舒服,敲代码很有感觉。
而红轴给我的感觉就是敲代码的时候你会忘记你手上的键盘,给我一种手、键盘合一的感觉,把精力完全集中在码代码上,感受不到敲键盘的感觉。
最后说的就是先学 vim 的基本操作,然后装个插件在你现在的编辑器上练习就行了,不需要直接用 vim 编辑器。
因为你直接用 vim 编辑器,作为一个新手,不会配置插件,快捷键等,没有提示,没有高亮。你在写项目的时候会很痛苦,你就用你熟悉的编辑器高亮,代码提示这些是你以前搞好了的,所以实际应用起来难度小很多。
为了推荐更多人程序员学习 vim ,我还自己写了一篇入门文章,有兴趣的可以看看。
我周围的人,只要是用 vim 敲过代码的,从没有人说过用 vim 敲代码不好用而放弃用的,只会对 vim 爱得越来越深。
Git 规范
Git 作为我认为最优秀的版本管理工具,那是程序员的利器,必须用得游刃有余。
而我今天要说的不是怎么用好 git,如果需要可以留言给我,我后面写一篇或者一个系列。
我想说的是规范,不要以为 commit 随便写就行了,其实 commit 的规范程度一部分体现了你这个人做事的态度,是否端正,严谨。
我拿我在 某米工作的时候举个例子,我有个朋友那组的有个学姐,她的 commit 很随意,完全不能体现她提交代码的内容,比如,哈哈;放假了,好开心;bug;也不说是什么 bug,导致我那个同学根本不知道她提交了什么代码。
也不知道她做了那些事儿,在一个团队中,这是一件很蛋疼的事儿。
特别要是老大或者同事想做 review 的时候,看到这么糟糕的 commit 定会对你的印象大打折扣。
如果你是个实习生,估计就不容易转正了,因为会觉得你是一个很随便的人。
我平常所用的规范来自于阮老师的规范(微信不支持外链,可点击阅读全文)。
链接: http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html
深度比广度重要
现在还在学校的同学,可能经常听学长们这么说,在面试的时候既要考你的深度,也要考你的广度,所谓深度简单点说就是对某个知识点的掌握程度,而广度就是你知道多少个知识点。
举个例子,也许你会经常听到那些面试过的人回来这么说,那个面试官一直抓住一个问题不放,知道他打不出来为止,这就是在探究掌握的深度。
然后也会有这种问题,你会什么什么吗?你了解什么什么?你用过什么什么?这就是在看你的广度。
所以一些在校学生就不知道自己应该去扩展自己的宽度,应该去学新知识,还是挖掘深度,再去研究以前的知识。
我也面试过不少大厂,也拿了几个 offer,以及自己实习的时候跟一些工作多年的老司机谈过话。
最后给出的答案是深度比广度重要。
我来以我的角度谈谈为什么深度比广度重要。
不知道你身边有没有这样的事儿发生,有个人(A 同学)拿到了一个好点的 offer,但和他一起的(B 同学)可能你觉得技术比他还厉害的没有拿到,然后你问那个拿到 offer 的同学,他说他是运气好。
分析一下这个事儿,会发现,其实有可能确实运气原因,比如
- 他们俩不是同一个面试官,然后导致两个面试官问的题不同,以及面试官的判断标准不同。
- 他们俩是同一个面试官,但是 A 同学和 B 同学的技术不同,A 同学技术栈跟面试官的技术栈重合性比较多,因为经统计,那些面试官更喜欢找跟自己更相似的人,因为面试官觉得自己比较优秀,跟他相似度越高,会认为这个面试者也比较优秀。
前面这两种基于运气的情况下,当然肯定 A 同学有实力的,基础不扎实,运气来了也抓不住。
那我们怎么才能让运气来了就能抓住呢?
我的建议就是先深度再广度,深度可以体现一个人对知识「打破砂锅问到底」的精神,,对于不知道的问题喜欢探索,也许你就精通了一门框架(前端比如 React),对于其他框架只是了解,但是这样也比熟练使用好几个框架面试成功几率大得多,因为如果你遇到 React 技术栈的面试官,你是大概率能过的。对于熟练使用好几个框架而不精通的,就是这种,面试官问你会什么什么吗?答,我会啊,然后问深一点就不知道了,这种过的几率就要小很多。
所以为了运气来了的时候你就能抓住,好好挖掘你的深度很重要。
如果你在考虑我是应该把以前的东西巩固一下,还是该去学新知识,你仔细思考一下,你对以前熟悉的知识深度够不够,够了再去学新知识,不要啥都会,被面试官问的时候,啥都不会(这是我昨天晚上跟我们班一个培训出来的同学聊的时候的出来的,他说培训的时候学了很多东西,然后我一问他框架原理,都答不上来,得出的结论就是只会用 API)。
然后我说的是深度比广度更重要对于在校生来说,而不是广度不重要,给你说这个的目的是在你不知道应该学新东西,还是巩固以前知识的建议。
拥有自己的知识体系,形成解决问题的方法论
巩固基础,拥有自己的知识体系,形成解决问题的方法论,这个要求是我去小米实习我老大第一周给我说的东西。
当时我其实很不理解,所谓的知识体系是什么,还要谈到方法论这种东西,感觉一脸懵逼,经过我这么久的思考实践,我谈谈我的理解。
其实知识体系和解决问题的方法论是相辅相成的,在自己解决问题的时候,会用到知识体系的东西,知识体系的形成,也有部分是通过解决问题来添砖加瓦的。
什么是知识体系呢?
可以说是一个思维导图,这个思维导图就是你所掌握的知识的一个汇总,或者没掌握,你觉得需要应该掌握的知识。比如作为一个前端工程师,你应该会 HTML、CSS、Javascript、前端框架、HTTP 相关知识、web 安全相关知识等等。
关于 Javascript 需要掌握基本类型、函数、对象、内置对象、等知识,
然后函数要掌握闭包、作用域、this等,对象要掌握原型、new这些等等。
我就不再扩展了,根据自己的知识形成一个知识体系,然后再解决问题的时候就很容易根据自己的知识体系来解决问题,比如可能你遇到了跨域的问题,你从你的大脑搜索整个知识体系的时候,就可以知道跨域有哪几种方法,然后每种方法的适用场景是什么。
在形成自己的知识体系的过程中,你就知道自己对哪些知识了解,哪些知识不了解,然后你就会花时间去补充自己不了解的知识,渐渐完善自己的知识体系。
在形成自己的知识体系之后,你面试就比较胸有成竹,兵来将挡水来土掩。
你的知识体系就像一张网,面试的过程就是来检验你这张网漏洞有多大的过程,而学习的过程就是就像是给这张网空隙给编织细一点,你的最终目的就是使你这张网的空隙越来越小。