程序员效率指南

最近很多朋友都是春节前后看了知乎日报的「年度热门·能花钱的,就不要花时间」关注「程序人生」的,所以寂静了很长一段时间的后台消息,随着新读者的加入,又活跃了起来。不少读者希望我谈一谈如何提高平时开发工作的效率。效率这个东西,无非就是工具的使用,而在这方面,仁者见仁,智者见智,我无意挑起新的战争。本文稍稍谈谈我个人的工作心得,我把它分成10条建议,欢迎全盘否定,或者部分接受。

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

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

如果不认可Rule 1,那么直接可以跳过下面的文字走人。

Rule 2: 尽量使用mbp

我在「能花钱的,就不要花时间」文中已经强调,有条件买15"高配的就不要买15"低配,有条件买15"低配的就不要买13"(Retina/ssd版本是必备)。作为一个开发者,你实在应该在开发工具上对自己好些 —— 毕竟你跟她相处的时间比跟女盆友/老婆多多了!

如果实在觉得mbp太贵 [1],可以考虑一个15"轻薄的本子装ubuntu。

mbp的好处不在于逼格 [2],而在于优秀的硬件 + 优秀的Unix兼容的软件。retina屏,超长的电池续航(相比PC),舒服的trackpad让工作的舒适度提高不是一星半点,而软件上强大的spotlight等系统功能让效率提升很多。这个我就不详述,自己看『mactalk·人生元编程』去。

Rule 3: 使用大屏幕

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

屏幕多大才好?在机器带的起来的情况下越大越好,能27"就不要24",能24"就不要21",能21"就不要直接使用笔记本的屏幕。大屏幕可以让一个屏幕同时显示好几个窗口而无需来回切换。我现在自己的工作配置是15" mbp + 27" apple display,用上了就回不去了,一天呆在公司12小时都不嫌多。

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

Rule 4: 使用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,并且使能了一堆我喜爱的插件(这个随后讲)

Rule 5: 挑一款趁手的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-rubyvim-go等一票单独的语言插件了。
  • Valloric/YouCompleteMe:让vim支持自动补齐。这个几乎是IDE的标配,效率提升的另一大神器。有了它,IDE的需求就减弱很多。

其它的插件就不一一介绍了,感兴趣的可以在我的dotfiles里面一一翻阅。

大部分编程的工作,轻量级的editor就足够胜任,但有些开发语言和框架,bolerplate代码实在太多,整个开发目录太繁杂,这时候不得不使用IDE,比如说java下的很多项目。当你不得不使用IDE的时候,intelliJ系列的IDE是比eclipse系列好很多的选择。

当然,这条rule的核心是尽量使用editor,能不用IDE就不用IDE。

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

国外的开发高手也都是使用快捷键的高手,我以前不习惯使用快捷键,但看了很多高手的screencast后,发现他们都是当一个任务重复几次后,顺手就定义快捷键或者命令。这里我讲讲vim怎么做,emacs的用户自行脑补。

在进行elixir做TDD开发的时候,我经常需要运行 mix test 来确保我新写的代码或者重构的代码能够跑过已有的test case。这事做多了也就烦了,因为在vim里总需要输入 !mix test,这个时候,我就会为此定义个快捷键。如果快捷键只跟当前项目有关,那么就在当前项目根目录下生成一个 .vimrc,定义快捷键,否则在系统的 .vimrc 中定义:

noremap <leader>et :!mix test<CR>

这样,以后需要运行这个命令的时候,直接敲 <leader> 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 7: 培养自己好的重构习惯

这里讲的重构和代码里的重构大体意思一样,就是不断优化自己的工作环境。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打断。

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

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

Rule 9: 多看高手的screencast

很多时候我们没有机会近距离看高手是怎么工作的,但观看他们的screencast不失是一种提高自己的好办法。在这个方面,其他语言的爱好者估计都要妒忌ruby的拥趸 —— ruby社区的各种screencast多得令人发指!通过订阅这些screencast,你不仅能快速学到语言相关的知识和实用的技巧,更重要的是,你知道高手都在用什么工具,如何写代码。11年的时候我看过一个php的screencast,一个法国人介绍如何用symfony撰写项目。那是我第一次领略什么是指尖如飞,也给我播下了snippet的种子(他用的是textmate)。从那以后,我会时不时地看一些各种各样的screencast(以rails的居多),学习点新东西的同时,还能学习高手的习惯。

Rule 10: 订阅「程序人生」

这个不解释,你懂的。:)


1. 真心不贵了,13" 港版 mbp 8k而已

2. 有时候逼格也确实让心情愉快,从而间接提高效率

原文发布于微信公众号 - 程序人生(programmer_life)

原文发表时间:2015-03-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI启蒙研究院

耿大侠 Diss国外架构师文章《From CQS to CQRS》

11030
来自专栏量子位

5天被迫喊停!Win 10史上最短命系统升级:删文件、无法联网,误报CPU使用率

此次更新的版本号为1809,遍地是坑:删除私人文件、CPU使用情况算错、微软App连不上网……很多抢先更新的用户,现在还没爬上来。

28110
来自专栏大数据文摘

爬虫还在用Python?我与Node.js不得不说的故事

4.5K40
来自专栏IT大咖说

做一个不背锅的运维

内容来源:作者:田逸(sery),来自:http://blog.51cto.com/sery/2162642

19140
来自专栏北京马哥教育

Nginx与httpd对比

作为一个运维的学习者,对nginx和apache了解的很浅,但是作为以后运维过程中非常重要的两款服务器软件,静态web服务提供者,还是相当有必要深入的了解一下他...

44750
来自专栏云计算D1net

亚马逊云安全引发世界关注

在拉斯维加斯举行的黑帽大会(Black Hat 2014)上,一位颇有名声的研究人员称安全专业人士并未对托管在AWS云基础架构上的应用的安全性给予充分的关注,因...

435130
来自专栏Java技术栈

阿里巴巴,排行前10的开源项目!

1、FastDFS FastDFS是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储...

48880
来自专栏Crossin的编程教室

3分钟破译朋友圈测试小游戏

最近,朋友圈时不时会流行起某个测试类小游戏,比如你的性格图谱啦,你是三体中的哪个角色啦,你有什么超能力啦……昨天晚上在某个群里,又被一个测测你是什么书的小游戏刷...

48270
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合优化篇(八)代码优化整理小记及个人吐槽

前言 这两天也一直在纠结这一篇文章该写什么东西,前面临时加的两篇文章就有些打乱了整体节奏,这一篇又想去写一下代码层面优化的事情,可是也不太能抓住重要的点,不太确...

26160
来自专栏SDNLAB

使能容器网络,Jaguar “Sky”版本发布

北京时间2018年10月10日,Kubernetes网络开源解决方案Jaguar项目发布0.1.0版本,代号“Sky”。

13940

扫码关注云+社区

领取腾讯云代金券