Diro's Journey

Programming Cooking Music Photography


在 LeSS 最後一天,聽到別的公司在導入敏捷時,也成立了很多很多的實踐社群 CoP (Community of Practice),其中一個是 心靈成長 CoP,讓我印象非常深刻,這邊來聊聊為什麼 :) 在第五項修練中,彼得聖吉一直在強調"整體": 「遠古的人類並未把自己跟所處的世界加以區分。那時的人類所看見的世界是一個未被打破的整體,人與自然合而為一。但不知自何時起,我們學會了區分自己, 視自己為分離的個體。我們刻意凸顯個人意識,強調獨立的意志、個人需求和個人的願望。這種自我意識的演化愈來愈強,我們也愈來愈與他人以及上帝所創造的萬物區分。 這對人類的演進而言,是福,也是禍。」 「在企業裡,行銷部門與製造部門處於對立狀態;第一線的管理人員對總公司管理當局懷有近乎憎惡的敵意;各部門的競爭更甚於跟同業的競爭。」 系統思考,講的是不要只看單一個體與簡單的因果關係,你以為你搞懂了整個公司的系統全貌,但從更高一個層級來看,公司也只是大自然中的一個小小個體。 而因為東西方哲學系統的差異、思考的方式不同,彼得聖吉很推崇東方哲學(從整體出發),深受釋儒道影響,也跟南懷瑾大師有許多互動:
南懷瑾與彼得.聖吉 http://www.books.com.tw/products/0010345971 而為了追求更高一個層級中的系統觀,我引用修練的軌跡中講的[天人合一],畫出了這三個層級: [拼命工作]-[系統思考]-[天人合一] 註:拼命工作,或可稱做 [頭痛醫頭,腳痛醫腳] 在[系統思考]出現以前,為了追求更好,唯一能作的就是[拼命工作],但當你的意識進化到[系統思考]這一層級時,就會發現[拼命工作]不一定是有效果的,你可能是在"成長上限"的基模中被困住了,你必需做的是觀照整體、找到 Leverage points 來逆轉整個系統。但是你跟意識停留在[拼命工作]這一層級的人講[系統思考]時,通常他會覺得你腦袋壞了,舉狼圖騰的例子來說: 牧場獵人:身為一個牧場的守獲者,我拼了命把這些狼全殺光不是最好嗎!!你竟然叫我不要打狼打過頭!?
一樣的道理,現在要從[系統思考]升級到[天人合一]這一層級,想必也是很多人無法接受的(就跟小說 三体 裡面不同維度的概念一樣..),但是彼得聖吉一樣先為我們跨出了這一步:
修練的軌跡(已絕版,幸好當年有買 XDD) http://www.books.com.tw/products/0010331986
推薦序:「第六項修練」是心的修練,是靈性的、感性的,是非理性的、沒有結論的。《修練的軌跡》讀起來也許比《第五項修練》更加「不怎麼容易讀」。但是,《第五項修練》的萬千讀者必能在脈絡當中讀出聖吉的苦心孤詣。他毫不吝惜地與我們分享更深層次的學習,在從腦到心的漫長旅程上,他舉一盞「U」型明燈,殷勤守護。
東西方哲學,各是兩個極端(整體與片段),看起來彼得聖吉很努力地把他們連結起來,令我佩服。也許有一天,我們會丟掉彼得聖吉的著作,反而直接從我們的釋儒道去體悟這些東西,看來真
的要來研究一下大學、中庸跟管子才可以了 XD
最後,回到一開始講的,我對於對岸已經開始進化往[天人合一]邁進,感到震憾..

http://www.taaze.tw/sing.html?pid=11100723738

本書獲得《Dr. Dobb’s Journal》肯定,榮獲第21屆Jolt獎。

打造優良的軟體開發團隊,除了要大家有敏捷的觀念外,基礎建設也是非常重要的。前一陣子唸完了 Continuous Delivery 之後, 便開始計畫要把不足的部份補完(如果不知道 Continuous Delivery 有什麼好處,可以先上網查查,或著看看書 XD),在幾位同學的努力之下,花了一個多月把缺的部份補上,包含架設CI Server、夠好用的build script、Robot Framework for QML、Unit Test integration。

  1. CI
    1. 我們選定的 CI 是用 TeamCity,其實 Jenkins 也不錯,但是比較起來商業化的軟體在易用性及介面上,還是略勝一籌,加上之前也都是在用 TeamCity,我覺得用 TeamCity 可以更快上手。
  2. Unit Test
    1. Unit Test 使用 Google Test,為何捨棄原本的 Boost Testing Framework?一個原因是它在 mock/stub 這一部份還不及 Google Test 完整,因此我們選用了 Google Test。
  3. UAT (User-Accaptance-Testing)
    1. UAT 的部份則是使用 Robot Framework,沒有特別原因,只是因為有其它同事正在用,就一起用吧 XD
  4. Qt/QML Testing Framework,
    1. GUI Application 的測試,有一點很重要的是要以 HANDLE、object ID 來操作,而避免使用”圖形”的方式來操作,因為你的 GUI 有非常大的機率會調整,只要一改,你的 test case 就要全部重來了。但是 QML Application 裡頭是沒有所謂的 window handle 的,跟傳統的 Windows Application 不大一樣,而目前市面上只有 Squish 有辦法去對 QML Application 做到使用 object ID 來操作。(Ubuntu 的 testing tool 似乎也有,但沒有深入研究)
    2. 但我們並沒有使用 Squish,而是讓我們的程式原本就具備這樣的”可測性”,也就是說我們自己做了一個 python library,可以讓開發人員透過這個 python library 來操作我們的 QML Application。而 Robot Framework 就是透過這個 python library 來完成 keyword-driven testing。不知道什麼是 keyword-driven testing 的話,可以參考 http://kb.froglogic.com/display/KB/Article+-+Keyword-driven+testing+with+Squish+and+Robot+Framework
就這樣,透過上面四個元件的合作,我們完成了 Continuous Delivery 的目標。這個系統會自動完成下面的工作:
  1. 有團隊成員 commit code 之後,開始進行 build,然後執行全部的 unit test
  2. 通過 unit test 之後,自動打包成準備釋出的 installer.exe
  3. 接下來自動依序發佈到不同平台的 VM 上去進行測試。
  4. 系統呼叫 sikuli,自動在各個 VM 裡頭執行 installer.exe,並完成軟體的安裝。
  5. 安裝完畢,會呼叫 Robot Framework 開始進行 UAT (User-Acceptance-Testing)。
  6. 完畢,產生報告。
有了 Continuous Delivery,現在 RD/UX/PO 都隨時可以下載最新版的”已測試過"軟體來使用,再也不用等人手動去 build 出來了。

更多技術細節,就等其它人分享了 :) 


家裡附近有幾家早餐店,其中一家大部份只有老闆娘一個人獨撐大局,另外二家則是有好幾個員工。每家早餐店的客人數量感覺都差不多,不過員工多的反而常常出餐慢、上錯餐點,而一人早餐店卻可以做的非常有條理,速度也不錯。根據我長久以來的觀察,我發現了其中的奧秘...

人月神話:軟體專案管理之道(20週年紀念版)

一人早餐店:老闆娘具備了明星早餐店員工該有的特質:

  1. 記憶力超強、超級會認人:她可以一邊接電話收預訂早餐的訂單,一邊聽在現場的客人跟她點餐,而且不會搞混。當你點過一次鐵板麵加半熟蛋後,以後你再來點鐵板麵加蛋時,她就會直接跟你確認:「蛋半熟厚?」,點過漢堡不加生洋蔥,以後她就會直接跟你確認:「洋蔥不要厚」。
  2. 手腳快:是的,他一個人可以顧好四台烤箱、一排烤麵包機、正在煮的義大利麵跟那檯永不停息的鐵板爐,而且每當有一些新訂單進來時,他總能瞬間將生產排程最佳化
  3. 心算快:要結帳時,他瞄一眼你的桌子,就知道你總共吃了那些,總共多少錢~

人海早餐店:這裡的員工通常不具備明星架勢

  1. 記憶力普普:你講過一次的東西他可能在覆誦時就漏了,還有打電話來訂結果做錯餐的,當然,這裡的員工也不大會記得你愛吃什麼,什麼要加什麼不加,蛋是全熟還半熟,所以你每次都必需交待一遍(不過更慘的是,現在交待的也不見的記得清楚就是了..)
  2. 手腳快不起來:每個人速度還好,但是做一個漢堡要三個人做->A對甲說:幫我烤一份漢堡,再對乙說:幫我煎一個豬排,最後再由A統一加工,每當A說:再幫我烤一份漢堡時,甲就開始想到底是剛才要烤的那份還是要再加一份,然後就需要進行「溝通」,每當有新的訂單進來時,也無法將生產排程最佳化,因為每個人都只能看到 local 的東西,沒有辦法綜觀全局。甲還不時要同步一下,問說:「所以現在總共烤二個嗎?」
  3. 心算普普:當你結帳時,櫃台那位還很有可能要轉頭問另一位店員說:「他的多少錢?」,天啊,這樣不是很像冗員嗎.........而且被問的那位還要看看單子慢慢算,真的是很慢啊 =.="

當踏出人海早餐店,看著店門口寫著的:「徵工作夥伴」,我心都涼了.......下次應該帶幾本軟體專案管理的書給老闆看看,不然以我後早餐的選擇可能會變很少了。

不過我的心得是,軟體開發跟開早餐店有許多相同之處,軟體開發應該要找明星級人才來,而不是找一堆普通的人才,明星級人才可以一個人獨立完成相當規模的程式(C++ 5,000~100,00行),他不需要花時間在與其它人溝通,但如果你雇了三個普通的人才,他們花在溝通協調的時間(甲:喂,我這個不是thread-safe哦!乙:為什麼呼叫進去會block住這麼久?丙:你的介面很難用耶),可能明星級人才都已經把事情做完了(一個人做,他很清楚怎麼設計最好,別人還在 Multi-Thread 打滾時,他已經想出了一個高效的 Single-Thread 解法)。

你還認為三個臭皮匠勝過一個諸葛亮嗎,我不認為,因為扣除溝通這一點外,還有一句人月神話裡的名言:「在接受相同的訓練、同樣都是兩年資歷的情況下,優秀專業程式設計師的生產力要比差勁的程式設計師好上十倍」。如果要打造一個大型的軟體,你需要的會是幾個諸葛亮,而不是一堆臭皮匠。

後記:

今天早上又去了人海早餐店,點完餐,報紙翻沒幾頁時,店員竟然已經拎著我的早餐給我,對我說:「先生,你的餐好了,一共NT$135」,我眼淚都快流出來了,你們真的進步了,出餐的速度變快了。回到家,我真的流下淚來,我點了蘿蔔糕、漢堡、鐵板麵加一杯豆漿及薏仁漿,但是袋子裡面只有漢堡、鐵板麵跟薏仁漿,也就是有40%的餐點是沒有給我的(不過錢倒是100%都有算到)..............我無言了。只能說加油了....

Dreaming in Code,不知道大家是否還記得 Mitch Kapor? Lotus 的創辦人,也就是當年紅極一時的Lotus 1-2-3的作者之一。當年Mitch Kapor與Bill Gates可以說是軟體業界的兩大名人,後來因為一些因素,Mitch Kapor離開了Lotus。隔了一段時間之後,他帶了一堆駭客級的程式設計師(如Netscape Navigator的作者, MAC kernel的作者...),準備打造一套PIM軟體 - Chandler,耗時三年,卻始終無法正式推出..Why?請見
Dreaming in Code
Older Posts Home

ABOUT AUTHOR

Follow us

POPULAR POSTS

  • 八德。生態埤塘公園
  • [NOTE] Home Automation 家庭自動化
  • RIDE 中的雞肋功能 - Pause On Failure
  • QML - Introduction of QML Multi-Media
  • [DECO] Diro Coffee Shop 陽台改造計畫 Part 1

Categories

  • 2016 5
  • agile 3
  • Bike 4
  • Book 4
  • Cooking 1
  • DECO3 4
  • House 8
  • Interior Design 4
  • IoT 1
  • IT 7
  • Life 13
  • Photography 1
  • Programming 22
  • QML 8
  • Qt 9
  • Scrum 3
  • Software 19
  • Travel 9
  • UAT 1
  • Uncategoried 3
  • 喇叭 1
  • 裝潢 6

FOLLOW US @ INSTAGRAM

About Me

Popular Posts

  • Odd-e LeSS@上海 後記 Part 4
    在 LeSS 最後一天,聽到別的公司在導入敏捷時,也成立了很多很多的實踐社群 CoP (Community of Practice),其中一個是 心靈成長 CoP,讓我印象非常深刻,這邊來聊聊為什麼 :) 在第五項修練中,彼得聖吉一直在強調"整體": 「遠古的人類並...
  • 單車路線#5 - 大坑缺溪-秀才窩自行車道-梅崗
    沿大坑 缺 溪騎到鎮南橋後,直走接往中庸路,經過一小段爬坡即接往福羚路,再往接瑞溪路即可抵達楊梅愛買後方,接著往裕成路(五楊高架下方)是我騎到楊梅最喜歡的路線。裕成路到底後,便到達楊梅校前路,是熱門的自行車路線,校前路前行便會抵達這條路線的重點-秀才窩自行車道,這個路線會穿過小茶...

Advertisement

Copyright © 2016 Diro's Journey. Created by OddThemes