2012年12月15日 星期六

2012 Java 認證日與會感


        其實除了我有利用 Java 開發過 Android 程式外,對於整個 Java 繁華萬千的世界,我可以說是個局外人。

        這次『2012 Java 認證日』從主題很明顯是個推廣 Oracle 版本的 Java 證照行銷活動,本來應該與我毫無關聯,但收到 eDM 的當下,不小心被我瞄到這場免費活動的議程其實有『置入性教學』。真是怪哉,別人都是藉教學之名做『置入性行銷』,Oracle 則是反其道而行。

失敗專案的得與失

        前幾個月和同事在業外接下一個稍具規模的專案。承接這專案其實背負著相當高的風險,其一為此案所需要的各項專業技能我們是完全付之闕如,能夠在什麼都不會的情況下接觸到這案件,完全是同事的人脈引薦所致。其二為對眼前這個合作夥伴的不熟悉,以及一些不信任因素。

        當初會考慮冒此風險,原因之一是此案的極高的報酬,再來是因為上過激勵課程,內心感覺要跳脫筐做冒險:若要如何,全憑自己。所以在工作規劃分配後,對於必須惡補的技術項目覺得有賭一賭的信心。


        如果是之前的我,只敢做有把握、會做的事,當看到實力和目標有如此懸殊的差距,一定會直接拒絕。



        當然,最終沒有成功完成此專案,但其實我一點都沒有難過的感受。因為這個挑戰的本來就是『失敗是應該,成功才奇怪』的任務,然而我從這個挑戰的過程看到自己的延展性和真正的弱點。若我承接的是個十拿九穩的案子,面對的可能就是『成功是應該,失敗卻難過到想不開』,而且什麼都沒學習與成長的結局。


        所以接下案子後,我們當務之急就是如何將技術落差產生的風險降到最低,並且爭取最多的工作時間作為克服技術障礙的緩衝之用。


        這次團隊組合的專精是在 Adobe Flash / .NET ( ASP.NET ) / MS-SQL,但客戶要的是 HTML + AJAX ( No Flash ) / Java ( JSP ) / PostgreSQL 。在最初幾次與客戶的會議討論,總算把其中一項置換為同事所宣稱熟悉的 PHP。客戶的網站除了少部分的特色項目,大多是一般網站都該有的常見功能,而 PHP 是出了名的有很多免費既存套件可以快速架站,因此我研究幾套自由免費的 CMS ( 內容管理系統 ) ,挑選了 Joomla 做為整個專案的開發基底。


        由於 Joomla 只支援 MySQL 和客戶需求不同,經過幾次強力說服客戶轉換資料庫平台無效後,我肩付起最難評估風險的任務:移植 JoomlaPostgreSQL 平台上。要深入這麼龐大的系統原始碼進行改寫,而且用的是我毫無所知的語言 PHP ,這過程只能用費神費力、艱辛刻苦來形容。利用 Joomla 可以大量節省我們刻後台管理的開發時間,並且解決掉一半前端頁面的工作量,等於把這些省下的時間全部賭在移植工作上,這真是一場生死一翻兩瞪眼的豪賭,若改寫移植失敗,將面臨沒有任何進度兩手空空去見客戶的窘境。

        這中間多少次,遇到 trace 細節內的魔鬼讓我挫折沮喪幾乎要舉白旗的當下,最後決定堅持不放棄。結果,竟然能在最短的時間內深入學習多項過去不曾碰觸的技術或應用:PHP / Zend Studio / Joomla / MySQL / PostgreSQL。若不是執意冒險承接這個案子,我敢說這輩子幾乎不會也沒有任何動機去接觸這些新玩具。


        然而最後案子的敗跡,竟然不是出在這些技術關卡上,而是團隊的合作出現間隙!


        首先是上半局,其中一位經由同事介紹認識的夥伴表現非常沉默被動,幾經詢問後才表達:因技能落差太大,也沒有想接觸新東西的想法,感覺這案子太硬、風險太高而決定離場。後期擇是當初介紹這個案子、宣稱很熟 PHP 並且負責前端使用者頁面與互動的同事,完全沒有進行任何有效的開發動作。我不斷請他給我進度上的承諾、不斷地在我心中設下停損、也不斷地看到進度一再地跳票。


        雖然離結案還有一段時間,但我心中已經認定這是艘救不起來的鐵達尼。與其在最後一天才兩手一攤,給上游客戶難堪,又讓自己獨自一人的努力白費,我選擇嚴守停損,斷尾求生提前主動告知退出這個案子,讓客戶還有另尋備案的機會。




        雖然拿不到半毛錢,這段時間花的力氣看起來像是平白損失了,但其實我卻有十分充實愉快地感受。因為這個案子進行過程的每一天,都在逼我學習許多全新的東西,也開啓了我對其他類型技術的視野。這個學習的過程,本身就是相當值得的回報,也讓我對跳出自己能力框框去接下任何可能的機會有了全新的想法

        而且回顧失敗的原因,其實也正反映出我一直以來的弱項如何真正有效地管理協同合作的夥伴?


        之前我本來想寫另一篇難產中的文章,反思我過去有三個失敗的創業合作案的體悟,連同這個外包案在內,恰恰好都遇到一模一樣的 Pattern,就是:我一個人一頭熱,夥伴卻都沒採取有效行動


        常常因此搞得我心情惡劣導致破局。既然要找到步調一致的夥伴太困難,我又沒有能力去管理夥伴的執行力,而且容易因此而惱怒到不爽幹,所以到底該怎麼解決這樣重複的模式而改寫結局呢?

        在我心中,答案似乎慢慢浮現了出來⋯⋯。




2012年11月11日 星期日

AppWorks DEMO #5 會後感

        11 / 7 日這天跟公司請了假,和同事小郭一起親臨這場半年一次的創業大拜拜。這次總共有 23 組團隊上場展示,好像是我參加過最多團隊的一次。經過上次太晚到場連椅子都沒得坐、資料沒得拿的教訓,這一次我早早到場順利幫同事佔到前兩排的座位。

        觀賞過程中,小郭讓我體會他虛實整合的優越能力:他女朋友觀看線上網路直播,他在現場一邊透過手機用 LINE 跟女友討論交換意見,其中不乏出現許多讓人噴飯的苛薄言詞。

        以簡報表現來說,整體成績和上一次相比屬伯仲之間,不過以創業主題而言,比起上次更吸引我許多,至少沒有出現那種讓我久坐不耐的情形。跟上次較為不同的,這次大部分的團隊都有準備預錄好的 DEMO 影片在簡報中播放,而減少了 live demo 的比重。

        這其實是個聰明的方式減少現場現場不預期的意外,也可以先規避防錯的開發工作。不過也因此會讓人懷疑他們的產品是否真如他們宣稱與影片上所示那麼流暢?畢竟某組的影片剪接的斧鑿痕跡過深,看得出很多程式載入和操作反應的畫面被剪掉。

2012年10月7日 星期日

UML 教學分享


        前陣子我開始在公司內嘗試導入 UML 做為內部所有設計文件的溝通標準。過去,敝公司的前任架構師有他習慣的系統架構表達方式,定義了許多幾何形狀與色碼標準。

        雖然其細緻程度也能相當詳盡地表達系統的異動,但總不是個業界標準的方式。

        一直以來,我的理念就是讓工程師(包括我自己在一家公司所學到的技能與知識,是到了下一個環境也能夠再運用的,而不是學到的知識僅僅只能適用於當下的工作環境,一旦轉換了工作環境就全部變成廢物,這樣不但無法真正累積實力,而且真的非常浪費寶貴的生命。

        終於有機會讓這局面有了轉機,我開始重新導入設計文件的標準,開始要求工作同仁放下過去學到的一切,全部重新改以業界標準 UML 來表達一切的設計。

2012年8月27日 星期一

【預先構築】開課經驗與心得

        當一個系統成長的越來大時,不是只求功能可以用、程式可以動而已,還要考慮到『可維護性』、『可變動性』以應付隨機改變的商業競爭環境。然而系統越大,往往包袱越多、越難以變動、不可預期的風險越大,這就是目前公司最頭大的問題。

        最近我們單位在公司內肩負起提升程式開發人員做『設計』的素質,希望大家真的能從『程序員』變身為名副其實的『程式設計師』。然而想要從開幾場 seminar 就改善這件事未免太異想天開,談如何做設計這件事情,本身有太多經驗的累積和眉角,決不是照著固定章程 SOP 就可以達到,甚至有同事譏為「不傳之秘」

        就如同我過去的文章曾經表述,設計不分好壞,只有合適和不合適兩種,合適的設計就是能『因地制宜』的設計,所以做任何設計之前,認清楚當下所處的環境才是最重要的根本!

2012年8月3日 星期五

哪裡有「好公司、好工作」?

        相信大部分的人對於目前的工作、公司的文化,內心有很多的不滿與抱怨,我也是。

        去年年底,我曾經因為對職位工作內容的失望,對人事糾葛內耗的無力,而跟公司請辭。被慰留時,我還寫了一封信給慰留我的高層主管。

        當時認為自己在工作崗位上已經『學不到我想學的東西』、『推動不了我想貢獻的改變』,專業沒有成長,工作因為公司的氣氛而沒有成就感。那時的我,實在找不出自己想在公司內做什麼,只有面對一堆『不想做』的事情

        我很感激公司高層願意幫忙排除掉那些『不想做的項目』,但在當時那個階段,仍未找到『想去做的項目』。過去我一直認為當工作內找不到讓自己有企圖心的項目,就是該轉換環境尋求其他發展的時刻,所以在食之無味、棄之可惜的情況下,一邊騎驢找馬,探訪其它出路。

        然而就在今年初一場課程的突破,我發現到:一切與我有關

        我們不妨回頭再想想,為何大部分的人都在抱怨自己的工作和公司呢?至少就我周圍接觸的人統計來,這個比例應該接近百分百(SHIT,這是吸引力法則嗎?)。

        我們可以推導出原因的真相,可能是因為:
  1. 世界上沒有百分百合意的工作:也許我所嚮往的其他公司,裡面其實也有一堆抱怨不滿的員工伺機逃出,所以才會走到哪都遇到對工作不滿的人。
  2. 會抱怨不滿的人到哪裡都還是會繼續抱怨與不滿:牛牽到北京還是牛,心態不正確的人到哪裡都是不對的。
        根據第一點,既然世界上沒有百分百合意的工作,那換工作根本無法解決問題,只是從一個火坑跳到另一個火坑。地獄反正有十八層,大家可以輪流玩看看,反正人生就是一票到底,不玩白不玩,但不論怎麼玩,終究無法解決問題。

        根據第二點,問題出在自己,卻妄想用外在環境來改變現況,根本是緣木求魚,換工作一樣是無法解決問題

        課程手冊有一段小故事,說一個女孩總是遇不到自己心目中的理想男人,裡面的智者是這樣回答:
“你以為會有一個你覺得完美的人出現嗎?那是需要你去創造的。你想要這樣的人,就要主動令你身邊的人成為那個人,而不是等待他從天而降。”
        若一個人總是抱怨自己在路上撿不到錢、中不了樂透,卻不肯找份工作賺錢。如果我們會覺得他非常愚蠢,那不妨回頭看看我們抱怨自己的工作、抱怨自己的親人和伴侶,是不是跟那個想在路上撿錢的人一樣愚蠢?

        我們在等待好公司好老闆出現,不願意自己創造,是什麼擋住了我們自己?
“公司又不是我的,應該是老闆要負責創造。”
“人不可能改變的,太難了,我不想花這力氣去說服他。”
“我老公(老婆)的個性又不是我養成的,是他(她)的家庭環境造就的,為何我要負責改變他?他應該自己反省。”
        排除掉那些光冕堂皇的說詞,這些理由說的其實都是同一件事我不想付出自己的力氣

        這跟不願意辛苦工作來賺錢,只想要路上撿到錢的傻子有什麼兩樣?只是層級不同,但行為模式卻是一致的。

        而這,就是過去的我。

        我自己做出選擇『不把公司當自己的』;自己做出選擇『不跟難搞的同事協調溝通』;為了「保住屁股」不願意冒出頭的風險,自己做出選擇『不反映對公司不滿的地方或是建言』。也難怪主管總在員工提出離職的當下,才聽得到他們這些年來不滿的真心話。而這些員工,做出了選擇『不願意創造讓自己工作環境改善的機會』,無怪乎大部分的人都在抱怨自己的工作和公司。

        一切都跟自己有關

        當你面對一個廢墟,你可以“決定”自己感覺『缺乏資源,什麼事情都沒辦法做』,你也可以“決定”自己感覺『一切百廢待舉,沒有包袱,希望無限』。

        千萬不要因為壓抑、挫折就選擇像是喪家之犬那般失敗者的姿態,因為逃避而轉換跑道。因為這絕不會讓我們更有自信去接受下一份未知的工作,反而讓我們帶著過去失敗的經驗,以更多恐懼、害怕,如驚弓之鳥去接下新工作。

        這,只會成為十八層地獄惡性循環的起點。

        我前面剛說過,面對自己現在的公司,缺乏了『讓我想做,可以激發我企圖心的項目』,而我現在該自己動手創造這些項目!事實上,我心中曾經有勾勒出一個理想公司的模樣,我決定讓那個心目中的模樣在這邊實現!當然或許做不到百分之百的實現,但是不管能做到幾成,就算只有十分之一,只要發揮效果而讓現況朝我的理想接近了一步,我都可以帶著勝利者的心態轉換工作,在新環境用更有自信的態度去迎接新的挑戰

        選擇以勝利者的姿態,急流勇退地離開,而不要以失敗者的姿態,逃離現場。

        什麼樣的姿態收場,所有的決定:一切與我有關

2012年7月18日 星期三

關於「我沒有時間」這檔子事…

        「沒有時間」在我看來,是人生陷入絕境的一種警訊。因為在我們有限的生命裡,能夠創造無限可能的唯一籌碼,就是「時間

        學習、成長進化、思考方向、執行與創造新的機會,這些都需要我們投入時間。一旦當你開始說「我沒有時間」,這就是某個惡性循環的開端,而且很難翻身

        我曾經在「兒童關懷協會」的義工活動說,在我看來,世界上最可怕、最絕望的行業,就是「計程車司機」。因為他們不是領定薪,而是「做多少、拿多少」,想賺錢就沒有懶可偷。而這個工作最可怕的地方在於:即使沒生意可做,時間也不是他們的,因為他們還是得不斷地花時間開著空車像是孤魂野鬼在路上繞圈圈,尋找乘客。

        有客人載時,他的時間只能專心開車,沒有客人時,他還是只能專心開車(除非他決定今天生意不做了)。幾乎沒有別的行業吃時間吃的這麼兇狠的。

        不信的話,大家搭計程車可以跟司機聊聊他開了幾年車?我得到的答案幾乎都是八年十年以上的,一旦陷入這個行業,幾乎就是做到退休!這個行業竟然遠比其他行業穩定,決不是因為這是某個幸福產業,而是他們全部都陷入無法跳脫的惡性循環(註)

        最近,我周圍的朋友一個個跟我反應:工作忙到昏天暗地,工作時間從早到晚,沒有喘息
  • 朋友A:是某公司行銷企劃,因為工作繁忙又是責任制,幾乎天天早九晚十一,一天工作常常超過 14、15小時,有時連周休一日都休不到,沒空顧女朋友,天天吵架。
  • 朋友B:在某大建設集團工作,公司內鬥嚴重,只要休假或是沒有配合加班,立刻成為被攻擊放箭的目標。搞得他就算事情做完,還是得跟大家一起加班,以防患同事放箭。
  • 朋友C:某公務機關業務承辦人員,早八晚八,回家還得應付家庭需求,苦惱沒有自己的時間。
        在我的觀念:時間比財富還重要一寸光陰一寸金,寸金難買寸光陰)。

        如果你認同「沒錢更要理財」,對「沒財可理,所以不用理財」嗤之以鼻,那麼,對時間也是一樣的。

        朋友C說:還在學習中,如何誏自己更有效率

        改善工作效率的確是一個辦法,但是可能必須學會新技巧、新工具,對工作內容有足夠的經驗,而這恐怕不是短時間內可以達成的

        其實有個更為有效,可以立竿見影的方法,只要你願意,甚至從下一秒鐘就可以立刻爭取到更多時間,那就是加快『轉換』

        什麼是『轉換』?就是當你開始工作時所需要的「心理狀態準備時間」。常常我們必須面對自己必須做、卻又討厭的事務,會花很長的時間在糾結、在抗拒、在想逃避,因此在真正做事之前,花費了很多時間在進入「出來面對」的心理準備狀態。

        想想自己從學生時期,要唸書,是不是先走動一下、打開冰箱看看、深呼吸、放空,花了十分鐘才讓自己調整心境去面對討厭卻又非做不可的事情?

        工作時,看到不想承辦的業務放在桌上,是不是決定先上網看看新聞、股票和臉書,然後上個廁所,倒杯茶或泡咖啡,直到沒什麼可以繼續打發時間的時候,才硬着頭翻開桌上的文件夾(而且你會發現你的手部動作特別緩慢,仿佛在拍吳宇森的電影)?

        又或是遇到需要跟討厭又合不來(甚至曾經得罪)的同事合作專案,心理先罵一陣子怎麼這麼倒楣、以靜制動、等待對方是不是會主動找你、掙扎要怎麼開口要求協助、逃避不去想。最後逼不得已,深呼吸才起身前往或是發出第一封電子郵件?

        夫妻或情人吵架,雖然知道絕不會因此就分手或離婚,最後一定要面對問題並和好,但是在進行下一次溝通前,卻花了很多時間等氣消、等調整心情,直到夜深人靜,身心疲累不得不回家睡覺,才再次進行溝通和面對。

        當我們遇到討厭卻又必須面對的事情,我們花費大量的時間在「心理狀態的前置準備」。偏偏人生不如意之事情,十之八九,這代表只要我們心境轉換得夠快,一天之中大部分的事情,我都能夠多爭取到這些大量浪費在『調適心情』的時間上

        加快和縮短這個「心理準備」轉換的時間,不需要學習任何新知識和原本不會的工作技巧,差的就只是:一個決定而已

        真要說有什麼技巧的話,就是我在潛能開發課程內,面對各種恐懼、尷尬、讓人猶豫不決的挑戰時,老師教導的一個咒語:「幹XX!我操X媽的豁去出!

        (現在回想起教室裡面,一群女生罵着各種難聽的三字經,然後興奮開心地衝出去行動的情景就好笑

        我已經不需要依賴這個咒語了,但如果這個技巧對大家有幫助的話,就盡量用吧,但是可以在心裡吶喊就好,不用在辦公室喊出來。

        其實效率是可以簡單地來自當下一個決定:立刻動手做。牙齒一咬,就開幹了!完全不需要依賴什麼『達人工作術』之類的技巧。

        一個決定,馬上轉換。你的人生就可以很不同!

        我不敢說自己的工作時間是不是比別人長,但除了要跟大家一樣花時間工作上班外,我規定自己每週都要寫一篇部落格文章。如果是寫讀書心得類的文章,除了寫文章本身的時間外,還要花時間看完整本書。另外為了增加收入,還要接額外的案子下班做,該洗衣服、打掃整理家裡的家事照樣進行,該睡覺、該運動、該陪伴家人玩樂、出遊的時間也不能缺乏...。

        要能兼顧以上這些,最能依靠的技巧就是快速的轉換!就像是昨天朋友C的一句話,讓我動了念頭要寫這主題的文章,我當下決定立刻動手寫了,不需要拖延。

        希望大家都能依靠『高速轉換』,讓自己脫離『沒有時間』的惡性循環!

註:我聽說過少數鳳毛麟角能依靠善用時間從計程車行業翻身的人,幾乎就像是大難不死,必有後福,從此一帆風順。因為他真的知道怎麼擠出時間來。

2012年6月13日 星期三

世上沒有完美的設計,只有合適的設計

        由於我在公司所處的團隊的工作內容,有部分是在 review 公司內其他團隊的 HLD ( High-Level Design - 高階設計 ) ,並給予本身專業上的建議,最近我發現,這樣的職掌讓我面臨了許多矛盾與衝突。

        原因是:每個設計其實都有他本身的道理。

        除非找來的工程師是個沒經驗的初學者,犯了很多沒 sense 的錯誤,不然稍有年資的工程師所做的設計多半有他站得住腳的考量。那個考量很可能是「成本與風險」,也可能是「架構和彈性」,也可以是「效能和穩固」,更可以是「商業價值和使用者經驗」。以上任何一個顧慮你都不能說他錯,但是大家抓住的利基點都不同,互不退讓之下,事情往往難以敲板定案。

2012年4月6日 星期五

AppWork DEMO #4 會後感

        昨天剛好是我請休的日子,衝著 AppWork 這麼衝著我面子,安排在我休假期間舉辦這個 DEMO 活動,毫不猶豫地把休假的空閒時光奉獻給會場(真是往臉上貼金,就只是狗屎運好罷了)。

        第一次尋找台大醫院的國際會議室,足足讓我吃了十五分鐘的苦頭,在醫院裡面迷路了好陣子,不過一切都是值得的。



        半年前的 DEMO #3 我是透過網路看實況錄影版本的,由於可以不斷反覆倒帶觀看,所以可以比較詳細地寫下對每個團隊的想法,今年去現場,又沒拿到現場發送的團隊介紹手冊,也沒做筆記,只能從簡單地概觀印象說說這次參與後的感想。

2012年3月6日 星期二

資訊透明其實是門好生意

        前一陣子,同事感嘆這個世界越來越平,失去了「資訊不對等」的優勢,在現今資訊發達的社會上,越來越難獲利。我聽了不置可否,卻想起前陣子在健身房聽到在我旁邊那台跑步機上,一位不知名的女士在講的電話內容。

        那位女士好像是汽車拿去送修,原本她認為應該只是個小毛病,結果車廠打電話回她,說她這個壞那個也壞,東扯西扯最後報了個價:五萬塊。嚇得那女士花容失色。

        顯然這個金額太過嚇人,那位女士開始推說身上現金不夠,想先領車,改天再修。可想而知,修車廠那可能輕易放棄入口的肥羊?接下來,雙方冗長的攻防戰展開,車廠看來要求女士回家拿錢,女士推說家住得太遠...,又提款卡在老公身上等說詞,車廠又「體貼地」為了這位尊貴的客戶延長營業時間,願意等你捧著現金來等到天長地久...。修車搞得像是綁架一樣。

        電話掛上後,女士在跑步機上自言自語:「怎麼會這麼貴?怎麼可能這麼貴?

2012年2月1日 星期三

設計的通則?


        自從上一篇『為失敗所作的設計』貼出後,我收到一些同事的 feedback,首先要先對覺得被影射到的同事致歉並且解釋清楚:

  1. 關於留後路這件事,事實上只是當時提出的眾多考量「其中之一」而已他當時也有從「可延展性」以及其他諸多方面去思考而給出那樣的意見
  2. 另外「只把資料庫單純當作資料倉儲」這樣的想法則是來自另一位不同的同事,並非出自同一人。
  3. 為了讓文章聚焦,避免模糊焦點,我將來自不同人物的意見合併在一個代表人物上,並且因為當時對於「預留退路」這件事情特別有感觸,所以在撰文時將其他無關該主題的意見通通割捨掉,實際上是「斷章取義、以偏概全,與事實不符」。
        簡而言之,這個網誌是為了記錄針對 IT 領域,個人對一些議題當下所激發的想法並非為了留為呈堂證供,留作法庭審判用途,所以對引論中心思想無關的情境事實和前因後果,會過於簡略帶過或變造,以便撰文時可以流暢表達最重要的想法。

        前天跟同事喝咖啡,針對我上一篇文章,又聊到有關『設計與開發的通則』這個話題(真的很感謝有這麼優秀的同事們,不斷激發我回顧和重新審視一些觀念和想法,讓我一直在不斷的碰撞中找到成長的方向)。我們的工作之一,除了上一篇提到的內容外,還有提出「Development Guideline」。

2012年1月27日 星期五

為失敗所作的設計?

        由於目前在任職的公司內,我所屬的單位算是掌管公司技術方向的單位,有部分的工作內容就像是技術總監那樣(Tech Director),必須對公司內的專案所採用的技術提供審閱和建議,也需要指導設計方向與使用的開發樣式。

        我們這個單位的目的,說起來就是要根據本身的豐富經驗來『洞悉未來、未雨稠繆』,避免工作團隊因為想法太過直接,而不小心掉入『犧牲執行效能,設計欠缺彈性』的錯誤。簡而言之,這樣的角色似乎需要想太多,然而這件事本來就有許多困難與矛盾在,甚至很多時候,我們這個單位內都無法達成共識。

        最近就有這麼一個案例,我和另一個同事合作評估一個新專案的開發策略,這個專案原本所使用的資料庫產品是價格昂貴的商業用資料庫,我主張盡可能善用該產品所提供的所有功能來達成這個專案所需,然而另一位同事的想法卻與我迥異。