l

2015年4月24日 星期五

不是你的客戶

April 22 08:48~09:42

螢幕截圖 2015-04-22 09.35.29

畫面節錄自《食神》電影。

 

有一次和某位客戶A聊天…

Teddy:曾經有一家年營業額幾千億的公司想派一個人來上我的Scrum課程,HR居然為了殺價一千元打了2~3次電話給我。

客戶A:(立刻脫口而出)他們不是你的客戶。

Teddy:對啊,我後來沒答應,他們也真的沒派人來上課。

客戶A的這句「他們不是你的客戶」一直深深烙印在Teddy的心中。做生意沒有人不想賺錢,如果「量大」價錢當然可以商量,但不合理的殺價就無法接受。如果什麼錢都想賺,最後可能會失去自己的原則,那當初又何必選擇創立泰迪軟體這種生活模式。不如選一家大公司,每天思考如何拍老闆馬屁不就得了,日子好過得很挑眉質疑

***

最近接到公司B的HR打來的電話…

公司B:某某時間這兩天上課你有空嗎?

Teddy:這兩天我可以。

公司B:對了,關於課程的價錢,你也知道我們有跟好幾家詢價,你們的價錢比別人高。不知道費用方面能不能調整?

Teddy:我報給每一家企業內訓的收費標準基本上是一樣的,如果您覺得太貴,可以去選便宜的。

公司B:那我們內部需要再討論一下。

講完電話之後Teddy的內心又響起了「他們不是你的客戶」這句話。如果公司B最後選擇比較便宜的廠商,自己也不用因為當時沒有降價而感到遺憾。應該思考的是,如何提升自己與的產品價值,讓別人願意認同「價值」而非糾結在「價錢」上面。

***

低價策略短時間也許可以找到比較多的客戶,但公司的總收入卻不一定會增加。而且Teddy還可能會被增加的客戶壓的喘不過氣來,反而沒有時間進修、思考、寫書、開發新課程。短時間還可以靠以前累積的知識騙吃騙喝一陣子,但這並非長久經營之計。

Teddy的夢想是,希望有一天泰迪軟體的課程與顧問服務可以收取和國外同等課程與服務的費用,而且依然可以在台灣生存下去,這就代表自己的能力與價值被認同。不需要靠國際認證、大廠背書與造勢活動,而是靠自己的耕耘。

如果有一天泰迪軟體的課程或服務變便宜了,很可能代表Teddy自己認為品質下降,或是公司房租與薪水快發不出來了。希望不要有這麼一天啊挑眉質疑

***

友藏內心獨白:是越來越有價值,不是越來越貴

2015年4月23日 星期四

Fixture Setup Patterns(2):Delegated Setup

April 01 16:45~17:25

螢幕截圖 2015-04-01 16.54.31

 

今天介紹《xUnit Test Patterns: Refactoring Test Code》書中提到的第二個Fixture Setup模式:Delegated Setup。這個模式和In-line Setup很像,差別在於Delegated Setup呼叫外部函數來執行設定測試環境的動作,而In-line Setup則是直接把設定測試環境的程式碼寫在自己身上。

以下程式碼就是採用Delegated Setup,測試資料由呼叫createInjuredAgentV2()函數所產生。

螢幕截圖 2015-04-01 17.11.25

***

Delegated Setup可以想像成的In-line Setup套用Extract Method之後的結果,將抽離出來的test fixture程式碼依據它的意圖取一個有意義的名子(Intention-Revealing Names),這樣就可以兼顧簡單易懂重複使用的好處。

***

友藏內心獨白:會不會給它分的太細了一點啊?

2015年4月22日 星期三

台灣有沒有哪些公司在實行敏捷開發而且跑的不錯?

April 21 21:38~22:23

image

 

前幾天有一位鄉民甲在FB傳了一則有點長的訊息給Teddy,大意是想詢問:「臺灣有沒有哪些公司在實行agile而且跑的不錯的,不是有名無實?

這個問題Teddy被問過好幾次,大膽假設一下這些發問者的心態可能是:

  • 有這麼棒的公司,我也要去投履歷。
  • 利用別人的公司當例子,來說服自己公司也應該要實施敏捷方法。
  • 利用別人的公司當例子,來比較自己公司實施敏捷方法的好壞,進而加以學習。

剛開始Teddy也是很有興趣想打聽到底哪些台灣公司實施敏捷方法做得很好的,但過了一陣子之後,就打消了這個念頭。因為聽過好幾次別人口中所謂「做得很好的公司」,等到自己有機會實際接觸之後,卻發現其實也還有不小的持續改善空間。雖然這是敏捷團隊的正常現象,但總覺得多多少少有點「廣告不實」的嫌疑

敏捷方法在台灣落實的深度與廣度都還算是在起步階段,如果真的想要學習其他公司的經驗,現階段還是多看看歐美國家的實踐經驗比較實在在心態上Teddy覺得寧可多花時間去深入了解與親自實踐敏捷方法,先打消到處打聽哪邊有「好康的」然後抱持著看看能不能直接吸收別人的日月精華就可以功力大躍進的想法。

***

後來Teddy回覆鄉民甲…

Teddy:我覺得台灣有沒有「這樣的公司(實施敏捷方法很成功)」這個問題一點都不重要,環境可以自己去創造,不必時時都想享受前人的努力。

可能是回答得過於簡短,沒把話說清楚,鄉民甲誤會Teddy指責他想要享受「我創造的東西」。這點真的有點冤,Teddy指的「前人的努力」是鄉民甲想要詢問的那些「在台灣實施敏捷方法很成功的公司」,並非Teddy個人。不過還是怪自己語意不清,於是跟對方澄清一下…

Teddy:您誤會了,我不是這個意思。我是說我也遇到很多人想找一個已經完美的環境去投效 但在台灣這樣的環境很少。所以與其打聽有哪些公司做得很好,還不如思考自己如何做好。

***

突然想到《思考的藝術:52個非受迫性思考錯誤》書中的這一段話:『世界是複雜的,人們必須花費許多心思才能理解一個觀點。在你有這樣的頓悟之前,最好奉行馬克吐溫的話:「如果無話可說,就閉上嘴巴。」』

就說不知道不就沒事了挑眉質疑

***

友藏內心獨白:真的是言多必失啊。

2015年4月21日 星期二

Fixture Setup Patterns(1):In-line Setup

April 01 16:00~16:39

螢幕截圖 2015-04-01 17.05.19

 

介紹完《xUnit Test Patterns: Refactoring Test Code》書中提到的測試案例壞味道,接著介紹幾個Fixture Setup模式。Fixture Setup模式可以分成兩大類:

  • Fresh fixture setup:包含In-line Setup、Delegated Setup、Creation Method、Implicit Setup這四種。
  • Shared fixture construction:有Prebuilt Fixture、Lazy Setup、Suite Fixture Setup、Setup Decorator、Chained Tests這五種。

今天先介紹In-line Setup

***

In-line Setup顧名思義就是將設定測試環境的動作放在test method裡面直接就地解決。每一個test method個別負責自己的環境設定,所以每次執行測試的時候都會得到一個新的測試環境(fresh fixture)。

以下程式碼就是採用In-line Setup,測試資料的產生方式直接寫在test method裡面。

螢幕截圖 2015-04-01 17.03.34

***

In-line Setup的好處就是簡單易懂,執行測試所需的所有資料直接看程式碼就可以知道,一目了然。缺點就是如果多個test method所需的test fixture都一樣,設定test fixture的程式碼就要複製好幾份。通常In-line Setup是撰寫測試案例的起點,先把需要的資料寫在test method裡面,日後如果有共用程式碼或是共享fixture的需要,再套用其他模式來取代。

***

友藏內心獨白:沒錯,這也算一個模式。

2015年4月20日 星期一

沒有什麼比的上書

April 01 12:50~13:30

螢幕截圖 2015-04-01 13.26.36

今天要 咬哪一本書勒!

 

有一次跟一位好朋友聊天…

好朋友:我們公司最近請了一位顧問,來教我們做軟體重構(refactoring)。

Teddy:你們的軟體有什麼問題嗎?

好朋友:其實重構本身不難,不過因為我們的系統已經開發了5~6年,中間轉手了好幾次,平常也沒有撰寫單元測試。所以我們請顧問來教導我們如何重構一個沒有單元測試的既成系統(legacy system)。

Teddy:你怎麼知道顧問有能力解決你們的問題?

好朋友:在面試顧問的時候,我有特別問他如何重構一個既成系統。他告訴我先找到要重構的點(模組、類別或函數),然後在這個點的四週圍用單元測試將它隔離起來。這樣就可以piece by piece的逐步重構系統。能夠這樣回答,一定是有豐富的實戰經驗。

聽到這裡Teddy心裡想:「這個做法是《Working Effectively with Legacy Code》書中提到的一種方法,並無法就此判斷顧問是否真的有實戰經驗還是他僅是看過這本書。」當時朋友的顧問合約已經簽了,專案也正在執行,Teddy就沒把內心獨白說出來。

***

後來又有一次和這位好朋友吃飯,話題聊到敏捷開發…

好朋友:我覺得敏捷開發(特別指Scrum)的很多做法其實沒什麼特別的,傳統軟體開發都有涵蓋到。比較令我印象深刻的是retrospective這一點,做了快20年專案都沒有在其他的方法中聽到。

Teddy:其實retrospective也不是什麼新的觀念耶,以前我念書的時候修PSP(personal software process),書中就有提到每個開發周期結束要舉辦postmortem(驗屍、事後檢討)這個活動。基本精神和retrospective大同小異,都是檢討過去做事的方法,並提出改善計畫。只不過敏捷開發的retrospective搞的比較活潑熱鬧罷了。

好朋友:呵呵,那還真是我書讀的太少了啊。

Teddy:您客氣了 XD。

***

Teddy很喜歡《思考的藝術:52個非受迫性思考錯誤》這本書裡面的兩句話:

  • 胡說八道可以掩蓋無知。如果表達不清楚,那就是說話者不知道自己要說什麼。…世界是複雜的,人們必須花費許多心思才能理解一個觀點。在你有這樣的頓悟之前,最好奉行馬克吐溫的話:「如果無話可說,就閉上嘴巴。」簡潔,是漫漫長路的終點,而不是起點。
  • 我們資訊充足,但所知甚少。想要了解世界,沒有什麼比的上書

成立泰迪軟體之後認識了許多靠著「資訊落差」賺錢的人,包含Teddy自己。這原本也沒什麼不對,你懂的東西比別人多,別人願意付錢來購買知識(資訊)實屬正常現象。但在提供知識的同時,如果可以儘量提供完整的全貌,並附上參考資料,讓購買知識的人日後有能力可以自行覓食,這一點是很重要的。

***

友藏內心獨白:不要亂猜。

2015年4月19日 星期日

2014滿月園爬山(下)

March 27 23:08~23:31

離開處女瀑布之後繼續前往滿月園瀑布,這個瀑布規模比起處女瀑布小很多,不過滿月園瀑布前有一個比較寬廣的平台,如果一群人要拍團體照,這裡是很適合的地點。

螢幕截圖 2015-03-27 23.06.21螢幕截圖 2015-03-27 23.06.29螢幕截圖 2015-03-27 23.08.29螢幕截圖 2015-03-27 23.08.41螢幕截圖 2015-03-27 23.09.12螢幕截圖 2015-03-27 23.09.27螢幕截圖 2015-03-27 23.10.15螢幕截圖 2015-03-27 23.10.25螢幕截圖 2015-03-27 23.10.54螢幕截圖 2015-03-27 23.11.26螢幕截圖 2015-03-27 23.12.13螢幕截圖 2015-03-27 23.12.31

 

看完滿月園瀑布準備打道回府,回程走另外一條自導式步道。這個步道非常棒,兩旁種滿了高大、筆直的樹木,遊客也不多,走起來十分舒服。感覺比去看瀑布還要值得。

螢幕截圖 2015-03-27 23.16.49螢幕截圖 2015-03-27 23.16.57螢幕截圖 2015-03-27 23.17.11螢幕截圖 2015-03-27 23.18.05螢幕截圖 2015-03-27 23.18.18螢幕截圖 2015-03-27 23.18.27螢幕截圖 2015-03-27 23.18.42螢幕截圖 2015-03-27 23.18.54螢幕截圖 2015-03-27 23.22.20

 

最後看幾張全景圖。

螢幕截圖 2015-03-27 23.27.33螢幕截圖 2015-03-27 23.28.30螢幕截圖 2015-03-27 23.30.12

***

友藏內心獨白:強推自導式步道。

2015年4月18日 星期六

2014滿月園爬山(上)

March 27 22:11~22:52

2014年11月和Kay到新北市的滿月園爬山。好幾年前有來過一次,後來聽說新做了一個沿溪的步道,沒走過過來看看。這個步道做得很棒,有一大段路地上鋪了木屑,走起來好舒服。11月份步道旁長滿了芒草,別有一番風味。

螢幕截圖 2015-03-27 22.21.45螢幕截圖 2015-03-27 22.22.02螢幕截圖 2015-03-27 22.22.10螢幕截圖 2015-03-27 22.22.42螢幕截圖 2015-03-27 22.23.02螢幕截圖 2015-03-27 22.23.18螢幕截圖 2015-03-27 22.25.35螢幕截圖 2015-03-27 22.25.48螢幕截圖 2015-03-27 22.26.11螢幕截圖 2015-03-27 22.26.38螢幕截圖 2015-03-27 22.26.47螢幕截圖 2015-03-27 22.34.38

 

走了約20分鐘左右來到大門口,買了門票入內,一直往遊客中心前進,先去吃點東西。這一段路步太好走,但也是必經之路。許多景點都由這裡開始。

螢幕截圖 2015-03-27 22.37.31螢幕截圖 2015-03-27 22.37.41螢幕截圖 2015-03-27 22.38.03螢幕截圖 2015-03-27 22.39.57螢幕截圖 2015-03-27 22.38.10螢幕截圖 2015-03-27 22.38.30

 

滿月園有兩個知名的瀑布,在遊客中心稍做休息之後準備先前往處女瀑布。

螢幕截圖 2015-03-27 22.39.57螢幕截圖 2015-03-27 22.40.42螢幕截圖 2015-03-27 22.40.49螢幕截圖 2015-03-27 22.41.03螢幕截圖 2015-03-27 22.41.21螢幕截圖 2015-03-27 22.41.42螢幕截圖 2015-03-27 22.41.56螢幕截圖 2015-03-27 22.42.25螢幕截圖 2015-03-27 22.45.32螢幕截圖 2015-03-27 22.42.45螢幕截圖 2015-03-27 22.43.19螢幕截圖 2015-03-27 22.43.29螢幕截圖 2015-03-27 22.43.38螢幕截圖 2015-03-27 22.43.50螢幕截圖 2015-03-27 22.44.07

***

友藏內心獨白:好可愛的警示牌。