2022年6月25日 星期六

鳳凰專案:看IT部門如何讓公司從谷底翻身的傳奇故事


金庸名著「笑傲江湖」中華山派有過「劍宗」和「氣宗」之爭,這場內鬥源自於雙方對於如何邁向武學巔峰有不同的做法。劍宗主張由外而內,強記所有招式劍訣,熟練到能像反射動作般出招,初學時只能不求甚解地見招拆招,而後隨著歷練的累積,融會貫通劍法的精義,就能橫行武林。反之,氣宗認為武學首重心法與內力修為,初學者應下苦功修習運氣法門,待神功大成之日,即便只執草木為劍,依舊有如神兵利器,所向無敵。

相同的概念可以轉嫁到如何獲得「開發運維(DevOps)」的思維。效法劍宗著重實踐,直接學習操作像「Jenkins」這類持續整合/持續佈署(CI/CD)軟體工具。分析不同專案共有的反覆操作步驟,思考如何把它們自動化、流程化,持續不斷地將現有專案設定自動化佈署,終將獲得事務自動化所帶來的效率紅利。

或者師法氣宗,透過IT業界領袖與大神們的真知灼見來開天眼,領會DevOps的理念與行動,如何改善軟體開發過程中根深柢固的軟體環境建置挑戰。這本「鳳凰專案」便是面向氣宗道路的你,最值得擁有細讀的一本傑作。捨棄教條式的說明解析,用小說體裁帶讀者走一遭驚心動魄的IT管理實務。如同書中點出,IT部門的表現對今日企業成功與否至關重要,生產、財務、銷售等企業核心功能全都仰賴IT部門提供穩定可靠的服務,這觀點可以濃縮成書中深得我心的一段話「功能多少總是有些運氣的成分在,要是你走運的話,10%的功能會得到預期的收益,因此,越快把那些功能推到市場接受考驗,對你就越有利」。

書中描寫的場景相信會讓資深IT業界的紅塵中人會心一笑,超出時程的重大專案、屋漏偏逢連夜雨的突發錯誤、錯誤的外包等,虛構的情節是如此寫實地似曾相識。年少時總會崇拜英雄,心想哪一天可以成位某位技術大神。隨著經驗與技能的累積,與之而來的是更多的任務與挑戰,還有IT圈中常見的「救火」任務。成功地解決急如星火的技術難題,獲得公司與團隊的信賴與敬仰,相信是許多IT職人的心之所願。但有如老莊說的「聖人不死,大盜不止」,有著技術大神當靠山擔任救火隊的組織,容易錯失將IT任務/作業標準化的契機,不斷陷於開發/上線/滅火的無窮迴圈進而耗損競爭力。

在製造業中,工作中心包括機器、人員、方法、評量,也是標準作業程序(SOP)必須涵蓋的四個項目。對比軟體開發,機器有如環境建置、人員是操作步驟、方法是引用工具與框架、評量則是監控與測試。像要讓軟體開發有如製造業般穩定可控,第一步便是下定決心將必要的作業標準化進而自動化。自動化佈署能徹底減少環境建置、引用工具兩個項目的不確定與人為失誤,也是DevOps理念的最佳實踐。「鳳凰專案」中提到許多值得反覆咀嚼的觀點與作法,篇幅有限只能抓重點寫下心得。書中有許多能對IT部門管理帶來助益的洞見,就等讀者自行去發覺與體悟了。

2022年6月19日 星期日

古人原來這樣過日子:地表最強的66堂中國歷史穿越課

 

有文字才算文明,中國歷史自商朝的甲骨文起,已有三千多年。由政治和社會體制的異同,進一步可以切分為先秦、秦漢、三國兩晉南北朝、隋唐、五代遼宋夏金、元明清,六個大時代。「古人原來這樣過日子」不談大道理,而是從生活、飲食、文化、情感和社會等各主題,挑一些趣味、具對比性的事物,向讀者介紹中國古人是如何過生活的。讀畢後讓人體悟,無論制度如何演進,科技如何進步,人們過日子的樣子,真的差異不大。

在生活篇中,可以發現原來在沒有衛生下水道的古社會,挑糞可是門賺錢的生意,這做這門生意得要有靠山才能取得牌照,當真是個「肥水活」。古代也有廁紙和衛生綿這類生活必需品,那天來趟時光旅行時,不用怕需要「雙手萬能」。日本的榻榻米是西漢時貴族所用的坐具,又稱「席」,古人常在其上舉行酒筳,因為也叫「筳席」。在古代,冬天取暖的重要性不遜於一頓安飽,因此政府也會用薪炭做為官員的俸祿,所以月薪中的「薪」是指薪炭柴火。女人愛美天性也,沒想到「一白遮三醜」的觀念也是由來已久。從用米磨成粉的粉底進化成「白鉛粉」,成語「洗盡鉛華」中的鉛就是指白鉛粉。不過這東西用久了會讓皮膚變色,所以有「黃臉婆」的說法,又容易鉛中毒,古人追求美貌的代價不小。

飲食篇這主題正對我脾胃,書中提到水滸傳裡武大郎賣的「炊餅」總被想成是燒餅,但其實是古代饅頭的稱呼。而水滸中常見英雄好漢在酒肆裡叫店小二上兩斤牛肉,但古代宰殺、吃用牛肉都是犯法的。因為牛是農業的生產力工具,為避免被大量食用,民間嚴製食用牛隻,為了突顯水滸好漢的桀驁不馴,才一直出現吃牛肉的場景。古中國常食用的蔬菜只有韭菜、大蔥、冬莧菜、大蘿蔔和小白菜。黃瓜、南瓜、馬鈴薯、地瓜、蕃茄等數不清的蔬菜都是從海外傳入中國。中華料理是火與油的藝術,其實「炒菜」這烹調技法,是在宋朝才開始流行,主因是製造鐵鍋的鑄造技術成熟,和食用油的價位低廉而在民間普及。古中國最早出現的食器是刀叉,隨著周朝制禮作樂後,認為鋒利的刀叉不如筷子文雅,貴族們紛紛採用筷子進食,而後被百姓效法模仿。辣椒在明末才傳入中國,四川人吃辣的歷史不過百年,起因居然是太窮,交通不便物資匱乏,只好用辣椒來替代食鹽。中國茶聞名天下,但在古代茶可不是像現在一樣清澈如水。福建話裡把喝茶說成「吃茶」,為茶的原貌提供了蛛絲馬跡。原來在台灣客家常見的「擂茶」便是唐朝時期的茶,直到明朝才有炒製茶葉後沖入熱水即飲的方法,一路延續到今天。古代文學作品裡,喝起酒來都是一兩公升的,原來是古時候的釀酒技術尚未成熟,酒精濃度並不高,約略像今天的啤酒,兩公升喝下來,是喝不死人的。

接著在文化篇裡,我們會知道古代人說話不是用文言文般充滿「之乎者也」,文言文源於對文字書寫的需要。在紙張尚未普及的時代,為了省錢省力,言簡意賅的文言文是經濟實惠的文書表現法。在東漢造紙技術普及後,文言文則是為了讓知識份子提高自身格調的一種做法,以區別文化程度不高的老百姓。古人有姓、氏、名、字,四種稱呼各有其用意。最初的姓,是用來指稱自己共同的祖宗源起,也代表血統,同姓是不能結婚的。氏是進一步區分自立門戶分宗的子孫,混得有頭有臉的家族就會有自己的「氏」,用以區別其它窮親戚。到了秦漢時期,沒有人在用「姓」,姓和氏不再特意分開。現今口語中的「姓氏」其實都是指稱「氏」。名和字原本也是兩種指稱,幼時的稱呼為「名」,這是親近的長輩用的。成年後會行冠禮也被稱為「冠字」,成年人會取「字」讓平輩和晚輩相互稱呼。因為罵人時「指名道姓」是相當無禮的行為,只有上對下時會直稱其「名」。但在下對上自稱時,為了表示敬意,多半在自稱時使用自己的「名」,如出師表中的「臣亮言」。「號」則是文人們自己取的雅號,多半是描述居住地的特徵。後面還有情感篇和社會篇,兩個主題中也有許多精彩、增添知識的文章,就不一一細數了。

2022年6月14日 星期二

蒼蠅王

 

「蒼蠅王」被列為20世紀百大英語小說,內容啟發了眾多日本作品,包括「漂流教室」、「大逃殺」等。故事環繞一群因意外迫降到無人島的小孩,在遠離文明社會的大自然中,為生存和獲救做出種種努力。隨著時日漸長,人際間的衝突愈加劇烈,社群越來越失序、失控,最終造成無法抹滅的悲劇。

作者「威廉‧高汀」是歷經二戰的小說家,「蒼蠅王」一書中赤裸呈現他堅信「人性本惡」的觀點。刻意挑選潔白如紙的學齡前孩童為主角,描寫出尚未十足社會化的人性,是多麼容易受到嫉妒、恐懼等情緒驅使,去採取暴力與非理性行為。讓我聯想到網路平台裡匿名網友間的霸凌、攻訐,有如公權力無法介入的網路孤島「蒼蠅王」。

一但人類社群尚失國家力量來維持基本法制秩序,持強欺弱、豪取強奪將橫行於世,文明與理性有如水晶杯般罕見與脆弱,它僅能活在由尊重法律、規範的人類社群打造的溫室中,當白紙黑字的條約被束之高閣,理性和文明也將隨之而去。

或許是在戰場上目擊的種種讓高汀對人性失望,因此劍走偏鋒,但他的觀點確實一針見血。「一念天堂、一念地獄」,善惡兩端皆是人性。無論是烏克蘭戰場上的屠殺與虐囚,還是近日新聞報導的中國河北唐山暴力事件,人與人之間失序失控的傷害從不曾停止,暴力和非理性源自你我的天性。透過教育淺移默化提高國民的德性,同時建立公平公正令人信服的法制環境,或許能適當地「減災」,型塑出安和樂利的社會。

2022年5月29日 星期日

Spring Start Here: Learn what you need and learn it well

「Spring Start Here」初章用一個相當貼切的比喻來描述軟體框架(Framework),想像手上拿到一本應有盡有的IKEA DIY組裝手冊,它告訴你各種家具的組裝方法和所需零件。當你想要添購辨公椅時,就得自行翻閱找到該項目再依指示組裝完成。框架等同於那本手冊,提供各式各樣的軟體功能和機制。在實務上我們只會從中挑選專案需要的項目,照著框架的規格來設定和撰寫程式。

即便Spring不像EJB是官方發展的軟體框架,但在Java程式語言的生態系中,它是掌握半邊江山的一方之霸。不論是最常見的MVC、輕巧易用的REST,還是批次、佇列、認證與授權以及資料庫操作,軟體專案開發上的各種功能,幾乎都能在Spring框架中找到對應解法。而這本「Spring Start Here」從基礎向讀者介紹Spring最具特色的IOC(Inversion of Control)和DI(Dependency Injection),利用它們,可減少程式碼中產生物件實例(Instance)的語句。AOP(Aspect Oriented Programming)則是更積極地用來封裝反覆出現的程式功能。真的不誇張,同樣採用Java開發專案,運用Spring框架和用傳統方法撰寫,程式碼間的差異有如拉麵和鳥龍麵。 

在基礎觀念後,是用具體的範例引領讀者用練習來熟悉Spring的使用方法。內容涵蓋網頁程式MVC、REST網路服務、資料庫操作Spring Data等常見的系統功能。同時介紹Spring Boot這個新式的Spring開發方法,帶有「宣告功能替代宣告函式庫」和「約定優先於設定」的新觀念,去除舊式開發Spring時的痛腳(例如:得自行引用眾多類別庫、基礎設定值太多)。採用Spring Boot實作Web應用,有另一個亮點,程式本身能用嵌入模式啟動Container直接提供服務。以獨立的處理程序(Processs)運作,減輕另外安裝與維護Apache Tomcat等Container的負擔,也更貼近Docker容器和雲端平台的運行風格。

和其它軟體框架常有的優劣如出一轍,Spring利用預定義的設定和潛藏的程式碼,加快工程師開發專案的速度。卻也塑造出無形的技術門檻,出現「想參與專案開發的Java工程師必須熟習此框架」的潛規則。隨著Spring的影響力日益擴增,這種外在的推力將越趨強烈,鞭策從業人員不得不自我提升。而在學習Spring的旅途上,「Spring Start Here」值得成為你我的首選。
 

2022年5月13日 星期五

Jenkins 2.x實踐指南

 

在開源軟體的解決方案中講到「持續整合/持續佈署(CI/CD)」,十之八九會提到Jenkins這項工具。即便我已經利用Ansible把程式佈署的流程自動化,但是相較於Jenkins,Ansible還是缺少網頁管理介面、帳號與權限管理、操作記綠檔等功能。因此進一步導入Jenkins來整合Ansible的自動化腳本,就是完善我自動化佈署的終極方案。

Jenkins早在2011年就問世,網路上的參考資料多不勝數。熟練地運用適當的關鍵字,谷哥大神確實能告訴你一些答案。不過我個人以為,想要有系統、依循脈絡地學習一項新知,一本好書絕對是性價比最高的投資。而「Jenkins 2.x實踐指南」是值得我掛保證,它能讓讀者從零開始學會Jenkins 2,進而運用自如。尤其全書中著眼在介紹2.x版本的「pipeline as code」,Jenkins中的流程用程式碼的形式來撰寫和分享,受惠於此理念,流程將可以被版本庫儲存與管理!完全克服了1.x版本時最為人詬病的流程設定「黑箱化」問題。

就Java語言而言,軟體開發過程是一連串的「手工」操作。寫好程式碼後,先將原始碼編譯成位元組檔,再打包為可執行檔,然後上傳到主機的特定目錄,以終端機指令啟動該程式。著重軟體品質的專案,則會在編譯後加上測試作業。如果是網頁專案,還得多一項重啟網頁伺服器的作業。當然Java技術棧早就發明Ant、Maven和Gradle等自動化建置(Build)工具,來處理這些惱人的例行工作。說穿了Jenkins工具,只是把你手上既有的版本庫(如Gitlab)、測試腳本(如JUnit)、建置工具(如Maven)或佈署腳本(如sh)用pipeline程式碼整合起來。所以對尚未使用軟體版控、尚未對建置/佈署步驟自動化的開發團隊來說,Jenkins絕對不是仙女的魔法棒,可以讓你輕鬆略過應有的基本功。

對於「一條龍」(從頭到尾都一人負責)的開發團隊來說,並沒有急迫得導入CI/CD工具的誘因。非多人同步開發的專案,只要程式有單元/功能測試,根本用不上持續整合(CI)。程式編譯到佈署的「手工藝」,只要夠細心謹慎,用不用持續佈署(CD)差異也不會太大。不過從中長期來看,所有軟體專案都應該完成CI/CD的設定。達成CI,可以讓小型專案在擴展成大型專案的過程中,維持軟體品質和降低溝通成本。而做到CD,則得利於佈署作業標準化,可輕易地讓專案系統平行擴充。

2022年5月2日 星期一

鯨吞億萬:一個大馬年輕人,行騙華爾街與好萊塢的真實故事

閩南話有句俗語「翁偏A卡緊」,意指做事想要「彎道超車」最簡單的方法就是用騙的。比起針對市井小民作姦犯科的詐騙集團,「鯨吞億萬」書中所描述的金融犯罪,在犯罪所得金額、牽連人士階層以及佈局複雜縝密等各方面來看,根本是蠅量級vs超重量級。書中男主角(?)「劉特佐」捅出的金融騙局,既使翻拍成好萊塢電影也綽綽有餘,出版社拿「華爾街之狼」來比喻還算是略為保守。劉特佐操盤的「一馬公司」醜聞,直指前馬來西亞首相「納吉」執政時期的貪汙弄權,後續也成為馬來西亞政黨輪替的推力。

「鯨吞億萬」向讀者展示了一幅以華爾街為首的跨國銀行、國家主權基金以及好萊塢名流等元素構圖,塗上貪婪、濫權、紙醉金迷等色彩的敗德浮世繪,代價是馬來西亞全民未來數年的血汗錢,因為被掏空的對象是「國家」,主謀者則是一個40歲不到的大馬華人。劉特佐深知現今資本市場的運作和弊病,結交權貴進而利用他人的名聲招搖撞騙,遂行他想要成為Somebody的願望。

讀者可在書中看到許多過去不曾察覺的「資本世界遊戲規則」。例如:人謀不臧國家級的主權基金,讓主政者和基金管理人從中上下其手取得暴利,也是政客用來收買籠絡地方派系的資金。華爾街的大型投資銀行,在主導客戶IPO(首度公開發行)時,將會獲得高額的服務費。如果看好即將上市的股票/基金,也會一口氣承攬下來,等價格抬高後再出貨給市場大賺一筆。心術不正的銀行管理高層,甚至會收受回扣幫客戶高估資產價值、替虛假的交易背書、設立許多空殼公司帳戶。瑞士的私人銀行表面上替富翁進行財富管理,實際都是做一些「類洗錢」交易,像是在避稅天堂開立境外公司,購買各種公司債與基金來編織層層的假交易移轉資金。歐美各國的高價房地產、蘇富比拍賣的天價藝術品、鑽石珠寶和國際賭場中的巨額賭資,都是不義之財的常見去處。

有人說過「金錢像是照妖鏡,它會呈現出你內心真正的慾望」,也有人說「金錢像是台音響放大機,它會讓善者越善,惡者越惡」。劉特佐曾經獲有數十億美金的資產可以運用自如(即便它是騙來的),他卻只用來結交影視名流,在夜店一擲千金地擁美女喝名酒,不斷地辨派對,買私人飛機買遊艇,在賭裡裡豪賭。說穿了就是單純滿足感觀層級的慾望以及想成為眾人焦點的成名欲。共犯集團中的馬來西亞前首相夫人,則是不斷地用劉特佐提供的資金購買華服和珠寶。金錢確實照出這些人自身的格局,相比伊隆馬斯克種種「有錢人的任性」,高下立判。

2022年5月1日 星期日

最貧困女子:不敢開口求救的無緣地獄

 

五、六年級生都應該看過安達佑實主演的日劇「無家可歸的少女」。自該劇播映後,游走在賣淫和伴遊之間的灰色「援助交際」,正式成為眾人熟知的社會議題。對台灣人而言,風光明媚、物產文化資產豐富的日本,一直是出國旅遊、遊學旅居的首選。在光鮮亮麗的外表下,日本特有的社會問題也相當多,雖然類似的議題也會發生在他國,不過日本人行事時過份重視群體意識/察顏觀色,會讓既存問題始終無法被消弭。

在今日競爭激烈的工商社會,造成貧困的原因十分複雜。先天家庭教養與後天個人努力、機運,甚至於出生地(鄉下/沒落都市),都可能導致個人只能從事低收入職務,而在萬物皆漲時代拮据地過日子。即便如此,如果人際關係良好、擁有能互助、伸出援手的親朋好友,也能過著安貧樂道的「貧充生活」,不至於落到社會安全線之下的最底層。

這本「最貧困女子」介紹的是比貧困女子處境更為悲慘的一群人。她們處於「三種無緣」,第一「家庭無緣」,無法獲得家人和親戚的協助,直系父母甚至可能是家暴加害者。第二「地緣無緣」,沒有建立良好的人際關係,缺少能夠商量和幫助的朋友。第三「制度無緣」,由於早期與政府單位/機構打交道留下壞印象,不相信也不去使用社會福利/保障的資源。作者發現這群人會淪落到三種無緣的關鍵因素是「三種障礙」,她們多半有不一而足的「精神障礙」、「發展障礙」與「智能障礙」。換言之這些女子本來應該是最需要受到國家社會保護的身心障礙者,卻因為種種緣故讓她們步入用最廉價的性交易養活自己,過著有今天沒有明天的日子。


日本的「報導文學」一直以來在台灣出版物佔有一席之地,這些讀物在議題切入、調查縱深與立論梳理等各方面,都是一時之選。不斷為日本挖掘出各種值得關注、處理的社會問題,像是「援助交際」、「單身寄生(繭居族)」、「下流老人」皆是。台日之間在風俗民情和政經體制上有著部份同質性,因此這些相關的著作都值得我們瞭解與反思。