程序员的技巧体系
前一阶段我学习VIM技巧的过程给我了深刻的印象,看似复杂的诸多技巧,当以笔记的形式打印在一张纸上时,事情忽然变得很简单了。配合反复的实践,不会的时候就查阅,我只用了两三天的功夫就能很熟练的使用VIM了,而我对VIM的敬畏甚至恐惧,几乎持续了两三年。
推而广之,Git显然也可以用这种方式去掌握;再推而广之,掌握某种编程语言当然也能够按此法行之。很多人可能觉得,仅仅死记硬背压根不行,因为有很多微妙灵活的使用方式不是能够记住的。其实,比起那些复杂的计算机理论,深奥的网络搜索算法,这点所谓的“技术”更应该被归类为技巧,当然,更多的是一种“经验”。很多流行的库,其核心可能只是一两个比较创新的想法,而更多的代码,是为了把这些想法能够产品化而服务的,而这个过程中,又引入了很多意图提高工程质量的一些规范。等到真正的产品发布时,就已经不能再用当初那个核心的想法去概括这样一个工程了,绝大部分已经是工程性的技巧的累加了。
因为这样的特点,在我们面对类似的开源工程时,如果看不懂,多半不是因为不够聪明,往往是因为经验没有达到。而搞懂其核心的理念或思路反而更容易一些。所以问题可以归结为,如何快速有效的建立起自己的技巧体系?
1,经常写博客。写博客的好处刘未鹏早就称述过,博客更多的是对自己知识的一种总结和记录,因为我们常常会忘了自己当初解决某个问题的思路。写博客算是对解决方案的回顾,温习一下自然记忆的更牢固。而且很可能不经意间会有新的想法冒出来,改进既有的解决方案。至于藉写博客出名或者期望某个伯乐凭此找到你,纯粹是电视剧脚本了。
2,常记笔记。和写博客的道理一样,记笔记让自己能够加深记忆。有时候我们想把一些经验记录下来,以待需要的时候查找,但我过去两三年的经验表明,这种机会几乎是0。习惯性的进步对程序员来讲是一种常态,进化是如此的频繁和迅速,以至于我们能不断找到更好的方法,有更深一层的抽象,这些都让升华之前的那些可怜的经验显得如此微不足道,翻看以前的笔记甚至会为自己曾经的无知而脸红。
3,针对一项工程建立完整的档案。就程序员这个工作来讲,完全创新性的理论极少能够遇到,大部分时候我们在处理工程性问题,在积累工程经验,而工程经验往往是和具体的工程紧密结合的。C++工程里学到的经验,放到JS工程里可能反而导致麻烦;做工具软件的经验抄到UI密集的应用中,可能适得其反。而做工程的过程中,我们常常会因为疏于整理,让相同的问题一而再再而三的发生。这时候如果有一个好的档案记录从项目开始到现在的所有经验,可能会让整个工程相关的工作变得更加的简单。呵呵,这其实也是我写这篇博客的一个契机。
4,写wiki。写wiki主要能够方便团队协作。邮件发送的状态报告,或者对方由于邮箱设置问题没有收到,或者对方压根忘了看;发送过的附件,转发后往往会丢失;自己在写报告时有时可能错发了一个旧的状态报告,有时候发送完了想起来某项忘了更新;如此多份的状态报告在发信端和收信端都可能造成各种混乱。。。而一个wiki page会产生一个固定的链接,如果设定一个易记的名字,对方无需向你索要任何邮件,可以在任何时候打开浏览器阅读到你的报告。管理层甚至可以在汇报工作需要展示细节时,直接打开这个wiki,一切一目了然。一个系列的wiki可以向团队分享知识,一个关于工程要求的wiki比任何口头的传达或者邮件要可靠,如果自己习惯用wiki记录技巧,就不至于在想要查找时忘掉文件存在哪个磁盘哪个目录下了。
另外,以工程的角度看,这些记录中应当包含一些处理问题的方式,而不仅仅是技术问题,这也是需要注意的。