IT餐馆—第十六回 驱动
????? 聲明:在寫這個系列文章的過程中,園子里有些人投來了懷疑、鄙視、甚至匿名謾罵,當然也有朋友跳出來支持并提出意見或建議的。我這些天想了一下,感覺寫文章不一定要讓所有人都接受,必定眾口難調,有時為了照顧大多數,有時只為與別人進行交流,以提升自己看問題的高度或解決問題的能力。所以在這里我只能對那些反感我所寫內容的人提前打聲‘招呼’了,千萬別再看我寫的這個系列了,因為這個系列有些內容在你們眼里只是些‘垃圾’或是‘毒藥’,會臟了你們眼的,你們只要看到‘IT餐館’的字樣就權當‘沒看見’好了。當然明知‘不應該看’,但‘還要去看’,也許說明你沒有管住你手中的鼠標,或只為找個人罵上一通,或出于什么目的。另外對‘這樣的文章不應放在首頁’這樣的話,我相信cnblogs管理團隊不是吃閑飯的,他們是有自己的標準來衡量的,請相信他們。如果不相信,非要自己跳出來‘不辭辛苦’的反復說,那就只能悉聽尊便了。另外我以后往園子首頁發文章的時候也會斟酌一下,考慮一下大家的感受,必定交流的人多了,才能不斷學習進步,呵呵。
???? 開始今天的正文了....
??? 周六,老杜約雨辰出來吃飯,順便想問一下關于雨辰公司產品設計方面的一些問題。在酒過三旬之后,雨辰想起了在周五的例行會議時,有位同事提出了測試驅動開發的內容。大家在會上討論了很多相關的話題,其中的內容也基本上圍繞著TDD的一些公認的‘好處’展開。雨辰就隨口問老杜對TDD,FDD之類開發方式的看法。沒想到這一下子讓老杜打開了‘話匣子’。?
??? 老杜說:“從上大學時學的‘瀑布’,原型方法再到工作后使用的UML,RUP。一路下來,我發現軟件工程最不缺的就是方法論了。這幾年的MDA,到DDD,以及當下‘火’起來的TDD,FDD。在我老杜眼里看來已不‘感冒’了。我個人認為不管什么方法,只要挑一樣用好用精就可以了。而那些過于時髦卻沒有經過實戰檢驗的方法,我是沒精力去追趕了。所謂‘根據公司團隊實際情況采用相應的方法’只是一種奢談。在國內來看,這類方式論的普及和理解層次遠沒到國外的水平,對于咨詢公司而言相應的培訓市場也并沒理解中那樣有利可圖。我更認為TDD,這類敏捷實踐在國內‘水土不服’?!?/span>?
??? 雨辰聽老杜這么說,感覺有些道理,說:“眼下我越來越關注于業務而不是技術本身,感覺這些方法也都是在圍繞如何正確理解業務,進行業務領域建模展開的?!?/span>?
??? 老杜聽雨辰這么說,接著說道:“呵呵。其實我一直以來有個觀點,可能旁人看起來有些極端,我今天就跟你老兄聊聊吧?!?/span>?
??? 老杜接著說:“我一直認為TDD,FDD,DDD,說白了,不就是為了能夠讓開發人員更清晰的理解所要開發的功能、業務流程、規則,以及對業務模塊分解,邊界功能的影響,對象的粒度界定等。每種方法都不可能是銀彈。只能在其特定應用場景中使用,也許還真有‘不寫測試用例就開發不了的情況’,不過可惜的是我沒看到。如果不能從中看到可信服的結果或好處,我是不會在產品開發中使用它們的,我只會使用已經過實踐‘洗禮’并證明是‘有效’的方法。另外就是使用這些方法論,如果在團隊中沒有一個有豐富經驗的‘過來人’加以指導,任由大家按自己的理解在實際開發中‘濫用’,那這些方法只能讓團隊成員拋開已成熟的開發流程,投入到這些頭暈腦漲的方法論中,這時它們就成了‘攪屎棍’。這些年方法論還不夠多嗎,還有敏捷那些輕量級的方法,我聽這些耳朵已經‘起繭’了。所以如果能有正確‘分析理解業務流程’的方法,那我是真不想再跟它們扯上關系了,靠。使什么方法不是一樣開發嗎。那些動不動就把這些新概念掛在嘴邊趕時髦的開發者,以及那些相關理論的倡導者,還有那些咨詢公司,我對他們的做法表示懷疑,我認為成熟公司都已經在市場的競爭中養成了一套適合自己的開發方法,不會輕易被這些方法論搞得‘氣血浮躁’。現在我很擔心那些自認為理解了那些方法論的開發者,以為自己‘得道’了而去‘掛著羊頭賣狗肉’,最后把自己搞的是豬八戒照鏡子。”?
??? 老杜越說越激動,接著說:“比如你前些年的‘偶像’Martin,Martin除了把別人的成果放到自己的書中來炒作外,他自己又有什么真正的貢獻。充其量只能算是個‘傳教士’,有時我看他更像是個裝神弄鬼的?!?/span>?
??? 雨辰嘆了口氣,想起了當年看重構一書時對Martin的崇拜之情,現在感覺還真是有點‘那個’。不過話又說回來,如果沒有這些‘傳教士’的工作,那么埋藏在天才頭腦中的金子可能不知還要等到何年何月才能發光,必定有些天才不善于與普遍人為伍,在話不投機時,往往選擇沉默,而那些‘不識實務’的人還沾沾自喜的以為自己‘占了上鋒’呢。?
??? 老杜接著說:“我現在想到的是從技術領域走出來,進入到業務領域中去。通過對領域模型和業務知識的學習研究,讓技術人員成為跨技術和業務的‘兩棲人才’。開發產品的人本身就應該成為業務領域的專家。否則自己干的也沒勁,沖其量是披著技術軀殼的‘?!?。在DDD中無時無刻不再強調業務專家和軟件專家的溝通,但業務專家都‘不大可能閱讀代碼來核對規則,即使在開發人員的指導下’,那技術人員只有自己走到領域中來了。并且國內的企業里有不少崗位是要求‘業務、技術’要求合而為一的,有多少公司的經理,技術高層不是業務技術兩手抓呀。另外我是建議開發者真正到應用場景中體驗一把,了解一下自己所開發的軟件倒底被什么樣的人,在什么樣的環境下使用,體會他們在使用中遇到的那些令人抓狂的問題,聽一聽客戶是怎么罵自己產品如何如何垃圾的,這樣才能使用自己有個清醒的認識。我反對任何在不充分了解業務領域知識的情況下就去開發代碼的行為,那基本上就是浪費時間和精力。另外很多人認為領域專家與軟件開發人員之間的溝通存在鴻溝,雙方都在用自己領域的術語來描述業務和軟件系統,導致業務知識從領域專家傳遞到開發者那邊出現斷層或誤讀。所以又費神的提出什么DSL什么的。繞了這么一大圈,而在那些既通業務也曉技術的‘兩棲人才’看來,基本上都是瞎忙活兒。還有那些認為‘dsl會將軟件開發者從軟件領域中驅逐出來’的言論更是扯談,別人我不知道,我老杜現在就正在不斷努力從技術人員擴充成為業務人才,進而完成‘一統軟件開發全局’的目標,將那些業務專家趕回老家去。”?
??? 雨辰聽著老杜滔滔不絕的噴著,知道如果不讓老杜講完是不會收兵的,就耐著心聽老杜繼續說。?
??? “說完了DDD,再扯一下TDD,就這個東西,眼下我的觀點是‘看熱鬧’,誰愛做誰做,反正我眼下不打算做,呵呵,還是我之前的那句話,如果通曉了業務需求的話,那TDD的一些賣點就沒那么有價值了。因為TDD也無非是通過編寫測試用例來不斷加深對對軟件運行行為的分析以及業務的理解。進而逼近現實的業務需求,并讓業務需求更加具體、明確,邊界更加清晰罷了。而它里面所說的其它優點比如說:‘TDD不單純是以測試來驅動代碼的編寫,而是對整個開發流程的驅動’。我想都是那些狂熱支持者頭腦發熱的產物,真正驅動開發流程的是業務需求(客戶那邊不斷變化的‘需求’)。即‘業務驅動開發’,而最終業務是為了什么呀,不就是錢嗎。世上還有什么比‘金錢驅動’更厲害的嗎,Money Driven Development (金錢驅動開發)才是王道呀。這是橫跨在業務領域和技術領域兩方面的驅動方法呀,是我老杜發明的,就暫定為‘杜式定理’吧,開句玩笑,呵呵?!?/span>?
??? 雨辰聽老杜這么頭腦發熱的說著,就善意的解釋說:“你說要當什么‘水陸兩棲型人才’,但據我所知‘業務專家’不是那么容易練成的呀。不過你到是給技術人員的發展和‘轉型’提供了一個不錯的方向,呵呵。不過回來頭來,為什么眼下方法論層出不窮,特別是敏捷陣營那邊,說白了,還是大多數開發者都不是業務專家,要成為某些領域的業務專家,沒有十年二十年的光景是練不出來的,那里也需要悟性。更何況有些人可能天生就是做技術的命,他們對技術的興趣遠大于對業務的興趣。所以多數情況還是“領域專家+軟件開發專家”的組合,并希望通過某種橋梁(比如 DSL)讓他們兩者頭腦中的思想起‘化學反應’,讓開發出來的軟件真正能反映出業務需求?!?/span>?
??? 雨辰接著說:“你剛才說關于業務為中心的觀點不錯,我眼下是舉雙手贊同的。但就是眼下方法論過多,你說你的我說我的,外人看著就像是到了集市上,熱鬧的讓人頭暈。當然不管是DDD,FDD,TDD還是別的什么DD,我看本質與你剛說的那個觀點還真有些碰撞,必定都是為了更好的理解業務(需求),更好更快的設計出可用好用的軟件,呵呵。”?
??? 雨辰喝了口啤酒,想了一想又說:“不過我認為對于國內開發者而言,不可能都有機會與業務專家當面交流,很多都是對著文檔或需求說明書(甚至連這個都沒有)就直接設計開發了。與其這樣做還不如‘先通過寫測試用例讓自己冷靜下來’,分析項目或產品都底應該是個什么樣子。也許這不是個適合國情的方法,但它必定提出來了,我想國內很多開發者也是采用‘摸著石頭過河’的方式來學習使用它們的吧。另外你之前所說的成修練成‘業務專家’,那你又是從什么方面入手,接觸和了解業務核心領域的呢,總不會頭腦發熱就決定搞一把吧?!?/span>?
??? 老杜說:“目前我也在摸索階段,不過我的觀點是‘與其用那些方法,還不如跟業務人員或業務需求提供方多吃幾頓飯,把業務背景,流程,工作場景摸清楚來得實惠’。我們產品目前的業務需求主要來自客戶,市場銷售人員,技術支持(收集匯總的資料),甚至是某某客戶領導或老板的靈光一閃。而DDD中所謂的業務專家目前很難碰到,多數是客戶那邊找個領導牽頭,然后讓他們手下的人提意見和需求,最后就把這些問題帶回來進行設計了,如果在設計中出現問題再電話或去現場溝通。我想這也是目前國內普遍存在的情況。所以我才說問人不如問已,如果你就是業務專家,自己就代表主流業務需求,那還何必被那些客戶牽著鼻子走,一句話,我就是標準,不就結了?!?/span>?
??? 雨辰接著說:“其實我也贊同你關于‘做產品開發的人就應該是業務專家’這一說法,因為產品不同于項目,其生存周期和開發時間都遠比做項目充裕,正好可以利用這個時間來研究、學習,‘惡補’業務領域方面的知識,這樣才能讓自己有‘沉淀’,增加自己的核心價值和競爭力。我之前就覺得做項目除了積累一些通用代碼之外,對業務根本就沒什么理解,往往一個項目完事,開了總結慶功會就完了。而做出來的東西自己都不太清楚能干什么,感覺自己就是一頭上了磨的瞎驢,干一年也是它,干五年也是它。最后沒項目做了,大家就轉投別的公司。年輕時這樣折騰也許行,可上了歲數怎么辦,雖然這年歲鐵飯碗少了,但相信對于開發者來說還是希望自己能最終踏實穩定下來吧?!?/span>?
??? 老杜笑著說:“我感覺你與我一樣,都是在找出路,一條讓開發者能將所學技術受用一生而不是一時的‘出路’。我之前也沒想過太多,但老劉那檔子事讓我觸動不小,也許老劉的今天就是你我的明天。去年有個叫阿朱的寫了本《走出軟件作坊》,你看過沒?”?
??? 雨辰笑著說:“我在網上看了兩遍,后來買了一本又看了兩遍,感覺挺受用的?!?/span>?
??? 老杜嘆了口氣,說:“我只能感嘆他遇上了一個開明的老板,能讓他將頭腦中的想法變為切實可行的方案。其實他的有些方法我之前也摸索過,只不過老板過于保守,不愿進行變革,再加上公司‘元老派’的阻撓,就一直不能采納。結果我這些年也變得越來越世故了,熱情也在被慢慢耗盡,可悲呀。”?
??? 雨辰聽老杜這么說,感覺他好像變了個人,不再是昔日那個鋒芒畢露的老杜了,不禁心生無耐的說:“如果你感覺所在公司做事有種‘被埋沒了的感覺’的話,那就跳吧。人挪活樹挪死?!?/span>?
??? 老杜一臉壞笑的說:“我已在給我自己找買家了……”
??? 之前文章鏈接:
??? IT餐館—第十四回 架構
??? IT餐館—第十五回 云端
???
總結
以上是生活随笔為你收集整理的IT餐馆—第十六回 驱动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有许多话不能说
- 下一篇: java中原始数据文件的输入