云服务器

程序员自我修炼(六) - 提高效率

2017-12-25 15:53:58 0

这次我想谈一谈如何提高平时开发工作的效率。

效率这个东西,无非就是工具的使用,而在这方面,仁者见仁,智者见智,我无意挑起新的战争。本文稍稍谈谈我个人的工作心得,我把它分成下列几条建议,大家可根据自己实际情况按需参考。

Rule 1: 尽量不要用windows进行软件开发

除非你只用.net开发软件,不然osx/ubuntu会是更好的开发平台。太多太多优秀的工具在osx/ubuntu下可以一键安装,在windows下却不得不花费超过一个甚至几个数量级的时间去安装,更别提有的工具windows压根没有替代品。

Rule 2: 使用大屏幕

工作中使用笔记本是为了便携性,在各种场合都可以进行开发任务,应对会议和各种各样的演示需求。可一旦坐在工位上好几个小时,全神贯注地写代码时,就最好有个大屏幕。

屏幕多大才好?在机器带的起来的情况下越大越好,能27"就不要24",能24"就不要21",能21"就不要直接使用笔记本的屏幕。大屏幕可以让一个屏幕同时显示好几个窗口而无需来回切换。

我自己一般把屏幕劈成两半,左边chrome,右边iterm,这样,在vim里写代码时,随时可以查文档。配合vim的热键,我可以用在chrome里打开某个开发语言的文档,鼠标都不用动一下。

Rule 3: 使用dotfiles

一个程序员一天可能80%的时间都在跟shell打交道,有个好的shell(bash or zsh),加上合理的shell配置绝对让效率提升一大截。我以前都是直接使用 mathiasbynens/dotfiles 的设置,后来自己改得多了,就干脆fork了一个版本 tyrchen/dotfiles 出来,把自己的改动放上去。

dotfiles这样的东西不必自己从头来,在github上找个star最高的clone或者fork之即可,这便是所谓的站在巨人的肩膀上。

Rule 4: 挑一款趁手的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。

Rule 5: 把常用的任务命令化/快捷键化

国外的开发高手也都是使用快捷键的高手,我以前不习惯使用快捷键,但看了很多高手的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)区隔。如果你喜欢按项目定义,那可以把<leader>t统一定义为UT的命令,这样可以省去敲一个字符的时间。

Rule 6: 培养自己好的重构习惯

这里讲的重构和代码里的重构大体意思一样,就是不断优化自己的工作环境。Rule 6其实就是一种重构。

经常问问自己这些问题:

✓ 常用的命令是不是做了alias?比如:总敲 ls -l,是不是应该alias出一个 ll 来?

✓ 常用的服务器信息是否写在了 .ssh/config 里?服务器登录是否使用了pub/private key(毋须输入密码)?

✓ 对于某些操作,可不可以定义一些快捷键(比如说google search)?

✓ 项目里重复的工作是不是写成了makefile(或是其他任务脚本,如rake,jake)?

✓ 常写的代码结构是否定义了snippet?

✓ …

Rule 7: 使用git管理个人文件

大部分开发者对于自己的代码项目都有很好的习惯:使用git(或者其他scm)管理。但代码之外的文档,管理起来就有些随意,即没有历史记录,单纯存储在本地也容易丢失。建议大家对 $HOME 下的文件,只要是自己生成的文档(太大的二进制除外),一律用git管理(在目录下 git init)。然而github上存储private repo毕竟要花钱。如果不想花钱,又想很多私人的文档想管理怎么办?可以在dropbox(或者其他类似的网盘)上生成一个git的bare project,然后把本地的文档push上去。

Rule 8: 多看高手的screencast

很多时候我们没有机会近距离看高手是怎么工作的,但观看他们的screencast不失是一种提高自己的好办法。在这个方面,其他语言的爱好者估计都要妒忌ruby的拥趸 —— ruby社区的各种screencast多得令人发指!通过订阅这些screencast,你不仅能快速学到语言相关的知识和实用的技巧,更重要的是,你知道高手都在用什么工具,如何写代码。

 

上一篇: 无

微信关注

获取更多技术咨询