當(dāng)我開(kāi)始我的數(shù)據(jù)科學(xué)家職業(yè)生涯時(shí),我并沒(méi)有真正的工作流程张抄。在公司丛晦、潛在客戶(hù)和我之間,沒(méi)有人知道在“現(xiàn)實(shí)”世界中實(shí)施統(tǒng)計(jì)模型或機(jī)器學(xué)習(xí)方法意味著什么涩馆。但是每個(gè)人都對(duì)這個(gè)“大數(shù)據(jù)”感興趣行施,
所以我們很快就開(kāi)始做工作,但沒(méi)有明確我要做什么魂那。當(dāng)我們遇到一個(gè)看起來(lái)像一個(gè)項(xiàng)目的東西時(shí)蛾号,我就投入了進(jìn)去。為了快速交付結(jié)果涯雅,我將數(shù)據(jù)提取加載到 R 中鲜结,并開(kāi)始在其上應(yīng)用各種不同的模型和算法。結(jié)果最終出現(xiàn)在 R 腳本的代碼注釋中活逆,這些腳本通常會(huì)增長(zhǎng)到數(shù)百甚至數(shù)千行精刷。我擁有的唯一系統(tǒng)是按順序?qū)δ_本進(jìn)行編號(hào)。很快蔗候,我發(fā)現(xiàn)自己置身于數(shù)十個(gè)腳本和中間結(jié)果的數(shù)據(jù)導(dǎo)出中怒允,這些中間結(jié)果不再可重現(xiàn)。我無(wú)限期運(yùn)行的 R 會(huì)話有時(shí)被錯(cuò)誤地關(guān)閉锈遥,或者它崩潰了(隨著使用的內(nèi)存增加误算,這必然會(huì)發(fā)生)仰美。發(fā)生這種情況時(shí)迷殿,我花了數(shù)小時(shí)甚至數(shù)天來(lái)重新創(chuàng)建結(jié)果儿礼。截止日期是一場(chǎng)噩夢(mèng);到那時(shí)為止我所做的一切都必須在最后一刻加載庆寺、加入和比較蚊夫。通常情況下,模型結(jié)果與之前提到的不同懦尝,沒(méi)有任何跡象表明我之前弄錯(cuò)了知纷,我現(xiàn)在使用了錯(cuò)誤的數(shù)據(jù),或者引入了其他一些錯(cuò)誤源陵霉±旁回想起來(lái),我不知道一個(gè)好的工作流程對(duì)于做更大的數(shù)據(jù)科學(xué)項(xiàng)目的重要性踊挠。
敏捷的起源 (The Origins of Agile)
敏捷軟件開(kāi)發(fā)不是關(guān)于如何完成工作的特定方法乍桂、流程或處方。相反效床,它是一套信念睹酌、一種哲學(xué),應(yīng)該指導(dǎo)軟件開(kāi)發(fā)團(tuán)隊(duì)做出最佳決策剩檀。敏捷當(dāng)然不是憑空產(chǎn)生的憋沿,它是對(duì)當(dāng)時(shí)無(wú)處不在的稱(chēng)為瀑布(Waterfall)的方法的一種反應(yīng)。
在 Waterfall 中沪猴,大型軟件項(xiàng)目被劃分為特定的階段辐啄,每個(gè)階段都應(yīng)該完成,然后才能開(kāi)始下一階段运嗜。隨后的這些階段是問(wèn)題分析壶辜、設(shè)計(jì)項(xiàng)目、編寫(xiě)軟件洗出、測(cè)試士复,最后是實(shí)施和維護(hù)。
Waterfall 的目標(biāo)是提供完整且無(wú)故障的軟件翩活。Waterfall 項(xiàng)目的重中之重是文檔阱洪,其中詳細(xì)記錄了軟件的每個(gè)要求和方面。潛在的信念是菠镇,當(dāng)軟件的所有方面都預(yù)先決定時(shí)冗荸,它的編寫(xiě)速度更快,質(zhì)量更高利耍。
然而蚌本,使用瀑布方法完成的項(xiàng)目有一個(gè)主要的缺陷盔粹。它們可能需要很長(zhǎng)時(shí)間才能完成。順序性和完整性的結(jié)合可能會(huì)導(dǎo)致項(xiàng)目在交付軟件之前持續(xù)多年程癌。每次在后期階段中發(fā)現(xiàn)錯(cuò)誤或不完整時(shí)舷嗡,項(xiàng)目就會(huì)返回上一階段進(jìn)行修復(fù)。由于整個(gè)過(guò)程持續(xù)時(shí)間長(zhǎng)嵌莉,經(jīng)常出現(xiàn)最終結(jié)果不再適合不斷變化的市場(chǎng)的情況进萄。問(wèn)題分析可能是幾年前完成的,同時(shí)問(wèn)題已經(jīng)發(fā)生了變化锐峭。
在九十年代中鼠,人們對(duì)笨重的瀑布產(chǎn)生了幾種反應(yīng)。軟件開(kāi)發(fā)領(lǐng)域的許多有影響力的思想家開(kāi)始探索編寫(xiě)軟件的不同方式沿癞。建議采用替代流程援雇,例如 Scrum 和 Xtreme 編程。最終椎扬,2001 年惫搏,一群 17 人聚集在猶他州,起草了敏捷軟件開(kāi)發(fā)宣言盗舰。他們簡(jiǎn)短聲明是:
我們正在通過(guò)做和幫助他人來(lái)發(fā)現(xiàn)更好的軟件開(kāi)發(fā)方法晶府。通過(guò)這項(xiàng)工作,我們開(kāi)始重視:
個(gè)人和交互勝過(guò)流程和工具
工作軟件優(yōu)于綜合文檔
客戶(hù)協(xié)作而非合同談判
響應(yīng)變化而不是遵循計(jì)劃
敏捷思維通過(guò)識(shí)別瀑布式思維中的許多缺陷钻趋,對(duì)軟件設(shè)計(jì)采用了截然不同的方法川陆。首先,在開(kāi)始編寫(xiě)代碼之前不可能考慮到復(fù)雜設(shè)計(jì)和架構(gòu)的所有方面蛮位。相反较沪,軟件必須有機(jī)地增長(zhǎng)。其次失仁,客戶(hù)通常并不真正知道他們想要從產(chǎn)品中得到什么尸曼,直到他們開(kāi)始與之互動(dòng)。從法律上講萄焦,在上班前檢查所有方面可能是個(gè)好主意控轿,但這不會(huì)讓客戶(hù)滿(mǎn)意。最后拂封,如果在交付工作產(chǎn)品之前需要很長(zhǎng)時(shí)間茬射,客戶(hù)和利益相關(guān)者將失去興趣并失去項(xiàng)目將完成的信心。
宣言附有源自這些價(jià)值觀的十二項(xiàng)原則冒签。它們比四個(gè)值更適用在抛,因此是做出選擇時(shí)的主要準(zhǔn)則。它們是(編號(hào)由我添加):
我們的首要任務(wù)是通過(guò)早期和持續(xù)交付有價(jià)值的軟件來(lái)滿(mǎn)足客戶(hù)萧恕。
歡迎不斷變化的需求刚梭,即使是在開(kāi)發(fā)后期肠阱。敏捷流程利用變化來(lái)獲得客戶(hù)的競(jìng)爭(zhēng)優(yōu)勢(shì)。
頻繁地交付可工作的軟件朴读,從幾周到幾個(gè)月不等屹徘,優(yōu)先考慮較短的時(shí)間范圍。
業(yè)務(wù)人員和開(kāi)發(fā)人員必須在整個(gè)項(xiàng)目中每天一起工作磨德。
圍繞積極進(jìn)取的個(gè)人建立項(xiàng)目缘回。為他們提供所需的環(huán)境和支持,并相信他們會(huì)完成工作典挑。
向開(kāi)發(fā)團(tuán)隊(duì)和在開(kāi)發(fā)團(tuán)隊(duì)內(nèi)部傳達(dá)信息的最有效和最有效的方法是面對(duì)面的交談。
工作軟件是進(jìn)度的主要衡量標(biāo)準(zhǔn)啦吧。
敏捷流程促進(jìn)可持續(xù)發(fā)展您觉。贊助商、開(kāi)發(fā)商和用戶(hù)應(yīng)該能夠無(wú)限期地保持恒定的步伐授滓。
對(duì)卓越技術(shù)和良好設(shè)計(jì)的持續(xù)關(guān)注可提高敏捷性琳水。
簡(jiǎn)單性——最大化未完成工作量的藝術(shù)——是必不可少的。
最好的架構(gòu)般堆、需求和設(shè)計(jì)來(lái)自自組織的團(tuán)隊(duì)在孝。
團(tuán)隊(duì)定期反思如何提高效率,然后相應(yīng)地調(diào)整和調(diào)整其行為淮摔。
敏捷(Agile)方法
我們了解到私沮,敏捷與其說(shuō)是一種工作流程或一種方法,不如說(shuō)是一種在必須做出選擇時(shí)指導(dǎo)我們的哲學(xué)和橙。敏捷提倡嚴(yán)格遵循工作流程至關(guān)重要仔燕,我們應(yīng)該持續(xù)監(jiān)控我們的工作方式是否最適合遵循敏捷價(jià)值觀和原則。如果不是這種情況魔招,則應(yīng)調(diào)整工作流程晰搀。這并不意味著沒(méi)有與敏捷相關(guān)的工作流。
Scrum
最著名和應(yīng)用最多的工作流是 Scrum办斑。它開(kāi)發(fā)于八十年代末和九十年代初外恕,是一種久經(jīng)考驗(yàn)的方法論。Scrum 與 sprints 一起工作乡翅,設(shè)置時(shí)間單位鳞疲,在此之后可交付的產(chǎn)品應(yīng)該準(zhǔn)備好。大多數(shù)團(tuán)隊(duì)使用兩周的沖刺峦朗,但它們也可以更短或更長(zhǎng)時(shí)間建丧。團(tuán)隊(duì)是完全自組織的,他們決定在下一個(gè)沖刺中要做什么以及如何做波势。要完成的任務(wù)都收集在產(chǎn)品日志中翎朱,它們的制定方式都清楚地表明它們將如何為產(chǎn)品增加價(jià)值橄维。這些用戶(hù)故事采用“作為角色用戶(hù),我想要操作/功能拴曲,這樣我才能受益”的形式”争舞。假設(shè)您運(yùn)營(yíng)的網(wǎng)站向所有客戶(hù)發(fā)送時(shí)事通訊,但目前還沒(méi)有選擇退出的選項(xiàng)澈灼。創(chuàng)建這樣一個(gè)功能的用戶(hù)故事可以是“作為訂閱用戶(hù)竞川,我希望能夠選擇退出時(shí)事通訊,這樣我只在我想要的時(shí)候接收信息”叁熔。
Scrum Master的職責(zé)是確保團(tuán)隊(duì)制定沖刺目標(biāo)委乌。為此,她必須有一雙警惕的眼睛荣回。如果銷(xiāo)售經(jīng)理想要完成某件事并試圖說(shuō)服咖啡機(jī)的開(kāi)發(fā)人員之一遭贸,他會(huì)被親切地重定向到產(chǎn)品所有者,以將其記入待辦事項(xiàng)心软。如果一些團(tuán)隊(duì)成員缺乏一些必要的技能壕吹,她會(huì)和他們一起制定如何獲得這些技能的計(jì)劃。此外删铃,她將是不同 Scrum 會(huì)議(稱(chēng)為儀式)的組織者和協(xié)調(diào)者耳贬。
該產(chǎn)品所有者負(fù)責(zé)的產(chǎn)品看起來(lái)像什么。他監(jiān)控客戶(hù)的需求和愿望猎唁,因此他的主要職責(zé)之一是利益相關(guān)者管理咒劲。他將功能請(qǐng)求和改進(jìn)計(jì)劃轉(zhuǎn)化為用戶(hù)故事。因此胖秒,他維護(hù)產(chǎn)品日志缎患,按重要性對(duì)故事進(jìn)行排序。
產(chǎn)品負(fù)責(zé)人決定應(yīng)該做什么阎肝,開(kāi)發(fā)團(tuán)隊(duì)(可能還有其他專(zhuān)家)決定如何做挤渔。它是完全自組織的。在每個(gè) sprint 開(kāi)始時(shí)风题,團(tuán)隊(duì)都會(huì)評(píng)估哪些故事可以在即將到來(lái)的 sprint 中完成判导。團(tuán)隊(duì)成員通常有不同的專(zhuān)長(zhǎng),但故事的完成是整個(gè)團(tuán)隊(duì)的責(zé)任沛硅。
四個(gè)儀式(會(huì)議)是 Scrum 循環(huán)的一部分眼刃。在 sprint 的開(kāi)始是sprint 計(jì)劃,其中定義了故事的范圍并確定了已完成的定義摇肌。在沖刺期間擂红,每天至少有一次站立會(huì)議,團(tuán)隊(duì)成員在會(huì)上快速分享他們正在做的事情以及彼此的需求围小。沖刺完成后昵骤,團(tuán)隊(duì)會(huì)組織沖刺評(píng)審树碱,向團(tuán)隊(duì)以外的人員展示已完成的工作。最后是回顧变秦,團(tuán)隊(duì)討論上次沖刺中哪些地方做得好成榜,哪些地方可以改進(jìn)。
看板 Kanban
板比 Scrum 輕得多蹦玫,流程也少得多赎婚。它不適用于固定的時(shí)間單位,但與 Scrum 一樣樱溉,它旨在實(shí)現(xiàn)連續(xù)的流程挣输。就像在 Scrum 中一樣,要執(zhí)行的任務(wù)在用戶(hù)故事中制定饺窿,但承諾一次只針對(duì)一個(gè)故事歧焦。故事收集在積壓日志中,并按重要性不斷排序肚医。每次完成一個(gè)故事時(shí),下一個(gè)最相關(guān)或最緊迫的故事就會(huì)開(kāi)始向瓷。
中央是看板肠套,可以是物理的,也可以是虛擬的猖任,至少有以下幾列:to do你稚、doing和done。這可以根據(jù)團(tuán)隊(duì)的愿望和需求量身定制朱躺。與 Scrum 不同刁赖,產(chǎn)品負(fù)責(zé)人沒(méi)有正式的角色,盡管讓某人處理傳入的請(qǐng)求仍然很有用长搀。這可以是指定人員或同時(shí)從事開(kāi)發(fā)工作的團(tuán)隊(duì)成員宇弛。團(tuán)隊(duì)不應(yīng)一次專(zhuān)注于太多任務(wù);所有被拉出來(lái)做的事情都應(yīng)該盡快完成源请。這確保了重點(diǎn)始終放在前面最重要的任務(wù)上枪芒,并且將多任務(wù)處理降至最低。
團(tuán)隊(duì)可以對(duì)每列中可以包含的故事數(shù)量設(shè)置上限谁尸。
中心指標(biāo)是完成一項(xiàng)任務(wù)通常需要的時(shí)間舅踪,即周期時(shí)間。有效的看板團(tuán)隊(duì)周期時(shí)間短良蛮,他們能夠快速完成任務(wù)抽碌。較短的周期時(shí)間使團(tuán)隊(duì)能夠自信地估計(jì)何時(shí)完成工作。就像在 Scrum 中一樣决瞳,整個(gè)團(tuán)隊(duì)負(fù)責(zé)完成一個(gè)故事货徙,而不僅僅是“指定”的工作人員左权。為了盡快完成任務(wù),團(tuán)隊(duì)成員可能會(huì)不時(shí)完成一些超出他們舒適區(qū)的任務(wù)破婆。
高度結(jié)構(gòu)化的 Scrum 和輕量級(jí)看板是兩個(gè)工作流程涮总,使團(tuán)隊(duì)更有可能遵循敏捷原則。他們都旨在持續(xù)發(fā)布工作軟件祷舀,而不是致力于一個(gè)主要版本瀑梗。他們還專(zhuān)注于您現(xiàn)在正在處理的部分,Scrum 通過(guò)修復(fù)在 sprint 中完成的故事裳扯,而看板限制了團(tuán)隊(duì)正在處理的故事數(shù)量抛丽。但也有一些顯著的差異。在 Scrum 中饰豺,團(tuán)隊(duì)承諾在此 sprint 中選擇要完成的故事亿鲜,并且建筑物必須先著火,然后才能進(jìn)行不在 sprint 中的工作冤吨≥锪看板只對(duì)正在進(jìn)行的故事數(shù)量規(guī)定了限制,先完成你開(kāi)始的事情漩蟆,然后開(kāi)始新的事情垒探。然而,為了接下來(lái)的故事怠李,一切都可能隨時(shí)改變圾叼。
這兩種方法都取得了巨大的成功,重要的是要記住它們是達(dá)到目的的手段捺癞,而不是宗教夷蚊。敏捷價(jià)值觀和原則應(yīng)該是主要的指導(dǎo)方針,在選擇其中一個(gè)工作流程時(shí)髓介,你這樣做是因?yàn)檫@是以敏捷方式工作的最佳方式惕鼓,因?yàn)樗钸m合給定的情況。團(tuán)隊(duì)?wèi)?yīng)該自己決定什么是最好的工作方式版保,并應(yīng)該隨著情況的發(fā)展監(jiān)控選擇是否仍然是最好的呜笑。然而,一般來(lái)說(shuō)彻犁,當(dāng)團(tuán)隊(duì)正在完成項(xiàng)目時(shí)使用 Scrum 更有意義叫胁,而看板的靈活性最適合處理大量傳入請(qǐng)求的服務(wù)團(tuán)隊(duì)。