This commit is contained in:
louzefeng
2024-07-11 05:50:32 +00:00
parent bf99793fd0
commit d3828a7aee
6071 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,198 @@
<audio id="audio" title="23 | 效率工具:选对用对才能事半功倍" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/58/07/58108212d4d1f40cffb792f82dffd807.mp3"></audio>
你好,我是葛俊。今天,我来和你聊一聊效率工具。
在前两篇文章中我分别从编程技术和工作方式两个方面与你介绍了如何提高个人研发效能成长为10x程序员。今天我再与你分享些工具使用方面的技巧和方法来帮助你全方位地提高自己的工作效率。
谈到研发效能,一定离不开工具。工具使用得当,可以大幅提升研发效率,甚至可以因此引发业务发展、开发行为的质变。比如,我在[第11篇文章](https://time.geekbang.org/column/article/136070)中与你分享的截屏工具链带来的效率提升就使得其被广泛用在了Commit Message中大幅提高了整个过程的效率。
我一直对各种工具很感兴趣从业这些年来在这上面花了不少时间也踩了一些坑。比如我曾经在Emacs上面花费了大量的时间去自动化和优化很多细枝末节的操作。结果是花在优化和自动化上的时间比节省下的时间还要多得不偿失。
所以,我总结得出,**对于工具一定要选对和用对**。
选对工具指的是,我们要针对不同的任务,找到合适的工具来提高效率。而用对工具指的是,我们要分配适量的时间和精力来选择工具,要时刻注意投入产出比。
关于用对工具,我推荐一个比较好的方式是,**留意工作中经常重复和繁琐的工作步骤,隔一段时间就做些工具方面的调研,看看有没有更合适的工具或者使用方法来优化这些流程。**对于一些非常繁琐、执行频率又非常高的操作,如果没有现成的工具,甚至可以考虑自己开发一些工具和脚本进行优化。频次越高的操作,越值得优化。
接下来,我就按照功能和你分享一些有助于提高工作效率的工具。
因为我最近的工作电脑是macOS系统所以我今天推荐的适用于苹果操作系统和生态的工具会偏多一些。但这些优化的方向和思路是一致的在Windows操作系统上你也能找到类似的工具。另外安卓系统更加灵活有比苹果生态更多的工具。
## 第一个任务类别是,操作系统上的通用操作
操作系统上的通用操作,主要有窗口切换、程序启动、窗口管理、剪贴板管理等。这些操作普遍且频繁,比较值得优化。
**关于窗口切换**各操作系统都有一些自带的支持。比如macOS系统自带的方式是cmd+tabWindows系统自带的是Alt+Tab或者Win+Tab。**关于程序启动**macOS系统有SpotlightWindows系统可以使用Win键或者Win+R启动任务。
但这两个操作实在是频繁,且操作系统自带的功能只是基础功能。所以。我推荐你进行进一步优化。
在macOS系统上Alfred、Quicksilver这两个工具就很不错。Windows系统的话我推荐[Wox](http://www.wox.one)。
这些工具的用法也很简单使用一个快捷键启动然后输入过滤条件查找需要运行或者切换的程序回车即可。使用Quicksilver启动/切换程序的方法,如下所示。
<img src="https://static001.geekbang.org/resource/image/ba/80/ba2319c749fed30712d51c189b7b4d80.gif" alt="">
**关于窗口管理**,有一个常用操作,是把一个窗口自动缩放,并摆放到屏幕的某一个位置(比如屏幕的左上角)。
在macOS系统中我一般使用[BetterTouchTool](https://folivora.ai)这个工具实现,也推荐你使用。通过它,我可以非常方便地实现窗口缩放和拖动。有两个操作,我觉得特别方便:
- 一是按住alt键无论光标在窗口的任何位置都可以通过挪动鼠标拖动窗口
- 二是按住cmd+alt键无论光标在窗口的任何位置都可以通过移动鼠标来改变窗口大小。
BetterTouchTool的配置和使用如下面两幅图所示。
<img src="https://static001.geekbang.org/resource/image/d5/26/d5ba52955fc684e464555d3edd7d1b26.png" alt="">
<img src="https://static001.geekbang.org/resource/image/24/25/2438f319fb1d0f3ed131676400baf125.gif" alt="">
最后是,**剪贴板管理**。目前,操作系统自带的剪贴板只能保存一条记录,但如果我们使用剪贴板历史管理工具的话,可以非常方便地保存和使用多条历史拷贝内容。
在macOS系统上我用的工具是Quicksilver。Windows上类似的工具有很多比如[Ditto](https://sspai.com/post/43700)。
## 第二个任务类别是输入
关于输入我主要和你推荐4类工具分别是语音输入、文字快速输入、重新定义按键和具体的键盘。
**我们先看看第一类工具,语音输入**。我在电脑上常用的是[讯飞语音输入](https://apps.apple.com/cn/app/%E8%AE%AF%E9%A3%9E%E8%AF%AD%E9%9F%B3%E8%BE%93%E5%85%A5-%E6%99%BA%E8%83%BD%E8%AF%86%E5%88%AB-%E8%BD%BB%E6%9D%BE%E5%86%99%E4%BD%9C/id1243368435?mt=12),手机上常用的是[讯飞输入法](https://apps.apple.com/cn/app/%E8%AE%AF%E9%A3%9E%E8%BE%93%E5%85%A5%E6%B3%95-%E6%99%BA%E8%83%BD%E8%AF%AD%E9%9F%B3%E8%BE%93%E5%85%A5%E6%B3%95/id917236063)。在电脑上使用语音输入有一个技巧是,把手机作为麦克风。这样输入的效果非常好,尤其是旁边有人说话的时候,手机麦克风的过滤功能就非常棒了。
在手机上,我经常使用讯飞输入法的语音便签功能,保存录音的同时还可以直接把语音转为文字,对于记录灵感来说特别方便。
**第2类工具是文字快速输入**。Mac上最流行的是[TextExpander](https://textexpander.com/),它可以方便地生成预先定义的字符串、当天日期,也可以很方便地指定文字生成之后的光标所在位置等。
比如,经过下面的配置之后,只要输入缩写“;mj”就可以生成日记模板并把光标放到第一个任务处。
```
## %Y-%m-%d:
今天关键任务
%|
-
成功之处,不足之处
-
```
<img src="https://static001.geekbang.org/resource/image/1d/f2/1d887ea891669d78b878e95aecf23ff2.gif" alt="">
在Windows系统上开源免费的[AutoHotkey](https://www.autohotkey.com)非常强大。它不但可以进行文本扩展还可以运行程序。我来和你举一个运行程序的例子吧。比如你可以使用Win+V直接切换到VIM。如果VIM先前没启动的话则会直接其启动。
```
;;; switch to vim
#v::
if WinExist( &quot;ahk_class Vim&quot; )
{
WinActivate
}
Return
```
**第三类工具是,重新定义按键**。在我看来对程序员最实用的一个功能是把大写锁定键caps lock转换成ctrl键。因为caps lock的位置很方便使用频率却很低而编程中常会用到ctrl键所以这个重新定义对程序员非常有用。
至于重新定义按键的工具在Mac上我使用的是[Karabiner-Elements](https://github.com/tekezo/Karabiner-Elements)在Windows上使用AutoHotkey就可以。
另外我对caps lock键的定义不是简单地重新定义为ctrl而是如果和其他键共同使用的话就是ctrl键单独使用的话就是esc键。因为esc键的使用频率也很高尤其是在VIM中。
在Karabiner-Elements中的具体设置方法是
```
&quot;rules&quot;: [
{
&quot;manipulators&quot;: [
{
&quot;description&quot;: &quot;Change ctrl to esc if pressed alone.&quot;,
&quot;from&quot;: {
&quot;key_code&quot;: &quot;caps_lock&quot;,
&quot;modifiers&quot;: {
&quot;optional&quot;: [
&quot;any&quot;
]
}
},
&quot;to&quot;: [
{
&quot;key_code&quot;: &quot;left_control&quot;
}
],
&quot;to_if_alone&quot;: [
{
&quot;key_code&quot;: &quot;escape&quot;
}
],
&quot;type&quot;: &quot;basic&quot;
}
]
}
]
```
**第四类工具是,具体的键盘**。开发者要经常输入,选择一款顺手的键盘就很重要了。键盘的选用,我看重的是手感和键盘布局。手感的话,机械键盘的确好一些,你可以根据自己的体验选择一款合适的。而布局的话,左右手按键分离较远的一般来说会好一些。
根据这些原则,我平时使用[Kinesis Pro2键盘](https://kinesis-ergo.com/keyboards/advantage2-keyboard/)。因为,它的中间是凹进去的,所以手指与每一行按键的距离都差不多,输入时很轻松。另外,特殊键由大拇指控制,这个特点我也非常喜欢。
<img src="https://static001.geekbang.org/resource/image/0a/d7/0a67b27cf7a965869d30417bd46e10d7.png" alt="">
## 第三个任务类别是,知识管理
对学习和知识管理我主要与你分享6类工具。
第一类工具是**云盘**,用来确保存储的内容不会因为本地电脑的意外情况而丢失。目前,市面上的各种云盘都可以满足这个需求。这里我有一个小建议,使用云盘时最好能够使用本地的自动同步工具,自动地将本地文件夹里的内容同步到云盘。
第2类工具是**笔记**。我挑选笔记工具的原则包括支持云同步支持电脑和手机端同时访问。印象笔记、Mac自带的Notes、石墨文档等都不错。
第3类工具是**写文档的工具**。相较于笔记工具来说写文档的工具还有一个挑选原则是支持Markdown。我现在是组合使用iCloud、1Writer和Typora使用iCloud进行同步在手机使用1Writer在电脑上使用Typora。
第4类工具是**思维导图**。对思维导图,比较重要的特性包括跨平台、方便使用快捷键、方便导入\导出其他格式。我以前一直用的是[FreeMind](http://freemind.sourceforge.net/wiki/index.php/Main_Page)它基于Java实现在Windows、macOS和Linux系统上都可以使用快捷键配置也很强大但它的一大缺陷是在手机上不能使用。所以最近两年我转移到了[XMind Zen](https://www.xmind.net/zen/)上面。它可以在电脑和手机上同时使用并自动同步,显示也比较美观。
第5类工具是**截屏、录屏**。我对截屏、录屏工具的选用原则是标注功能要好另外要可以把录屏保存成GIF格式。我现在最常用的是对这两方面都支持不错的[MonoSnap](https://monosnap.com)。另外,录屏的时候,我们常常希望把当前的键盘输入显示到屏幕上,我推荐使用[KeyCastr](https://github.com/keycastr/keycastr)编辑GIF文件的话我使用的是[GIF Brewery 3](https://apps.apple.com/cn/app/gif-brewery-3-by-gfycat/id1081413713?mt=12)。
这个专栏中,你见到的录屏和截屏图片,我就是使用这三个工具完成的。另外,还有一个对命令行终端录制比较方便的工具[asciinema](https://asciinema.org/about)。它可以把你在终端里面的操作和输出用JSON形式保存下来也可以上传到asciinema的网站上还可以方便地在你自己的网站上引用显示。但这个工具的缺点是无法显示键盘的按键操作。
第6类是**处理PDF文件的工具**。这样的工具我主要关注基本的标注功能,以及在平板电脑上可以使用电子笔操作。在电脑上,我一般使用[Foxit Reader](https://download.cnet.com/Foxit-Reader/3000-18497_4-10313206.html)和macOS自带的Preview在手机上我主要使用的是[PDF Expert](https://apps.apple.com/cn/app/pdf-expert-7-pdf-editor/id743974925)。
在我看来一个比较高效的方式是把PDF文件放到笔记软件中然后在笔记中直接对其进行操作。印象笔记和苹果自带的Notes都支持这个功能。
## 第四个任务类别是,浏览网页
访问互联网是非常高频的操作所以我把它单独列成一类。对开发人员我推荐使用Chrome和Firefox因为两者都有很强的扩展功能对开发活动比较友好。
因为最近几年我主要在使用Chrome所以接下来我与你介绍一些我常用的Chrome插件和技巧。
第一个插件是[Octotree](https://www.octotree.io)。它会在你访问GitHub查看项目时在窗口左侧以树形结构清晰明了地显示代码仓结构。
<img src="https://static001.geekbang.org/resource/image/d0/f7/d02f3b1258264c337a5e2af7d59ff3f7.png" alt="">
第二个插件是[Pocket for Chrome](https://getpocket.com/chrome/)。它需要与[Pocket](https://app.getpocket.com)配合使用,实际上就是一个在线的网页书签保存服务,但它的推荐功能很优秀,并且对手机端的支持也很好。
第三个插件是[smartUp Gestures](https://chrome.google.com/webstore/detail/smartup-gestures/bgjfekefhjemchdeigphccilhncnjldn?hl=en)。通过它你可以按住鼠标右键不放在屏幕上画一些形状也就是手势Gesture来进行一些操作。
我最常使用的功能有:切换到左边(或右边)一个标签页、向下(或向上)翻页至网页末尾(或网页开头)、返回网页访问历史的上一页(或下一页),以及关闭当前标签页。
在文稿里我有一个录屏供你参考。
<img src="https://static001.geekbang.org/resource/image/4c/df/4c9dd735eb9d141fe51a9ebfb1cd9cdf.gif" alt="">
## 第5个任务类别是开发
和开发工作相关的工具比较多包括编辑器比如VS Code、VIM、IDE比如Visual Studio和JetBrains系列、代码仓管理工具比如Git和HG、API测试工具比如Postman以及命令行工具等。
关于开发工具的使用,我会在后面的文章中与你详细介绍其中的使用技巧,帮你提高编码效率。
## 小结
无论“磨刀不误砍柴工”“工欲善其事必先利其器”还是乔布斯曾说过的“You cannot mandate productivity, you must provide the tools to let people become their best.(你不能强制要求大家提高生产力,你必须提供工具,让大家发挥他们的最大能力)” ,强调的都是工具的重要性。
所以作为开发人员我们一定要选对工具、用对工具才能提高效能。在今天这篇文章中我从操作系统上的通用操作、输入、知识管理、网页浏览和开发5个方面给你推荐了一些工具及使用方法。当然了关于开发工具这个重头戏我还会在后面的文章中与你详细分享。
其实,使用哪款工具,是一个仁者见仁,智者见智的问题。所以,通过这篇文章,我更希望达到的目的是,能帮助你对日常工作中最常见的操作进行思考,寻找值得优化和可以使用工具优化的地方,从而提高个人的研发效能。
但,我还要强调的是,工具只是辅助,编程工作更重要的还是思考。所以,我建议你不要花费过多的时间在工具研究上,要时刻留意投入产出比。
## 思考题
除了今天提到的操作系统上的通用操作、输入、知识管理、网页浏览和开发5个方面外你觉得还有哪些方面的操作比较频繁吗有什么值得优化的地方吗又有什么值得推荐的工具吗
感谢你的收听,欢迎你在评论区给我留言分享你的观点,也欢迎你把这篇文章分享给更多的朋友一起阅读。我们下期再见!