函式的兩易一難

正文開始前,分享一段個人非常喜歡的演講:Philip Wadler的『Propositions as Types』:

其中有一段很讚的話:

Computer Science. There are only two things wrong with it: Computer and Science.

身為CS出身的碼農真的是被婊到心坎裡 …

這句話背後的意義是,我們真正在做的事情,其實是資訊的構築與轉換,計算機或程式語言不過剛好是我們用來處理這些問題的工具,也因此他認為較適合的名稱其實是Informatics之類的東東。什麼意思呢?例如Int版的toString如果用Haskell type annotation來寫,大概是

toString :: Int -> String

也就是從一個結構為整數的資訊到一個結構為字串的資訊的轉換。sort則是

sort :: Ord a => [a] -> [a]

從[a]到[a]雖然沒有發生資訊的類型轉換,但輸出的[a]會是排序過的。這件事通常不會表現在type annotation上,但硬要幹的話應該也不是不行;例如定義一個type叫OrderedArray,上式就變成

sort :: Ord a => [a] -> OrderedArray a

雖然骨子裡我們做的是如此充滿數學與工程的事情,也許正因為語言扮演要角吧?寫過幾年程式後,大家都會發展出自己的風格,為了避免一個code base被搞得像超現實主義的大雜燴,於是有了各式各樣的coding standard來做基本規範。一個好的coding standard,個人覺得會像是制定一個基本框架,讓大家能在維持基本結構統一的情況下發揮創意,就好像七言絕句或詞牌一樣,與各種programming paradigm交叉組合下,漸漸地寫程式這樣聽起來如此geek的事情,本質上好像與更為貼近了。

可能因為個人偏好functional programming吧?我寫程式喜歡以函式為單位開始,而不管用哪個語言,我寫一個函式的原則是兩易一難易讀、易測、難誤用

春節北海道行歸來

好久沒春節出國了。

自從去年初帶著小子去加拿大碰到一波大雪,他完全對雪著了魔,彷彿是種白色的魔法,即使平常很怕冷,在雪地上滾來滾去任由頭毛睫毛結冰也不以為意;想著滿足家裡小子的玩勁,我們倆夫妻也沒去過北海道,因此有了這一次的安排。從初三開始的九天,我們的行程涵蓋星野度假村、札幌、旭山動物園、小樽、網走,以及最後的南千歲與新千歲機場,大致上都是自助行的入門地點。

Don’t Starve Together教我家小子的事

Don’t Starve是個人非常喜歡的一款生存遊戲,在隨機生成的世界中,玩家會經歷飢餓、炎夏、黑夜、寒冬、以及各種生物與地貌的挑戰。Don’t Starve Together則是它的多人版本,我最近正在教家裡的四歲小子怎麼玩這款遊戲。一方面想教他電腦的基本操作,一方面也想看看一個四歲小孩能掌握這款遊戲到什麼程度。

有一天晚上,我家小子在和他媽媽賭氣,因為他媽媽堅持要他去洗澡,不肯讓他多玩幾分鐘玩具。看著他受我真傳的牛脾氣又犯,我突然想到一個點子。

我:『你是不是因為媽媽連五分鐘也不肯給你玩在生氣呢?』
小子:(默默點頭)
我:『我知道你因為連假回奶奶家的關係,已經三天沒玩到你喜歡的玩具了,所以你好想玩好想玩,不想先洗澡。可是啊,你可以想像一下,如果Wilson顧著在森林裡面到處玩,都不收集食物,也不收集材料做工具,會發生什麼事呢?』(Wilson是Don’t Starve系列主角。)
小子:『哦!他很快會餓死掉喔!而且沒得生火,還會被黑夜怪物吃掉。』
我:『對啊。所以媽媽和我才總是跟你說,一定要把該做的事情做完再去玩,像是洗澡、吃飯、做作業。就像Wilson一樣,在森林裡一直玩很好玩啊,可是你不會想要他一下就餓死,或被黑夜怪物吃掉吧?』
小子:(默默低頭思考一陣) 『……爸鼻。』
我:『嗯?』
小子:『等下洗完澡,我要去跟媽咪道歉。』

誰說玩遊戲學不到東西呢?

OP: 進入業界前,該先學什麼呢?

『在學生時期最好先準備好哪些技能,在業界生存會更容易呢?』
『剛離開校園的菜鳥碼農,最好開始學習什麼?』
『回顧這幾年來的碼農生活,你認為哪些技能最重要?』
『…』

在這個瞬息萬變的資訊業界,只要累積一定年份的資歷,上列問題總是會被問過個幾次的。所謂他山之石可以攻錯,前人踩過的屎坑能不踩當然是不踩比較好;如果能從自己的經驗中提取些什麼,讓後輩可以走得比自己更快更遠,又何嘗不是美事一件?世代更迭,不就是這麼回事。

像什麼追蹤一些重要人物的twitter啦、讀一些經典好書啦、精通至少一項程式語言什麼的,我不覺得我有辦法寫得比Joel on SoftwarePragmatic Programmer之類的更好,但我倒是想推薦大家花點時間去學習一個許多人都忽略、甚至不屑分神照顧的事:

投資理財。

可能資訊產業實在是太夯了,我們從學生時代就聽過數不清的成功故事。創業成功、剛畢業就被網羅入Google、Facebook等大公司薪水多到花不完等等,在在告訴我們:code中自有顏如玉,code中自有黃金屋,放手去闖吧!更何況鑽研演算法和各種酷炫的科技坦白說刺激好玩太多了,結果許多資訊人認為投資理財很遜,根本懶得去碰。

面對現實吧!這些成功故事都屬於那些不到1%天賦異稟的人。像我這樣屬於其他99%的普通人,靠的就只有咬合力100T的牙齦,埋頭苦幹個10年終有小成,才發現黃金屋是有,只是還要再花10年自己蓋。

就我個人的經驗,其實學一些『正常的』投資理財概念不會花很多時間,卻受用無窮。類似的觀念甚至可以用在平日工作的時間分配與專案管理上。而且我認為,如果一個人沒辦法把10元用好,給他10萬元他也沒辦法用好。這就是為什麼經常聽到某些人中了幾百幾千萬的大獎,第一件事就是去買名車,然後過個一兩年還得賣車外加打工還債。

試在心中回答以下問題:

  1. 請問上個月您的儲蓄增/損多少錢?
  2. 請問上個月最大筆的支出來自何處?
  3. 請問您的儲蓄目標為幾年存到多少錢?

如果您很快就可以回答,恭喜您,請左轉ptt去讀些比這篇更有料的東西吧。然而,如果沒辦法不看任何紀錄就大致知道以上的答案,那您很可能跟以前的我一樣,對自己的財務漠不關心,還請你留下來聽我講講古。

以下彙整幾項個人覺得比較重要的概念簡介。

請許我們一個多元包容的台灣

15304512_10202741593737383_6917869826337115229_o

( 上圖引用自Designer Ct Tang )

想寫這篇沒別的,近日同性婚姻法吵得沸沸揚揚,或正或反,無不用盡其極,彷彿要把對方撕碎。有小孩後我其實對很多事都挺無感的,但這件事確實正中我的命門,想刻意別過頭都會抽筋。

我一直認為台灣這座擁擠的小島,最獨一無二的魅力正是全方位的多元:歷史、人文、宗教、地理、生態、甚至政治,豐富之程度都是任何國家難以望其項背。但令人難過的是,長久以來我們整個社會在外來強勢文化的洗禮、政治地位敏感、歷史與地緣的剝離感等等因素下,我們並未正視我們有的,反而是眼睛死盯著別人的高尚大,右手忙著毀掉自己的特色,左手忙著模仿,嘴巴忙著哭文化窮。

因此同性婚姻法案提出的時候我是非常開心的,我認為這是促進台灣社會融合的一大步,New York Times也有一篇報導叫做Taiwan as a Same-sex Marriage Pioneer,簡述了亞洲區同性婚姻、多元性別認同概況,以及為什麼這會是歷史性的一步。亞洲區在多元性別認同上畢竟是相對保守,如果這道藩籬能夠打破,那未來還有什麼藩籬能阻擋我們成為海納百川的國家?

2016 GM @ Whistler:活動與閉幕

Work hard, play hard.

前篇分享了扎實的工作行程,但都到了Whistler village,當然不能只是埋頭苦幹而已。公司安排的、私人揪的、臨時起意的,整個星期穿插了許多大大小小的活動,只要有那個力氣,從太陽剛出來到太陽再次出來都有活動可以玩。我是屬於每天最晚12點前後一定就寢的人,但各飯店的派對室聽說都是徹夜有人在瘋,也因此一開始選房間的時候甚至還有『請問你想離派對室多遠?』的選項。我是不曾駐足過派對室,回想起來蠻可惜的,明年應該要好好去瘋一回。

最近公司內有個討論串:『遠端工作該如何保持健康長遠的生活?』被讚爆的回答是:『發展一個離線的興趣』…可以來人發明不用電子設備的電玩嗎?