<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          程序員自我修煉:《匠藝整潔之道》讀書總結(jié)

          共 6359字,需瀏覽 13分鐘

           ·

          2022-06-07 22:52


          作為技術(shù)人員的我,心中始終有一些困惑和疑慮。我這幾天翻看了鮑勃大叔的封山之作《匠藝整潔之道》,其中的部分困惑和疑慮終于得到了部分答案。下面是我的一些總結(jié)和思考,如果其中一些觀點(diǎn)有失偏頗,歡迎大家一起來探討。


          下圖是存在我心中的一些困惑和疑慮,鮑勃大叔從紀(jì)律、標(biāo)準(zhǔn)和職業(yè)操守這幾個(gè)地方給了我答案。

          上圖中我們看到所有的人和問題都圍繞著軟件,同時(shí)我相信我們很多人都聽過軟件這個(gè)詞和行業(yè),那么它到底是什么意思呢?


          1. 什么是軟件

          軟件 software 中的第一個(gè)單詞是 soft,所以軟件應(yīng)該是柔軟的,也就是容易改動(dòng)的。如果我們不期望它容易改動(dòng),那就是硬件 hardware。


          我們發(fā)明軟件的目的是為了使機(jī)器的行為易于改動(dòng)。軟件是用戶與硬件之間的接口界面。用戶主要是通過軟件與計(jì)算機(jī)進(jìn)行交流。它有兩個(gè)價(jià)值:

          1. 行為價(jià)值。用戶希望一個(gè)可以工作的軟件來滿足自己的需求。行為是軟件的焦點(diǎn),用戶通過自己與軟件的交互行為來改變機(jī)器的行為,從而滿足自己的需求并解決自己的問題。

          2. “柔軟性”價(jià)值,也叫結(jié)構(gòu)價(jià)值。就是適應(yīng)業(yè)務(wù)變化,容易修改。沒有任何軟件產(chǎn)品能在與用戶接觸中幸存下來的,軟件需要持續(xù)修改來解決用戶新的問題。所以我們也說軟件工程是一個(gè)持續(xù)修改本體的工程,軟件一直在變化,之前的版本很難一直幸存下來。


          軟件工程師已經(jīng)是現(xiàn)在這個(gè)時(shí)代最接近工匠的一個(gè)職業(yè)。我們不能僅僅把軟件當(dāng)做工程來做,軟件更是一門手藝,甚至是一門藝術(shù)。不管是手藝,藝術(shù)還是匠藝,它們指的是懂得如何做好某件事情,源自于良好的實(shí)踐和大量的經(jīng)驗(yàn)。


          2. 紀(jì)律

          極限編程的生命之環(huán)也就是下圖中心的四要素是工程實(shí)踐手段:TDD(測(cè)試驅(qū)動(dòng)開發(fā))、重構(gòu)、簡(jiǎn)單設(shè)計(jì)和結(jié)對(duì)編程(鮑勃大叔稱為協(xié)同編程)。最左端的是驗(yàn)收測(cè)試,它是極限編程中最注重技術(shù)與工程的業(yè)務(wù)實(shí)踐手段。

          2.1 TDD

          TDD 是關(guān)鍵紀(jì)律,沒有 TDD,其他四個(gè)紀(jì)律無從談起。在此鮑勃大叔用來近乎一半的篇幅在講 TDD。TDD 的目標(biāo)是創(chuàng)建程序員完全信賴的測(cè)試集。只要測(cè)試集通過,我們可以安心的部署代碼。所以 TDD 主宰著軟件開發(fā)的一切,貫穿從需求開始的 Tasking 到最后的生產(chǎn)部署,它能幫助程序員穩(wěn)住節(jié)奏。這里有我關(guān)于 TDD 的一篇文章(TDD與瀑布式開發(fā))可供參考。另外很多地方都有關(guān)于 TDD 的洞見,此處就不在贅述了。


          但是這里要說一下測(cè)試替身,鮑勃大叔關(guān)于測(cè)試替身的講述可能會(huì)幫助我們對(duì)測(cè)試替身課程的理解,很多地方把五種測(cè)試替身單獨(dú)分開來講的,忽略了其中的聯(lián)系。五種測(cè)試替身 Dummy(仿品)、Stub(占位)、Spy(間諜)、Mock(擬造)和 Fake(偽造)的關(guān)系如下:

          Stub 是 Dummy 的一種, Spy 是 Stub 的一種, Mock 是 Spy 的一種。Fake 則獨(dú)立于外。


          Dummy 是一種什么也不做的實(shí)現(xiàn)方式,測(cè)試中一般不會(huì)實(shí)際使用它。如果方法有返回值,Dummy 的返回值應(yīng)盡量接近 null 或者 0。

          Stub 是一種 Dummy,它也什么都不做。不過 Stub 一般不返回 null 或 0,而是返回測(cè)試所需的特定值,能推動(dòng)函數(shù)沿著預(yù)定的測(cè)試路徑前行。

          Spy 是一種 Stub,它返回測(cè)試所需特定值,推動(dòng)系統(tǒng)沿著我們期望的路徑前行。但是 Spy 能記住它所做的事情,并允許測(cè)試調(diào)用詢問。

          Mock 是一種 Spy,它返回測(cè)試所需特定值,推動(dòng)系統(tǒng)沿著我們期望的路徑前行,能記住它所做的事情,不過 Mock 還知道我們的預(yù)期,基于這些預(yù)期能判斷測(cè)試是否通過。但是 Mock 將 Spy 行為和測(cè)試斷言綁死了。

          2.2 重構(gòu)

          重構(gòu)能幫助我們把結(jié)構(gòu)糟糕的代碼改為結(jié)構(gòu)更好的代碼,并且不會(huì)影響代碼的行為,代碼的行為不會(huì)改變那么對(duì)結(jié)構(gòu)的改變就是安全的。那么如何保證改進(jìn)不會(huì)影響行為?因?yàn)槲覀冇?TDD,有我們完全信賴的測(cè)試集。與此同時(shí),重構(gòu)是和 TDD 結(jié)合最為緊密的,它是融入到 TDD 的步驟中的。

          2.3 簡(jiǎn)單設(shè)計(jì)

          沒有重構(gòu),簡(jiǎn)單設(shè)計(jì)幾乎無法實(shí)現(xiàn)。簡(jiǎn)單設(shè)計(jì)是重構(gòu)的最終目標(biāo);重構(gòu)是達(dá)成這一目標(biāo)唯一可行的方法。簡(jiǎn)單設(shè)計(jì)包含四條極簡(jiǎn)的規(guī)則:

          1. 通過測(cè)試(鮑勃在本書中表達(dá)為用例覆蓋)。可測(cè)試的代碼就是解耦了的代碼。隨著時(shí)間的推移,測(cè)試的功用從溝通變?yōu)楦采w,重要性越來越高。沒有良好、詳盡的測(cè)試集,重構(gòu)幾乎無法做到。

          2. 揭示意圖。設(shè)計(jì)要達(dá)到的基本目標(biāo)就是讓其他程序員能夠容易地理解、改進(jìn)和升級(jí)我們的系統(tǒng)。除了能讓系統(tǒng)、代碼表述軟件能做什么,以及該怎么用,沒有更好的路來實(shí)現(xiàn)這一目標(biāo)。

          3. 減少重復(fù)。數(shù)據(jù)結(jié)構(gòu)隨著時(shí)間的推移發(fā)生變化,程序員不得不遍歷代碼中的全部重復(fù),并且正確修改。遍歷的重復(fù)越多,出現(xiàn)脆弱的危險(xiǎn)性就越大。

          4. 最少元素。在滿足上面3個(gè)條件后,我們應(yīng)該努力減少函數(shù)內(nèi)部的代碼規(guī)模。關(guān)于函數(shù)的命名,記住,函數(shù)的名稱長(zhǎng)度與其涵蓋范圍應(yīng)成反比。公有函數(shù)名稱應(yīng)該相對(duì)短,私有函數(shù)的名稱應(yīng)該更長(zhǎng)一些。我們一般如何做到函數(shù)內(nèi)部的代碼規(guī)模盡量小呢?主要是抽取更多的函數(shù),由于有精巧的小函數(shù),一般都會(huì)有漂亮的長(zhǎng)名字,因此更有利于使函數(shù)非常小,而且富有表現(xiàn)力。

          2.4 協(xié)同編程

          關(guān)于結(jié)對(duì)編程我有一篇文章(結(jié)對(duì)編程的根支葉果)專門講的,這里不再贅述。結(jié)對(duì)編程不會(huì)提高我們的效率,但是它主要作用是在于有利于團(tuán)隊(duì)知識(shí)傳遞和技能提升,對(duì) TDD、重構(gòu)和簡(jiǎn)單設(shè)計(jì)起到了支撐作用,從而提高了團(tuán)隊(duì)的整體執(zhí)行力。

          2.5 驗(yàn)收測(cè)試

          驗(yàn)收測(cè)試會(huì)將軟件開發(fā)團(tuán)隊(duì)與業(yè)務(wù)綁定到一起。BA(業(yè)務(wù)分析師) 與 QA 負(fù)責(zé)編寫驗(yàn)收測(cè)試如使用 Cucumber、SpecFlow、FitNesse等。BA 專注于正常的業(yè)務(wù)流程(Happy path),而 QA 專注于探索系統(tǒng)可能失敗的路徑。


          驗(yàn)收測(cè)試集就是整個(gè)系統(tǒng)的需求文檔,通過編寫驗(yàn)收測(cè)試,BA 與 QA 要證明這些測(cè)試通過時(shí),對(duì)應(yīng)的業(yè)務(wù)功能也就完成了。驗(yàn)收測(cè)試的演進(jìn)目標(biāo)路線如下:

          起步階段程序員可以在 BA 和 QA 的指導(dǎo)下進(jìn)行編寫。中間目標(biāo)是創(chuàng)建 BA 和 QA 能夠閱讀和認(rèn)可的測(cè)試。最終目標(biāo)是讓 BA 和 QA 有能力來寫測(cè)試。

          2.6 小結(jié)

          系統(tǒng)發(fā)布有紀(jì)律,高效率高質(zhì)量的系統(tǒng)交付同樣存在著有跡可循的紀(jì)律:TDD、重構(gòu)、簡(jiǎn)單設(shè)計(jì)、協(xié)同編程和驗(yàn)收測(cè)試等。正是這些紀(jì)律決定了團(tuán)隊(duì)交付的效率和交付質(zhì)量的底線。


          3. 標(biāo)準(zhǔn)

          標(biāo)準(zhǔn)是期望值的底線,我們不能越過這些底線,它們是最后的防線??梢愿哂跇?biāo)準(zhǔn),但永遠(yuǎn)不要低于標(biāo)準(zhǔn)。

          3.1 生產(chǎn)力

          永遠(yuǎn)不要shit,如果交付了shit,那么就要有緩解措施。


          正如之前說的軟件的第一個(gè)單詞是 soft,其存在的全部理由是為了我們能快速地改變機(jī)器的行為,希望得到成本低廉的需求變更適應(yīng)能力。


          我們的軟件在技術(shù)上時(shí)刻準(zhǔn)備好發(fā)布,但是并不意味著企業(yè)想要的發(fā)布。時(shí)刻準(zhǔn)備著意味著不希望開發(fā)團(tuán)隊(duì)要通知業(yè)務(wù)還要等待,它是一種態(tài)度,是一種不斷提供增量?jī)r(jià)值的承諾。

          3.2 質(zhì)量

          我們希望持續(xù)改進(jìn),隨著時(shí)間的推移,系統(tǒng)的設(shè)計(jì)和架構(gòu)得到改善,軟件變得更加整潔。我們希望一切都會(huì)隨著時(shí)間的推移而變得更好。那個(gè)如何消除這種系統(tǒng)隨著時(shí)間而變得難以處理,團(tuán)隊(duì)免于恐懼呢?答案是遵守我們上面提到的紀(jì)律,我們將有信心和能力加速修正正在退化的系統(tǒng),讓軟件保持在持續(xù)改進(jìn)的軌道上。


          不要把問題留給 QA,我們希望 QA 什么問題都不會(huì)發(fā)現(xiàn)。QA 不適合放到研發(fā)的末端,而是應(yīng)該放到過程的開始,QA 的工作不是找到所有缺陷,這是程序員的工作。QA 的工作應(yīng)該是測(cè)試來指定系統(tǒng)的行為,給出足夠的細(xì)化測(cè)試,方便排除系統(tǒng)中的缺陷。這些測(cè)試應(yīng)該由程序員而不是 QA 來執(zhí)行。我們應(yīng)該將大多數(shù)測(cè)試自動(dòng)化,解放 QA 的雙手,進(jìn)行探索性測(cè)試。

          3.3 勇氣

          團(tuán)隊(duì)中的成員是可以相互補(bǔ)位的。當(dāng)有成員倒下時(shí),團(tuán)隊(duì)中其他人能夠接替他,直到倒下的成員重歸崗位。那么如何才能做好補(bǔ)位呢?最好的辦法就是協(xié)同編程。


          我們要做好預(yù)估,程序員最靠譜的預(yù)估是:“我不知道”。因?yàn)檫@個(gè)預(yù)估混合了程序員所知和所不知的東西。當(dāng)我們進(jìn)行大項(xiàng)目的評(píng)估時(shí),可以按照下面的預(yù)估來做:

          • 有 5% 的可能在周五前完成

          • 有 50% 的可能在下周五前完成

          • 有 95% 的可能在下下周五完成

          坦誠不確定最有價(jià)值。另外在敏捷實(shí)踐中采用了故事點(diǎn)技術(shù)。故事點(diǎn)靠譜,因?yàn)槠洳怀兄Z時(shí)限。故事點(diǎn)描述了一項(xiàng)任務(wù)相對(duì)于另一項(xiàng)任務(wù)的成本差異。故事點(diǎn)可以是任意數(shù)字,但是相互之間有關(guān)聯(lián)。


          程序員要懂得說“不”。因?yàn)槲覀兪翘幱谝痪€戰(zhàn)場(chǎng)的人,我們的工作是找到一條通往“是”的道路。但有時(shí)“是”行不通,我們是唯一的知情者。當(dāng)答案確實(shí)是“不”時(shí),我們就得說“不”。

          3.4 小結(jié)

          “沒有度量標(biāo)準(zhǔn),就沒法評(píng)估;沒法評(píng)估,就沒法改進(jìn)”,正是這些度量的標(biāo)準(zhǔn),在指導(dǎo)著交付效率和質(zhì)量不斷迭代進(jìn)步。正是上面這些標(biāo)準(zhǔn),使得程序員的匠藝不斷精進(jìn)。


          4. 職業(yè)操守

          現(xiàn)在的軟件行業(yè),幾乎每 5 年,世界上的程序員數(shù)量就會(huì)翻一番。這意味著世界上有一般的程序員擁有不到 5 年的工作經(jīng)驗(yàn),只要按照這種速度繼續(xù)下去,這個(gè)軟件行業(yè)一直處于不穩(wěn)定的狀態(tài)----永遠(yuǎn)缺乏經(jīng)驗(yàn)。


          作為技術(shù)人員,我們可能會(huì)面對(duì)來自業(yè)務(wù)、上級(jí)等和自身不穩(wěn)定的挑戰(zhàn),但是我們也要堅(jiān)持自己的職業(yè)操守。所以鮑勃提出以下誓言,為捍衛(wèi)和維護(hù)計(jì)算機(jī)程序員職業(yè)的榮譽(yù),我承諾,盡我的能力和判斷力:

          1. 我不寫有害的代碼。

          我們的代碼不能傷害自己的用戶、自己的員工、自己的老板和同事。我們的代碼不能是功能有害的,不能傷害社會(huì)。我們不應(yīng)危害代碼結(jié)構(gòu)。應(yīng)該保持代碼整潔,保持代碼結(jié)構(gòu)良好。只要使得源代碼難以閱讀、難以理解、難以修改或重用,就是結(jié)構(gòu)性傷害。那該如何做到呢?我們要從測(cè)試出發(fā),先寫測(cè)試,先清理測(cè)試,實(shí)踐 TDD,遵守我們上面說到的五條紀(jì)律。


          1. 我生產(chǎn)的代碼將永遠(yuǎn)是我最好的作品。我不會(huì)故意讓那些在行為或結(jié)構(gòu)上有缺陷的代碼累積起來。

          “先讓它工作,再使其正確”,讓程序工作只是第一步。很多人認(rèn)為一旦程序工作了,就完事了。實(shí)際上這只是實(shí)現(xiàn)了軟件的行為價(jià)值。然而,第二步清理代碼,守護(hù)軟件的結(jié)構(gòu)價(jià)值。結(jié)構(gòu)價(jià)值比行為價(jià)值更重要,這是因?yàn)檐浖到y(tǒng)必須能夠響應(yīng)需求的變化。結(jié)構(gòu)越好,行為越好,就好測(cè)試、修改和重用,就能快速響應(yīng)需求變化。結(jié)構(gòu)價(jià)值大于行為價(jià)值;結(jié)構(gòu)價(jià)值取決于良好的依賴管理;良好的依賴管理來自SOLID原則。因此系統(tǒng)的整體價(jià)值取決于SOLID原則的正確應(yīng)用。


          根據(jù)艾森豪威爾矩陣,我們根據(jù)事情的重要性和緊急性,把事情分為了四象限。如果事情不重要,就根本不該做,做不重要的事情純屬浪費(fèi)。重要的事情是長(zhǎng)期的,緊急的事情是短期的。軟件的結(jié)構(gòu)是長(zhǎng)期的,行為是短期的,因此我們要關(guān)注軟件的結(jié)構(gòu),行為次之。這個(gè)看似和“先讓它工作,再使其正確”相互矛盾,實(shí)際上我們可以先實(shí)現(xiàn)行為,然后給予它正確的結(jié)構(gòu)。這也就是 TDD “紅 -> 綠 -> 重構(gòu)”的節(jié)奏。


          1. 我將在每次發(fā)布時(shí)提供快速、確定和可重復(fù)的證據(jù),證明代碼的每個(gè)元素都能正常工作。

          之前有人認(rèn)為軟件是一種數(shù)學(xué),他希望我們構(gòu)建由假設(shè)、定理、推論和引理的上層建筑。相反我們認(rèn)識(shí)到軟件不是一種數(shù)學(xué),它是一門科學(xué)。我們需要通過實(shí)驗(yàn)來驗(yàn)證。我們?cè)跍y(cè)試通過的基礎(chǔ)上構(gòu)建理論的上層建筑。那我們能找到里面正確性的證據(jù)嗎?TDD 給了我們實(shí)驗(yàn)性的經(jīng)驗(yàn)證明,我們每天都依賴于這種證明。我們構(gòu)建的測(cè)試集能在短時(shí)間內(nèi)運(yùn)行,當(dāng)測(cè)試集通過時(shí),我們就可以知道可以放心交付了,而且這些測(cè)試集可以由任何人在任何時(shí)候重復(fù)運(yùn)行。


          1. 我將經(jīng)常進(jìn)行小規(guī)模的發(fā)布,不妨礙其他人的進(jìn)展。

          我們要持續(xù)集成。提交越頻繁,就越不可能面臨合并。而且,如果真的合并,也會(huì)是極小的合并。同時(shí)持續(xù)集成要依賴于可靠的單元測(cè)試,減少合并的錯(cuò)誤。


          我們要持續(xù)部署。這樣我們就能消除生產(chǎn)發(fā)布之間的延遲,最終的目標(biāo)是能夠持續(xù)、安全和無儀式的部署,部署應(yīng)該可能地接近于無事發(fā)生,大家淡定自如。


          我們要持續(xù)構(gòu)建。如果要在短時(shí)間內(nèi)部署,就要在短時(shí)間內(nèi)構(gòu)建。決不允許構(gòu)建失敗,如果你習(xí)慣了失敗,你就會(huì)開始忽視它們。如果構(gòu)建失敗,團(tuán)隊(duì)要有人停止手頭工作,處理這個(gè)緊急情況。


          1. 我將無畏地、毫不留情地利用一切機(jī)會(huì)改進(jìn)我的創(chuàng)作。我絕不讓它變更差。

          我們要持續(xù)改進(jìn)。我們有代碼的童子軍軍規(guī):我們的代碼推送到遠(yuǎn)端時(shí)的版本要比之前的下載的版本更加整潔。怎么做到呢?我們可以增加覆蓋率,使用突變測(cè)試,進(jìn)行以改進(jìn)為目標(biāo)的重構(gòu)。


          我們不僅僅只關(guān)注代碼。設(shè)計(jì)、時(shí)間表、和計(jì)劃等都是應(yīng)該不斷改進(jìn)的創(chuàng)造物,隨著時(shí)間的推移讓事情變得更好,我們不斷改進(jìn)我們所做的一切。


          1. 我將盡我所能盡可能地提高自己和他人的生產(chǎn)力。我不會(huì)做任何降低生產(chǎn)力的事。

          “想要走得快,只能好好走”。保持代碼、設(shè)計(jì)的整潔,保持高穩(wěn)定的測(cè)試覆蓋率等這些是提高生產(chǎn)力的間接方法。我們需要關(guān)注直接方法:生產(chǎn)力的主要組成部分不只是快速編寫代碼的能力,還有構(gòu)建、測(cè)試、調(diào)試、部署等。所以我們?nèi)绻l(fā)現(xiàn)構(gòu)建緩慢,就需要找到原因并解決;我們?nèi)绻l(fā)現(xiàn)測(cè)試緩慢,就不要讓緩慢的東西拖累測(cè)試,把他們模擬出來,繞過它們,把緩慢測(cè)試從關(guān)鍵路徑上移開;我們盡量不要調(diào)試,通過 TDD 來寫單元測(cè)試幫助我們發(fā)現(xiàn)問題;部署是一套過程,將部署自動(dòng)化,而且也要為這套過程寫測(cè)試。


          我們需要解決注意力分散問題。會(huì)議變得無聊時(shí),就離開,但是請(qǐng)保持禮貌,詢問與會(huì)者還需要自己?jiǎn)??鮑勃大叔認(rèn)為聽音樂會(huì)妨礙自己專心工作,所以他拋棄了一邊寫代碼一邊聽音樂的習(xí)慣。當(dāng)心情不好時(shí)候,不要通過音樂或會(huì)議來掩飾這些情緒,需要采取行動(dòng),解決情緒問題,然后進(jìn)入到編碼工作狀態(tài)。同時(shí)在時(shí)間管理上,鮑勃大叔推薦使用番茄工作法并提倡大家保衛(wèi)番茄,確保在這個(gè)番茄時(shí)間鐘內(nèi)不被打擾。


          1. 我將一直確保其他人能夠補(bǔ)上我的位置,我也能夠?yàn)槠渌搜a(bǔ)位。

          將知識(shí)隔離成一個(gè)個(gè)筒倉對(duì)團(tuán)隊(duì)是非常有害的,一個(gè)人的損失會(huì)導(dǎo)致整塊知識(shí)的丟失,團(tuán)隊(duì)會(huì)陷入癱瘓。解決此問題的辦法就是在團(tuán)隊(duì)中傳遞知識(shí),方式就是結(jié)對(duì)和結(jié)組。


          團(tuán)隊(duì)成員非常頻繁地彼此查看和互動(dòng)也很重要,最好的方式就是放到一個(gè)屋子中。根據(jù)鮑勃的經(jīng)驗(yàn),將團(tuán)隊(duì)安排在同一間辦公室,生產(chǎn)力就有了很大的提升。對(duì)于遠(yuǎn)程團(tuán)隊(duì),應(yīng)該盡可能在同一時(shí)間工作,跨時(shí)區(qū)盡量少,同時(shí)可以打造一個(gè)虛擬的辦公室,比如分布式團(tuán)隊(duì)的大電視開開,大家可以相互看到,盡量創(chuàng)造出團(tuán)隊(duì)辦公室的感覺。因?yàn)檫h(yuǎn)程工作,大家都是隔著屏幕,很容易不把人當(dāng)人看。就像是隔著汽車的擋風(fēng)玻璃我們可能喝罵其他駕駛員一樣。為了防止此類事情的發(fā)生,團(tuán)隊(duì)每年應(yīng)該有幾次能齊聚同一個(gè)真實(shí)的房間,有助于團(tuán)隊(duì)凝聚,始終成為其一個(gè)團(tuán)隊(duì)。很難想象你會(huì)想對(duì)待屏幕和其他駕駛員一樣對(duì)待和你不久前剛共進(jìn)過午餐的同事。


          1. 我將給出在數(shù)量級(jí)和精準(zhǔn)度上都靠譜的預(yù)估。我不會(huì)做出沒有把握的承諾。

          在前面已經(jīng)說過預(yù)估了。我們可以對(duì)三個(gè)數(shù)字進(jìn)行預(yù)估:最好情況(5%的發(fā)生機(jī)會(huì))、最壞情況(95%的發(fā)生機(jī)會(huì))和普通情況(50%的發(fā)生機(jī)會(huì))。也可以采用PERT的計(jì)劃評(píng)估和審查技術(shù)。


          1. 如果我的程序員同事?lián)碛凶銐虻牟偈亍?biāo)準(zhǔn)、紀(jì)律和技能,就能贏得我的尊重。任何其他的屬性或特征都不會(huì)成為我尊重程序員同事的因素。

          2. 我永遠(yuǎn)不會(huì)停止學(xué)習(xí)和改進(jìn)我的技藝。


          作為技術(shù)人員我們可以通過代碼來編寫規(guī)則,掌控著互聯(lián)網(wǎng)運(yùn)行,改變著世界。鮑勃大叔提出了我們必須遵守的職業(yè)操守,里面不僅有硬技能也有軟技能?;卮鹆宋谊P(guān)于技術(shù)人要堅(jiān)守的原則。

          總結(jié)

          通過閱讀鮑勃大叔的這本匠藝整潔之道,如下圖所示,我心中的的部分困惑和疑慮得到了解答。在后面的程序員修煉之路上,它給了技術(shù)人要遵守的紀(jì)律、標(biāo)準(zhǔn)和操守,讓大家在通往匠師之路更加的順暢。


          這部大師著作上市后

          高居圖書榜第一

          下單即減50,快快掃碼搶購吧!

          ?

          如果喜歡本文
          歡迎?在看留言分享至朋友圈?三連

          ▼點(diǎn)擊閱讀原文,了解本書詳情~

          瀏覽 22
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  波多野结衣一品二品免费观看AV | 果冻传媒91cm-084换妻下部董小宛 | 青娱乐国产极品 | 91视频久久久久久 | 操逼视频免费观看 |