上上星期接受 iThome 技術編輯瑞隆在「咖啡因」的專訪,希望能把我一些想法刊登在該雜誌的「 IT 人物甘苦談」,提供給一些讀者參考。
嗯,那天聊了很多,瑞隆還列出好多問題讓我回答。有些問題,牽涉到人生價值觀的考量,許多我還不太容易能回答得出來(生活的目的與生命的意義,有很多我一直搞不懂)。後來也建議瑞隆可以直接引用我 Blog 內之前我所寫的文章。底下就是瑞隆整理訪談與我的文章後,洋洋灑灑的寫了好長一篇全版面的「 IT 人物甘苦談」囉~ 🙂
撥開軟體架構迷霧 成為思路敏捷的IT人
文/張瑞隆 (記者) 2005-12-30信仁軟體設計顧問中心軟體架構師王克明頓悟柔性思考的心法,重新認識軟體架構的簡潔與優美,將枯燥的工作轉為解決架構盤根錯節問題的樂趣,經營屬於自己的顧問事業。
信仁軟體設計顧問中心(簡稱HSDC)軟體架構師王克明歷經導師啟蒙與自我刻苦學習後,重新發現軟體的架構優美與設計的樂趣,由基層技術工程師轉型為思路敏銳的軟體架構師,更創立顧問服務公司,將解決軟體設計問題當成樂趣,套用Linus Torvalds在其傳記標題所使用的形容詞:「Just for Fun!」。
偉大的程式設計師知道要重複利用程式!
舊有系統(Legacy System)的整合一直是企業的痛楚,但主管對於如何啟發軟體工程師的思路,培養其架構規畫的能力,常不得其門而入,才讓IT系統逐漸陷入Frederick Brooks(著有《人月神話》一書)所謂的「焦油坑」。只是,當面對這樣的挑戰時,軟體工程師根深柢固的線性思考卻侷限了省視問題的角度。王克明舉出一個公家機關的系統整合專案為例,此建案除了採購全新的流程軟體,還須整合研發、原料、進銷存、生產、維護等子系統,以完成產品品質的管控與資源分配。這是典型的異質系統整合問題,涵蓋不同供應商的作業系統、資料庫、應用伺服器,以及系所單位,不僅新舊系統無法結合,上線運作更是遙遙無期。由於缺乏架構規畫,許多軟體工程師首先想到的解決方法,便是開發中介軟體(Middleware)作為各子系統間的溝通介面,或者讓每個系統都到資料庫擷取資訊,再重新組合,卻造成資料庫系統不堪負荷,這類治標不治本的方式等於是將灰塵掃到地毯下。如此一來,便讓專案成為「焦油坑」。
彼得‧聖吉(Peter Senge)提到,這類問題衍生自忽略系統思考的重要性,因為「動態性複雜…會抵消個人或群體改善問題的所有努力,它會誘使我們捨本逐末、避重就輕、愈治愈糟、一再犯錯,甚至興奮而努力的製造共同的悲劇。」王克明提建議改良軟體架構而非撰寫中介軟體,將每個核心元件「封裝(Encapsulation)」,並以介面與其他系統溝通與交換資料,每個子系統間都可以抽換,因而解除彼此緊密相依的不可取代性,讓系統整合能具備彈性,這也就是「作對的事」及「把事情作對」的最佳互補,他也稱前者為大題小作,後者為小題大作。就軟體設計為例,開放源碼的關鍵人物之一Eric Raymond曾提出格言:「優秀程式設計師知道要寫程式,偉大的程式設計師知道要改寫(並重複利用)程式。」當軟體工程師也具備結構化系統思考時,就能將職業生涯的危機化為轉機,持續個人的價值,不會成為企業中隨時可犧牲的資產。
王克明跨入這一行的起因,起源於對圍棋的熱衷,他眼中的圍棋與軟體一樣,是最重視蹲馬步的基本功,佈局、中盤、官子、死活、定式與打名家的棋譜,是增進棋力的不二法門。但圍棋對軟體工程師的啟示,在於僅用黑白兩色棋,配合方形的棋格,便能產生千變萬化的棋局,軟體架構也應像是圍棋一般,看似簡潔易懂,卻又變化無窮。至於從事軟體設計,他的動機是用Java撰寫一個奕棋軟體,但在學習過程中,王克明原本自認為無所不通,直到遇到無法跨越的學習對象,也就是一位國內的物件導向大師,並成為他在軟體設計的啟蒙導師,導引他重新思考軟體的本質與樂趣,後續更讓他成為思路敏捷的軟體顧問。王克明以自己為例,顧問的樂趣在於,「引導技術人員說出原本認為對的觀念,但事實證明是錯的」。他更眉飛色舞地說道:「想到軟體業界處於混沌的亂世,我就更開心,因為,更有機會嶄露頭角了。」
除了圍棋以外,他最大的休閒活動是讀書,並期許自己要讀遍天下所有書。他也建議IT人,追尋專業知識不是仰賴閱讀坊間大量探討「工法」的書,而是講究「心法」,因為工法會跟隨技術與工具逐漸推陳出新,但心法是根基於底層原理,而且歷久不衰的。以生活中的例子形容,堆磚塊的建築工人如果執著於將磚頭堆得更快且多(工法),將永遠不如畫藍圖(心法)的建築師,對整體結構了然於心。
不值得做的事,就不值得做好!
傳統企業中的階層式組織,並沒有提供員工自尊與自我實現等精神層次的需求與環境,主管將技術人員視為可隨時替換的生產工具。因此,有些人在名片的職稱上印著軟體工程師,但卻與操作員沒什麼兩樣,或者說,他們有著高度的工程技能,但缺乏工程管理的思維,所以工作瓶頸便一直停留在技術專家,猶如一個長不大的小孩。軟體工程師應秉持藝術創作的熱情自我期許,在工作中找尋成就與自尊,而不是成為技術人員目光短淺、腦袋僵化、自以為是的通病,避免淪落為主管眼中生產工具。王克明中肯地建議道,軟體工程師不應將理想寄託在企業上,認為藉由聘僱的制度可實現個人理想,相反地,應該是超越「純工作」的心態,選擇做最有興趣的事,走自己的路。軟體工程師應體認到,經營企業是在商言商的事,企業沒有必要負責實現每位僱員的理想。
不過,他也不否認,許多時候還是為了滿足薪資遠大於成就,此時,只要應付即可,不必因為過於負責,而加班完成份外的工作。這並非異端邪說,從企業整體的角度思考,毫無目的加班只會造成資源內耗與成本支出。王克明以摘錄自肯‧布蘭查《一分鐘激勵》一書中的話形容:「Things not worth doing are not worth doing well.(不值得做的事,就不值得做好。)」。一般普羅大眾會花最多的時間在工作上,雖然工作的職別符合專業與興趣,但工作內容卻非能由人們決定,而自己的興趣及理想才是驅動人們努力工作的誘因。
公司的經營偏方:海盜式分贓經營哲學
在臺灣開公司,約有95%的公司在第一年內會收掉,原因即在於還沒獲取利潤,就已經先支出許多經營成本,包括人事薪資、辦公室租金、文具開銷等,這一點,王克明心知肚明。所以他效法中古時期海盜們「聚眾成寇」,在海上四處打劫過往商船的經營哲學。他說道:「一開始沒有錢買比較好的海盜船設備,所以先從弱小的商船開始下手。海盜們打劫到金銀財寶後,就論功行賞,當然,其中一份是留給船長老大;另一份成為眾海盜們的團隊基金,可以擴充海盜船的設備、更加堅固壯大。」對於由技術人員轉為自行創業的營運建議,他認為小公司成立時,資金並不充裕,可以考慮採取「海盜分贓」經營策略,將參與專案的團隊成員視參與的投入程度來「分贓」,並固定提撥一定比例的利潤投入公司的營運用資金,「這樣也能避免企業中常遇到的自肥!」,他樂趣地說道。文⊙張瑞隆
IT人物-王克明
信仁軟體設計顧問中心 軟體架構師
●學經歷:機械化師文書官、系統工程師、Oracle DBA、IT部門副理、講師、顧問。公司檔案-信仁軟體設計顧問中心
●成立時間:2003年。
●營業項目:HSDC是由一群專業的軟體設計師所組成的軟體設計團隊,提供的服務包括:軟體設計人員的專業課程、為企業量身訂做的設計課程、軟體設計顧問服務、全方位軟體資詢服務。>>學習軟體設計的啟蒙導師:Martin Fowler
王克明將Martin Fowler視為軟體設計領域的偶像,更精讀這位大師所出版的書籍,從《Analysis Pattern》、《Refactoring》、《Patterns of Enterprise Application Architecture》以及《UML Distilled》等,在軟體層次從最抽象面至最底層的實做機制面,都能有最深刻的研究與發表。他甚至將Martin Fowler形容為「軟體業界的達文西」。至今,Fowler的一句話:「Keeping Software Soft.(把軟體做軟)」,是影響他最深遠的一句話,更是信仁軟體設計顧問中心成立的宗旨之一。「在沒聽過Fowler之前,從不敢想像有這種天縱英才!」,王克明激動地表示。
hello Bernard:
程式設計的基本功夫仍是要的喔~ 可千萬不能眼高手低,以為寫程式是推磚塊,軟體有獨於其它領域,利用 UML and 程式均是表達軟體設計的工具的。
“Applying UML and Patterns” 這一本書,是我一定會推薦的。
另,爾後歡迎參加我們免費的 UML Seminar,或多或少,應該對您有些幫助的。
P.S. 我也是從系統與資料庫管理轉型過來的。 ^^
Dear 克明:
您好,我是因為看了iThome的這篇文章而來到這裡的。對於您在文章中提到的觀念深感認同。目前我的工作都是和網路管理及MIS有關,但是我希望自已能往軟體設計的領域發展。不過,也如同您所說的我希望自已是成為一個畫藍圖的建築師而不是只會堆磚塊的建築工人。
所以是否能請您推薦幾本適合初學者紮根的「心法」書,好讓我有一個學習的方向呢~?
謝謝~!!
Bernard