社交编码|结对编程
- 创业
- 2025-08-28 15:30:01

极限编程之社交编码
观看本视频后,你将能够: 描述社交编码原则,并认识到结对编程如何创造出更好的代码以及培养更优秀的程序员。 什么是社交编码? 我喜欢把它称为 “内部开源”。 社交编码是开源社区多年来一直在做的事情。 新的变化在于将这些概念引入企业,并以社区的形式在内部项目中进行编码。 过去,开发人员在私有代码库中工作,只有团队成员才能进行代码贡献。 一切都由访问控制列表和严格的 “需要知道” 原则控制。 这样做的问题在于,没人知道你正在进行相关工作,所以代码复用根本不可能,因为没人知道这些代码的存在。 因此,企业不断地重复造轮子,因为没人知道轮子已经被造出来了。 在社交编码模式下,代码库是公开的,并且鼓励每个人复刻代码并进行贡献。 这是一种截然不同的思维方式。 开发团队往往会认为 “这是我的代码,其他人不许碰”,但为了公司的利益,他们需要摒弃这种想法。 你可能会认为这样会陷入混乱,但实际上,它运行得相当好,因为代码库所有者会进行管控。 代码库的所有者仍然完全掌控着代码贡献。 社交编码解决了什么问题? 假设你看到一个组件,它能满足你80% 的需求,但缺少一些功能。 你要如何添加这些缺失的功能呢? 现在你需要做出一个决定: 你是向代码库所有者提出新功能的请求,但要冒着请求被排在优先级列表末尾的风险? 或者更糟糕的是,他们的资金被削减,你的请求会首先被砍掉。 还是说,为了不依赖其他团队,你要把代码全部重写一遍,只为了得到那20% 你需要的功能? 很遗憾地说,许多团队选择了后者,为了获得所需的功能而重新造轮子。 这对任何一家公司来说都是巨大的资源浪费,但这种情况却一直在发生。 采用社交编码原则是如何解决这个问题的呢? 你和代码库所有者讨论新功能,并且你们达成一致,由你为他们开发这个功能。 这使你能够利用他们已完成的所有工作,并添加你需要的功能。 你在GitHub上创建一个问题,并将其分配给自己,这样每个人都知道你正在处理这个问题。 然后你复刻代码库,创建一个分支,并进行你的修改。 当你完成所有工作并准备好贡献代码时,你发起一个拉取请求,表明你已准备好接受审核,代码库所有者可以决定是否将你的代码合并回主项目。 代码库所有者拥有完全的控制权。 因为是他们进行合并,所以他们可以要求你做出修改。 如果你的测试覆盖范围不够,他们可以要求你编写更多的测试用例。 他们会像对待团队的其他成员一样对待你和你的贡献。 这是一个双赢的局面。 你得以利用另一个团队的代码以及所有你需要的功能,而另一个团队则免费获得了一个新功能。 公司也节省了资金,因为代码得到了复用,而不是重写,皆大欢喜。 这就是开源的运作方式,也是公司对待内部代码应有的方式。 结对编程是社交编码的一个方面,它源自极限编程。 它是指两名程序员共用一台工作站(两人共用一个屏幕、一个键盘和一个鼠标)。 坐在键盘前操作的程序员通常被称为 “驾驶员”。 另一位程序员同样积极参与编程任务,但更侧重于整体方向,被称为 “领航员”。 当 “驾驶员” 在打字时,“领航员” 会检查其工作,或者查找一些资料,又或者思考接下来要做什么。 大约20分钟后,他们交换角色。 这样他们两人都能扮演这两个角色。 在工作中,我一有机会就会进行结对编程。 我喜欢社交编码的这个方面。 我个人的一个弱点是,我会为给新变量或函数取什么名字而苦恼。 我想把它取到完美,让代码尽可能易读。 有其他人一起交流想法,能帮助我更快地做出这些决定。 你可能会认为结对编程是用两倍的资源来完成同样数量的工作,但事实并非如此。 结对编程有很多好处。 第一个好处是代码质量更高。 “大声编程” 这种方式能让人对代码有更清晰的理解。 过去,当我独自编写代码,然后向别人解释这段代码时,我会在大声讲解的过程中发现一个错误。 我在脑海中检查代码时没有发现这个错误,但在大声说出来的时候却发现了。 向别人解释代码会迫使你把代码写得更清晰。 这意味着可以更早地发现缺陷。 这是一件好事,因为它能降低后续的维护成本。 在开发过程中,缺陷发现得越晚,修复成本就越高。 结对编程还能促进技能传授,培养更优秀的程序员。 我喜欢让初级程序员和高级程序员结对。 我经常这么做,这样他们就能从对方解决问题的方法中学到东西。 他们会学到对方使用的技巧和窍门。 这能培养出更优秀的程序员。 而且每一行代码都有两双眼睛在检查。 你不会希望代码只有一个人能看懂。 不然那个人去度假了,就没人知道如何修复他的代码了。 结对编程能让人对代码有更好的理解。 更多的人能够充分理解代码,从而进行修复和改进。 在本视频中,你学到了: 社交编码是通过公共代码库以社区协作的方式进行的,所有团队成员都被鼓励进行贡献。 结对编程能够提高代码质量,因为它能更早地发现缺陷、降低成本,并且让更多人理解代码库。