那些炒作過度的技術(shù)和概念
StackExchange.com上有一個貼子在評論著最近20年來被炒作過度的技術(shù),對于出現(xiàn)的結(jié)果,大多數(shù)贊同,也有一些不贊同。下面我從前15名挑了10個(Java的WORE我去掉了,TDD我也去掉了,因?yàn)槲矣X得他們應(yīng)該沒有炒作過度,而且都不錯),按原貼的順序羅列如下:(后面的一些評論是我加的,歡迎大家討論)
Top 10 過度炒作的技術(shù)和概念
- Unified Modeling Language (UML) – UML是一個程序員交流想法的不錯的工具,但是他離程序員真正需要的設(shè)計工具還差得很遠(yuǎn),比如:設(shè)計是否符合需求、架構(gòu)設(shè)計、數(shù)據(jù)流等等。只有為數(shù)不多的程序員使用這個工具交流想法,而沒有用在具體工作中。
- Sharepoint - 現(xiàn)在N多的公司都在用微軟的這個東西做公司內(nèi)部的Intranet。不過安裝和維護(hù)起來,代價相當(dāng)?shù)拇蟆5瞧涫袌鲎龅暮艹晒?,不對技術(shù)上來說對技術(shù)人員來說,相當(dāng)?shù)孽磕_。Sharepoint的設(shè)計沒有認(rèn)真地分析過業(yè)務(wù)流程,僅僅是一個文檔存儲地??瓷先ノ覀兯坪蹩梢宰鋈魏蔚氖拢侨绻阋闷鋪砉芾砟愕捻?xiàng)目和track你的項(xiàng)目問題,你會發(fā)現(xiàn)其是無比的難用。
- eXtensible Mark-up Language (XML) – XML嘛,以前說過很多了(XML1, XML2)我們用他來做和程序數(shù)據(jù)封裝,用來做配置文件,用來做網(wǎng)絡(luò)傳輸格式。我們的程序處理起XML來,又慢,又不經(jīng)濟(jì),沒有工具,幾乎無法維護(hù)XML文件。 XML用來做數(shù)據(jù)封包真是很不經(jīng)濟(jì),Yaml和JSON那個不比它簡單?用XML來做程序配置文件不知道是誰想出來的主意,相當(dāng)?shù)挠薮?,看? Unix/Linux下的配置文件,簡單易讀,相當(dāng)容易維護(hù)。真是高科技啊。
- SOAP, XML-RPC, WSDL 的 Web Services – 這個東西前幾年炒的很兇。所有人都相信,這是程序員的未來??上У模渲械膹?fù)雜和不一致,相當(dāng)?shù)牧钊藧盒?。SOAP的那個S居然還是Simple!看來,扯上XML的都不會是什么好的東東。不過,個人認(rèn)為,CORBA比他更惡。
- CORBA - 作為一個比其更惡的更過度炒作的COM技術(shù)的Linux/Unix下的補(bǔ)充技術(shù),這個技術(shù)也好不到哪里去。相當(dāng)?shù)膹?fù)雜,從理論上開始就是這樣了。這是一個沒有經(jīng)過實(shí)踐就搞出來的一個東西。然后開始炒作。
- Cloud Computing – 這是一個靠炒作出現(xiàn)的東西。這個東西也就是說,我們可以使用不同的調(diào)備,比如電腦,平板電腦,手機(jī),移動設(shè)備隨時隨地做想做的事。Google的 Chrome筆記本的廣告展示了這項(xiàng)技術(shù),但是,把工作結(jié)果放在云端的人會有多少呢。更多的人更喜歡的是去使用那些自己可以控制的電腦或平臺。 Google在這點(diǎn)上做的明顯不如Amazon,像Amazon EC2平臺,你可以在世界上任何一個角落隨時隨地的去啟動你那臺遠(yuǎn)程的系統(tǒng)。(更新(2011/1/29):解釋一下,關(guān)于云計算,在寫下這篇文章的時候我本來有點(diǎn)拿不定主意的,后來回顧了一下歷史,如COM啊,ActiveX啊,EJB啊,當(dāng)時感覺都是很強(qiáng)的東西,但是最終也只是被炒作的。云計算,我不知道未來怎么樣,從今天來看,這項(xiàng)技術(shù)在今天存在炒作的情況——中移動云,阿里云,到處都是云,在云面前,神馬都是浮云了。)
- SOA – Service Oriented Architecture – 這是一個沒有人真正知道是什么玩意的概念。炒作了很多年,很多人都試圖去了解它,但最后的結(jié)果是打個哈欠,看別的東西去了。現(xiàn)在沒有人提了。中國一些銀行在IBM的鼓動下搞了很多所謂的SOA應(yīng)用,結(jié)果是系統(tǒng)很復(fù)雜,當(dāng)然,也再離不開IBM了。
- Software Industrial Process – 軟件開發(fā)中有很多所謂的工業(yè)界的流程,用這些流程好像可以控制質(zhì)量。外包公司和中國的本土公司很喜歡這些東西,比如ISO和CMMi,這些流程不能說不好,也有好的地方,尤其是對那些不會思考只要跟從的Worker來說。這些工業(yè)界流程中炒作過度的是,那些所謂的使用這些流程可以預(yù)測項(xiàng)目周期,質(zhì)量控制,以前需求開發(fā)和管理等東西。其讓流程上升到了一種神學(xué)的可預(yù)言的地步,同樣也上升到了政治的地步。因?yàn)?,這些流程中都必然會有SQA 的Audit的流程,還有統(tǒng)計和報告的流程,這些統(tǒng)統(tǒng)不是軟件開發(fā)的流程,但是的確是相當(dāng)?shù)恼?。使用這些工業(yè)屆標(biāo)準(zhǔn)流程的公司,通常都是一些創(chuàng)造性有問題的公司。
- Agile Software Development – 敏捷開發(fā)。首先,我承認(rèn)其中的很多實(shí)踐相當(dāng)有效,在理論上也不錯,還有很多不錯方法的。不過,還是有炒作的成分(下面的言論,我等著被罵)對我來說,在中國,“敏捷開發(fā)”的炒作簡直就像是一個電視購物,ThoughtWorks中國各種咨詢師們軟件開發(fā)經(jīng)驗(yàn)其實(shí)并不豐富,準(zhǔn)確來說,他們有的是咨詢經(jīng)驗(yàn),而沒有具體項(xiàng)目實(shí)施經(jīng)驗(yàn)(有的咨詢師甚至都沒有寫過一行代碼就去學(xué)教人怎么編程和開發(fā)軟件了),和他們溝通起來能夠感到他們對敏捷很亢奮,而且是唯敏捷主義,就差打出Once Process,One Agile的口號了,他們信仰敏捷流程的已經(jīng)接近宗教信仰,他們的精神世界很朝鮮。因?yàn)?,無論你和他們的咨詢師談什么,他們只說敏捷,從來不會分析一下,項(xiàng)目的特性是什么?開發(fā)這個項(xiàng)目的人的風(fēng)格是什么?客戶的特性是什么?有沒有關(guān)心軟件的stakeholder們(如:程序員,測試人員,客戶,管理人員)是怎么想的?而XP和SCRUM也就成了Push工程師最強(qiáng)大的工具。流程這個東西,應(yīng)該是項(xiàng)目組自發(fā)出來的東西,而不是被 灌輸,被教條使用的東西。不同的團(tuán)隊(duì)、不同的項(xiàng)目、不同的人,不同的風(fēng)格就是不同的流程,只有去使用適合自己的流程才是最好的流程。打個比方,足球隊(duì)中,巴西隊(duì)玩的是個人藝術(shù)足球,德國隊(duì)玩的是整體和紀(jì)律性足球,意大利玩的是防守型足球,但是他們都有奪世界杯冠軍的實(shí)力,如果你硬要讓巴西隊(duì)去整德國隊(duì)或是意大利隊(duì)的風(fēng)格,那就悲劇了。很顯然,ThoughtWorks很像把全中國的軟件公司都整成Agile的,這注定了其在中國是杯具的,也只能爭取到那些不知所措的公司和項(xiàng)目,沒有合適的項(xiàng)目,也只有靠各種炒作(比如整一些大會,搞一些宣傳)。他們總是覺得中國的用戶和程序員需要去用時間不停地教育,但是,他們從來沒有想想自己的原因 — 靠教育和灌輸是永遠(yuǎn)贏不了的。我給他們的個人建議是,不要以為世界就像你所想像的那樣,學(xué)會尊重程序員和項(xiàng)目還有很多非技術(shù)的東西,多聽聽程序員和客戶怎么說,多分析一下項(xiàng)目的特質(zhì),從實(shí)際情況出發(fā),而不是自己濤濤不絕地向大家灌輸自己的理論。
- Object-Oriented Programming (OOP) – 不多說了,以前本站說過了,所有的一切都在面向?qū)ο笫莻€騙局一文中。不過有一點(diǎn)我想告訴大家,面向?qū)ο蟮腄esign Pattern真是被濫用了,Design Pattern教你的是兩件事,1)怎么去化繁為簡,2)怎么能讓對象的耦合性降低。而不是一個公式讓你的套,但,更多的程序員則學(xué)會了“流行的設(shè)計模式編程”。
附:下構(gòu)面是我拿不定是否是過度炒作的技術(shù)
Write Once Run Anywhere - 這個有點(diǎn)讓我不解,不知道為什么會那么靠前。這是Java的口號,我覺得Java在跨平臺方面還是成功的,沒有過度炒作啊。用虛擬機(jī)的確是做到了這一點(diǎn),對于那些需要有不同的硬件和操作系統(tǒng)平臺并不斷升級和更換它們的公司來說,這的確是個很不錯的解決平臺依賴性的方案。我個感覺這個技術(shù)并沒有炒作過頭,至少在Java這邊是這樣的。與其說這個,還不如說EJB,這才是炒作過度的技術(shù)。
下面的回復(fù),在我形成這篇文章的時候我沒有想過,經(jīng)ming同學(xué)一說,我覺得似乎有些道理。
ming :我從一開始就覺得java的“Write Once Run Anywhere”是徹頭徹尾的炒作。
想想,所謂的跨平臺無非就是依靠虛擬機(jī)、解釋器之類的東西實(shí)現(xiàn)的,那么,哪個腳本語言不是依靠解釋器呢?古老的perl已經(jīng)跨平臺了。當(dāng)然,跨平臺的語言還有很多。但是,只有java炒作這個概念。
Test Driven Design (TDD) – 從測試案例開始寫程序這可能是很多程序員都不習(xí)慣的方法。其實(shí)這是一種比較好的編程方法,保證了代碼怎么改動都不會break其它沒有改動的代碼,代碼可以在一種持續(xù)集成中保證質(zhì)量。但是,我們需要知道TDD的一些副作用(在十條不錯的編程觀點(diǎn)里也提到過TDD的弊端):1)TDD可能會讓程序員敷衍了事,以為test case 沒有錯就正確了。2)TDD可能會讓你忽略了軟件設(shè)計和架構(gòu)以及程序的擴(kuò)展性和重用性。TDD只是一種方法,并不是程序的核心。當(dāng)然,TDD近幾年的炒作也有點(diǎn)過頭,已經(jīng)出現(xiàn)了“TDD是一種Design方法”等“神乎其技”的論調(diào),我對此表示質(zhì)疑中。