SOA 和 Web 2.0 的共通之處,除了先前陸續提過的幾點之外,在「邊緣」和「中心」的角色關係上,也存在著微妙的相似處。
上回寫到 Enterprise 2.0,提到 ZDNet 的文章,其中有一幅很棒的插圖(如下),值得仔細玩味。左手邊是用戶的所在,常稱作網路的邊緣 (edge),而右手邊則是大家所共享的網路,在英文中常叫作雲 (cloud)。不管是在企業 (Enterprise 2.0),或消費者領域 (Web 2.0),位於邊緣的用戶們,透過各種無所不在的邊緣器具 (edge devices) — 桌上 PC、無線上網的筆記型電腦、PDA、手機、數位相機、攝影機、錄音機、掌上型娛樂機,甚至客廳的遊戲機、家庭娛樂中心等,與網路中的各種服務作雙向互動,主動貢獻大量的內容,並與其他用戶共享。在這種新環境下產生的內容,近兩年來已陸續出現各種名詞來形容,包括 User-Generated Content、Consumer-Generated Media(或 Consumer-Generated Content)、Citizen Media、Citizen Journalism 等。
【本篇發表於 iTHome 雜誌】
身為IT人,鎮日埋首於科技/專案中,久而久之難免對硬梆梆的科技產生麻痺。如果非IT界的家人或朋友問我們:「什麼是XXXX?」(請將XXXX代換成Java、XML、ERP,或您所從事的科技領域),我們直覺的反應往往會是:「很枯燥,你不會感興趣的」,或是「講了你大概也聽不懂」…這類的。其實轉一個角度,IT也可以很生活化,在日常生活中的例子俯拾即是。
Java和星巴克
我了解,多年下來,大家可能早已聽爛了各種耍cute的Java名稱和術語,其中又多圍繞著咖啡的主題打轉;例如,Java的元件叫JavaBeans – 咖啡豆;負責運行這些元件的環境叫container – 咖啡豆罐;著名的open-source組織Apache基金會之下的Java計畫叫「雅加達」(jakarta.apache.org) 等等。
把這些咖啡辭語擱在一旁,大家或許不曾注意到的,是Java平台和星巴克之間的有趣類比關係。龍應台在網路上廣為流傳的『在紫藤廬和Starbucks之間』一文中說到:「我喜歡在Starbucks買咖啡。不見得因為它的咖啡特別好,而是因為,你還沒進去就熟悉它的一切了。你也許在耶路撒冷,也許在倫敦,在北京,或者香港……你就知道在那裡可以點一大杯拿鐵咖啡加一個bagel麵包,雖然這是一個陌生的城市。」想想Java的平台環境,不就是這樣嗎?一支支Java程式,雖然身處各個陌生的OS國度中,但只要其中有它們熟悉的活動場所 (JVM),因為清楚裡面的遊戲規則,所以很確定,和Barista講什麼語言一定通,點什麼飲料一定有,店裡有紙巾和低脂牛奶可自取…。各大廠商願意砸大錢幫我們把這樣的環境建立起來,因為它們知道,比起雞同鴨講、菜單內容迥異、服務態度抓不準的餐飲店 (proprietary platforms),這會是一個大賣點。
XML、Web services和FedEx
如果世上各個國家的人都能配合多學一種簡單的新文字,那麼跨國間的書信往來,便可透過此一「世界文」來達到,這就是XML。Web services中的基本協定SOAP,則是在這個世界文的基礎上,所設計出來的信封、信紙格式及相關的規範。
IT人作久了,不自覺容易罹患一種叫「為科技而科技」的症候群,也就是當某種科技開始流行,往往會有為了要嘗試這個科技而刻意去使用的情形。其實更公道地說,追求fashion本是人性的一環,IT人當然也在所難免。就像看到現在正在流行的衣服、皮包款式,忍不住也想買一件來試試看,儘管配在不同的身材上不見得都合適,對某些買的人更不見得真有此需求。
科技人中,對採用XML的態度,存在著兩種極端,一種是上述的「為XML而XML」,以及「為Web services而Web services」,這個現象近兩年來有愈來愈普遍的趨勢。這就像是把所有的信件和物品,一律都用硬紙箱、防震泡泡給他層層包裹,然後請FedEx/快遞來替我們運送,結果忘了收件人就住在隔壁,其實根本不用包裝,敲個門請他拿過去就可以解決的事,這麼一搞下來,在效率和成本上自然付出很大的代價。當收件人住在另一個國家,講不同的語言時,那麼用國際快遞當然就是合情合理的選擇。
另一種極端則認為,XML格式至為冗長,速度據測試比走binary/native方式至少慢了5至10倍,所以如果用了XML,系統效能上會付出慘痛的代價,所以應該竭盡所能地避免。猶記在十年前,當World Wide Web剛剛興起,大家都還痛苦地使用28.8k甚至14.4k modem上網時,當時我們製作網頁,不但是hand-code HTML(好用的WYSIWYG網頁設計工具尚未發明),而且為了讓訪客能有更好的瀏覽經驗,能更快下載我們的網頁,對於HTML的size往往孜銖必究、絞盡腦汁。幾年下來,隨著寬頻普及、電腦運算速度、容量不斷攀升,還有網路設備對傳輸資料的壓縮功能等因子交互作用的結果,現在可能已經沒有多少人還會關心網頁製作工具,以及各種動態網頁科技所自動產生的HTML中,是否塞了大量的空白、多餘字元?是否不夠精簡、不夠最佳化?在HTML剛出來的時候,不是也有人批評純文字格式的HTML不如一些專為文書處理所設計的binary文件格式來得精簡嗎?結果是,HTML成就了人類有資訊史以來,最跨平台、最普及,最成功的文件格式。為什麼?
同步、非同步、超商,還有(抱歉又是)星巴克
在enterprise computing中,有我們常說的同步 (sync) 和非同步 (async) 的作業模式。打電話、打手機是標準的同步模式。在建立連線時,一個巴掌拍不響,通話雙方人都得在電話附近,手機不能關機、訊號不能斷。如果當時正好找不到對方,溝通便告失敗。用瀏覽器瀏覽網路也是典型的同步模式,當網路斷線、塞車,server當機時,資訊傳遞的目的便無法達成。Email/簡訊採用的則是非同步的策略,發訊者並不期待對方一定能立刻收到,只預計在一個合理的時間範圍內,對方應該會收到。在enterprise computing中,線上交易處理 (On-Line Transaction Processing; OLTP) 是典型的同步作業,而訊息佇列 (message queuing) 則是典型的非同步。
過去手機WAP的失敗、3G寬頻上網的延遲推出,和SMS簡訊跌破眼鏡地大行其道,說明了在無線收訊時有時無的先天環境下,選擇同步、用拉的 (pull) 模式,所必須面對的嚴峻課題(另一種稱作「用推的;push」模式)。
同步作業的模式,會因為某些業務的本質而有其必要性,例如銀行存、放款和轉帳的交易,便可能因為時間先後不同而產生重大差異,故往往皆採用OLTP作業方式。如果我們稍微觀察,會發現便利超商、賣場,還有麵包店在結帳時,通常也都採用同步的模式,當生意好而結帳人員又只有一兩位時,往往大排長龍,而這正是同步模式所必須面對的另一大課題 - scalability。有趣的是,星巴克這類的咖啡連鎖店,採用了非同步的作業,來達到更高的scalability(另外也是因為商品特性的緣故)。他們會先跟客人結帳,然後利用咖啡杯上所作的記號,將製作飲料的工作交由另一組同事進行。一位曾在Starbucks工作的資深Barista告訴我,其實他們使用的濃縮咖啡機,每次一定是左右兩股同時壓出來,但由於會點雙份的客人其實不多,所以他們會儘量在流程中進行「配對」,把倒掉一份的情形減到最低。
因為這種scalability的特性,這正是為什麼我們說,在設計跨系企業Web services交流時,“async is king”。
【本篇發表於 iTHome 雜誌】
Java的開發人員究竟具有哪些特質?這是iTHome記者宛玉小姐找我來寫這個專欄的原始構想,也是許多人好奇的問題。在『沉默的羔羊』這類的殺人魔偵探片中,警方會借重專業的犯罪心理專家,即所謂的profiler,來協助推斷兇手的特徵和習性。在Java開發工具中,也有一類叫profiler(Java引擎JVM本身就內建一個陽春型的),用來更了解程式的特性,包括大致的執行效能、哪些環節可能會是瓶頸等。今天我們要反過來,對那些操作Java profiler的技術人員作一點profiling - 看看就這個族群,有沒有什麼樣的pattern存在。
要回答這個問題,必須先界定 - 到底什麼樣才算得上是一個Java開發人員?一個直覺的回答或許是:會Java,而且常用Java作coding的技術人員。但是這馬上就遇到另一個大問題:要到什麼程度才算是「會」Java、甚至說「懂」Java的程度?是個人所經歷過的Java專案數?年資?擁有的證照張數?所受過的教育訓練?是否應考慮對某個應用領域、範疇,如J2EE、J2ME的架構精神和相關APIs具備相當的掌握度?像是,作過JSP coding的開發人員是否可視為會Java、乃至於具備J2EE技能的工程師?就這個問題,或許我們在未來的專欄中,可以從一個經理人徵才的角度,作一些探討。很明顯地,這類的問題,絕對不單只是採用Java的企業和IT廠商會遇到,採用微軟 .NET、或其他技術平台的企業,同樣得面對。譬如,一個聽過不只一次的笑話是:某人通過MCSE的認證,但NT系統迄今只灌過一兩次,仍不太熟安裝。當然,相信在Java界也絕不乏這樣的笑話。
我們姑且先把Java族群粗略地定義在:常用Java作程式寫作的人,其動機可能是討生活、學習、或兩者兼具,或自我實現等。
據個人觀察,Java的愛好者並不特立獨行,而是屬於軟體開發族群中的一個子集合,也share了許多共同的特性。在英文裡,一般大眾對此類技術愛好者的刻板印象是nerds或geeks(書呆子、怪胎);久而久之,“nerds”、“geeks” 倒也搖身成為軟體癡們自我解嘲的標誌了。IM、email、online forum、blog(時下流行的心情札記網頁)、chat等,是nerds相互交流、抒發個人思考所不可少的工具,這一方面是因為許多nerds生性較為含蓄、內向,故即便與身在同一間辦公室工作的同事之間,往往仍傾向以網路的方式溝通;在另一方面,對工具擅長的nerds來說,透過remote的方式合力完成一個軟體專案,甚至從頭到尾都沒見著一面,本就是很自然的事,而且往往在實務上的確有此需求。
其實有些geeks還蠻有幾分浪漫詩意的,這點從一些Java人的blogs裡便可看到,有的在程式心得的字裡行間,還夾雜著詩詞歌賦的探討。當然,即使單就程式設計的功力而言,我們說「技藝、技藝」,「技」高了,就會開始有「藝」的成分出來,就像建築一樣,除了使用價值之外,軟體的設計,可以是鬼斧神工的創作,但往往更常是匠氣一缸。不過,就像藝術品一樣,同一份作品,不同的人可能會有不同的欣賞角度和評價。透過自己的作品來獲得同儕間心服口服的敬重,是nerds/geeks在社群中取得領導地位的不二方式。
透過各種方式進行腦力激盪和互助,是所有nerds/geeks必備的特質,Java族群當然也不例外,因為不管是解決工作上火燒屁股的狀況、增長見聞、學習新知、或是在同儕間贏得尊敬,在在需要交流。不少Java愛好者會參加JavaOne這類的活動(當然,在台灣就是JavaTwo囉)。不過大會畢竟一年只有幾天,網路仍扮演了最重要的交流媒介。人氣較旺、而且有經營討論群的Java網站,如台灣的JavaWorld、國外的JavaLobby、TheServerSide等,內容大多集中於技術的切磋、新知情報、各種frameworks、APIs、產品的解惑和心得等。倒是有一個網站,則是在成立時便清楚定位在非技術know-how層面的議題,那就是Slashdot.org(其命名來自於開URL網址的玩笑,因為其中充滿了 “/” – slash 和 “.” – dot)。自達康時代成立多年下來, Slashdot在nerd/geek社群中始終維持著高人氣。它是專供nerds窮磨牙的園地,提供每天coding之餘的娛樂和精神食糧。除非是圈子裡的人,否則往往難以體會許多貼子中的geek式幽默。
除了Java的話題外,Slashdot中自然還有許多其他令nerds熱血沸騰的話題,不少都圍繞著Open-Source的理念和軟體,或許局外人的反應會是,「有那麼嚴重嗎?」但許多理念性的話題,對nerds來說可是事關宗教信仰和意識形態的大代誌呢!每當Slashdot上有對Java好惡的論戰時,往往便是務實派槓上理想派,兩大主要性格的衝突。理想派的nerds除了質疑Java語言算不上是真正的open-source之外,有些還厭惡Java的冗長無趣(C# 也是類似),在句法的表達上,比起一些更早的語言,如LISP、Perl,欠缺創意揮灑的空間。務實派則從不同的角度來解讀Java的語言特質,他們體認到,Java儼然已成為「新COBOL」,被用來建置愈來愈多的企業級應用,尤其是在server端,甚至連寫法上都有幾分COBOL的冗長味!事實上,Java的刻板句法根源於嚴謹的物件導向處理方式。其優點是有利開發多人合作的大專案,但無形中卻也讓不少Java programmers有點悲哀地成了軟體工程生產線上的作業員,鎮日依據交付下來的spec,一個class接一個class地焊接著。至於他們能否超脫到足以獨挑大樑的更高境界,便全看個人的修行了。務實派的nerds因為體認到職場上的實際要求,故較不排斥使用Java、C#、VB來開發,也因此有機會更深入地領略到Java的特性,和與其他語言環境的差異。此外,「新COBOL」的地位,也讓一些nerds開玩笑說,回想一下COBOL的歷史,光衝著Java具備長期飯票潛力這點,就該認真考慮好好學。
一個傳統上在軟體nerds族群中至高無上、如今卻被視為刺猬的稱號 - 那就是hacker。許多讀者可能不知道,“hacker” 本來是nerds/geeks圈內用來尊稱少數程式內功已達如火純青的人,包括Linux之父Linus Torvalds,如今卻因為許多擅長攻擊網站、破解軟體的青少年開始以hacker自稱,而讓這個稱呼染上了黑名,也讓很多真正的hackers跳出來大聲疾呼「hackers和crackers的區別」、「正派的hackers是不會去crack人家網站的」,期望能矯正社會上一般人對這個名詞的有色眼光。為什麼要在這裡提hacker?因為之前有一個源自Slashdot的爭議話題:一個在美國太空總署工作、名叫Paul Graham的hacker寫了一篇論文,標題叫「Java被視為不酷的主要原因」,自然又踢爆了幾場Slashdot上面司空見慣的大論戰。Paul Graham的論點之一是:據他了解,放眼hacker界偉大的人物當中,不替Sun工作而會選擇用Java來coding的,一個都沒有;如果包含替Sun工作的,倒是有一個(在此要提醒讀者的是,這裡立論的基礎是:對大師級人物來說,寫程式已經如同文學家揮毫作詩和畫家揮灑一般,所以對「筆」的選擇自是馬虎不得)。主要的Java期刊JDJ (Java Developer’s Journal) 幾個月前甚至還刊登了一篇專門駁斥該論文的文章。我覺得一個Slashdot上的貼子評得最經典:「其實會這樣認為的人,不過是將過去長久以來對COBOL的厭惡移轉到Java上罷了」(註:在Java尚未誕生之前,COBOL是最被hackers嫌的語言之一)。前面說到的,Java和COBOL間詭異的關聯,又再一次地出現。
Boston Consulting Group前兩年針對軟體geeks這個族群作了一個研究調查(在此對有興趣的讀者強力推薦這份hackers研究報告),發現open-source圈的geeks(95% 以上為男性)之所以coding,誘因不一,而統計下來,發現幾個最典型的動機:1) 對open-source和自由軟體抱持高度理想2) 找樂子、純興趣,當成是腦力激盪和挑戰,3) 取得在業界的專業地位,或贏得同儕間的敬重,4) 學習技術,自我提升(其中以在學學生居多)。這項調查的主要樣本為SourceForge.net中的專案負責人。SourceForge是全球最大的open-source專案hosting網站,專案數多達數萬,其中有不少Java的專案。事實上,SourceForge設有稱作 “Foundries”(鑄造場)的社群園地,讓相關的開發人員交流、切磋,和學習,而Java有一個專屬的Foundry。
如果仔細一點觀察,會發現不管在SourceForge的鑄造廠,或Slashdot的文章主題分類中,有Java、Perl、Tcl、PHP,但卻不見微軟環境下的語言 - C#、VB/VB.NET、ASP/ASP.NET等,這透露著一個蠻普遍的現象,那就是,比較擁護open-source專案和Linux/Unix的nerds一般對微軟採取較為敵視的態度,以及微軟所代表的proprietary軟體在本質及理念上和開放/自由軟體間存在不可避免的衝突。Slashdot網站裡,有關「敵人」一舉一動的新聞話題,那怎麼能少!微軟的話匣子在Slashdot可是有一個專屬的主題區,還用了一個蠻酷的logo圖片 – 我把它描述為「比爾蓋茲生化機械人」。此外,Java的祖國 - Sun在與微軟大和解之前,多年下來對微軟的叫陣和冷嘲熱諷,當然也多少影響Java 開發者對微軟的態度。不過,這些並不表示,Java開發者和軟體geeks們就一定拒絕開發微軟環境下的專案,也不見得都對微軟抱持敵視的態度。事實上,前面提到,geeks中有不少務實討生活者;那份Boston Consulting Group的研究報告也將「工作上現實需要」列為是nerds寫程式的動機之一。有許多Java開發者往往採用Windows平台做程式開發,告一段落後再將程式移至Unix/Linux上作測試和production部署。當然,用Linux、甚至Unix作日常開發環境的也是有。
對了,在Slashdot這類的討論社群中還會見到一種人,被nerds圈內人士稱作 “trolls” - 就是不知所云、狀況外、沒sense者,偏偏又愛參一腳。因為不管是理想派或務實派,要能夠寫出言之有物、獲得好評的貼子(Slashdot是有評分制的),往往都是歷練過數種到十數種、甚至數十種程式語言的老手。沒料又愛放炮的trolls則是最被看不起的。
最後要強調的一點是,對任何族群的觀察,若採取 “one size fits all”、「一竿子打翻一船人」的態度,過分概括化、籠統化是蠻危險的。Java族群自然也不例外,或許把他們視為是IT眾生光譜中的一個區塊會比較恰當。