在軟體專案運作期間,團隊成員經過長期高壓折磨後(請容許筆者用這樣的形容詞,但軟體專案確實是個壓力密集度高的工作),團隊成員會出現腦力疲乏、反應不佳、情緒偶有失控、思緒無法有條不紊地運作的症狀,就像顆電力被消耗殆盡的電池,執行效能處於殘弱的狀態。

專案成員理應經常充電,以保持良好的使用效能。企業不斷地倡導從A到A+的觀念,套用在資訊軟體專案中,專案團隊也會遭遇到相同的問題:你要選擇向上提升,抑或向下沉淪?

想要向上提升,你可以選擇透過坊間的充電課程提升戰力,不過,對於大多數企業而言,課程需要的成本及耗費時程,無法允許已經忙到抽不出空的軟體專案團隊去充電,使得教育訓練大多落於理想而難以付諸實現,造成專案成員異動頻繁,軟體專案品質嚴重低落。

就管理技巧而言,「從作中學」是學習專業能力及養成經驗效果最好的方式,也就是所謂的On-Job Training。《Agile Retrospectives》即強調從工作中來學習、強化你的專案團隊。

作者設計許多演練的方式,只要按表操課,相信會有不錯的效果。閱讀本書可以有助於:

● 設計出有效的專案團隊實戰準則
● 學習找出專案問題,進而思考得出最佳解法
● 試著強化團隊的優勢,發揮超出預期的團隊績效
● 不只是強調技術專業能力,也重視人在團隊中可能的影響
● 有效運用建議的管理技術及方法

往覆式開發讓專案開發保持在正確方向

Retrospective就字義上而言,著重在過去事物的回顧及反省,以記取過去的經驗,有「知古推今」、「前人種樹後人乘涼」的味道在。

運用在軟體專案上,則代表曾經在專案中遭遇的技術及管理難題、團隊成員間有待改善的合作方式,或是未臻完美的專案成果及實務教訓,這些都是身為專案領導者或成員的你,在過去專案經常遇到的問題,以期在未來能找出改善的做法。

也許你也有這樣的經驗:在執行專案的過程中,面對眾多管理或是技術上的抉擇時,會有「這樣做是不是最好?」、「這樣做是不是對的?」的疑惑。在專案邁向下一個階段時,也不斷地思考,如何在眾多做法中找出最佳方案。

一般傳統式專案開發都是到執行末期才發現問題所在,這時候早已回天乏術、付出慘痛的代價。但透過Agile往覆式開發精神,在專案各個階段結束時,即可以 針對問題進行改善,持續修正方向直到專案結束,不會等到整個專案結束後,才能回顧與檢討。因此往覆式的專案開發所造成的偏差,遠低於傳統式專案開發。

5個步驟將管理技巧導入專案開發

本書重點在於讓軟體團隊可以在專案進行過程,透過作者建議的工具及方法降低失敗機率。敏捷開發的迭代式開發特性,可以讓專案成員在進入下一個Iteration時,發現問題並及早因應,提出改善方法。

本書有5個步驟,從設定目標、收集資訊、激發想法、決定做法、到最後的結束,這些步驟是經歷實務考驗的累積成果。各個步驟都提供許多活動 (Activities)以達到每階段的目標,從這些活動你可以學習許多管理實務上的技術及方法,例如:用來找出問題根本原因的魚骨圖 (Fishbone)、找出多個面向計量標準的雷達圖(Radar),以及利用3M便利貼及色點貼紙收集資料及定義重要性,這些都是可以被應用在不同層面 的通用方法。

本書提供不少管理層面的技巧及作法,讓專案團隊可以透過敏捷開發搭配管理技巧,改善團隊績效、發揮潛力。雖然本書強調的是管理技巧與敏捷(Agile)專案開發製程的搭配,不過它提供的準則及方法,也都適用於一般專案團隊。

在軟體開發流程的討論中,敏捷式軟體開發(Agile Software Development)一直被熱烈且廣泛地討論著。也由於軟體專案多變的特性,使得傳統的開發流程及軟體工程方法論已經是過於繁重而不切實際。所以像是 XP(Extreme Programming)、Agile等輕量級方法論成為新一代軟體工程的寵兒,而許多工具及實作方法亦圍繞著它們的基本精神而不斷繁衍。

程式語言及軟體架構也為了能因應開發流程的敏捷化需求,不斷地透過彈性的軟體框架(Framework)的推出,或是結合強大的整合式開發環境來配合這樣開發流程的體現,希望能及時且有效地反應真正的需求,並快速實作出合乎使用者理想的軟體。

但你會發現,彈性的軟體框架伴隨而來的,便是複雜的組態及物件層級,對於規模較小的應用需求,會有殺雞用牛刀的感覺,絲毫感受不到輕快敏捷的味道。

過去許多程式語言都能有搭配的軟體框架及整合式開發環境,試著要利用一些自動化的機制幫開發人員節省時間。但當你在採用時會發覺,針對這些軟體框架,開發人員需要先花不少時間學習使用方式,來提高掌握度,尤其是在編寫令人頭痛的組態檔時。

這次玩真的,敏捷製程不再是唱高調

自從Ruby on Rails的出現,透過RoR官方網站令人印象深刻的影片展示,許多開發者皆驚歎著Agile時代終於真正來臨,它的快速開發特性讓許多開發者為之著迷, 簡潔的軟體架構搭配著優雅的物件導向本質,讓寫過其他物件導向語言的開發人員,能快速領會其精神所在。

你不再需要針對不同的複雜問題,實作打造連自己都不是很熟悉的Design Patterns;你也不需要為了採用不同的軟體框架,而迷失在組態檔設計檔的叢林裡。因為以單純而明確的MVC架構用來做為基本的設計框架,透過URL 的命名方式Convention取代複雜的組態設定,對於大多數的軟體專案需求其實就十分足夠了。

相信你也聽了不少關於Ruby on Rails的精彩事蹟,一定想要動手試試,但受限於中文相關資源的缺乏,讓這樣的技術還未能被廣泛使用。目前已有多本專門討論Ruby程式語言的經典好 書,但中文版至今才出現2本翻譯專書,包括歐萊禮出版的《超越Java(Beyond Java)》、《Ruby on Rails:建置與執行(Ruby on Rails:up and running)》。對於初次接觸想要學習RoR的同好們,建議還是嘗試閱讀原文版書籍,較能在第一時間掌握較新的技術資訊。

談到與Ruby相關的書,其實早在2001年就有相關專書,像是O’Reilly的《Ruby in a Nutshell》,當時只是針對程式語言本身的特性及撰寫方式進行討論,並未提到Ruby在Web領域的應用。而開始被廣泛討論則是從Bruce A. Tate的《Beyond Java》一書緣起,在該書中便提到Ruby如何搭配Rails的軟體框架,以便快速地實作簡易的Web應用程式,但由於該書當時的討論重心並未在RoR 上,所以還不算是專書。

經典加上得獎,你不得不試試

Ruby結合Rails軟體框架的強大威力,在Web技術的應用上發揮得淋漓盡致,加上Web 2.0的加持,更是將其快速開發的特性展露無遺。在《Agile Web Development with Rails》一書中,即是將Ruby語言充分發揮在Web應用上的經典書籍。

在眾多討論RoR的書籍中,享譽盛名的不外乎就是《Agile Web Development with Rails》。本書為RoR之原創者David Heinemeier Hansson所著,而另一位作者Dave Thomas深諳敏捷製程,同時也是經典書《Programming Ruby》的作者。本書第一版並獲得了2006年Jolt Award大獎,可謂實至名歸。

由於本書銷售狀況甚佳,不到1年的時間再推出第二版,因此在書中你除了可以習得作者忠於原味的技術內容,第二版的內容採用了較新的Rails框架(1.1版),並加入RJS、Ajax的應用範例,作為實作的基礎。

章節編排適合初學者閱讀,著重實作範例

《Agile Web Development with Rails》與一般書籍章節設計的差別在於:作者以深入淺出的方式,先以簡短的章節對RoR進行概略性的簡介,然後直接以實例方式切入RoR的程式撰寫, 再回頭探討RoR的核心架構,最後透過附錄章節提供Ruby程式語言的介紹。你可以依循作者設計的章節順序逐一閱讀,透過實際的範例操作引領你進入RoR 的世界。你完全不需要有Ruby撰寫的經驗也可以快速上手,適合有興趣的入門者研讀。

Rails的出現便是為了讓開發流程更簡捷,所以書中第一部分便從架構簡介開始,讓你先對Rails的軟體架構有基本的認識,除了貫穿核心的MVC模式之外,透過Active Record的OR Mapping機制來進行資料層的處理,也是框架的重點所在。

紙上談兵不過癮,動手開始進行安裝吧!你會覺得安裝RoR一點也不難,而且支援多種作業平臺,依照你所喜愛的平臺種類,將RoR裝到你的開發環境中。除了RoR的核心套件之外,你同時需要搭配的整合性開發環境及資料庫系統,在第三章也對此有詳細說明。

動手實作加深印象

當歡迎畫面呈現在你的瀏覽器中,表示你的RoR已經安裝完成。第四章便教你從專案的建立,產生定義你的Controller及Action內容, 並撰寫動態頁面的Template程式。本章的討論可以讓你了解在RoR專案中目錄的結構,以及Controller、Model、View與目錄分布之 間的互動關係。這些關係僅僅以URL的語法即可以完整定義,不需要再透過煩雜的組態設定。

有了前幾章的基本觀念後,接下來第二部分的章節,作者設計了一個網路書店的案例,讓你對RoR的印象更深刻。若你曾經接觸過電子商務的網站,你便會十分熟悉這些功能的需求及運作方式,每個章節不是單純的程式片段介紹,而是可以前後貫穿、相互呼應的內容。

記住!本書開宗名義就強調是Agile,所以為了落實敏捷開發的精神,從分析階段開始便以反覆(Iteration)進行,手繪幾張頁面流程圖便開始進行程式撰寫,而不拘泥在以往的UML標準圖例上,這夠敏捷了吧!

範例搭配敏捷製程,更突顯快速開發特性

作者設計了8個任務個別包括了數個Iteration,功能涵蓋商品管理、型錄瀏覽、購物車機制、結帳流程及系統管理等,讓讀者從學習建立RoR 應用程式及資料庫設定開始,一步步了解如何利用建立Model的方式,配合Database Migration來建立資料庫結構,並透過scaffold來快速產生資料維護頁面。每個章節都詳細說明整個程式細節及建置步驟,方便讀者學習。作者在 程式中亦頗具巧思地設計實作上的錯誤及陷阱,讓讀者加深學習印象。

每個Iteration之間以漸進方式強化範例的功能,Iteration的設計也是作者精心策畫,每個Iteration的結束都產出完整可執 行的功能。而在這些實作中,亦提到中途如有需求變更時,實作面的因應做法為何,這也是我們平時在專案執行時常常遇到的,像是新增資料欄位、調整版面設計。 傳統的程式語言開發也許會因架構調整而耗工費時,在這裡會讓你感受到RoR敏捷的威力。

在透過程式範例認識RoR之後,第三部分則回頭來探討Rails框架的技術細節。此部分的章節便按部就班地介紹Rails架構,為你建立更紮實的 理論基礎。除了框架基本精神以及MVC各元件的撰寫及設計方式外,在Web Services的應用、系統安全性以及測試與部署方式亦有專章討論,這些都是平常程式開發人員所容易疏忽的。

章節編排適合初學者閱讀,著重實作範例

也許你在閱讀本書時對Ruby的語法十分陌生,對於書中的範例程式一時還無法完全掌握,你可以同時參考附錄中的Ruby專章,補足你對Ruby程式語言的缺憾。另外書中也收錄了組態參數的設定方式、本書範例的完整原始碼及相關資源列表等。

對於準備學習Ruby on Rails技術的程式開發人員,《Agile Web Development with Rails》是不錯的選擇。你可以將本書視為Ruby on Rails開發的最佳實踐(Best Practices)書籍,從無到有地建立一個實用參考價值頗高的網站,可以讓你紮實地打好基礎,也足以讓你掌握Ruby on Rails的重要特性,讓你一書到位。若你想針對Ruby語言進行更深入的研究,不只是Web方面的應用,像是Pragmatic出版的 《Programming Ruby》、O’Reilly的《Ruby in a Nutshell》、《Ruby Cookbook》都是你可以搭配閱讀的經典。

Follow

Get every new post delivered to your Inbox.