我是如何结对编程三天做出一个完整产品

1,602 阅读9分钟
原文链接: zhuanlan.zhihu.com

最近,公司的事情越发忙碌起来了,除了需要不断梳理架构团队的规划和进度之外,还要经常北上杭三地跑,平常好不容易有个完整的周末,也都瘫软在沙发上,一动脑就脑壳痛。感觉这种状态很容易让人疲惫乏力,需要改变一下,所以临近五一假期的时候,突发奇想,想完完整整写三天自己的代码!

如果只是自己写,就略显无聊了,而且三天之内,很难写出什么成型的东西来,虽然之前脑子里有好几个想法,但是都不是三天可以做出一个线上产品的规模(例如一个开源的功能炒鸡多的 markdown 编辑器插件;或者是一个画脑图的网站?)顶多做做 demo ,成就感还是有差距的。

于是,我就想,为什么不找真正热爱编程和创造的人一起写呢!于是在五一前两天,在朋友圈征集了一波,最后找到了一个有一定编程经验的程序员,在五一假期三天基本上每天在咖啡馆编程至少 8 小时。

现场照片,节奏还是很紧张的

事实上,我发现这种结对编程,带来的优势比我想象中还要多很多。

结对编程的优势

  1. 高效。这个自不必说了,两个人编程,有问题可以快速讨论解决,而且可以互相监督不偷懒,列出来的任务有问题的话,可以快速沟通解决。
  2. 互相学习。除了编程上的姿势,更重要的是学习对方做事的态度和方式,我其实也希望把我对创造产品的热情输出给对方,另外还有一点就是大家对产品本身讨论的过程,让我的产品逻辑和设计理念也改变了很多。
  3. 清晰分工。在整个过程中,我主要承担 需求提供者、设计师、服务端开发、部分不重要的小程序页面开发。而对方主要承担前端核心逻辑的开发。二人都有核心的事情要做,但是会在一些边缘的事情上,看情况调节工作。这样清晰的分工可以让每个人专注在自己的事情上,快速高效的输出。
  4. 讨论改进。在放假之前,事实上我脑子里没有一个很清楚的产品的概念,后来见面之后,我们先讨论和分解事情,此时做了不少讨论,这让我的一些想法变得清晰和合理,如果是我自己,很难有这种快速的纠正。

这些优势,让我找回了一点前几年参加黑客马拉松的感觉。所谓黑客马拉松,就是一群程序员或者设计师,临时组队,2-4人,从碰撞想法到通宵编码实现,最终创造一个真实的产品出来(更多时候其实是一个 demo 即可)。我第一次参加黑客马拉松,留下的印象就非常深刻,那时候我刚毕业也没几年,正在入门学习 Nodejs,然后在现场找到一个做服务端开发的程序员,他对 Nodejs 了解更为深入,并且熟练使用 CoffeeScript,当时我提供了想法和需求,他主编码,我给他打下手,虽然最后没拿到奖项,但是那一天一夜,跟他学了不少技术上的姿势,而且这种合作让我们从陌生变成一个合作奋斗过的伙伴,这种快速的交流让我至今对他印象还非常深刻。

其实我很喜欢这种程序员之间的交流方式和最终产生的关系维系,为什么会产生关系维系?其实更多是通过这种方式寻找与自己一样喜欢创造,对用代码创造产品充满热情,或者对技术本身充满热情的同伴。这也是为什么我要从事程序员这个行业的原因!

昨天,和一个从美国硅谷回来准备创业的创业者聊天,他提了一个问题,为什么国内的程序员给他的感觉都很保守,难道不应该是每个程序员都充满了创造的热情吗,毕业的时候首要考虑的是组队或者自己去做一些创造的事情,而不是进入公司工作。我跟他解释道,实际上,有这种想法的程序员很多,只是国内环境所迫。年轻人刚毕业就被房子、结婚、孩子三座大山压在身上,大部分人无法摆脱环境的影响,对选择做出妥协。实际上,如果这三座大山可以摆脱,我相信会有很多年轻人选择更为激进的道路。

不再啰嗦了,说说我和同伴结对编程的过程吧,希望可以对读者有所帮助。

执行方式

  • 首先,提前约定。在临近假期的时候,我准备了几个点子,然后就在朋友圈发了一个招募,我报销所有吃饭和咖啡的费用,招募参与者一起做一个产品,这个产品属于我们共同创造,但是最后所有权可能是我的(我没有太多强调,毕竟不是商业产品)。发出招募之后,很快就有人来联系我,我大概做了筛选,选择了一个拥有一定开发经验的伙伴(事实上也没有几个人来报名)
  • 当天,快速进入状态。五一假期只有三天,中间还有可能要处理一些私人的事情,所以时间很紧急,第一天见面的时候已经接近中午了,开始的时候我们首先要互相了解一下,于是我们直接走路去吃了一顿午饭,期间,我们互相做了介绍,对各自熟悉的技术栈进行了了解,对准备要做的事情做了初步的讨论,对一些生活啊公司啊之类的杂事也做了一些沟通交流。午餐过后,就快速开始进入角色了,我首先对如何进行这次结对编程的流程做了大概介绍(先做产品思路出原型图,然后针对原型,我们讨论技术方案,细化大块的任务,讨论一些技术实现的细节,最后分工,我做设计,他开始开发某些模块,然后我也承担一些部分的开发,最终联调发布)然后就开始按照这个流程立即执行。
当时的 Sketch 设计稿
  • 第三步,需求的沟通。事实上,这个是整个事情的核心,因为大家参与到这个事情,不是单纯的实现什么或者讨论技术,最最核心的还是一起创造一个产品的乐趣。所以两个人一定要针对这个产品各抒己见,一起勾勒产品的设计理念、操作逻辑、发展方向、受众喜好,这个过程对我帮助也很大,因为之前其实有一个初步的想法,但是很不具体,最终这个产品做出来之后,跟我一开始想的还是差别很大的,操作方式和展示形式更加丰满了,这是我对这次结对编程最有感触的地方之一。
  • 第四步,任务管理。我们选定了一个任务管理软件来管理我们二人的分工和计划,因为项目复杂度不高,选用了很简单的“奇妙清单”,针对原型和需求,我们把需要做的事情按照大块做了分解,这是当时的 check list,部分任务是后续一边做一边加入的,在最开始,我们核心梳理的是核心模块,一些细节靠后续的沟通加入。另外有一些核心模块的功能比较复杂,我们会细化一个方案写到任务详情中,例如详情页自动播放的具体逻辑,最近播放的存储逻辑等。
任务列表
  • 第五步,分工。任务梳理出来之后,我们对着任务列表做分工,首先当然是擅长的人做擅长的事情,例如我擅长做界面设计,服务端开发,这两块的事情肯定是需要我来做,平衡一下,他负责前端最复杂部分的开发,其他前端的非核心的功能,暂时不做分工,谁先做完谁来做,及时在任务中分配就可以。
  • 第六步,开始开发。所有开发其实都要从设计开始,我首先开始用 Sketch 设计核心的界面,他则开始写和界面逻辑关系不大的功能,大概几个小时之后,主要的界面的设计已经产出,这个时候再开始构建前端的界面。

结语

这次结对编程的经历算是一个试验吧,以后希望有机会也可以尝试类似的方式,以此寻找创造的乐趣,以及乐于创造的人,也希望对大家能有一点点启发,程序员更需要突破自己与人合作与人沟通的瓶颈,这样才能让技术的价值最大化,如果只是纠结于技术本身,会常常伴随着困惑和瓶颈。

对类似事情感兴趣的同学,可以加我微信,说不定以后有机会可以一起结对。微信号:mier963

忘了放这三天的成果了,可以在微信里搜索“喵老师”,小程序里第一个就是了,这个小程序三天开发+上线之后基本没迭代过,基本都是这三天的成果

或者扫这个二维码也可以。
小程序二维码