為什麼協作編碼是終極職業黑客

已發表: 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 名同時參加者。

如果你從閱讀這篇文章中拿走一件事,我希望它是團隊成員勝過個人貢獻者。 在一個似乎每隔一周就有一個熱門的新框架需要掌握的領域,我們的技術技能會以一種我們的軟技能不會老化的方式老化。 結果是,能夠與其他人良好合作的開發人員總是會發現他們的能力很受歡迎。 協作編碼不僅僅是一種有效的學習方式; 這是一個廣受歡迎的技能組合,任何人都可以通過足夠的練習和耐心來發展。