亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 重構(gòu)Coderetreat:探索簡單的設(shè)計(jì) [打印本頁]

作者: Patagonia    時間: 2015-04-30 10:08
標(biāo)題: 重構(gòu)Coderetreat:探索簡單的設(shè)計(jì)
  本文介紹了典型的coderetreat的結(jié)構(gòu)、內(nèi)容和意圖。文章的內(nèi)容來自于多次coderetreat活動之后的反饋意見,反映出了這些活動的優(yōu)點(diǎn)和不足,并對它將來的發(fā)展方向提出了一些建議。
Coderetreat是什么?
在過去幾年里,每到周末,在全世界的各個城市中,就會有軟件開發(fā)者成群結(jié)隊(duì)地聚在一起,他們會在一整天的時間內(nèi)不斷嘗試編寫代碼,以解決某個給定的問題,但不會完整地實(shí)現(xiàn)一個解決方案。如果你認(rèn)為這聽上去有些瘋狂,那大概是因?yàn)槟銖膩頉]有參與過coderetreat吧!
這里為那些沒有參與過coderetreat的讀者解釋一下:coderetreat是一種通常在周末舉辦的活動,軟件開發(fā)者成群結(jié)隊(duì)地聚在一起,在為期一天的時間內(nèi)為自己編寫代碼,以真實(shí)地反映自己的代碼水平,并且互相學(xué)習(xí)。這種活動專注于實(shí)踐(敏捷)軟件開發(fā)中的基本元素,強(qiáng)調(diào)
簡單設(shè)計(jì)的基本原則
,即讓測試驅(qū)動編碼,消除代碼重復(fù)、保持代碼的表達(dá)能力,并且不包含任何不必要的特性(稍后會進(jìn)一步進(jìn)行分析)。
這一思想是Gary Bernhardt、Patrick Welsh、Nayan Hajratwala和 Corey Haines在2009首先提出的。從那之后,這種思想得到了發(fā)揚(yáng)光大,以至于現(xiàn)在已經(jīng)舉辦了三屆“全球Coderetreat日”,在這一天時,全世界各地都會分別舉辦coderetreat活動,有數(shù)以千計(jì)的開發(fā)者參與其中。
2014年的全球活動日
在全球近150個城市中展開了coderetreat,參與者超過了兩千人。
一個典型的coderetreat通常(正如在
coderetreat.org網(wǎng)站
上所概述的一樣)包括以下內(nèi)容:
    要解決的代碼問題(或kata)是創(chuàng)建一個虛擬的
康威生命游戲
(Conway's Game of Life),它通過應(yīng)用一些簡單的規(guī)則,對跨越多代的細(xì)胞的生命和死亡進(jìn)行模擬。
    編碼活動一共會舉辦五或六場,每一場的時間是45分鐘。中間的休息時間可以進(jìn)行交談、用餐和飲酒,整場活動的時間需要一整天。
    在具體過程中需要同時應(yīng)用結(jié)對編程和測試驅(qū)動開發(fā)方式。
    在每場編碼活動結(jié)束后,所有的代碼必須被刪除,并且在下一場活動開始時要更換拍檔。
    參與者并不一定要在活動中實(shí)現(xiàn)一個完整的解決問題的方案。
    可以在活動中加入不同的限制(例如:“方法不能夠返回傷任何值”、“不可交談”等等),因此,你可以從不同的角度對問題空間本身、以及與他人合作的方式進(jìn)行重新探索與解讀。

雖然這種推薦的coderetreat形式相當(dāng)普遍,但也存在著許多可以靈活變通的地方,這取決于coderetreat的組織者打算強(qiáng)調(diào)參與者對于哪一方面的理解。比方說,在
遺留coderetreat
中,測試是針對一段“糟糕”的現(xiàn)有代碼片段進(jìn)行創(chuàng)建的。盡管如此,對以上這些指導(dǎo)原則的選擇有著很好的理由,因此,如果你希望活動不要丟失原本的好處,為了避免這樣的風(fēng)險(xiǎn),最好還是不要過于偏離這些指導(dǎo)原則。當(dāng)然,對其中某一方面的改動不會減弱活動的基本原則的,那就是使用一個完全不同的kata(例如選擇生命游戲之外的項(xiàng)目)。選擇要活動中要加入哪些限制條件同樣也完全取決于組織者。比方說,第一場 活動中可以選擇完全不加入任何限制,或者可以在某場活動的中途加入某種新限制條件。每種限制所造成的難度可能是完全不同的,這取決于參與者本身的經(jīng)驗(yàn)。比方如,如果在學(xué)生中間舉辦coderetreat活動,我們會選擇只加入一些較簡單的限制條件,例如“ping pong”,它指的是每組中的成員之一(請記住,我們始終進(jìn)行結(jié)對編程!)去編寫測試(只編寫測試代碼),而另一名成員將努力讓測試通過(讓兩位成員在活動中互換角色也是一個不錯的主意)。
在coderetreat網(wǎng)站上,有許多建議提出了各種不同類型的限制條件。比方說,對于一組更資深的參與者來說,你可以嘗試
TDD as If you mean it
方式,這是一種由Keith Braithwaite最早提出的一種高級測試驅(qū)動開發(fā)實(shí)踐。另一種常見的限制條件是“不得使用可變的狀態(tài)。”不過你也要當(dāng)心,有些限制條件是有問題的,它們可能會使編碼過程陷入停頓而無法繼續(xù),稍后我們會對此展開討論。
你可能已經(jīng)注意到了,標(biāo)準(zhǔn)的指導(dǎo)原則中并沒有提到編程語言方面的限制。有些時間,活動中可能會提議使用某種語言,但大多數(shù)的coderetreat活動都會讓參與者打開他們自己的筆記本電腦、使用任何他們所熟悉的語言和測試框架。因此,在一場coderetreat活動中常常會出現(xiàn)多種不同的語言,這也意味著在結(jié)對的過程中,你可能會發(fā)現(xiàn)你完全不了解你的拍檔所使用的語言。這種現(xiàn)象會讓你感到興奮或是受挫,以及程度如何,完全取決于你個人的偏好,以及你的拍檔是怎樣的人。不過,這一點(diǎn)或許也對我們使用的語言提出了一個疑問,即它能夠在多大程度上表現(xiàn)出我們的設(shè)計(jì)思路。
Coderetreat帶來的好處
那么,參與coderetreat活動到底有什么好處呢?總的來說,它的好處在于你能夠發(fā)掘出作為一個程序員的真實(shí)水平,而無需擔(dān)心在工作中常常面對的項(xiàng)目期限和上司的期望。因?yàn)闆]有人強(qiáng)迫你必須在一次活動中完成一個解決方案,因此你可以自由地發(fā)掘新的思路,并對自己處理該問題的方式進(jìn)行反思。因?yàn)槟愕呐臋n總是在變換,并且每場活動中總是出現(xiàn)新的、具有挑戰(zhàn)性的限制條件,經(jīng)常會促使你以不同的方式看待并解決問題。
對于coderetreat來說,回顧是必不可少的重要環(huán)節(jié)。在每場活動之后都會進(jìn)行簡單的回顧,而在全天的活動結(jié)束后,每個參與者都會面對以下三個問題:
    如果今天你學(xué)到了某些東西,那么你學(xué)到了什么?
    如果今天有什么事讓你感到吃驚,那是什么樣的事?
    如果你打算在下次活動中進(jìn)行某些改變,那是什么樣的改變?

Coderetreat活動應(yīng)該對于提高你作為軟件從業(yè)者的水平起到幫助,并幫助你深刻地理解自己和其他人的實(shí)踐能力。本質(zhì)上,當(dāng)你結(jié)束一次coderetreat活動時,你應(yīng)該成為一個更加優(yōu)秀的,或者至少是更加具有思考能力和反思能力的開發(fā)者。
在過去的幾年中,我與我的一些同事共同參與并舉辦了一些coderetreat活動,并且也通過多種渠道從coderetreat的參與者那里獲取到了大量的反饋,不過主要的渠道還是在線調(diào)查問卷,因?yàn)槿虻拈_發(fā)者都可以參與這種問卷。進(jìn)行這種調(diào)查的原因之一在于,我們想看看,將coderetreat作為一種提高參與者對軟件設(shè)計(jì)的認(rèn)識這一思想是否得到了證明。我們也希望了解能夠通過哪些方式改善coderetreat,或者至少是對標(biāo)準(zhǔn)的指導(dǎo)原則作出一些有意義的變化。
從coderetreat參與者那里收到的問卷調(diào)查中,我們看到人們的反饋非常積極,他們普遍認(rèn)識coderetreat是一種很有價值的實(shí)踐經(jīng)驗(yàn)。以下這些典型的回復(fù)令我們感到相當(dāng)振奮。
    這是一次令人難忘的體驗(yàn),我希望能夠馬上再次參加。我會把它推薦給軟件開發(fā)組織。在活動結(jié)束后我感到筋疲力盡了,感覺就像是進(jìn)行了一次大腦運(yùn)動。
    它為我了解其他人如何看待這些問題和解決方案提供了一次良好的機(jī)會。
    Coderetreat太棒了。經(jīng)過最近幾次活動,我覺得對于自己的專業(yè)度具有了一種責(zé)任感,而且我經(jīng)常從中獲得比我想象中更大的價值。
    Coderetreat一定要成為面試過程中的一部分。J

以上這些留言來自于專業(yè)的開發(fā)者,但新手也表現(xiàn)出了同樣的熱情,正如以下這些來自于還是學(xué)生的參與者的留言所表現(xiàn)的一樣:
    這是一次優(yōu)秀的活動,它讓學(xué)生們?yōu)閷碜龊昧藴?zhǔn)備
    這種活動對我產(chǎn)生的作用連我自己都感到吃驚
    它確實(shí)對我產(chǎn)生了很大的幫助,我也從中獲得了許多樂趣
    參與的次數(shù)越多,越容易上手,并且還能收獲不同的點(diǎn)子,這真是太棒了

根據(jù)從全球各地收集到的coderetreat活動參與者的反饋來看,很顯然它已經(jīng)成功地幫助參與者看到,對于某個相同的問題,存在著多種不同的設(shè)計(jì)方案。實(shí)際上,通過人們對于那些標(biāo)準(zhǔn)的回顧性問題的回應(yīng),也可以了解到參與者從coderetreat活動中得到了哪些收獲。在所有回應(yīng)中,最常見的有以下幾個方面的收獲:
    TDD 與(或)單元測試
    其它語言
    結(jié)對編程
    處理相同問題的不同方式
    設(shè)計(jì)

很顯然,對于設(shè)計(jì)與解決問題這方面的回應(yīng)僅次于對于敏捷開發(fā)中的基本元素的回應(yīng)。有一個結(jié)論或許令人感到有些吃驚,那就是許多參與者在活動之間在TDD和結(jié)對編程方面的經(jīng)驗(yàn)還十分有限。不過,從調(diào)查問卷的統(tǒng)計(jì)中可以看到,有35%的參與者在軟件開發(fā)方面的經(jīng)驗(yàn)少于五年,而超過65%的參與者的經(jīng)驗(yàn)少于十年,因此活動參與者的主體來自于學(xué)生或初級程序員。
關(guān)于參與者在哪些方面最感到吃驚,以下的回應(yīng)是最常見的答案:
    TDD
    編程語言與范式
    與他人合作
    樂趣
    限制條件所帶來的影響

從這些回應(yīng)中,我們可以認(rèn)為coderetreat起到了良好的作用。人們聚在一起,收獲了令他們感到吃驚的樂趣,共同學(xué)習(xí)敏捷開發(fā)中的某些核心技術(shù)(TDD、結(jié)對編程),并且通過在不同的設(shè)計(jì)限制條件下開展工作,探索出了尋找解決某個編程問題的解決方案的不同方式。不過,改善的空間始終是存在的。畢竟,如果我們不能夠保持總是尋求對設(shè)計(jì)進(jìn)行重構(gòu)的機(jī)會,并且擁抱變化,那我們就無法成為真正的敏捷開發(fā)者。因此,coderetreat社區(qū)正在產(chǎn)生變化,從一種單一的形式轉(zhuǎn)變?yōu)槟承⿲W⒂谔囟愋蛦栴}的活動。其中包括遺留系統(tǒng)的coderetreat(前文已經(jīng)提到過這一形式),以及函數(shù)式編程的coderetreat。我們相信,探索更有針對性的coderetreat活動是很有價值的。
Coderetreat有哪些不足之處?
雖然coderetreat本身是個很出色的概念,并且大多數(shù)參與者都從中收獲了樂趣和價值,但有些方面或許還可以進(jìn)行改進(jìn)。在整個活動中,我們觀察到了以下一些情況:
    盡量事先已經(jīng)提供了大量的信息,但參與者還是經(jīng)常搞不清楚要做些什么,或是如何開始。
    雖然已經(jīng)表示過所有代碼都要按照TDD的方式進(jìn)行編寫,但要讓每個人真正接受這種方式,往往還是要在一次活動之后。
    當(dāng)你參與了多次coderetreat活動之后,你會希望所解決的問題不再是針對新手的。具體地說,你可能已經(jīng)對生命游戲感到厭倦了。
    雖然coderetreat有意識地專注于簡單設(shè)計(jì)的四個原則,但未必能以一種明確的方式表現(xiàn)出這些原則。
我們從反饋中也注意到,一次coderetreat活動的舉辦方式,將對整個活動的成功起到巨大的影響,正如某位參與者所說的一樣:
對于coderetreat活動日的成功,以及參與者能夠從中得到多少收獲,舉辦者會起到巨大的影響。
不過,我們也不認(rèn)為coderetreat的成功完全取決于舉辦者本身的技能與個性,它還取決于coderetreat活動的組織方式。以上所提到的四個可改善之處都或多或少與coderetreat的組織有關(guān)聯(lián)。
首先來看一下第一個問題,即參與者經(jīng)常會表現(xiàn)得毫無準(zhǔn)備。好吧,你可以選擇事先將所有信息都發(fā)布在網(wǎng)站上,并提醒參與者做好準(zhǔn)備,但它起不了多大的作用。畢竟,你是在要求他們在一星期的工作之后,犧牲一個周六的時間進(jìn)行參與。參與者來到這里的目的是從中獲得樂趣,而不是參與一次測試,并且為了這次測試預(yù)先進(jìn)行準(zhǔn)備。你能做到的唯一一件事就是,作為舉辦者,為你的工作做好準(zhǔn)備,讓參與者能夠盡快上手,并且在簡單的過場后快速進(jìn)入狀態(tài)。
實(shí)際上,我們發(fā)現(xiàn)這一點(diǎn)將直接導(dǎo)致第二點(diǎn)問題的存在,即讓每個參與者使用測試驅(qū)動開發(fā)。調(diào)查表明,在第一場活動中,有超過10%的小組完全不寫任何測試!實(shí)際上,只有進(jìn)行到第三場活動時,才能做到讓每個參與者使用TDD。我們相信,如果能夠提供一個初始的測試樁(Stub),就能夠解決準(zhǔn)備不足和TDD的接受過慢的情況,正如我們上面所描述的一樣。
解決第三個問題是比較困難的,雖然我們已經(jīng)為coderetreat中要解決的問題提出了一系列建議,包括業(yè)務(wù)類型的問題,比如鍍金玫瑰(Gilded Rose)問題,它是有關(guān)于某種產(chǎn)品的庫存系統(tǒng),其中包含了銷售日期等信息;或是模擬一個輪胎壓力監(jiān)控或比賽計(jì)分系統(tǒng)。這些問題都無法做到像生命游戲那樣:問題本身很簡單,而面對的挑戰(zhàn)很多。某個參與者也提到,康威游戲的算法給他留下了深刻的印象。
我是第一次接觸【生命游戲】,并且十分驚訝地發(fā)現(xiàn),一個簡單的算法竟然能夠產(chǎn)生如此神奇的效果。

不過,很明顯,如果coderetreat活動打算進(jìn)一步壯大與成長,那我們就不能夠始終停留在生命游戲這一問題上,而必須探索一些新的點(diǎn)子。或許
Boids Flocking算法模型
是一個不錯的選擇,雖然我們還沒有在任何一次活動中嘗試過這個點(diǎn)子。
第四個問題是讓我們感到最有挑戰(zhàn)性的一個問題。我們?nèi)绾伪WCcoderetreat活動能夠像它本身所宣稱的那樣,強(qiáng)調(diào)簡單設(shè)計(jì)的四個原則呢?我們的研究表示,這一點(diǎn)或許是標(biāo)準(zhǔn)coderetreat結(jié)構(gòu)中最弱的一個環(huán)節(jié)。雖然有許多問卷調(diào)查的回應(yīng)都表示出了通用意義上的設(shè)計(jì)的重要性,但很少有回應(yīng)表示出他們對簡單設(shè)計(jì)的四個原則有所收獲,至少沒有明確地表明這一點(diǎn)。多數(shù)的回應(yīng)顯得更為廣泛,例如以下這一條。
簡化的問題能夠讓你專注于使你的解決方案能夠運(yùn)行,并且會產(chǎn)生更清晰易懂的代碼
對于設(shè)計(jì)問題的回應(yīng)太少,或許意味著coderetreat在某些方面應(yīng)當(dāng)表現(xiàn)得更為有效。
重構(gòu)coderetreat
通過對全球的coderetreat參與者進(jìn)行的問卷調(diào)查,我們已經(jīng)致力于對應(yīng)那些可能會降低該活動的參與者體驗(yàn)的問題。我們組織了一次包含四場活動的coderetreat,致力于更明確地應(yīng)對簡單設(shè)計(jì)中的四個規(guī)則,同時也確保讓參與者能夠更容易地開展工作,并實(shí)踐TDD。
在第一場活動中,為了確保‘讓測試驅(qū)動代碼’,我們?yōu)樗袇⑴c者提供了一個完整的單元測試集,以及一個推薦使用的單元測試集。我們明確地要求參與者使用測試驅(qū)動開發(fā)技術(shù)完成余下的代碼。在第二場活動中,為了鼓勵參與者將他們的代碼改得更加清晰,我們提供了一個待測部件,以及部分測試,但有意地將這兩者的代碼質(zhì)量寫得很低。我們要求參與者對它們進(jìn)行重構(gòu)(當(dāng)然,依然要應(yīng)用測試驅(qū)動開發(fā)原則)。在第三場活動中,我們將應(yīng)用某個設(shè)計(jì)原則,即移除重復(fù)代碼。我們依然會提供一個待測部件和一些單元測試,其中的代碼包含了某些不必要的重復(fù),并且要求參與者在重構(gòu)過程中消除這些重復(fù)。最后,在第四場活動中,我們會使用一些遺留代碼(將活動的方向轉(zhuǎn)變?yōu)檫z留coderetreat),并且沒有任何單元測試。代碼中包含了某些不必要的特性,參與者需要在重構(gòu)過程中移除它們。
最終的結(jié)果令我們非常滿意,尤其是整個小組能夠快速地上手并實(shí)際使用TDD。當(dāng)然,我們并不是說每個人都應(yīng)該采取同樣的方式舉辦coderetreat。有些人可能會覺得,我們的方式已經(jīng)偏離了coderetreat常見的形態(tài),已經(jīng)不是一種真正的coderetreat了。但實(shí)際上,我們遵循了所有的通用原則。我們所建議的是,如果你是一位開發(fā)者,并且能夠找到一個在你附近舉辦的coderetreat活動,那么就不要錯過這次機(jī)會。而如果你不具備這種條件,那么我們建議你自己搞一次這樣的活動。這種活動不一定必須是公開的,如果你的組織中的開發(fā)者夠多(如果少于10人,就會減少可能的結(jié)隊(duì)數(shù)量),那么也可以在自己的住所舉辦一次(前提是你的房間要足夠大……)。我們就成功地在住所辦過由我們的學(xué)生參與的coderetreat活動。
如果你確實(shí)打算自己舉辦一次coderetreat活動,我們有以下一些建議,至少在首次活動中可以嘗試一下。
不要偏離本文之前所提到的標(biāo)準(zhǔn)形式,除了以下一些建議以外。
    在首次coderetreat將生命游戲作為kata,但可以考慮在接下來的活動中選擇其它kata。你甚至可以選擇在一次coderetreat中挑選多個kata。
    如果可能的話,事先確定一種統(tǒng)一的編程語言,確保你的參與者們在注冊時都了解這一信息。
    如果可能的話,預(yù)先在房間中的所有電腦上都安裝好必要的語言和測試工具(這一點(diǎn)大概只適用于在住所內(nèi)舉辦coderetreat)。
    先提供第一個測試,并且為第二個測試提供建議。如果你的coderetreat支持多種語言,不一定要以代碼的方式提供它們,偽代碼就足夠了。
    不要選擇一些有可能會破壞參與者的動力的限制條件。比方說,如果你為新手程序員設(shè)定了“不允許使用循環(huán)和條件語句”這樣的限制,那他有可能會因此裹足不前。另一方面,有經(jīng)驗(yàn)的開發(fā)者會享受挑戰(zhàn)。請考慮一下你的參與者的情況,如果有所疑慮,不妨讓他們自行選擇合適的限制條件。
    留下足夠的時間以進(jìn)行討論和反饋,讓他們有機(jī)會從其他人身上進(jìn)行學(xué)習(xí)。不要因?yàn)榛顒拥臅r間太長,就壓縮回顧的時間。

我們希望,如果你積極參與coderetreat社區(qū)的活動,那么你應(yīng)該盡量找到某些方法,讓它使你對軟件開發(fā)感到更有樂趣,并且更有干勁。以下是我們的一位參與者的留言:
我會尋找更多的樂趣,并進(jìn)行更多的嘗試。我也會嘗試?yán)眠@次機(jī)會提升自己的水平,而不是滿足于自己已經(jīng)習(xí)慣的工作。
關(guān)于作者

Dr David Parsons是新西蘭-奧克蘭梅西大學(xué)(Massey University)信息技術(shù)系的副教授。除了進(jìn)行學(xué)術(shù)研究之外,他也經(jīng)常為軟件教育協(xié)會和Knowledgehut提供專業(yè)課程的培訓(xùn)。David在英國開始了自己的職業(yè)生涯,從那之后,他作為教育家/培訓(xùn)師、研究者和從業(yè)者,踏足了整個歐洲、北美和大洋洲。在2003年移居到新西蘭之前,他在Valtech公司Emerging Technologies部門擔(dān)任總監(jiān),這是一家總部位于倫敦的國際顧問公司。他的從業(yè)經(jīng)歷包括在南安普頓索倫特大學(xué)(Southampton Solent University)擔(dān)任高級講師,在位于渥太華的公司The Object People里擔(dān)任培訓(xùn)師和顧問,在BEA Systems的國際教育部擔(dān)任首席技術(shù)專家。他也是有關(guān)計(jì)算機(jī)編程和web應(yīng)用程序開發(fā)方面的書籍的作者,并且對于敏捷軟件開發(fā)實(shí)踐進(jìn)行了深入的鉆研。他于2014年在IEEE Software雜志上首先發(fā)表了有關(guān)coderetreat的學(xué)術(shù)研究報(bào)告。他還是英國電腦協(xié)會(British Computer Society)以及新西蘭IT專家學(xué)院(New Zealand Institute of IT Professionals)的一位專業(yè)成員。

查看英文原文:
Refactoring Coderetreats: In Search of Simple Design
轉(zhuǎn)自
http://www.infoq.com/cn/articles/refactoring-coderetreats?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global
                       
                               
                    
                               
                       
                       
                       
                                時間:2015-04-22 21:34
來源:InfoQ
  作者:郭蕾
  
原文鏈接

本文來自ChinaUnix新聞頻道,如果查看原文請點(diǎn):http://news.chinaunix.net/opensource/2015/0423/3243449.shtml




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2