程序員: Web開發之華山論劍

不知道有沒有人會看程序員,大概從去年開始,幾個電腦書店通路都開始賣這本對岸的雜誌。這一期10月號的程序員雜誌特別企劃,拿 Ruby on Rails、PHP、ASP.NET、Java 來比較一番。

Ruby on Rails

Ruby 語法簡單,物件導向功能強大,但 Rails 還太年輕,效率不夠優化,類別庫不夠完備。

Ruby難入主流的幾個原因 : 1.Ruby比起 PHP 和 VB還是難多了,PHP和VB是便宜貨(甚至沒有命名空間),但卻是事實上Web開發標準。2. Rails太超前了,有時候魔術變多了,就變成魔鬼。太富跳躍性,過於智能,開發人員就難以理解。3.沒有可靠的IDE。4.Ruby 上只有 Rails 這個Web應用方案,缺少競爭。5.企業級應用能力和擴展性未明,除了Rails社群中成功的網站,在其他領域是否也有成功案例。6.缺乏網路提供商支持,99%都支援PHP。

PHP

廣受群眾認可使用,但卻在很多開發人員中評價卻不高。PHP的通俗易懂而沒有挑戰性的概念,PHP寫三年好像也沒什麼好說的,Java學三年確有很大區別,可以講出很多開發架構跟部署問題。缺乏體系的開發架構也讓PHP很難成為企業應用系統的選擇。而很多PHPer開發的隨意性和不負責任,也讓PHP的口碑不高。

LAMP草根組合 ,PHP的問題在物件導向特性不足,在大型專案中容易混亂。不過隨著PHP5加強的物件導向,也越來越適合中大型了,但是卻也與本來簡單通俗的精神背道而馳了。

Java

SSH(Struts+Spring+Hibernate)是目前最廣為接受的組合,但是分析及實作費工不少。

ASP.NET

微軟技術壟斷,在Atlas的幫助下,開發Ajax變的簡單,但是過於依賴的結果,可能缺乏深入了解DOM。對一個框架不能深入了解核心的情況下,是很難投入太多信任的。ASP.NET運行在windows平台,比較適合開發企業ERP等中小型服務。系統本身不夠透明,因此後期的風險會比較高。

如果可以不用Ajax,就不要用Ajax,雖然有很多框架宣稱你可以不用了解Javascript也可以開發出Ajax,但是Javascript是一切的基礎。如果你的團隊沒有比較資深的Javascript開發人員,採納Ajax很多時候是惡夢的開始,你需要不斷的和scripting error奮戰。

Ruby on Rails : 建置與執行

台灣第一本 Ruby on Rails 中文書熱騰騰上市。令人出奇的小本,以這樣的篇幅跟內容編排,我懷疑作者的預設讀者是要給誰念的? 如果是初學Rails且不懂Ruby的人,裡面講的太快,應該會不知所云吧。如果是看過 Agile Web Development with Rails 的人,這本又太簡略了,像是摘要整理。

anyway… 對我來說,沒多久就看完了(當然沒實際練習啦),就當是複習吧。比較有新意的只有Ajax那章,因為Agile Web Development with Rails那本寫Ajax比較少,而這本甚至給了更難的Drap-and-Drop的ajax範例。

站在推廣的角度,我建議(譯者)可以在附錄補個Ruby簡介會不會好一點啊,不然Ruby在台灣應該還蠻不紅的,也還沒有中文書啊。

Ajax 技術手冊

因為有中譯(正確的說,應該是從英文->簡體中文->繁體中文翻過來的)而且比較薄,所以挑了這本先入門隨便翻翻,另一本還有中譯的是 Ajax實戰手冊(厚多了),預計會接著看就是了。

看過了 DOM Scripting,所以大部分的 DOM 操作就不細看了,只關注在XMLHttpRequest 的部份,Server side的範例這本是用 Java Servlet,不熟悉加上不是重點我也只好略著看。

整本書前半大概就介紹完了Ajax本身,給了幾個常見的Ajax使用範例 code(不甚漂亮,有點dirty),後半雜七雜八的介紹一些開發上的事情跟工具,包括文件產生 JSDoc 、Firefox extension(HTML Validator,Checky,DOM Inspector,Web Developer,Greasemonkey XMLHttpRequest)、語法檢查 JSLint、壓縮 HTML/Javascript Cruncher-Compressor 、介紹Javascript的OOP繼承機制、測試框架 JsUnit、除錯工具 Microfost Script Debugger(for IE),Venkan(for Firefox)等。

純手工打造Ajax是不需要的,利用 framework 是必然,本書最後介紹用作者開發的Taconite框架(主要是配合Java Server side)來做 Mac OSX的 Dashboard,我自己因為用 rails 的關係,會比較想了解 prototype 就是了… XD (又跳過好幾頁了) 。

附錄則整理幾招處理跨瀏覽器(尤其是IE)的JavaScript 技巧,跟其他框架介紹。

其他作者推薦的站台:

搞定! GTD

 Update(2007/3/15): 新增一些參考網址。

Getting Things Done (GTD) 是一套由 David Allen 所提出來的個人行動管理流程,他分成五個部份來討論 1.蒐集 2.處理 3.組織 4.檢討 5.行動 ,核心觀念是將所有雜事組織在手邊,而不是腦海裏。別浪費時間重複思考同樣的事。因為心思會持續擔心掛念懸而未決的事情,造成擾亂跟心理壓力,而無法專心。

最高境界”心如止水”,心靈澄淨做事自然有建設性

專案企劃

  • 非正式構思更具生產力,最少的時間跟精力,創造最大績效。
  • 使用自然計畫模式:界定目標和原則,想像期望成果,腦力激盪,組織,找出下一步行動 

1.蒐集

  • 不再事事記掛於心,所有資訊集中等待處理。扔到收件夾,將事情趕出腦海
  • 絕妙的好點子很少在上班時間來訪,手邊的搜集工具是否留的住創意,才是提高生產力的關鍵。
  • 如果真的決意甩開壓力,每一處都得完成蒐集的過程。以量取勝。 閱讀全文〈搞定! GTD〉

DOM Scripting

Update(2008/5/27): 手上多了本全新的 DOM Scripting 書,欲售 $1000,請參考Y! 拍賣 or 直接聯絡我。

想好好學 Javascript 想好久了,記得很早前是唸過 Javascript 設計風格,回想起來好像是完全不同年代,現代的 Javascript 要 unobtrusive ,跟 css 一樣能夠跟 markup 分離出來。前些日子有念一下 DHTML Utopia,可是那本code好亂,雜雜的並不是很好念,所以念了幾章就停住了。

在消化眾多 Ajax 書籍之前,我另選了這本重新進入 Javascript 的世界,書的前言是說寫給 web designer 而不限於 programming 出身,所以整本書多花了些篇幅在講很基本的 programming 的地方,像是 if 啦 while 啦、提醒你 = 跟 == 的不同等,還有重複前文的code很多(怕你忘記找不到?)。除了這個有點囉唆的缺點,這本書的章節編排非常好,非常循序漸進,不會一下子塞太多東西給你,讓你記不住不知道怎麼用。另外不只是單純 coding,也含有大量網頁標準的概念。 閱讀全文〈DOM Scripting〉

賽局高手 – 全方位策略與應用

書有兩個作者,就如同博客來上面留言的書評,介紹賽局的部份還不錯看,蠻好懂的。可是一換到政治章節,就好像突然岔題了,感覺格格不入(而且容易過時,書上是寫2001左右的政局)。

首先介紹了靜態賽局,即參賽者同時出招,只互動一次。這時候一定會有納許均衡解(但不唯一),若有無論對手如何反應都有最好的策略,又叫優勢策略。採用不可預測性的策略,又叫混合策略(即用機率來決定用哪個策略)。

動態賽局則是出招有先後,這裡介紹了子賽局完美納許均衡,利用從最後的子賽局往前推的逆向歸納法。在動態賽局中,誰先出招對均衡影響很大。

在賽局中,不合作常是均衡解,常形成囚犯困境(合作是好,但不合作是人性啊~!)。但是如果是無窮重複的賽局,就有可能有合作的均衡解,任何只要超過最大的極小策略報酬,就可能形成長期支持的合作策略,即隱藏性勾結。

前述又還有分完全訊息跟不完全訊息,因為不完全訊息比較難,所以作者只用了拍賣跟談判來舉例,介紹了次高價拍賣(出最高價者得,但是用次高價的價錢)是不完全訊息下的貝氏納許均衡。

邊緣主義是一種刻意把對手帶到最大危險的臨界點,並以此迫使對手退縮的策略,重點是一道斜坡可進可退,千萬不可以弄成懸崖。要能控制好賽局的結果,建立自己可信的承諾跟信譽是非常重要的。而最適的動態策略是”會被觸怒”策略,永遠有反應,你善意合作,我善意回,你沒好意,我就懲罰逼使你釋出善意,同時也保有寬恕跟彈性,避免以牙還牙的報復困境。