程序员效率指南
尽量不要用 windows 进行开发
除非你只用 dotnet 开发软件,不然 osx/ubuntu 会是更好的开发平台。太多太多优秀的工具在 osx/ubuntu 下可以一键安装,在 windows 下却不得不花费超过一个甚至几个数量级的时间去安装,更别提有的工具 windows 压根没有替代品。
如果不认可 Rule 1,那么直接可以跳过下面的文字走人。
尽量使用 mbp
我在「能花钱的,就不要花时间」文中已经强调,有条件买 15"高配的就不要买 15"低配,有条件买 15"低配的就不要买 13"(Retina/ssd 版本是必备)。作为一个开发者,你实在应该在开发工具上对自己好些 —— 毕竟你跟她相处的时间比跟女盆友/老婆多多了!
如果实在觉得 mbp 太贵 [1],可以考虑一个 15"轻薄的本子装 ubuntu。
mbp 的好处不在于逼格 [2],而在于优秀的硬件 + 优秀的 Unix 兼容的软件。retina 屏,超长的电池续航(相比 PC),舒服的 trackpad 让工作的舒适度提高不是一星半点,而软件上强大的 spotlight 等系统功能让效率提升很多。这个我就不详述,自己看『mactalk·人生元编程』去。
使用大屏幕
工作中使用 mbp 是为了便携性 —— 在各种场合都可以进行开发任务,应对会议和各种各样的演示需求。可一旦坐在工位上好几个小时,全神贯注地写代码时,就最好有个大屏幕。
屏幕多大才好?在机器带的起来的情况下越大越好,能 27"就不要 24",能 24"就不要 21",能 21"就不要直接使用笔记本的屏幕。大屏幕可以让一个屏幕同时显示好几个窗口而无需来回切换。我现在自己的工作配置是 15" mbp + 27" apple display,用上了就回不去了,一天呆在公司 12 小时都不嫌多。
我自己一般把屏幕劈成两半,左边 chrome,右边 iterm,这样,在 vim 里写代码时,随时可以查文档。配合 vim 的热键,我可以用 xx 在 chrome 里打开某个开发语言的文档,鼠标都不用动一下。
使用 dotfiles
一个程序员一天可能 80%的时间都在跟 shell 打交道,有个好的 shell(bash or zsh),加上合理的 shell 配置绝对让效率提升一大截。我以前都是直接使用 mathiasbynens/dotfiles 的设置,后来自己改得多了,就干脆 fork 了一个版本 tyrchen/dotfiles 出来,把自己的改动放上去。
dotfiles 这样的东西不必自己从头来,在 github 上找个 star 最高的 clone 或者 fork 之即可,这便是所谓的站在巨人的肩膀上。武学中要打通任督二脉,靠勤奋往往是不够的,还要有际遇,好比虚竹遇上了无涯子或者张无忌遇到了白猿。程序世界里的无涯子和白猿们都在 github 上,只是需要你的发掘。
我自己的 dotfiles 就在 Mathias 的基础上发展而来,基本上,我做了两个主要的改动:
- 把 prompt 换成帅呆了的 liquidprompt
- vim 使用 vundle,并且使能了一堆我喜爱的插件(这个随后讲)
挑一款趁手的 editor 和 ide
作为一个开发者,你需要精挑细选一款趁手的用来编辑代码的 editor。我使用了几年的 vim,又换用过大半年的 emacs,为了强制自己习惯 emacs,我甚至在 bash 中把 vim alias 成 emacs。但最终,没能打开 emacs 下的任督二脉的我实在无法抗拒 vim 下的那些好用的插件,又回到了 vim 的阵营。所以在 editor 这里,我只能先讲讲更为熟悉的 vim。
vim 下最基本的 vundle 不提,至少这些插件你值得拥有:
- SirVer/ultisnips: 撰写和使用 snippet 神器,用过 textmate/sublime 的人应该都知道。一个程序员的效率很大程度上跟他的 snippet 库有关。如果你的 python class,html 的标签,erlang/elixir 的 otp 代码还是一个字符一个字符手敲,那么你该好好看看这个插件了。配合着 honza/vim-snippets,大部分代码的 snippet 都有了;遇到结构类似的代码块(bolerplate),又没有已经定义好的 snippet 时,调用 :UltiSnipsEdit 立刻定义之,你基本上就走在无敌的路上了。
- scrooloose/nerdtree:让你的 vim 支持文件树。这个插件加上 tpope/vim-eunuch,文件系统的各种操作和显示全在 vim 里搞定了。
- sheerun/vim-polyglot:几乎所有程序语言的源文件 syntax/tab 等的支持。有此一个插件,就不再需要 vim-ruby,vim-go 等一票单独的语言插件了。
- Valloric/YouCompleteMe:让 vim 支持自动补齐。这个几乎是 IDE 的标配,效率提升的另一大神器。有了它,IDE 的需求就减弱很多。
其它的插件就不一一介绍了,感兴趣的可以在我的 dotfiles 里面一一翻阅。
大部分编程的工作,轻量级的 editor 就足够胜任,但有些开发语言和框架,bolerplate 代码实在太多,整个开发目录太繁杂,这时候不得不使用 IDE,比如说 java 下的很多项目。当你不得不使用 IDE 的时候,intelliJ 系列的 IDE 是比 eclipse 系列好很多的选择。
当然,这条 rule 的核心是尽量使用 editor,能不用 IDE 就不用 IDE。
把常用的任务命令化/快捷键化
国外的开发高手也都是使用快捷键的高手,我以前不习惯使用快捷键,但看了很多高手的 screencast 后,发现他们都是当一个任务重复几次后,顺手就定义快捷键或者命令。这里我讲讲 vim 怎么做,emacs 的用户自行脑补。
在进行 elixir 做 TDD 开发的时候,我经常需要运行 mix test 来确保我新写的代码或者重构的代码能够跑过已有的 test case。这事做多了也就烦了,因为在 vim 里总需要输入 !mix test,这个时候,我就会为此定义个快捷键。如果快捷键只跟当前项目有关,那么就在当前项目根目录下生成一个 .vimrc,定义快捷键,否则在系统的 .vimrc 中定义:
noremap <leader>et :!mix test<CR>
这样,以后需要运行这个命令的时候,直接敲 key + ed 就好。对于 elixir,我有这些定义:
noremap <leader>ed :!mix deps.get<CR>
noremap <leader>et :!mix test<CR>
noremap <leader>ec :!mix compile<CR>
因为每个语言都有类似的 dependency,test,compile 等任务,如果要定义在全局的 .vimrc 文件里,可以为每种语言附不同的前缀(elixir 为 e)区隔。如果你喜欢按项目定义,那可以把 t 统一定义为 UT 的命令,这样可以省去敲一个字符的时间。
培养自己好的重构习惯
这里讲的重构和代码里的重构大体意思一样,就是不断优化自己的工作环境。Rule 6 其实就是一种重构。
经常问问自己这些问题:
- 常用的命令是不是做了 alias?比如:总敲 ls -l,是不是应该 alias 出一个 ll 来?
- 常用的服务器信息是否写在了 .ssh/config 里?服务器登录是否使用了 pub/private key(毋须输入密码)?
- 对于某些操作,可不可以定义一些快捷键(比如说 google search)?
- 项目里重复的工作是不是写成了 makefile(或是其他任务脚本,如 rake,jake)?
- 常写的代码结构是否定义了 snippet?
讲讲 snippet。我特别喜欢 vim 的 ultisnips,它能让我按语言很方便地定义 snippet。比如在 elixir 里总要写的 GenServer 代码,大体结构是 Public API + GenServer API,我可以定义一个 snippet,在敲入 defgen 的时候,可以展开成为下面的代码(并且我可以在代码中跳至需要我修改的地方):
defmodule name do
@moduledoc """
"""
use GenServer
### Public API
def start_link do
{:ok, server} = :gen_server.start_link __MODULE__, [], []
end
### GenServer API
def init(state) do
{:ok, state}
end
def handle_call(, _from, state) do
end
def handle_cast(, state) do
end
end
这将省去我多少 bolerplate 的时间 —— 更关键的时,我的思绪不会被撰写这些无趣,但又不得不写的 bolerplate 打断。
使用 git 管理个人文件
大部分开发者对于自己的代码项目都有很好的习惯:使用 git(或者其他 scm)管理。但代码之外的文档,管理起来就有些随意,即没有历史记录,单纯存储在本地也容易丢失。建议大家对 $HOME 下的文件,只要是自己生成的文档(太大的二进制除外),一律用 git 管理(在目录下 git init)。你们看到的这个公众号的所有文章就是用 github 存储(private repo)。然而 github 上存储 private repo 毕竟要花钱 —— 不想花钱,又想很多私人的文档想管理怎么办?可以在 dropbox(或者其他类似的网盘)上生成一个 git 的 bare project,然后把本地的文档 push 上去。
多看高手的 screencast
很多时候我们没有机会近距离看高手是怎么工作的,但观看他们的 screencast 不失是一种提高自己的好办法。在这个方面,其他语言的爱好者估计都要妒忌 ruby 的拥趸 —— ruby 社区的各种 screencast 多得令人发指!通过订阅这些 screencast,你不仅能快速学到语言相关的知识和实用的技巧,更重要的是,你知道高手都在用什么工具,如何写代码。11 年的时候我看过一个 php 的 screencast,一个法国人介绍如何用 symfony 撰写项目。
那是我第一次领略什么是指尖如飞,也给我播下了 snippet 的种子(他用的是 textmate)。从那以后,我会时不时地看一些各种各样的 screencast(以 rails 的居多),学习点新东西的同时,还能学习高手的习惯。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 使用 gitbook
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论