在这个月的工具箱专栏中,我想分享一下自己工作、学习以及生活中的一些电脑小工具。我认为学习并不是简简单单阅读和浏览的过程,而是一个积累的过程,通过持续的学习,不断丰富、索引自己的知识库的过程。接下来我将从如下四个方面入手
- 高质量的信息源和高效的学习
- 方便的笔记管理
- 知识库的备份与版本控制
- 提高工作与学习的效率
分享我自己的经验。
高质量的信息源和高效的学习
人们不可能知道自己不知道什么,大家往往不知道该去学习些什么,有哪些方向。所以尽管互联网上信息很多,书也有很多,很多人不知道应该去学什么。为了让自己能够接触到有充足的信息,我需要建立一个信息网络和信息渠道,让那些我可能感兴趣的信息不断“推送”(Push)我的面前(参见我的博客文章,勇于做“千年老二”)。我的信息来源渠道主要是Twitter和Google Reader。通过订阅我感兴趣的名人、博客,我可以时刻了解业界正在发生的热点讨论、研究、工具、书籍,同时可以调整我的学习方向。
思维导图是一种十分有效的快速学习的工具。在看书或者学到有价值的知识时,我经常会把学到的内容做成思维导图。这样我既可以对所学到的内容有一个概要的、抽象的了解,同时我又可以随时深入到细节。作为思维导图桌面应用工具,我常用XMind(http://www.xmind.net/)。XMind可以方便地支持思维导图、鱼骨图、组织结构、树状图等多种形式,同时它提供了一些初始模板,包括:头脑风暴、会议、项目管理、读书笔记、流程图等等。在线的思维导图工具,我使用Minemeister(https://www.mindmeister.com/)。Mindmeister支持多个人同时在线头脑风暴,我经常在头脑风暴电话会议中使用这个工具。Mindmeister还有一个很酷的功能是能够做到修改通知,甚至播放整个修改的过程。
方便的笔记管理
我认为学习的过程是一个构建个人知识库并且不断索引的过程。每次接触到有价值的知识,我都会做笔记。对我来说好的笔记应用满足我以下几个需求:
- 记录多种形式的内容,包括文本、图像等
- 方便的标签(Tag)功能,这样我可以方便地定位特定专题的内容
- 支持自由文本检索(Free text search),这是标签功能的有效补充。类似于Google那样,通过一些关键字,去检索知识库
- 同步与备份,方便地在不同的电脑以及设备之间同步。
最初我使用的是Microsoft Office中的OneNote。早期版本的OneNote能够记录多种形式的内容,并且可以方便的用关键字查询。它的分页功能在一定程度上起到标签的功能,但是只能添加一个标签,而很多时候,一个笔记是可以放到几个标签下面的。而且由于Microsoft的应用是以客户端为主,每次重新安装机器,都需要自己手动复制文件。后来我选择了Evernote(http://www.evernote.com/)。目前来看,Evernote能够满足我对笔记管理工具的全部要求。首先,Evernote是一种客户端-服务器架构,可以使用多种客户端应用来记录笔记,而笔记会自动同步到服务器。这样的话,每一次更换机器或者更新系统,我要做的只是安装Evernote客户端,登录,就可以把我的所有笔记同步下来。Evernote做到了“写入既存档”,它会自动把最新的内容同步到每一个设备,这样我再也不用担心笔记丢掉。我比较反感很多应用中的“保存”功能,对于一个真正为了客户设计的系统来说,它不需要它的客户考虑是否“保存”,每次客户输入,都应该自动保存,而且客户根本不需要关心存放在什么地方,只要想找的时候能够方便地找到就可以了;其次,Evernote的Tag和自由文本检索也十分强大,它的自由文本检索甚至可以认出Evernote笔记中图片里面的字符,如果图片中的文字符合检索要求,它也会可以帮我找出来。另外Evernote支持多种包括Windows电脑、苹果电脑、手机、IPad等多种设备。
当然,作为一个有心人,一定要随时记录学到的信息,因此自己随时还要带笔和纸。
知识库的备份与版本控制
我的个人知识库不光包括日常笔记,还包括各种各样的文档,比如论文、ppt、视频、培训及咨询资料、个人资料等。我对于资料知识库的需求是:
- 版本控制。我需要总是在最新版本的文档上做修改,但我不希望用时间作为文件名
- 保留历史,我希望看到每份文档的历史
- 占用磁盘空间不要太大
- 资料同步
我最初使用的工具是SubVersion和TortoiseSvn。SubVersion是服务器,TortoiseSvn是客户端。每次对文件做完更新,我会在相应目录或者文件上用鼠标右键点击,然后选择更新,TortoiseSvn就会帮我把修改提交到SubVersion服务器。使用TortoiseSvn可以很方便的查询提交的整个历史。与Evernote不同的之处是每次都需要手动提交,但是相对于笔记在Evernote中的自动更新功能,我更希望手动更新我的资料,这样我就可以利用提交时填写的注释,记录整个文档变化的历史。但是基于SubVersion的解决方案也有它自身的问题:
由于SubVersion是基于服务器-客户端架构的解决方案,每次提交必须连接到SubVersion服务器,而这个服务器往往是装在另外一台机器上,因此如果我在出差中,就没有办法提交更新。
Subversion的数据库比较大,而且哪怕是在客户端也会比较大,因为在SubVersion的工作目录中每个文件总是存在两个拷贝,一个是正在修改的版本
SubVersion的数据库经常崩溃,不一致
与SubVersion相比,Git是一种完全不同的版本管理工具。Git是一种分布式版本管理工具,它的服务器总是在本机,因此我随时都可以提交文档的更新。Git的数据库比SubVersion数据库要小几十倍。在Windows平台上需要安装MSysGit来安装Git,在Mac平台上直接安装Git就可以。另一个重要原因是我希望通过使用Git来学习这种新的工具,以及了解分布式版本管理系统的工作方式。
基于Git的解决方案给我带来一个新的问题,我的资料数据库和我的资料数据都存放在同一台机器上,万一机器崩溃或者丢失,就会给我带来不可弥补的损失。因此我必须把数据库同步到其他地方。我使用的是Mac自带的Time Machine,它会帮我随时备份。Dropbox也是一个不错的备份方案,而且它可以帮我把资料同步到网上,但是对我不适合,因为我的个人资料库远远超出了Dropbox免费账户所提供的空间大小。
提高工作与学习的效率
我十分反感低效的工作和学习,因此在我的常用工具箱中有不少提高电脑使用效率的工具,主要包括:时间管理、检索、快捷键,黏贴板等。
- 时间管理
对于时间管理来说,我的基本需求是保证我能够专注于最重要的事情。因此我需要一个待办事项列表(To-do list)工具和一个能够帮助保证时间箱(Timebox)的工具。我使用番茄技术(Pomodoro Technique,参见我在InfoQ的文章“番茄”让时间变成我们的朋友)管理自己的工作和学习时间。具体做法简单来说是把时间分成25分钟的时间箱,每个时间箱中排除干扰专注于做最重要的那件事情。我使用Pomodario(http://code.google.com/p/pomodairo/)作为时间箱工具(从下图可以看出,我写到这个地方已经花了十个25分钟)。
我用的代办事项列表工具是RememberTheMilk(http://www.rememberthemilk.com/)。RememberTheMilk既可以在线也可以离线使用。它具有比较丰富的标签功能,也可以与日历程序同步。美中不足的是它不支持任务嵌套,也就是说只能有一层任务,我不清楚收费版本是否支持这个功能,但是暂时我能通过标签来作区分。
每次开始一个番茄时段之前,我都会从RememberTheMilk里面选择最重要的任务, 然后在接下来的时段中,不受干扰地去完成这个任务。
- 检索
当今多数电脑安装的操作系统都是基于图形界面的,因此为了寻找文档往往需要打开资源管 理器(在Mac上是Finder),然后资源管理器会以树的形式展开所存贮的资源,为了找到资 源,我需要用鼠标不断地展开/缩放树节点,去寻找文件。这种做法十分无效,等找到一个 文件往往半分钟就过去了。因此,我迫切需要一个工具能够帮我从电脑中快速定位并且启动 文件或程序。通过这个程序,我只要简单的输入关键字,它就可以从电脑中把相关的资源帮 我列出来。 在Windows系统上,我会用Everything(http://www.voidtools.com/)和Google桌面。 Everything会将系统里面的所有文件的文件名进行索引,只要输入关键字就可以把文件名符 合关键字地文件列出来,Everything还支持基于正则表达式和通配符的检索。Everything资 源消耗很少,速度很快。
Google桌面也可以通过关键字检索来定位文件,而且比Everything更强的是它不仅仅对文件 名作匹配,而且也会去匹配文件中的内容。问题是Google桌面功能太多,而且很多我并不 干兴趣,对于我来说太过于重量级,所以我以Everything为主,以Google桌面为辅。 Mac系统自带了Spotlight,它实现了同样的功能。我只要按下Command + Space就可以直 接启动Spotlight输入关键字了。
- 快捷键
使用键盘比使用鼠标效率要高的多,对于常用的操作或者命令,我都会写一些脚本,定义一 些快捷键。在Windows系统上,我用的是AutoHotkey(http://www.autohotkey.com/)。例如在 启动机器后,我需要启动Git,然后到GitHub上拉最新代码,本地运行脚本去编译和测试, 然后启动Visual Studio打开项目。通过脚本和定义命令,我只需要按几个键就可以完成整个 操作。
- 增强黏贴板
有一个功能实现起来不难,而且很实用,不幸的是它被Windows和Mac系统所遗忘。这两种 操作系统的黏贴板仅仅能存放一个东西(文本、图像等等)。如果我按了一下Ctrl + C (Mac 下是Command + C),系统会把我选择的东西放到黏贴板,替换掉原有的东西。我需要一个 工具能够提供存放多于一个东西的黏贴板,这样黏贴板就成了我的一个临时存储区域,我可 以方便的把东西放到这个区域中,随时复制到其他地方。在Windows系统上我用的是ClipX (http://www.bluemars.org/clipx/),在Mac上我用的是ClipMenu(http://www.clipmenu.com/)
以上的这些工具能够极大的保证我的学习和工作效率,保证我在电脑前的所有时间都用来做 有意义的事情。当然这些工具是我日常工具的一部分,而且我的工具箱也是在不断作出调 整,而且我也是在不断的尝试、比较新的工具。我也希望读者能够这些工具为基础,去建立 自己的工具箱。在这里我还想分享以下我选择工具的原则:
- 首先,我不会为了选工具而选工具,我选择的工具一定可以解决我的某个问题,这也就是 为什么我在分享工具的同时,也在分享这些工具帮我解决的问题的原因。
- 其次,我选择能够发展自己能力的工具,比如Git,AutoHotkey等
- 再次,不停地尝试和比较工具
注:本文章发表于2011年3月《程序员》杂志。