让“结对编程”跨越地域的障碍

结对编程,一般就是两位程序员肩并肩坐在一起,共用一台电脑来彼此交替地编写程序。


对于个人来说,结对编程是刻意地操练编程技艺的有效手段,有助于参与双方激荡智慧、取长补短。对于团队来说,结对编程是团队内部传递知识的良好实践,有助于克服某项工作只能由某人来完成的“单点故障”的弊病。


如果在结对编程时,两位参与者能做到面对面的沟通,那么结对编程的效果就是最佳的。但如果双方远隔千山万水,无法见面,那么用什么方法来结对编程,使其效果能最大限度地接近面对面的方式呢?


接下来,咱们先简单地分析一下面对面的结对编程的特点,然后以此为参照,来看看都有哪些工具能够帮助咱们把远程结对编程的效果最大限度地接近面对面的方式。


一位参与面对面、肩并肩的结对编程的程序员,能做以下事情:

1)“能听见(Hear)”结对编程的搭档讲话。

2)“能看见(Watch)”结对编程*用的电脑的屏幕、键盘、光标和鼠标位置及其变化。

3)“能操作(Operate)”结对编程中所使用的IDE和所编写的代码。

4)“能重构(Refactor)”结对编程中所编写的代码,最好是工具能够帮助您做重构,而不是完全靠手工重构。


如果通过一些工具的帮助,咱们能够让两位参与远程结对编程的程序员,都能做到上述4件事情,那么就可以说咱们的远程结对编程的效果,已经最大限度地接近了面对面的方式。


先说“能听见”。Skype和Google Hangouts能够实现远程多人语音或视频会议。我最近用Skype参加过一次在北京、上海、沈阳、常熟、马来西亚之间的6人语音电话会议,语音清晰流畅,效果还是比较令人满意的。在Skype的官网上有Windows和Mac环境下的下载安装链接,如果想在Linux/Unix上安装Skype,需要自己搜索一下互联网。Google Hangouts我还没有尝试过,但是看起来可以在Chrome浏览器里运行,这意味着它能够在Windows、Mac、Linux这些能够运行Chrome的环境下运行。


再看看“能看见、能操作、能重构”。我个人觉得在结对编程里,“能重构”(即工具能帮助做重构)很重要。因为重构如果完全靠手工做,费时费力易出错;而若工具能支持重构,则会减少程序员大约80%的重构工作量。目前我认为对代码重构支持得最好的工具是像IntelliJ、NetBeans或Eclipse这样需要独立安装的IDE工具。所以,如果和我一起进行远程结对编程的搭档,能使用一个语音电话会议软件与我通话,并使用另一个远程屏幕分享与控制软件,“能看见、能操作、能重构”那些在我电脑IDE环境里的代码,那就可以做到上面列出的4件事情,从而让远程结对编程的效果,最大限度地接近面对面的方式。


语音电话会议软件前面已经介绍了,可以选择Skype和Google Hangouts之中的一种。而远程屏幕分享与控制软件,有下面3种:Screenhero、join.me和Team Viewer。Screenhero和join.me都只支持Windows和Mac,不支持Linux/Unix;而Team Viewer支持Windows, Mac和Linux/Unix。Screenhero最大的特色是能够同时在屏幕上看到两位结对编程参与者的两个鼠标,每个鼠标下都标出了主人的名字。


如果您只想在远程结对编程中,做上面列出的4件事情中的前3件,而并不要求工具支持“能重构”功能,而是想操练纯手工重构,那么有下面这5个工具就或许能帮到您:

* Cloud9:一个可供多人协同编程的Web IDE,只要在浏览器中,就可支持JavaScript, Node.js, HTML, CSS, PHP, Java, Ruby和其他23种编程语音的协同开发和运行,它最大的特色是支持的编程语言多。

* Floobits:一个远程结对编程的工具,最大的特色是它能与您电脑上的编辑器(仅支持Vim、Emacs和Sublime这3种编辑器)相连接,支持Windows, Mac和Linux/Unix。

* Nitrous.io:也是一个可供多人协同编程的Web IDE,只要在浏览器中,就可支持Ruby/Rails、Node.js、Python/Django和Go编程语言的开发和运行。它最大的特色是能用虚拟机的方式,为您快速搭建开发应用所需的一切环境,比如它能在1分钟内,为您搭建Web IDE、控制台访问、数据库和其他集成的工具,就好比您在浏览器中,就拥有了一台属于自己的Linux开发环境。

* MadEye:一个协同Web编辑器,支持Mac和Linux/Unix,它最大的特色是能利用您电脑上的文件系统来构建一个能够与他人协同工作的Web编辑器。

* Tmux:一个能够充分利用Linux/Unix命令行功能的CLI(命令行界面)工具,仅支持Linux/Unix,可以在其中使用Vim或Emacs。它最大的特色是能够在一个控制台(terminal)中,轻松地在几个程序之间进行切换,另外您如果有事需要关机,还可以关掉这个控制台,而上述这些程序还会在后台继续运行;等您忙完了,就可以在打开另一个控制台来重新连接到这些后台运行的程序上。


总之,如果想要利用“远程结对编程”来操练编程手艺,我建议首先在Skype和Google Hangouts中选择一个来建立起语音电话会议,然后在Screenhero、join.me和Team Viewer中选择一个来远程分享与控制屏幕,接下来就可以使用您最喜欢的带有支持重构功能的IDE来进行远程结对编程了。当然,如果您只是想用一个协同Web IDE来操练纯手工重构,那么还有Cloud9、Floobits、Nitrous.io、MadEye和Tmux来供您选择。


如果您想参考一下国外网站对上面这9种(不含Skype)远程结对编程工具的投票统计和点评,不妨点击这里:http://www.airpair.com/pair-programming/pair-programming-tools-survey-jan-2014

让“结对编程”跨越地域的障碍

让“结对编程”跨越地域的障碍

上一篇:TSX之有限事务内存,TSX之锁消除技术 和 lock free 编程之比较(有效总结)


下一篇:linux 内存使用情况详细信息