一次與陌生男子結對程式設計3天的經歷

小芋頭君發表於2018-05-27

最近,公司的事情越發忙碌起來了,除了需要不斷梳理架構團隊的規劃和進度之外,還要經常北上杭三地跑,平常好不容易有個完整的週末,也都癱軟在沙發上,一動腦就腦殼痛。感覺這種狀態很容易讓人疲憊乏力,需要改變一下,所以臨近五一假期的時候,突發奇想,想完完整整寫三天自己的程式碼!

如果只是自己寫,就略顯無聊了,而且三天之內,很難寫出什麼成型的東西來,雖然之前腦子裡有好幾個想法,但是都不是三天可以做出一個線上產品的規模(例如一個開源的功能炒雞多的 markdown 編輯器外掛;或者是一個畫腦圖的網站?)頂多做做 demo ,成就感還是有差距的。

於是,我就想,為什麼不找真正熱愛程式設計和創造的人一起寫呢!於是在五一前兩天,在朋友圈徵集了一波,最後找到了一個有一定程式設計經驗的程式設計師,在五一假期三天基本上每天在咖啡館程式設計至少 8 小時。

事實上,我發現這種結對程式設計,帶來的優勢比我想象中還要多很多。

結對程式設計的優勢

  1. 高效。這個自不必說了,兩個人程式設計,有問題可以快速討論解決,而且可以互相監督不偷懶,列出來的任務有問題的話,可以快速溝通解決。
  2. 互相學習。除了程式設計上的姿勢,更重要的是學習對方做事的態度和方式,我其實也希望把我對創造產品的熱情輸出給對方,另外還有一點就是大家對產品本身討論的過程,讓我的產品邏輯和設計理念也改變了很多。
  3. 清晰分工。在整個過程中,我主要承擔 需求提供者、設計師、服務端開發、部分不重要的小程式頁面開發。而對方主要承擔前端核心邏輯的開發。二人都有核心的事情要做,但是會在一些邊緣的事情上,看情況調節工作。這樣清晰的分工可以讓每個人專注在自己的事情上,快速高效的輸出。
  4. 討論改進。在放假之前,事實上我腦子裡沒有一個很清楚的產品的概念,後來見面之後,我們先討論和分解事情,此時做了不少討論,這讓我的一些想法變得清晰和合理,如果是我自己,很難有這種快速的糾正。

這些優勢,讓我找回了一點前幾年參加黑客馬拉松的感覺。所謂黑客馬拉松,就是一群程式設計師或者設計師,臨時組隊,2-4人,從碰撞想法到通宵編碼實現,最終創造一個真實的產品出來(更多時候其實是一個 demo 即可)。我第一次參加黑客馬拉松,留下的印象就非常深刻,那時候我剛畢業也沒幾年,正在入門學習 Nodejs,然後在現場找到一個做服務端開發的程式設計師,他對 Nodejs 瞭解更為深入,並且熟練使用 CoffeeScript,當時我提供了想法和需求,他主編碼,我給他打下手,雖然最後沒拿到獎項,但是那一天一夜,跟他學了不少技術上的姿勢,而且這種合作讓我們從陌生變成一個合作奮鬥過的夥伴,這種快速的交流讓我至今對他印象還非常深刻。

其實我很喜歡這種程式設計師之間的交流方式和最終產生的關係維繫,為什麼會產生關係維繫?其實更多是通過這種方式尋找與自己一樣喜歡創造,對用程式碼創造產品充滿熱情,或者對技術本身充滿熱情的同伴。這也是為什麼我要從事程式設計師這個行業的原因!

昨天,和一個從美國矽谷回來準備創業的創業者聊天,他提了一個問題,為什麼國內的程式設計師給他的感覺都很保守,難道不應該是每個程式設計師都充滿了創造的熱情嗎,畢業的時候首要考慮的是組隊或者自己去做一些創造的事情,而不是進入公司工作。我跟他解釋道,實際上,有這種想法的程式設計師很多,只是國內環境所迫。年輕人剛畢業就被房子、結婚、孩子三座大山壓在身上,大部分人無法擺脫環境的影響,對選擇做出妥協。實際上,如果這三座大山可以擺脫,我相信會有很多年輕人選擇更為激進的道路。

不再囉嗦了,說說我和同伴結對程式設計的過程吧,希望可以對讀者有所幫助。

執行方式

  1. 首先,提前約定。在臨近假期的時候,我準備了幾個點子,然後就在朋友圈發了一個招募,我報銷所有吃飯和咖啡的費用,招募參與者一起做一個產品,這個產品屬於我們共同創造,但是最後所有權可能是我的(我沒有太多強調,畢竟不是商業產品)。發出招募之後,很快就有人來聯絡我,我大概做了篩選,選擇了一個擁有一定開發經驗的夥伴(事實上也沒有幾個人來報名)

  2. 當天,快速進入狀態。五一假期只有三天,中間還有可能要處理一些私人的事情,所以時間很緊急,第一天見面的時候已經接近中午了,開始的時候我們首先要互相瞭解一下,於是我們直接走路去吃了一頓午飯,期間,我們互相做了介紹,對各自熟悉的技術棧進行了瞭解,對準備要做的事情做了初步的討論,對一些生活啊公司啊之類的雜事也做了一些溝通交流。午餐過後,就快速開始進入角色了,我首先對如何進行這次結對程式設計的流程做了大概介紹(先做產品思路出原型圖,然後針對原型,我們討論技術方案,細化大塊的任務,討論一些技術實現的細節,最後分工,我做設計,他開始開發某些模組,然後我也承擔一些部分的開發,最終聯調發布)然後就開始按照這個流程立即執行。

  3. 第三步,需求的溝通。事實上,這個是整個事情的核心,因為大家參與到這個事情,不是單純的實現什麼或者討論技術,最最核心的還是一起創造一個產品的樂趣。所以兩個人一定要針對這個產品各抒己見,一起勾勒產品的設計理念、操作邏輯、發展方向、受眾喜好,這個過程對我幫助也很大,因為之前其實有一個初步的想法,但是很不具體,最終這個產品做出來之後,跟我一開始想的還是差別很大的,操作方式和展示形式更加豐滿了,這是我對這次結對程式設計最有感觸的地方之一。

  4. 第四步,任務管理。我們選定了一個任務管理軟體來管理我們二人的分工和計劃,因為專案複雜度不高,選用了很簡單的“奇妙清單”,針對原型和需求,我們把需要做的事情按照大塊做了分解,這是當時的 check list,部分任務是後續一邊做一邊加入的,在最開始,我們核心梳理的是核心模組,一些細節靠後續的溝通加入。另外有一些核心模組的功能比較複雜,我們會細化一個方案寫到任務詳情中,例如詳情頁自動播放的具體邏輯,最近播放的儲存邏輯等。 [image:54C21346-9CB7-47B5-ADF3-5736E885B321-42142-00010B1F0E8E2D88/2D2FBBAC-6B69-46E9-A217-4374290EA519.png]

  5. 第五步,分工。任務梳理出來之後,我們對著任務列表做分工,首先當然是擅長的人做擅長的事情,例如我擅長做介面設計,服務端開發,這兩塊的事情肯定是需要我來做,平衡一下,他負責前端最複雜部分的開發,其他前端的非核心的功能,暫時不做分工,誰先做完誰來做,及時在任務中分配就可以。

  6. 第六步,開始開發。所有開發其實都要從設計開始,我首先開始用 Sketch 設計核心的介面,他則開始寫和介面邏輯關係不大的功能,大概幾個小時之後,主要的介面的設計已經產出,這個時候再開始構建前端的介面。

結語

這次結對程式設計的經歷算是一個試驗吧,以後希望有機會也可以嘗試類似的方式,以此尋找創造的樂趣,以及樂於創造的人。程式設計師更需要突破自己與人合作與人溝通的瓶頸,這樣才能讓技術的價值最大化,如果只是糾結於技術本身,會常常伴隨著困惑和瓶頸。

對類似事情感興趣的同學,可以加我微信,說不定以後有機會可以一起結對。微訊號:mier963

忘了放這三天的成果了,可以在微信裡搜尋“喵老師”,小程式裡第一個就是了,這個小程式三天開發+上線之後基本沒迭代過,基本都是這三天的成果

或者掃這個二維碼也可以。

一次與陌生男子結對程式設計3天的經歷

相關文章