程序架構與設計(Java語言)

 從事應用開發的程序員或多或少都曾有過這樣的感受:這個世界充斥着形形色色的概念和縮寫,不知該追隨這位導師仍是信奉那個門派,如EJBRoRAJaxHibernateIoCAOPRod John son在他在書中《Expert One on One J2EE Development without EJB》倡導一種的「循證架構」(evidence based architecture)。 
  選擇一種架構、一種技術的依據是什麼?Rod John son認爲,應該是基於實踐的證據、來自歷史項目或親自試驗的經驗。Rod John son經過這本書但願傳達的、更爲重要的信息正是「循證」的工做方式—————那本來就應該是程序員的工做方式。 
  有意思的是看過這本書的人以爲大牛(Rod John son)很牛,本身也可能很牛,但如何讓全世界架構師一塊兒牛起來,仍是一頭霧水。 
  咱們從一個問題開始:若是,給你一個ERP的項目,你會選擇什麼架構,爲何? 
  Soap?EJB?不論你怎麼選擇哪種架構,儘管你能夠義正詞嚴的說這是xx大牛所推薦最佳方案。但Rod John son都會大聲告訴你:錯了,根本上錯了,由於xx大牛的經驗根本靠不住! 
  把項目架構在不靠譜的經驗上固然危險。循證的核心理念是:一切活動基於當前最佳證據。證據包括兩大類:知識和經驗。知識你們都很清楚,咱們來講說經驗。首先看一下經驗的效應公式
                         
表面效應 原始效應   僞效應 實際效應 
  從公式中能夠看出,大牛的有效經驗其實並不單純。以軟件架構爲例,假設原始效應是指公司的有效資源及開發團隊能力(意味着擁有優質資源的公司,即便選擇最差的架構也可能會成功),僞效應指信仰架構是最優架構所帶來的精神動力(比較容易理解的例子是,專家給病人吃用澱粉作成沒有任何藥物做用的「藥片」能治好疾病,簡稱安慰劑效應。表面上僞效應是有用的效應,實際上有害,它意味着將資源浪費在錯誤的信仰而非正確的信仰上,而未能得到正確信仰的有效收益。),實際效應纔是某種架構應用於特定環境的有效性。 
  咱們曾經在無數的書籍和文章中看到,EJBJ2EE的核心技術之一;而Rod John son在他的書中居然宣稱,絕大多數的J2EE應用根本不須要EJB。在技術選型的時候,估計都能很清醒的意識到:「技術應該以實用爲主」。但咱們難免又被大牛和本身的經驗所左右。選仍是不選EJB?誰也不肯意把本身的項目架構在空中樓閣中,可是怎麼樣才能獲取架構方案真實的效果和適應環境呢? 
  倒推一下經驗公式: 實際效應 表面效應 (原始效應   僞效應)。 
  屏蔽掉表面效應上的偏倚(或波動因素),纔是實際效應。循證來源循證醫學領域,它有一個頗有效的方法:隨機對照實驗(RCT)。這個實驗是僞效應的天敵(時不時也出來狠揍僞科學),至少讓一半以上的地球人多活至今日。隨機對照實驗方法很簡單,經過必定量的樣本,進行結果比較,目的是屏蔽僞效應和原始效應。如作一次《EJBxx類項目適用/不適用》實驗,設置500個樣本,分紅AB兩組,a組爲實驗組使用EJBB組爲對照組,使用某個特定的架構。最後收集實驗組和對照組的關鍵數據進行比較,比較結果就可以很客觀的反映EJB對某種特定環境是適應性。 
    再關注一下倒推公式,假設實驗組和對照組在樣本足夠的時候能模擬出幾乎相同的環境,那麼實驗組的實際效應應該是比對照組強的那部分,即:實驗組實際效應 實驗組表面效應 對照組表面效應。經過隨機對照實驗,經驗公式的僞效應、原始效應所對應的外部環境、公司資源、開發團隊就能夠被最大限度剔除,還原其真實面目。隨機的目的是經過抽樣減低主觀選擇樣本致使失真,RCT還有單盲實驗,最初指讓實驗組病人吃實驗藥物,給照組吃設計的如出一轍的藥片(安慰劑),以免實驗組出現安慰劑效應。後來發現醫生會潛意識更關注實驗組和忽視對照組也會致使偏倚(病人以爲更受關注而疾病好的更快),設計出雙盲實驗,即醫生和病人均不知病人吃的是藥片仍是安慰劑。 
  「但是,」有人說了,「我一直都是按照別人/網上/書上的建議來作架構的。要親自考察各類各樣的技術,甚至還有不少項目,還要根據項目狀況比較它們的優劣,我可沒這份時間。」。事實上,完整的RCT在醫學界也存在倫理問題,如:拿病人生命作實驗是否符合人類道德。彷佛RCT只適用於新葯研究(如艾滋病、癌症、sars、甲型H1N1,等等死馬當活馬醫)。但並無難倒doctor們,他們發明了meta評價方法。讓任何一個企業開展500個實驗組和對照組作一次《EJBxx類項目適用/不適用》,都不靠譜。可你們每每都忽略了,全球各地至少已經存在50000個以上的《EJB應用於xx類項目成功/不成功》的案例。meta評價方法首先假設有辦法收集足夠多的樣本(meta評價得益於互聯網的發展),用RCT的思想對已有資料進行科學理性評價。因此,meta評價方法至少包括四部分: 
  1,收集足夠多的樣本,包括可獲取的企業內外資料、互聯網資料、期刊雜誌,還有問卷調查。 
  2,造成對照,收集ABC...N組對照信息,經過對照還原真相。 
  3,控制偏倚,設計出能模擬RCT效果的偏倚控制。是否是很像程序設計?因此Rod John son認爲循證架構是程序員本該的工做方式。 
  4,分析出它(經驗)的成分、特徵、適應症、用法、反作用、禁忌。 
  值得注意的是這是四個必要部分,而不是四個個順序步驟。問題就有點相似於先作架構仍是先作需求,在這裏主要指先收集樣本仍是先控制偏倚。固然,通常意義上若是現有大量可靠樣本,則先收集樣本,再設計偏倚控制。反之,則先設計偏倚,而後收集樣本(如先設計偏倚控制,假設使用問卷調查,在問卷調查中加入偏倚控制策略:問題陷阱、交叉驗證等等)。循證架構的目的是收集及評價出高質量的架構方法,但同時又要避免被這種意識所引導,形成「主觀偏倚」,這是RCT所禁忌的地方。 
  千萬別小看RCT的魅力,醫學界用它打趴下無數經典,也拯救了無數的生命,如放血療法、維生素等等。美國新葯上市,沒有通過RCT根本不讓上市。至今沒有一位醫學界大牛敢出來公開反對RCT,循證的帽子也被扣在幾乎任何一個領域:循證經濟、循證管理、循證物理。。。。。。包括循證談戀愛。存在問題的地方就存在循證。  
 
有點囉嗦,總結一下: 
  1,經驗效應公式爲:表面效應 原始效應   僞效應 實際效應 ,其倒推得到: 實際效應 表面效應 (原始效應   僞效應)。 
  2,屏蔽表面效應上的偏倚(僞效應及原始效應)的有效辦法是隨機對照實驗(RCT)。假設在大樣本意義上的近似輸入應該有相似輸出,那麼能夠假設:實驗組實際效應 實驗組表面效應 對照組表面效應。 
  3,在無條件施行隨機對照實驗(RCT)時,能夠採起meta評價方法。 
  4meta評價方法包括:收集大量可靠樣本、造成對照、控制偏倚、獲取分析結果。 
  正像Rod John son所倡導的:爾等沒必要向泥胎偶像頂禮膜拜,聖靈正在爾等自身。固然,前提是經驗的分享和驗證。按照Rod John son的說法,一個合格架構師有足夠的知識和經驗,更重要的是架構師應該是信息的處理者,而不只僅是信息的傳播者。也就意味者,合格的架構師應該具備收集資料、控制偏倚、提取經驗真相,從而得到最適合自身項目的架構方案,而不只僅是捧着紅寶書不斷念叨「大牛xx說」或躺在自身經驗的柴垛上吃空山。
程序員

相關文章
相關標籤/搜索