怎樣在企業裏推廣TDD等技術實踐?

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"爲什麼TDD很重要"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在一家負責開發軟件產品的企業中,開發者們編寫代碼的方式是非常重要的。良好的技術實踐意味着企業可以在更短的開發週期以更高的質量完成新的功能,以及在截止日期之前交付更可靠的軟件。資深的技術開發人員會希望自己工作的企業有着高質量的代碼、高效率的開發實踐,以及健康的企業文化,另一方面,如果一家企業的代碼質量粗糙且企業無法改善該問題,那麼他們終將面對無法及時交付新功能或開發成本過高的困境,這對任何企業來說都是一場災難。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"研究證明,技術實踐所帶來的這些影響是實際存在的。Forsgren等人在他們的"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.com\/articles\/book-review-accelerate\/","title":"","type":null},"content":[{"type":"text","text":"《加速》"}]},{"type":"text","text":"一書中講述了他們多年來針對軟件開發企業的研究成果:通過分析諸多因素,他們發現了對商業的成功貢獻最大的幾個因素,其中,“持續交付”的實踐尤爲重要。這裏的“持續交付”囊括了多種技術上及組織上的實踐,其中就包括了TDD。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然,並不是說採用TDD就一定能使企業獲得成功,但它對商業成功的重要性卻也是不可否認的。高質量的代碼是通過編寫有效的自動測試、頻繁地集成,以及不斷地進行設計改良實現的。這套流程並不是所有的團隊或軟件開發者都有能力做到的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在多年的技術指導中,我遇見過很多軟件開發者都習慣於較長的交付週期和以周爲單位的集成頻率,他們除了手頭工作中必要的改動很少進行設計優化。而在我看來,這些團隊的工作效率只能達到那些廣泛採用TDD的團隊的一小部分。TDD模式和在TDD的影響下形成的高質量代碼庫,對團隊工作、合作能力,以及開發者們總體的身心健康的提升都是非常顯著的。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"現在的企業都在做什麼"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在《加速》一書中的研究表明,最佳企業和低績效企業之間是存在巨大鴻溝的。在充斥着數字化、DevOps和業務敏捷性的新世界中,企業需要提高其在軟件開發方面的能力。我遇見的很多經理、架構師和技術負責人都非常樂意提升他們開發團隊的實踐效率。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在最近的2021年ACCU會議上,我向300多位參會者發起了問卷調查,調查他們企業正在使用的技術學習活動都有些什麼。以下是最受歡迎的幾個選項,排名越高票數越高。(當然,參加技術會議也算是其中一項活動,但鑑於我採訪的對象都是會議參與者,所以在這裏並沒有被列出來)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"代碼審查"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"線上自學培訓視頻"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"每次2-5天的由講師指導的培訓課程"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"頻繁的結對編程"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"黑客馬拉松(Hackathons)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實踐社區"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我隨後還詢問他們是通過哪些活動成功地學習了TDD模式,不幸的是,大多數人都選擇了“從未學習過TDD”的選項,而排名第二和第三的則是“頻繁的結對編程”和“線上自學培訓視頻”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個結果證明了我的觀察:TDD並不是能輕易上手的。最好的學習方式應該是向熟練掌握這項能力的前輩們學習,而學習者本身也需要通過大量的重複練習實踐才能真正掌握它。想要簡單通過黑客馬拉松或代碼審查這類的活動學習TDD是不行的。即使是有講師指導的培訓課程成功率也不怎麼高,因爲這些課程時間太短而且重複的次數太少,不足以讓人們習慣新的開發方式。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"與熟知TDD的人結對編程是少數幾個在我看來真正有效果的。然而,大部分的團隊並沒有可以用於結對的人。另外,如果參與者有目的性且能堅持完成的話,自學線上培訓搭配大量的練習也是有可能成功的。然而,如果在你的團隊中只有少數的幾人掌握了TDD模式,這對團隊整體而言是沒什麼太大幫助的。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"個人經驗之談"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在2005年,一個名爲代碼道場(Coding Dojo)的論壇讓我看到的前進的希望。在這個交流學習TDD的論壇中,我成功幫助我的同事掌握了TDD模式,並且於2011年,我出版了我的第一本書《代碼道場的教學手冊》。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在代碼道場中,人們可以學習到TDD相關的基礎知識,並開始着手嘗試改變自己的開發方式。但在幾年之後,我才清楚地意識到,它所帶來的改變並非是長久的,這一點在那些代碼質量差且無法順利實施TDD的企業中尤爲明顯。人們從代碼道場中嘗試的Kata練習與他們在辦公桌後真實世界中的代碼開發存在了太大的差異。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"下一步的嘗試:Samman方法"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在2018年,我收到了來自Llewellyn Falco的熱情邀請,作爲他的客戶,我在美國與他一起進行了兩週的配對指導,在這段工作之中,我驚喜地發現他的方法似乎真的很有效。他在小組代碼中使用的Kata課程正是我曾經在代碼道場中曾見過的,再加上全團隊共同動手實踐生產代碼庫的課程,這二者的結合似乎是他成功堅持使用TDD的關鍵所在。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我從那次的工作中受到了很大的啓發,並改變了我在技術指導中的方向。在接下來的三年中,我找到了四五個願意進行這種新式技術指導的企業,並招募到了更多願意以同樣方式進行合作的人,我們一起將這種方法進行發展改進。而在下文中,我想與大家一起分享一些高效率的工作技巧。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了將這種方法與其他方法相區分,也爲了人們能夠更準確地找到它,我決定給它起一個獨特的名字。“Samman”,是瑞典語中“一起”的意思,對於這種涉及大量“合奏(ensemble)”的方法來說似乎很是合適,而“ensemble”在法語中也有“一起”的意思。另外,我的新書"},{"type":"link","attrs":{"href":"https:\/\/sammancoaching.org\/","title":"","type":null},"content":[{"type":"text","text":"《Samman方法的Agile訓練》"}]},{"type":"text","text":"已於2021年1月出版。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"什麼是Samman方法"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Samman方法是爲尋求改變、優化軟件搭建形式的人們設計的,着重於技術實踐與代碼編寫方式。Samman的導師可以同時負責多個軟件開發團隊,並將課程劃分爲兩大組成部分:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"學習時間"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"合奏工作"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在“學習時間”中,導師會通過練習以及主動學習技巧來教授諸如TDD等理論和技術實踐。在“合奏”環節,整個團隊將與導師合作,在他們日常的生產代碼庫中應用Agile開發技術。“合奏工作”的另一個名字可能更爲人所知:Mob編程。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"學習時間:短小而頻繁的代碼道場訓練"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當人們在學習一門新的技能時,無論是一種新樂器、一門外語、一種新的舞蹈風格、新的烹飪方式,或者是一項新的運動,成功地掌握新技能的背後一定會有某種形式的教學或輔導,以及相當時長的專門練習。最好的學習經歷通常發生在友好的學習小組之中,有一位鼓舞人心的老師和趣味十足且難度恰到好處的動手練習。這也是學習時間的本質。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Sharon Bowman在她的暢銷書,《從房間後面開始訓練》中所使用的名爲“4C”的教學方式讓我受益匪淺。在這個模式中,每個學習時間都是由這四個部分組成:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"連接(Connect)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"概念(Concept)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"具體實踐(Concrete Practice)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"結論(Conclusion)"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"前文中我們所提到的新技能的學習過程就是一種“連接”。學習一門新技能需要我們將它與我們已有的知識結合起來,而在我們進入下一步“概念”之前,讓學習者有機會溫故而知新是很有幫助的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"站在幻燈片前的演講是一種傳遞新概念的方式,但卻不一定是最有效的。我們希望能夠激發學習者的好奇心,讓他們成爲自己的學習過程中的主動參與者,人們的大腦會在多樣性、活動、社交互動和自我發掘中茁壯成長。在教學過程中,我一般都會盡量減少幻燈片的張數。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果說我想向成員們描述TDD的一個概念,那麼我會通常選擇用一個簡短的演示(demo)進行技術展示。如果我需要教授的是一個設計模式或可測試的問題,那麼我會讓參與者嘗試對代碼進行審覈。而對於像是參數化測試這類的新代碼技術,我則會讓參與者在網上搜索代碼片段或設計建議。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“具體實踐”通常意味着代碼編寫或Kata代碼練習。這項活動通常是學習時間中耗時最長的部分;在大約30-45分鐘內,進行團隊全員“合奏”或者是二至三人的小組合作。在這段時間內,你可能不能寫大量代碼,這就是爲什麼導師需要首先確定團隊的起始點,並給出清晰的指示,讓參與者們可以直接開始應用他們在課程中所學到的概念。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我曾在代碼道場中練習使用的Kata練習讓我在多年之後依舊能從中受益,即使是在現在,我依舊會在學習時間中重複利用其中許多的Kata練習,並幾乎沒有任何修改。但我新提出的練習往往更小,並且更專注於某個特定的技巧。我在教學過程中也會經常使用同一個Kata練習來教授不同的技術,並在倉庫(repo)中有不同的分支(branch)來設置不同的起點。“"},{"type":"link","attrs":{"href":"https:\/\/sammancoaching.org\/kata_descriptions\/supermarket_receipt.html","title":"","type":null},"content":[{"type":"text","text":"超市收據"}]},{"type":"text","text":"”就是一個很好的示例,我可以通過這個例子教授重構,也可以教授批准測試中的不同部分。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在學習時間結束之前,我會用幾分鐘時間來整理課程中的“結論”部分。如果人們自己動手寫總結,或是向他人解釋自己所學到的知識,會幫助人們更好地記住他們所學的內容。最後,我還會鼓勵參與者在沒有導師在旁指導的情況下自己動手嘗試一次練習。熟能生巧,只有不斷的練習才能帶來技能上的進步。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"日常任務中的合奏工作"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們將所有聰明的頭腦在同一時間、同一空間、同一電腦上共同研究同一事物,稱作是“Mob編程”。——Woody Zuill"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這段引用來自Woody Zuill和Kevin Meadows合著的《Mob編程:全團隊的方法》一書,他們也是我在Mob編程方面的啓蒙者。但在之後的幾年中,我更傾向於以另一個詞來描述這種合作形式,“合奏”。合奏象徵着人們如樂團中的演奏者一樣相和諧的工作方式,這是我喜歡這個詞的原因,但Mob與合奏技術的本質還是一樣的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"就像是演奏者們需要經過排練才能演奏出優美的音樂一樣,程序員們同樣需要通過學習才能更加絲滑地合作。你可以在團隊中擔當不同的角色,不同角色所需要的技能也會有所不同。“引導者”的角色要面臨的第一份挑戰就是要如何向別人講述代碼與設計,他們需要將之前只用打字描述的“聲明新變量”或“內聯返回語句”更加直白地向別人描述出來。而人們在描述過程中習得的新的詞彙將會讓我們在更高的抽象層次上思考問題,併爲設計討論打開新的局面。最終,整個團隊都可以參與到開發工作之中,彙集他們知識的力量,並生產出能令所有人都感到自豪的代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我在“合奏”中曾多次遇見過類似的情況:最初,團隊中只有A知道該如何完成某個任務,但通過合奏中知識的傳遞,很快團隊中的所有人都學會了如何完成這項任務。這種現象並不少見,人們通過互相學習,知識和技能得到了快速的傳播。這也是我作爲技術指導在觀察得到的最令人印象深刻的現象,合奏團隊中人們就像是擁有了超能力一般,在需要的時候,可以以非常自然的方式向整個團隊傳遞知識。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當我在從旁指導合奏團隊時,我會經常引導參與者們使用TDD模式,具體來說就是在討論需要做什麼時,我會要求參與者首先列出一份測試清單。而當參與者們開始實現代碼時,我會建議他們從測試開始寫。如果需要重構,我會建議他們從步子邁小一點,從更安全的部分開始。如果他們在任何一步遇到困難,我都會以引導者爲他們做示範。我會盡量弱化我的存在感,只在必要的時候爲團隊提供前進方向上的指引,而當人們有自信接管時,我則會毫不猶豫地退後。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲技術指導,在合奏團隊中輔導的經歷可以讓我不斷從團隊成員中學習新的技能。僅僅是和不同的人們共事就可以讓你學習到新的工具、框架,以及設計想法,更不用提個人層面上的回報了,當你不斷在不同團隊中輔導,傳播你的知識時,這種工作模式最終會讓整個企業都受益匪淺。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在合奏期間中,團隊會選擇一個他們日常工作中的任務,在導師的幫助下,團隊會學着應用相關的Agile開發技巧。這一步很重要,如果你僅僅侷限於刷題或做代碼道場,你會跳過這一步。而這一步則是我們能看到Agile技能在生產代碼中發揮作用的時候。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當人們最初開始學習合奏工作時,每天兩小時的練習時長足矣。這也是爲什麼Samman方法可以讓導師在需要的情況下,同時跟進不同的團隊。在早上,團隊A用兩小時進行合奏,一小時學習時間,而在下午,團隊B可以進行訓練。如果你想再拼搏一下,每天三個團隊合奏工作訓練也是可以做到的,只是需要每天僅安排一個學習時間。但這樣一來導師的壓力也會變得非常大。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我曾進行過面對面培訓和線上培訓,兩種方式都很好,只是各有優缺點。面對面的培訓讓你可以直接讀到人們的肢體語言,也可以在團隊進行工作時在一旁不打擾地說悄悄話。在線上時,所有人都可以清楚地看到你在電腦屏幕上展示的代碼塊,所有人都有舒適的椅子、電腦和顯示器等等。人們如果想要查詢文檔或者其他代碼部分時也會很容易,畢竟所有人都有自己的屏幕,也可以隨時查看共享屏幕。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我發現在十天半的培訓之後,進行一次幾天或幾週休息會更好,導師和團隊都能從中受益。休息之後,可以進行新的一輪培訓課程。這樣一來,團隊有一定時間在沒有導師的情況下嘗試新的工作方式,並且在導師繼續下一輪輔導之前認識到自己知識方面的已掌握的和匱乏的。而導師則有機會爲下一輪輔導備課,並在需要的情況下與成員進行一對一的輔導,或者是準備未來新團隊的輔導訓練。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"觀察結果"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在經歷10天半的訓練週期之後,我觀察到大部分的團隊都已經能夠掌握合奏工作的竅門,並且可以在導師不在的情況下獨自完成任務。這項技能本身對於團隊而言非常重要,在隨後的工作中,開發者們可以自行決定什麼時候採用這種合作技術:有的團隊選擇在大的設計變更和新團隊成員入職時進行合奏訓練,而有些企業甚至選擇將其作爲日常工作中的一部分。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我的另一項觀察結果則是態度的改變。在結束輔導的調查中,大部分開發人員都認同了以下幾點:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更願意於編寫單元測試"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更願意安全地改進設計和重構"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更願意於設計可讀、可維護的測試案例"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更願意提交小增量的代碼,更頻繁地提交代碼"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"改進的團隊合作,更好的協作"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前爲止,我還未曾與任何成功大規模採用TDD的大型公司進行過合作。而在小規模團隊中,我見證過不少團隊成功採用合奏工作,並且開始編寫更多的單元測試。最明顯的變化當屬在其中幾個案例中,團隊中已經有頗爲資深,且掌握了一些TDD技能的團隊成員,他們能夠在培訓之後從紙上談兵,進一步地與團隊中的其他成員真正地採用TDD。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Samman訓練對你是否適用?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我相信這個世界需要更多的技術導師。很多團隊現在都在與糟糕的代碼作鬥爭,並且缺乏取得良好進展所需的Agile技能。有許多的開發者和技術領導或許擁有這些技能,但他們卻很難在企業中廣泛且迅速地將這項技能進行傳播。Samman是一種具體的方法,將有效的開發實踐帶入需要它們的團隊與企業之中。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https:\/\/www.infoq.com\/articles\/spread-technical-practices-organization\/"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章