l

2010年2月11日 星期四

非加班不能搞定之台灣經濟奇蹟幕後無名英雄

02/11 00:30~01:54

今天聯絡了一位以前公司的同事,告知他 3/11 日有一個 Scrum 講座,看看他有沒有興趣去聽。這位前同事目前從事嵌入式系統領域的工作,而他的碩士論文又是研究 XP,所以 Teddy 認為他應該會有興趣。



不料,前同事的第一個反應卻是:『這個活動在禮拜四下午喔...如果是晚上或是假日,我還可以喬一下時間...』奇怪了,Teddy 心裡想,這種活動辦在上班時間不是很正常嗎,晚上和假日誰還要來聽啊?

前同事目前工作專案團隊包含他老闆一共有六個人,平常他都忙到 11~12 點左右才下班。『這在業界很正常啊』... 前同事說....聽到這裡,Teddy 也了解前同事的難處。工作這麼忙,怎麼可能利用上班時間聽這個和工作看起來沒什麼關係的 Scrum。對一般公司而言,除非是 Linux kernel 或是 Intel 新 CPU, 晶片組介紹,公司才可能放員工在上班時間出來聽課吧。想在上班時間外出聽軟體工程相關的課程...想太多...不予通過...

不過,Teddy 還是很厚臉皮的想把他騙出來。

Teddy:你可以把資料寄給你老闆,找他一起來。
前同事:我老闆更忙,每天都在開會。
Teddy:!@#%~@@zzzZ

這個對話最後以交換 Facebook 帳號作為結束。

***

以下是 Teddy 聽來據說是真人真事的故事。某個『X碩』的員工,每天下班都搭最後一班的捷運。有一天下班後他在台北車站換車,在月台上遇到一位不認識的老先生,這位老先生突然對他說:『年輕人,你看起來氣色很不好,要多注意身體』。連不認識的陌生人的看得出來『X碩』是很操滴。

等一下,看到這邊『X碩』的員工可能會不服氣的說:『我們都很少加班啊...因為過了12點才算加班...』所以,不算操,OK 的啦。

 ***

相信各位鄉民們或多或少都有親身經歷或是聽過這些『台灣經濟奇蹟幕後無名英雄』的加班史。想當年 Teddy 年幼無知的時候,也是經常凌晨 12 點之後才下班,有時候還直接睡在公司,晚上還煮稀飯或是綠豆湯當宵夜和同事一起分享。但是,專案有準時結案嗎?幾乎從來沒有(除了少數幾個接公家機關做做網頁的案子會準時結案以外)。採用 Scrum 之後,現在 Teddy 相信如果上班時間是 9:00,每天應該在 18:30 左右就差不多要下班了。由於強迫自己與團隊必須在 18:30 之前把每天的事情都做完,工作起來反而比較有效率,加上應用敏捷實務作法(agile practices)得宜,專案反而進行的非常順利。

根據一些來源不可考的馬路消息,軟體開發團隊平均一天能有五個小時有效率且專心的工作(coding)時間就已經很了不起了。

鄉民甲:亂講,那我每天在公司待那麼久是在做假的喔 ...

關於工時和工作成果的討論,長久以來已經有太多文獻可以參考,在這邊 Teddy 就不再說明(偷懶一下)。不過鄉民們如果剛好是程式設計師的話,可以做一個實驗,如果我們狹義的單獨計算每天『專心寫程式』所花費的時間,平均下來這個時間應該也是五~六小時左右吧。等一下,不要把『無意識 coding,無意識 debugging,開批鬥大會,MSN 打屁,收發 email,看新聞,在走廊上聊天,泡咖啡,喝下午茶,上廁所,看股票,使用網路 ATM 或網路銀行,填假單,申請費用,發呆假裝思考』的時間也算進去喔。

除了加班以外,是不是有可能藉由改善做事情的效率或是減少做錯事情的機率,來提昇競爭力呢? Teddy 覺的 Scrum 是一個不錯的入門方法,門檻低,很容易上手,可以分階段逐步改善軟體開發團隊的做事方法並且提高生產力。有空可以來聽聽或是自己找資料看。

友藏內心獨白:現場有沒有請 show girls?

2010年2月7日 星期日

還少一本書: The Timeless Way of Building

02/06 23:33 ~ 02/07 02:19

幾天前在 Facebook 上的『Scrum Community in Taiwan』看到十分熱心的柯兄轉貼的一篇文章 Top 20 Best Agile Development Books, Ever,這20本書 Teddy 碰巧翻過 18 本 (請注意,翻過並不等於看完,更不等於看懂...只是... 翻過,沒什麼特別的意思...),這些書有空的話都應該要『翻』一下。不過,Teddy 對於原作者的排名,略有一點意見。引用一下原作者的資料,看一下前10名的排行榜:
  1. Agile Software Development: Principles, Patterns and Practices by Robert C. Martin
  2. Refactoring: Improving the Design of Existing Code by Martin Fowler
  3. Agile Estimating and Planning by Mike Cohn
  4. User Stories Applied: For Agile Software Development by Mike Cohn
  5. The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas
  6. Agile Software Development: The Cooperative Game (2nd Edition) by Alistair Cockburn
  7. Agile and Iterative Development: A Manager's Guide by Craig Larman
  8. Extreme Programming Explained: Embrace Change (2nd Edition) by Kent Beck
  9. Agile Project Management: Creating Innovative Products by Jim Highsmith
  10. Continuous Integration: Improving Software Quality and Reducing Risk by Paul M. Duvall, Steve Matyas, and Andrew Glover

再怎麼輪,榜首也不應該是 Agile Software Development 這一本啊。Teddy 認為這本書寫得最棒的是專門講設計原則的章節(第8到12章以及第20章,The Single-Responsibility Principle, The Open-Closed Principle, The Liskov Substitution Principle, The Dependency-Inversion Principle, The Interface-Segregation Principle, Principles of Package Design)... 自首無罪... 其實 Teddy 也只看了這幾章... 不過這不是重點,重點是,雖然學會並實用這幾個設計原則就可以騙吃騙喝 一輩子 一陣子,但是很多原則並不是作者原創性的作品 。例如,The Open-Closed Principle 和 The Liskov Substitution Principle 在更早之前 Bertrand Meyer  的名著 Object-Oriented Software Construction 這本書就有提到了(這本書很大一本,裡面還有一狗票的設計原則等待鄉民們去挖寶)。

從抽象到具體的順序來看,Teddy 覺得第一名應該是 Kent Beck 寫的 Extreme Programming Explained: Embrace Change (第一版和第二版都應該看一下),因為 Teddy 是讀了 Kent Beck 的書才接觸 agile methods 的,所以本書自然榮登 Teddy 心目中的第一名。

********************

依照往例,以上內容也不是本篇的重點,以下才是本篇的重點。

俗話說『女人的衣櫃總是少一件衣服,女人的鞋櫃總是少一雙鞋子,男人的車庫總是少一部車子,小朋友的卡通總是少看一個小時,宅男的電腦總是少一顆硬碟』。依此類推,『程式設計師的書櫃,應該 總是少一本書』。今天 Teddy 要補上這一本書,一本 agile people 應該要看的書:The Timeless Way of Building (建築的永恆之道)。

看過 Design Patterns 的鄉民們應該有聽過 The Timeless Way of Building 這本書。Teddy 當年因為要研究 patterns 在其他領域的應用才去看 The Timeless Way of Building。在看這本書的當下,只知道它是啟發 software patterns 理論與應用的始祖,並不覺的它和 agile methods 有什麼特別的關係。簡單的說,作者在這本書對於『如何建構有活力,有生氣的建築物』闡述自己的一套理論,這個理論就是 pattern languages 理論。以 Teddy 有限的智慧,無法三言兩語說明清楚(ㄟ,其實 Teddy 也懷疑是否真的了解... 鄉民甲:你是來鬧的嗎?),直接看一段書上的文字比較快:

It (i.e., the timeless way) is a process which brings order out of nothing but ourselves; it cannot be attained, but it will happen of its own accord, if we will only let it.

對應一下 agile 精神... agile 方法是一種流程(process, 也許有些人不喜歡把 agile methods 看作是 process,不過這裡把 process 看成做事情的步驟或方法就好,不用想成重量級的大部頭流程), 可以為開發團隊帶來某種『秩序』或『結構』。要變成一個 agile team 需要靠團隊自身的實踐,無法以強制規定或是工廠管理的方式來建立 agile teams。
 
The prople can shape buildings for themselves, and have done it for centuries, by using languages which I call pattern languages. A pattern language gives each person who uses it the power to create an infinite variety of new and unique buildings, just as his ordinary language gives him the power to create an infinite variety of sentences.

對應一下 agile 精神... agile methods 強調 no big upfront design, evolutionary design, simple design,除非開發團隊成員具有很強的 software patterns 基礎(當然還要有 testing 和 refactoring 等配套,等一下會提到),否則要滿足這些設計精神是很不容易達到的目標。

Once the building are conceived like this, they can be built, directly, from a few simple marks made in the ground---again within a common language, but directly, and without the use of drawings.

對應一下 agile 精神...XP 不是告訴我們,沒什麼事不要畫太多設計圖的啦 (source code is the design)。

Several acts of building, each one done to repair and magnify the product of the previous acts, will slowly generate a larger and more complex whole than any single act can generate.

對應一下 agile 精神... 有沒有聞到 refactoring,iterative and incremental 的味道。

Within the framework of a common language, millions of individual acts of building will together generate a town which is alive, and whole, and unpredictable, without control. This is the slow emergence of the quality without a name, as if from nothing.

對應一下 agile 精神...Scrum 本身是一個 framework,採用 empirical management model 而不是用傳統的 defined processes 來管理負責專案。

寫到這邊 Teddy 和周公的約會已經遲到兩個多小時了,加上這本書的內容實在過於豐富又有點抽象,在沒有準備的情況下 Teddy 也掰不下去了。總之,這本帶點哲學味道的書,對於想要獲得『華山論劍』資格的 agile 鄉民們,是屬於不可不搶的『九陰真經上卷』,練完之後如果沒有走火入魔保證內力大增。

友藏內心獨白:Teddy,你不要看到英文單字一樣就隨便連連看,小心被抓包。