ibm

參賽

「請問是 OOO 嗎?」

「今年,我們想辦一個大型主機的世界盃比賽…」

故事的開始彷彿夢般,就在我開始想執筆寫〈2009 IBM 大型主機校園競賽回憶〉的時候,接到了來自 IBM 的電話。詢問我參加第一次大型主機世界盃的意願。

「IBM Master the Mainframe World Championship 將會邀請曾參加過世界各處地區賽並得獎的選手一同參賽。競賽者需為學生身份,並願意在百忙之中先遠距接受挑戰,最後到紐約會師進行決賽。競賽者將可以和來自各國同樣鑽研技術的學生會面,且食宿全程免費。不知你是否有意願參加!」

「好喔。」

距離上次參賽已那麼多年,接到這樣的邀請其實也很意外。為什麼會想參加呢?雖然自己也不是很熱衷旅遊的人,不過總覺得能到美國看看總是件好事,能讓自己的膽量再提昇一些。而能有這樣的機會在大家面前展示自己,一定能成長許多吧。

比賽的內容共含三個關卡、三份文件撰寫和最後的成果展示。比賽從 3/10 正式開始,參賽者遠端按自己的步調慢慢過關,但文件撰寫則有限定的繳交期限。四星期後,4/6 在美國進行準決賽,選出 6 位決賽者,然後在 4/7 進行決賽。遠端競賽的所有文件都公開在網站上,也可參考「比賽內容」段落的簡單節錄。

過程

比賽剛開始其實是相當順利,前面的技術挑戰破的很快。只是有些題目有語意不清的敘述,總是追求精確的我和 IBM 經過許多的信件往來才慢慢解決一些問題。後來還發現了題目中程式碼的邏輯錯誤,IBM 知道以後就在題目中要求大家更正了。

在此同時,也受到台灣 IBM 的熱情支持,讓我可以用中文詢問問題而無語言之憂,其後也受到不少幫助,連沒有合適的筆電可以參賽也幫我處理。而比賽過程裡還有多場越洋的會議,可以提出各種技術問題尋求解答,也有資深的前輩幫我們惡補產業趨勢,好準備撰寫文件。

後來進入銀行程式的實做,聽到有人問說是否可以用 PHP 代替 Liberty 來開發網頁後端獲得了同意。由於我對 Java 配合 Liberty 的開發不太熟悉,我也決定採用 Django 來進行後端實做。只是原本的 DB2 連結元件只有提供 JDBC 而沒有 Django 的版本。於是我在網路上搜尋 Python 的 driver,但一直建置不成功,花了不少時間研究才發現需要授權檔。趕緊寄信通知 IBM,他們說會嘗試解決,但建議還是使用 Liberty。

但我怎麼會輕易放棄呢?後來經過一番搜尋,發現可以用 Jython 執行舊版的 Django,如此一來,就可以使用 JDBC,於是我就在這樣的情況下開始製作網站了。製作到了一半授權檔才終於釋出給大家,只是授權的版本跟網站上的最新版 driver 不合,又花了不少時間才找到正確版本檔案的下載點。好不容易通過授權,連上 DB2 還是出現權限問題,最後跟 IBM 聯絡後才終於解決。終於可以使用最新版的 Django 了。對我而言,這個相容性問題大概就是比賽中遇到的最大難題吧。

寫著寫著 App 覺得學到最多的其實是 jQuery 和 Bootstrap 的使用。太久沒有接觸網頁前端了,對這兩個曾有數面之緣的程式庫一直沒有機會深究。這次的開發也對他們能夠快速做好漂亮界面的能力感到十分驚訝。

只有短短的 6~8 分鐘,就算加上什麼複雜的額外功能也無法順利展示。究竟要加上什麼功能呢?我希望能找到一個容易理解又有創意的功能,最後決定用手機來實做 Visa 金融卡即時停用與啟用的功能。只要有了這個 App,就可以在網路刷卡前啟用卡片,刷卡後立即停用,即使別人擁有你的資料也很難盜刷了。

原本 IBM 的提示是最後的展示以 demo 為主,而沒有簡報的要求。然而實際預演過一次後我馬上發現 demo 時根本無法清楚表達自己的想法。如果要在短時間內達到好印象,一定得先簡報再 demo 才行。

紐約

很快的做好投影片,就啟程紐約了。先是經過日本東京轉機,到了紐約大約是下午。很快坐上接駁車,就到了 Waldorf Astoria 旅館。整理一下行囊並簽到後就和大家一起去聚餐,然後隔天一早馬上就是準決賽。

比賽前有點興奮也有點緊張,仔細檢查了簡報器和手機確定一切功能完好。上台的時候一切順利,感覺時間一下就過了。評審好像都覺得手機 App 的主意不錯,還有人覺得應該申請專利呢。

後來先去參觀工廠,再去聚餐和逛逛時報廣場。總覺得紐約的餐廳份量都好多,一不小心就會點到過量的食物呢。一直到了隔天才終於公佈進入決賽的選手,可以晉級真的很開心。

經過最後的準備和一些採訪,終於開始決賽了。決賽是自己待在一間房間,六位評審輪流到各房間評,所以要連續講六次啊,講到最後都有點累了。有的評審嚴格拷問,也有評審很親切的鼓勵我,感覺風格很不一樣。

還記得有個評審突然問了意料外的問題:「你覺得程式設計可以怎麼樣讓世界變得更好呢?」

我也給了自己都意外的回答:「其實程式設計可以解決很多問題,比如說甚至可以改進政府效能,或透過開放資訊的方式提昇公民參與。像是把所有修法紀錄用簡明的方式呈現,或是政府預算視覺化等等。」(其實我忘記確切的說詞了,不過沒錯,我其實是在向類似 Code for America, Code for Tomorrow, g0v 等組織致意。)

得獎

好像是因為有新聞的報導,臉書上突然多了很多道賀的訊息,讓我一時有資訊過載的焦慮。花了數天時間才一一回覆。想起來媒體的影響力真的很大。後來自己看了報導也覺得彷彿很厲害一般,哈哈,真有點不真實。看到「天才」這個詞,倒讓我想起當初比賽前在 IBM 接受採訪時的小對談:

記得 IBM 的前輩說,他覺得從事軟體業是需要天賦的,會願意這樣努力鑽研,不是每個人都辦得到。那時我說,我其實是反對這種看法的,我覺得努力和付出的心力比較重要,假設考慮到我從國小就花了無數時間研究,那麼現在看似表現不錯不也是很正常的嗎?

後來後來,有人說:「我想其實他的意思不是說天賦,而是說個性很重要吧?」嗯,或許是的。不過我總覺得這種說法背後隱藏著更大的假設。那就是,個性本身也是一種天賦。或者更進一步的說,努力也是一種天賦、一種天才。而這種說法似乎可以悲觀的解釋成,如果你沒有努力的天賦的話,那根本連努力都辦不到。老實說,我還沒有準備好接受這樣的世界。

這樣思考下去彷彿又會陷入先天後天的無限循環,這個問題不是本來就有答案了嗎?其實兩者是互相交互影響的。沒有一個要素不重要,所有已知或未知的條件環環相扣。只是人類有時總喜歡把事情歸因到些明顯的理由,就像我接下來要做的一樣:

對的要素

和其他國家同學聊天時提到,最近開始看《Thinking, Fast and Slow》這本書,雖然不太解釋得出裡頭在寫什麼,不過很巧的遇到也看過這本書的人。想到裡頭有句話是這樣的:

A recurrent theme of this book is that luck plays a large role in every story of success; it is almost always easy to identify a small change in the story that would have turned a remarkable achievement into a mediocre outcome. Our story was no exception.

我覺得,我的故事也一樣。

能夠得獎,實在是有太多的巧合與太多的要素匯集一地,如果少了任何一塊,就不會是這個結果了。對於此,我只感到十分幸運與感激。

一切都從小開始,幸運的接觸了網頁設計。由於家裡也沒有人從事相關行業,所以花了很多時間自己探索,也是這樣才養成了鑽研系統和搜尋解答的能力,所以才能順利解決比賽中的難關。

到了國中,為了克服枯燥的英文文法課,我另尋途徑,反而透過閱讀打開一片天。英文慢慢變成我的興趣,長年的累積讓我順利閱讀與撰寫文件。後來又經過文藻英語辯論工作坊和台大英辯社的洗禮,讓表達能力加強了不少。2009 年時就覺得英文和搜尋能力是贏得比賽的重要優勢,在這次國際性的世界盃更有同感。

但英文能力再怎麼好,也很難贏過母語的學生。所以,還有一個要素,就是簡報能力本身。感謝高中時接觸了「高橋流簡報法」,讓我嚐到甜頭。後來也因此用心鑽研,使得報告本身也變成了我的興趣。前學期還恰好上了「學術論文口頭報告」這堂課,學到許多口語技巧,剛好在比賽中派上用場。

但只有技術和簡報是遠遠不夠的。要能撰寫分析文件,還需要背景知識。恰好在前個學期上過「雲端運算概論」,學到不少產業趨勢和巨量資料的話題,讓我能源引許多知識在撰寫的文件當中。

而就連在比賽中扮演重要角色的智慧型手機其實也是在前不久買的。自己一直是用傳統的手機,但前陣子突然無法接聽電話了,這才下定決心買了智慧機。如果不是這樣,恐怕空有想法,也借不到手機實現吧。

最後最後,是即時啟用和停用 Visa 金融卡的點子,這點子的原型其實是來自郵局金融卡可以透過智慧卡進入網路 ATM,然後停用非過卡交易的功能。自己對這個功能情有獨鍾,平常總是將其停用,只有刷卡前才啟用。

在一月初,我在 ptt Bank_Service 版上看到有人詢問是否有其他家銀行有這個功能,結果似乎沒有找到。這讓我知道兩件事: (1) 有人跟我一樣對這個功能有需求 (2) 幾乎沒有銀行有這個功能。

只是用網路 ATM 實在太麻煩了。為什麼不用手機 app 隨時隨地停用啟用呢?這就是我最後完成的想法了。

這個功能除了可能有實質的安全保護外,或許更重要的是給像我們一樣的人有心理上的安全感,進而更容易接受 Visa 卡吧。

就這樣,每個要素完美的彼此扣合,匯聚於此。如果只是差了一點,也不會有此結果吧。

附錄:比賽內容

第一階段

由於這是個時程緊湊的比賽,只看前二階段的話,比起記憶中 2009 的大型主機競賽簡單許多。第一階段是大型主機的基本操作:包含 ISPF 界面、執行 JCL、編譯執行和修改 COBOL 程式、檢視系統 log、檢視 ZVM 系統資訊、用 SPUFI 以及 COBOL 程式存取 DB2 等等。

第二階段

第二階段先是執行並操作用 COBOL 寫成的簡單銀行程式,包含 ATM、後端界面等等。緊接著利用 z/OS Unix Services 來執行 Java 版的銀行程式,並進行操作。最後則是把這個銀行程式移植到 Linux on System z 上面。

第三階段

第三階段是要基於第二階段的文字版銀行程式,發展出網頁版的銀行程式。主要是利用 Eclipse 配合 Liberty,前端則用 jQuery 協助設計。在進到準決賽前僅根據螢幕截圖給分。

文件撰寫

首先分別以一頁為限制,撰寫兩份分析文件:(1) 什麼是 System of Record 和 System of Engagement (SOE)?而 SOE 的發展又會對 IBM Mainframe 造成什麼影響呢? (2) 當設計真正商業應用的銀行程式時,有哪些 middleware 需要被使用呢?

最後則是以「參加大型主機比賽,是否改變你對應用在大型企業的 IT 技術的看法?」為題,撰寫一頁的 Executive Summary。

成果展示

參賽者將會在評審面前進行約 10-12 分鐘的成果展示,其中包含 6-8 分鐘的銀行程式展示:

  • 餘額查詢
  • 存錢
  • 領錢
  • 交易紀錄
  • 停用帳號並觀察此時查詢餘額會發生什麼事
  • 其他額外功能

最後則是 2 分鐘的 IT 產業問題,及兩分鐘的 Executive Summary 及整體提問。