作者:qs08y602lt | 来源:互联网 | 2023-08-21 11:23
原文:Tools for Remote Software Development and Pair Programming
作者:Brian Cooksey
翻译:Vincent
译者注:作者以视频通话、屏幕共享与远程控制、共享代码片段、在线IDE与代码托管环境为例介绍远程软件开发和结对编程工具的优劣。
有时我希望可以方便的与同事交流一个严重的错误或着讨论技术方案。但异步通信并不总是适用于这些棘手的问题。值得庆幸的是,过去几年来,开发人员纷纷带来了大量的在线协作工具。从屏幕共享到结对编程,总有一个工具可以满足你的协作需求。
视频通话
电话沟通虽然很常见,有效性也是众所周知的。在Zapier,通常一个快速的视频电话能帮助你与同事解决复杂的问题。在一个分散的团队中工作,每个人都可以独立应对他们所面临的大多数挑战。如果你使用视频通话工具,在协作的问题上,两名工程师可能只需要花费10分钟,然后由一位工程师来实施完成。
就目前的选择而言,视频会议软件并不缺乏。我们倾向于使用最方便的Zoom.us或Slack的内置呼叫功能。关键是要找到一个可靠的高质量的工具。
虽然只有音频的通话是可以的,但是高质量的视频可以让你了解同事的肢体语言,这方便他们更有效地了解你们正在讨论的话题。
屏幕共享+远程控制
有时候言语并不能表达清楚问题。这时候可以提供一个可靠的屏幕共享工具,将会帮你更加清晰的表达解决方案。我们发现屏幕分享这种通信方式有助于提高用户体验,它可以迭代地诊断错误(尝试输入,查看结果,尝试另一个输入,查看下一个结果),或者一起探索日志数据。该工具也允许屏幕共享的人与远程机器交互,这对解决问题是非常有帮助的。尽管点击可能会延迟,但对于它的价值来说却是不值得一提的。
我们在Zapier的goto是Zoom.us,它具有内置的屏幕共享,或者Screenhero,同时另一个人也能操控。
共享代码片段
你曾经写过一个脚本,并且帮你解决问题?或者你写的脚本帮助你自动完成一个乏味的任务。你的劳动有多大意义?代码并不是真正的添加到源代码控制中,这是一种痛苦的编程手段,但你又不想失去它。
这时GitHub Gists和JSFiddle的代码段共享工具派上用场。您可以保留代码,却不会影响你的程序。在远程开发团队中,这些平台可以作为共享网络驱动器的有效替代品。在Zapier,我们使用Gists来转储代码和设置开发环境。这个空间可以存放从API一个版本的数据格式转移到另一个版本的数据格式的转换文件,许多其他奇怪的代码段,在线摘录,项目链接。
在线IDE和托管开发环境
代码编辑器和虚拟化开发环境这两类工具是最令开发人员满意的。近年来,一些公司面临着从本地开发转移到云端的挑战。像Cloud9和Codenvy这样的服务提供了一个在线编辑器IDE和一个完全托管的虚拟机或docker容器。 这使得开发人员在有网络的情况下可以在任何地方任何设备上编程。 这也意味着远程结对编程与共享在线工作区一样简单。 你可以编辑相同的文件,单击相同的开发服务器,共享虚拟终端shell,运行测试命令。 这种空间中的一些工具,如Koding,提供了一种将远程卷和ssh安装到云环境中的方法,并允许本地编辑文件,同时仍然在云端托管开发服务器。
尽管Zapier并没有广泛使用这套工具,但团队中的一些成员将其用于边缘项目和一次性任务。 我们的平台工程师之一本·彼得在Cloud9上开发一个项目,当他需要一个开发环境的时候,他可以通过Chromebook进行编码,这通常不能在本地处理应用程序。 他还发现,将开发环境托管在可寻址域中有助于构建涉及入站请求的功能(例如测试OAuth2流或webhooks)的情况。
Tunneling
如果一个完整的托管开发环境比你想的复杂,另一个选择是在本地运行你的堆栈,打开必要的端口,以便其他人实时查看你的工作。有一些付费的解决方案,比如ngrok,你可以用它来完成。他们很快就安装好了,而且不需要你在网络上做任何防火墙设置。
如果你可以转发网络上的端口,你还可以使用SSH进行访问。 其实设置通道与在ssh命令中包含-L选项是一样简单。您甚至可以通过运行Screen或tmux,将通道转换成一个完整的结对编程会话。 主机启动会话,远程人员加入(屏幕的详细说明)。 通过共享终端来启动编辑器,运行shell命令,然后点击共享的本地服务器。 有时网络延迟可能是一个问题,但它是一个稳定的手段来进行结对编程(结合视频通话)。
我们在Zapier使用隧道的另一个很巧妙的方法是测试需要从第三方服务获得回调的功能。 当测试类似OAuth2流或入站Webhook的回调URL时,指定本地主机:8000作为回调URL不会始终有效。因此你可以建立一个公共托管的URL,然后在你的机器上进行隧道。
疯狂的科学家
让我先说一下,这不是我们在Zapier经常做的事,我也不会推荐它。然而,这个解决方案太有趣了,以致于不得不在这里提出来。
在Zapier的一次演讲中,一位同事和我在一个项目上遇到问题,我们想要建立一个配对的编程工作站。问题是我们有两台笔记本电脑,没有外接鼠标或键盘,也没有额外的监视器。这一对开发者要做什么?
我们的解决方案是使用rsync。我们在一个笔记本上安装了一个cron作业,每秒钟运行一个bash脚本:
- 从远程笔记本电脑中提取文件,跳过最近在本地系统上修改过的文件。
- 将文件从本地笔记本电脑中推送到远程笔记本电脑,保存修改的时间,这样系统就可以同步了。
只要小心保存,我们可以一起处理文件,并保持对方最新的变化。有两个独立的机器有一个额外的好处,我们中的一个可以更改后端,而另一个更新前端代码,给出真正的并行输出。
虽然我已经尝试使用触控板进行绘图,但我讨厌它。我无法与同事进行典型的白板会议,但 远程工作的好处是大于坏处的。这些工具背后的技术总是在改善,不断减少了虚拟办公的不足。谁知道“如何合作”的新概念,将来会如何。在几年后,也许我可以戴上虚拟现实头盔,在虚拟白板上用手上的记号笔画画。