程序员的知识管理
前言
本文从一个程序员的视角来讨论知识管理,包括以下几个方面:
- 什么是知识管理
- 为什么要管理知识
- 如何管理知识
什么是知识管理
个人知识管理(Personal Knowledge Management):一般指个人通过工具建立知识体系并不断完善,进行知识的收集、消化吸收和创新的过程。
知识管理的范围很广,一般的知识管理方法可以参考这篇文章 个人知识管理的方法。
为什么要管理知识
计算机行业的一个特点是新技术更新特别快,意味着程序员需要不停地学习,才能跟上行业的发展。所以,知识管理对程序员非常重要。有意识,成体系地管理知识能够:
-
更有效地学习新的知识。
如果我们已经建立好一个技术知识体系,新的技术也只是在其他技术上建立起来的,有了坚实基础,学习新技术就会更有效。 -
更好地掌握知识。
使用合适的工具,正确的方法,可以更好地掌握知识,让知识凝固在脑海,而不是流走。 -
节约时间成本。
程序员经常遇到同样的问题,例如说部署开发环境的时候,如果有把解决方案记录下来,就能省去重新解决问题的时间。
如何管理知识
程序员的知识获取途径大部分来自于搜索引擎(谷歌可以提高搜索效率)和技术书籍,这与其他行业不同。主要原因是技术知识一个主要来源是互联网,例如说技术博客,技术文档等。因此,程序员的知识管理主要围绕互联网展开(并不意味着书籍就不重要)。
我把程序员的知识管理分为三个过程:
- 知识积累
- 碎片整理
- 思考加工
知识积累
想想我们习以为常的知识积累方式有哪些?也许记笔记是我们最常用的一种。对于程序员来说,用笔记录笔记并不现实,我刚学 C++ 的时候就是把语法记在笔记上。实际上,这种做法是很低效的。更有效的方法是用笔记软件帮我们记录文章。例如说,印象笔记,有道笔记等。
一开始我看到好的技术文章时,都是加书签存起来。后面发现这样不能离线访问,而且链接可能会失效。后来用上了笔记软件,于是我可以把文章保存到笔记中,随时可以翻出来看。可以说,笔记软件给知识积累带来了极大方便,同时可以分类管理不同的知识。
知识积累难在养成积累的习惯。以前我解决某个问题,谷歌了很久找到一篇文章解决了问题。解决之后并没有记录下来,结果下一次遇到同样问题,我又浪费了很多时间搜索解决方法。重复多次之后,我意识到这是个严重的问题。所以逐渐养成了保存各种文章的习惯。这些网上积累下来的文章,成为了我知识体系的土壤。
现在开始,使用笔记软件分门别类地保存网上看到的文章,这里要着重强调一下分类的重要性,好的分类可以节省你以后重新检索文章的时间,不要把时间浪费在不必要的劳动上。笔记软件一般都会提供浏览器插件,保存起来是很方便的。
碎片整理
我自己经常遇到这样的情况:要用到某个 Linux 命令的时候,经常大费周章地去搜索。有人说直接查 man 手册不是很快吗?确实查 man 手册比查搜索引擎要快,但是有两个问题:一是看了 man 手册的命令语法,我还得试试看;二是如果我不知道命令的名字怎么查 man。所以,最快的方法不是搜索引擎,也不是 man 手册,而是个人 wiki。
与大家平常所知的 wiki 不同,个人 wiki 主要是用来记录知识碎片的,例如说:某个常用命令的语法,特定的软件配置等等。如果还是不理解,可以看看我的个人 Wiki。这些知识碎片是我们初步消化的知识,只不过因为太过碎片,不能够组成完整的知识体系。很多人以为把看到的文章保存到自己的笔记里面,就有一种已经掌握它的错觉,结果保存了成千上百的文章,却一篇都没认真看完。别人的文章是他的知识沉淀,并不是自己的。随时把文章中的精华提取整理到 wiki,才能初步消化知识,为后面的思考加工做准备。
有人会问为什么不用笔记软件记录这些碎片化的知识呢?用 wiki 当然是有理由的:
- 笔记软件保存的主要是知识原料。我们从网上保存别人的文章到笔记,存下来的知识是别人的,你只是存下来而已,还没经过消化。我们上面把笔记软件定义为知识的仓库,如果把初步消化后的知识也存在那里,会造成一定的混乱。当然你一定要这么做也可以,但我有分层的思维定势,这算是职业病吧。
- wiki 是随处可访问的。wiki 发布在互联网上,我们可以随时随地访问它。
- wiki 是分享的。任何人都可以访问你的 wiki,分享自己的知识何乐而不为呢?
那么如何制作自己的 wiki 呢?我自己用的是 Simiki,具体用法查看 Simiki-个人Wiki写作。发布到互联网我用的是 Github Page,具体操作自行搜索。
思考加工
写博客是最好的思考加工知识的方法。当年我也是被刘未鹏的 为什么你应该(从现在开始就)写博客 和 书写是为了更好的思考 给带入坑的。写博客的好处我就不提了,看上面两篇文章就够洗脑了。下面我着重谈谈如何写好博客的一点个人经验。
- 博客少写纯操作指南类的文章。网上大部分博客写的都是纯操作指南类的文章,例如,如何搭建 LAMP 之类,可能作者自己都不清楚为什么要这么做。不是说纯操作指南类的文章不好,相反我觉得这种文章很重要,只是它的位置不对。它应该放在 wiki 中,因为纯操作指南类的文章只是描述步骤,关注点是怎么做,而不是为什么。写博客的关注点应该在为什么,讲清楚为什么要这么做。另外不要钻牛角尖,我说的是纯操作指南,不要以为只要是搭建环境之类的文章都不能写,这里的“纯”代表只给步骤,不提背后的原理。其实写得好的操作指南应该力求让读者知其然,知其所以然。
- 定期写文章。 万事开头难,动笔开始写作很难,一旦开始就停不下来了。养成定期写文章的习惯,至少确保一个月一篇的节奏。
- 自荐文章到各个技术头条。例如说:伯乐头条,开发者头条,极客头条等,有读者才有动力,同时也是保证自己写好文章的监督。
- 写博客的工具。我自己用的是托管在 Github Page 的 Hexo 静态博客。搭建教程见 用hexo搭建github博客。如果你有服务器的话,可以试试 wordpress,ghost 之类的博客软件。
- 把无法加工的知识写到 Wiki。例如说:git 的一些配置和用法,这些内容在官方文档都能找到,写在博客也只是搬运工,除非你有新的理解。
总结
以上是我摸打滚爬两年多积累的经验之谈,如果你有好的经验欢迎留言交流。一开始我是在 CSDN 写博客,只不过走了不少弯路,后来折腾 个人博客,最后又开了 个人 Wiki。逐渐形成了自己的知识管理方法。最后总结一下:
- 知识积累:使用笔记软件保存好的文章,积累知识。
- 碎片整理:在个人 wiki 上记录初步消化的知识碎片。
- 思考加工:对存在笔记和 wiki 中知识进行思考加工后写在博客。
以上讲的是如何在互联网中学习积累,但是千万不要忽视了看书这一重要方法,书中的知识是成体系的,知识密度高,网上的文章良莠不齐,不成体系,比较碎片化。合理分配时间看书和上网学习是很重要的。