为什么协作编码是终极职业黑客

已发表: 2022-03-10
快速总结↬无论您处于职业生涯的哪个阶段,协作编码都是您时间的最佳利用方式之一。 随着远程工作的兴起,现在是练习结对编程和拥抱敏捷开发的最佳时机。

在编程中迈出第一步就像学习一门外语。 起初,语法没有意义,词汇不熟悉,一切看起来和听起来都难以理解。 如果你和我刚开始时一样,流利感觉是不可能的。

我保证不是。 当我开始编码时,学习曲线对我打击很大。 我花了十个月的时间自学基础知识,同时试图避免我现在认为是冒名顶替综合症的自我怀疑感。 直到我开始参加对初学者友好的聚会时,我才意识到协作编码如何开辟了惊人的可能性。 你只需要合适的社区来练习。

对我来说,那个社区就是 Founders and Coders,这是一个免费的 JavaScript 训练营,它帮助我将我的职业生涯从文案写作转向了编码。 即使是现在,在完成这门课程不到一年的时间里,我也很难相信我得到了开发软件的报酬。

协作编码就是一起解决问题和发现解决方案。 它包含结对编程等技术,几家科技公司在面试过程中认真对待这些技术。 如果您所做的只是在家中独自编码,它还可以培养一些很难学习的有用技能。

无论您是刚进入科技行业,还是拥有多年经验,协作编码永远不会停止有用。 在本文中,我们将了解这些常青技能如何使您在软件开发领域获得长期而成功的职业生涯。

跳跃后更多! 继续往下看↓

完美配对

我对结对编程的第一次体验是在一个名为 Coding For Everyone 的初学者聚会上。 它是这样工作的:人们结对,通常是与他们从未见过的人,在同一台笔记本电脑上一起解决 JavaScript 挑战。 一个人担任“导航员”的角色,并提出他们认为应该编写的代码。 另一个人,“司机”,在笔记本电脑上输入他们的建议,并在有不清楚的地方提出问题。 你继续这样做,频繁地交换角色,直到两小时的会议结束。

从理论上讲,这很简单。 在实践中,并没有那么多。

我发现在我打字的时候让一个我不认识的人看着我的屏幕很让人分心,而且当需要交换角色时,我不愿意交出控制权。 我发现导航更加棘手。 当一个想法无法从你的脑海中进入计算机之前,必须先经过你的伴侣的手,你说的每一句话都很重要。 这需要我们双方进行一定程度的沟通,而我们根本不习惯,而且我确信如果我们分开工作,我们都会学到更多。

幸运的是,我们坚持了下来。 接下来的一周我又去参加了聚会。 从那以后,我花了数百个小时与数十名开发人员结对,我学到的东西比我最初想象的要多。

结对编程是一种非常快速的学习方式。 这种方法的魔力——一旦你克服了最初的尴尬——就可以立即产生结果。 一些反馈循环,如股市中的泡沫,可能需要数小时、数天甚至数月才能产生修正。 结对编程需要几分钟,甚至几秒钟。 当您放错分号时,两双眼睛可以比一只眼睛更快地发现错误。 需要在 StackOverflow 上搜索有关恶意错误消息的线索? 您和您的伴侣可以分别阅读不同的主题,从而将找到答案的时间减半。

将结对编程反馈循环显示为三个步骤的流程图:编写、运行和重构。
结对编程反馈循环(大预览)

对于更棘手的问题,mob 编程可以更进一步。 这种方法需要一个团队的跨职能部门聚集在同一个计算机屏幕周围,并在一个人打字时实时集思广益。

“所有聪明的头脑都在同一时间、同一空间、同一台计算机上工作。”

— Woody Zuill,敏捷教练和 Mob 编程培训师

虽然这似乎是一种低效的工作方式,但像 Woody Zuill 这样的暴民编程倡导者表示,它实际上可以通过消除对单独代码审查的需要来节省时间,因为每个人都会在编写代码时实时审查代码。 抛开生产力不谈,我认为围攻不仅是学习代码的好方法,也是学习其他人如何解决问题的好方法。 如果结对编程使您接触到的观点数量翻倍,那么暴民编程会产生更多见解。

十名开发人员挤在一台笔记本电脑旁,使用 mob 编程一起解决问题。
有时,十个头比两个好。 (大预览)

这并不是说配对——或者实际上是围攻——是一帆风顺的。 我最初挣扎的事情是把我的自我放在一边,问一些我认为听起来很愚蠢的问题。 在这些情况下,最好记住你的伴侣可能有相同的想法,尤其是当你们都刚刚开始的时候。

如果你发现自己与更资深的人配对,也许是在工作中,不要害怕挖掘他们的大脑并用你的好奇心打动他们。 即使是比你稍微领先一点的人,也可能会想到比你更高级的人不会想到的事情。 我最喜欢的一些结对程序员的经验只比我多几个月,但他们似乎总是确切地知道我将犯哪些错误以及如何引导我朝着正确的方向前进。 当这些开发人员说没有愚蠢的问题时,他们是认真的。 最好的结对程序员可以畅所欲言,无需显得出色或害怕看起来很愚蠢。

结对编程需要练习,但值得完善。 研究表明,结对解决问题的程序员往往更自信、更有效率,并且更投入工作。 无论您是在寻找下一份工作还是新员工入职,结对都是关爱的。

资源和进一步阅读

  • “结对编程角色”,Jordan Poulton,GitHub
  • “让谷歌变得庞大的友谊”,詹姆斯·萨默斯,《纽约客》
  • “Mob 编程:整个团队的方法”,YouTube 的 Woody Zuill

工程移情

当我开始自学 JavaScript 时,我的代码看起来很像我卧室的地板:我让它变得越来越乱,直到我别无选择,只能整理它。 只要我的网络浏览器可以理解它,我不在乎它的外观。

直到我开始审查其他人的代码,我才意识到我需要对审查我的人表现出更多的同理心。

移情可能是任何开发人员武器库中最被低估的工具。 这就是 IDEO 将用户研究置于其设计过程中心的原因,也是 Etsy 要求他们的设计师和产品经理进行工程轮换的原因。 当我们有机会看到我们的工作如何影响他人时,同理心就会出现。 难怪协作编码是构建它的好方法。

同行代码审查——检查彼此代码是否有错误的行为——要求我们表现出同理心。 作为审阅者,重要的是要认识到有人已经付出了相当大的努力来编写您将要批评的代码。 因此,尽量避免使用可能暗示判断或轻视他们工作的短语。 当您参考他们的代码时,您希望向他们展示您有疑问的特定功能和行,并建议他们如何重构它。 共享学习资源也比灌输解决方案更有帮助。 我从代码审查中收到的一些最有用的反馈以教育文章、视频甚至播客推荐的形式出现。

为您的代码编写好的文档也有很长的路要走。 像创建带有清晰安装说明的自述文件这样简单的行为显示了对任何需要使用您的代码的人的同情。 GitHub 创始人 Tom Preston-Werner 提倡自述优先的开发方法。

“错误规范的完美实现是毫无价值的。 按照同样的原则,一个没有文档的精心制作的库也该死的几乎一文不值。 如果你的软件解决了错误的问题,或者没有人知道如何使用它,那么事情就会非常糟糕。”

— Tom Preston-Werner,GitHub 创始人

我还与技术创始人交谈过,他们将文档视为成功入职的重要组成部分。 一位 CTO 表示,如果一名初级开发人员在加入他的团队后的六个月内难以达到一定的生产力水平,这表明代码库没有足够好的文档记录。 只需几秒钟即可为您编写的复杂函数添加解释性注释,但它可以为下一个加入您团队的人节省数小时的精力。

资源和进一步阅读

  • “关于移情和拉取请求”,Slack Engineering,Medium
  • “自述驱动开发”,Tom Preston-Werner,GitHub
  • “谷歌从建立完美团队的过程中学到了什么”,Charles Duhigg,《纽约时报》杂志

敏捷成就

从制作 CGI 电影所需的数百万工时到导致大预算视频游戏发布的紧张开发工作,高耸的技术成就需要付出令人难以置信的努力。 当我第一次看到我现在雇主的代码库时,我被这一切的巨大所震撼。 到底有人是怎么建造这个的?

答案是,只要有正确的协作框架,每个人都可以比任何人构建更多的东西。 在鼓励协作编码的公司中,软件并非出自孤独天才的努力。 相反,有一些合作方式可以帮助优秀的团队完成出色的工作。 Founders and Coders 的开发人员实践了一种流行的软件开发方法,称为“敏捷”,根据我的经验,它将“功能”置于跨职能开发团队中。

整本书都写了关于敏捷的文章,但这里是对核心概念的总结:

  • 产品开发团队将大量工作分解为称为“用户故事”的小单元,确定它们的优先级,并在称为“冲刺”的两周周期内交付它们。
  • 只要项目继续进行,周期就会重复,新产品需求会被输入到未来冲刺的积压任务中。
  • 该团队每天举行站立会议,讨论他们的进展并解决任何阻碍。
  • 这个过程既是增量的又是迭代的:软件是分块构建和交付的,并在连续的冲刺中完善。
十名开发人员挤在一台笔记本电脑旁,使用 mob 编程一起解决问题。
典型的敏捷工作流程(大预览)

作为一个长期的修补匠,他的个人爱好项目经常屈服于“功能蠕变”,我知道浪费时间建造没人用过的东西是多么容易。 我喜欢敏捷迫使您优先考虑用户故事的方式,以便整个团队可以专注于交付用户真正关心的功能。 知道你们都团结在一个共同的目标上,那就是建立一个在完成工作后将继续存在的产品或服务,这是令人鼓舞的。

将任务拆分为小的用户故事也恰好是时间盒配对编程会话的好方法。 无论您发现自己在该区域有多深,完成一项关键功能的工作始终是一个很好的提醒,让您离开办公桌休息一下。 敏捷为协作编码提供了结构,否则它可能会缺乏。

同时,每日站会让您可以自由地谈论任何阻碍您的事情,而冲刺回顾提供了分享关键胜利和确定团队可以改进的地方的空间。 这些仪式培养了合作意识和责任感,帮助我们一起学习比我们自己能学到的更多。

将所有这些敏捷原则付诸实践可能具有挑战性,尤其是当团队中没有人习惯这种工作方式时。 在 Founders and Coders,大多数学生需要一段时间才能养成每天站立的习惯。 但是,经过 18 周的基于项目的实践,您会发现自己的流程和沟通技巧得到了极大的提高。 当你开始你的第一个客户工作时,你已经形成了一个更清晰的思维模型,即如何在团队中构建一个全栈 Web 应用程序。

学习敏捷的最好方法是与其他人一起构建有趣的项目。 参加黑客马拉松是与潜在合作者建立联系的绝佳方式。 许多开源项目都公开了他们的看板项目板,因此您可以查看不同贡献者正在处理的 GitHub 问题。 来自初学者的一些受欢迎的贡献,您通常可以将自己分配给未解决的问题并开始提出拉取请求。

由于大多数科技公司都订阅某种形式的敏捷,因此雇主在面试中询问它的情况并不少见。 您拥有的任何经验都可以使您与其他可能从未进行过协作编码的申请人区分开来,更不用说考虑到敏捷了。

资源和进一步阅读

  • “什么是敏捷?”福布斯的史蒂夫·丹宁
  • “拥抱敏捷”,Darrell K. Rigby、Jeff Sutherland、Hirotaka Takeuchi,哈佛商业评论
  • “令人敬畏的首次拉取请求机会”,Deloitte Digital 的 Shmavon Gazanchyan

远程协作编码工具推荐

在过去几年中,远程工作工具已经发展到像 Gatsby 和 Zapier 这样的知名公司现在“远程优先”的地步。 虽然这是否会成为一种趋势还有待观察,但可以肯定地说,远程开发团队将继续存在。

本着这种精神,这里有一些工具可以帮助您和您的团队远程协作编写代码:

降价编辑器哈克MD
杀手级功能是您可以毫不费力地将降价文档转换为幻灯片演示文稿。 从流行的reveal.js 库中借用。
堆栈编辑
具有简洁 UI 和大量文件导出选项的协作在线编辑器。
代码编辑器代码沙盒
一款出色的协作式基于云的代码编辑器,您可以在浏览器中运行,无需安装。
实时分享
流行的 Microsoft Visual Studio Code 编辑器的简洁扩展,支持在同一工作区中实时编辑和调试文件。
视频会议解决方案谷歌环聊
出色的 Google 日历集成让安排视频通话变得轻而易举。
微软团队
视频会议软件可提供非常好的通话质量(1080p 视频),并支持多达 250 名同时参加者。

如果你从阅读这篇文章中拿走一件事,我希望它是团队成员胜过个人贡献者。 在一个似乎每隔一周就有一个热门的新框架需要掌握的领域,我们的技术技能会以一种我们的软技能不会老化的方式老化。 结果是,能够与其他人良好合作的开发人员总是会发现他们的能力很受欢迎。 协作编码不仅仅是一种有效的学习方式; 这是一个广受欢迎的技能组合,任何人都可以通过足够的练习和耐心来发展。