2021年12月28日 星期二

programming productivity - friendly language

若只能用一句話總結,那麼我會說pseudo code要讓電腦讀懂。

pseudo code的興起是因為人類大腦很難一步到位,把心中的想法具體寫出來,於是人類想到中間態,divide and conquer,分成幾步把code完成。這裡的難題是人類的語言非常高階,機器卻只能理解低階的指令,電腦的發展是從邏輯閘、暫存器、加法器、乘法器、比較器...模組化一步步組合起來的,愈組合就愈高階,很可惜距離人類語言還很遠。

解構一個高階指令,舉例來說,求兩點之間距離。"距離"這觀念電腦不懂,第一層解構可以是:座標相減->各自平方->加總->平方根。(座標相減、各自平方)大概需要第二層解構,如此反覆直到所有解構都夠低階到電腦讀得懂。coding至此完成,不同的解構就是各個programmer的功力造化了。

我目前認為clojure語言在這方面是做得最好的:if, when, let, first, last, second, is, some, some?, every? not-any? 這些指令在Clojure裡都有定義,而這些在其他電腦語言卻不完整,雖然說也不難實現,但怎麼沒有明確提供呢?這裡的心得是,指令(應該)是目的性很強、人類一目了然就可以理解的事情,以致於我幾乎不需要知道「求距」是怎麼實作的。我看到「走回原點」,會比看到「上上下下左左右右」要來得清楚;我說「求距」,會比「座標相減->各自平方->加總->平方根」要來得清楚;說排序,大家都知道結果該有什麼特徵,說排序方法,那可有百百種,容易見樹不見林。

前者是目的purpose,後者是方法implementation。對人類來說,給目的是清楚的;對電腦來說,給方法才清楚,在0、1布林運算的世界,加、減、乘等也可以理解成是人類賦與意義(好讓人了解)在各個規則上。解構的過程本身就是在創造"方法",然而精神是盡量用"目的"來實現。

所謂的friendly language,即是人類可以讀懂、機器也可以讀懂的折衷語言。既然我們軟體工程師的目的是要機器照著我們的意念走,直接跟機器溝通、從機器得到反饋才是正解。waterfall methodology的世界恐怖多了:軟體工程師A寫文件給B讀,由B理解後實現code,執行得到電腦反饋給A。既然A、B兩個人都是軟體工程師,為什麼文件這東西需要存在?試想,B要理解A的文件本身就有容易誤會。不如一切都是code,code就是文件,人類讀得懂的文件。

wafer revenue by technology in Google sheet + colab + github

這個結合蠻有趣的。首先資料(TSMC各季營收)全部集結在excel sheet,分享該excel sheet,使得所有人都有權限瀏覽,但只有我可以更新資料。

另創ipynb,寫code,把想要的分析寫出來,在此就是畫stacked bar chart。Colab的ipynb也可以(獨立)分享,好比說:

https://colab.research.google.com/drive/1UNRPpp58osUdnP0b6DP_lXL-HgXkx1vE

但這裡有兩個髒髒的地方:連結有亂碼、不方便版本控制

在此Github就派上用場,將ipynb放到Github上,然後用Colab去連Github上ipynb的版本(而不是Google drive上的版本)。

若讀者只是想讀:

https://github.com/willhyper/wafer-by-technology/blob/main/wafer_by_technology.ipynb

若讀者想互動:

https://colab.research.google.com/github/willhyper/wafer-by-technology/blob/main/wafer_by_technology.ipynb


2021年12月25日 星期六

programming productivity

轉戰管理職第二年,非常懷念當初做individual contributor全心全意做技術的時光。大概5年前看過Xiong Yalin(GM, BBP, KLA) 的一個專訪,說是他非常懷念做技術的時光。Elon Musk也說大部分時間他都花在Engineering。ASML也不是沒有機會,只是非常強調組織架構,佔什麼位置做什麼事(當然也扛責任),對我來說反而是技術強項施展不開。為了求內心平靜,三不五時還是會(想)寫一下程式(矽谷命,得時時進修。)管理職份內事做完別人沒話說,技術份外事多做了卻招忌,難題。

寫程式求平靜,反話是打電動有罪惡,總是不想讓自己覺得花時間在無用之處上。更積極來說,我確實也有過好幾次寫程式廢寢忘餐的美好經驗,十分有成就感。無論如何,多年琢磨出一些心法:

既然是軟體工程師,寫程式離不開電腦,電腦離不開電,又或是網路。那麼,是否說沒電沒網路沒電腦,軟體工程師就廢了一身武藝?其實從動念有想法到寫出來第一行程式之間阻力蠻多的,那些都是無形的時間與精神成本。Google search兩秒以上、開Microsoft Words十秒以上,我大概都會開始抓狂或分心到其他事情上了。如何讓自己隨時隨地10秒內可以開始寫程式就是我追求的理想也是我的秘密武器。說白了時時刻刻自我覺醒,檢視整個流程是否有更好的做法,省去不必要的操作、挑戰使用更好的工具。工程師、工欲善其事、必先利其器。

好比說挑戰使用更好的工具,這幾乎是拾人牙慧的事情,別人工具都設計好了,就怕你不知道而已。今年我總算嘗到CI/CD (Continuous integration / Continuous Deployment)的甜頭,原本以為各家服務眼花瞭亂,第一步都不知道怎麼跨出去,但其實跨出去知道是什麼個樣子,精神抓到了,90%都是相同的服務大概也就是那個樣子了。

另外,Google Colab是個好東西,除了它滿足"隨時隨地10秒內可以開始寫程式"的需求以外,它兼有分享的功能,讓寫程式不只是自己一個人的事,它讓自己的想法可以快速實現、驗證、並分享,促進討論,創造人類公共財,無私的感覺真好。

今年另一項技能get是Google Colab + Github的組合。Github只是死code的版本封存,要加一個runtime、CICD等讓code活起來,Google Colab就是一個很好的配合。多說無益,直接體會比較快:

https://colab.research.google.com/drive/1OZIN0i0BbWyUY5-S-dCxC-42lQ5SxrCp?usp=sharing

(這是2021年GFPGAN用來還原低解析度人頭照的技術,all credits to authors)

Google Colab基本上還是依賴網路,沒網路仍然要有戰鬥力,就更考驗功力了!

2021年12月7日 星期二

Pause

生活不檢點,習慣大吃大喝、廁所久坐,苦了身體:上有牙齒毛病,下有痔瘡隱疾。最近終於忍不住求醫,記錄一下。

想講一下觀察到的kp制度,老實說我覺得不錯呢!手術時間12/7定下來之後,往前推一星期開始密集通知。四天前12/2做covid pcr檢測、開車繞一圈5分鐘就結束了,完全不用下車,非常有效率。covid星期一12/6結果陰性,護士通知12/7中午手術。事前比較不解的是關於手術時間不清楚,只給日期、沒給時間,一直要到手術前天。不過事後想仍然覺得流程掌控地非常厲害精準了!

一天前12/6晚餐後就要開始禁食,要浣腸,要消毒身體。kp寄了消毒紙巾跟energy drink。消毒紙巾讓病人自己來真是讓我佩服,一來節省醫護人力,二來病人自己來甚至是加分的做法(可以慢慢來,也有動機好好消毒)。浣腸沒想像中麻煩痛苦,大概10分鐘就可以自己做完了。


12/7,手術當天,8點再消毒身體一次、再浣腸一次,(只能)喝energy drink。10點小芭送我check in、看了排班,kp 7am-5pm 大概有20台手術,再次佩服這個制度,人盡其才、一點都不浪費時間。11點護士把我準備好,問我要不要滑手機?我想想覺得我休息好了,就開始睡覺。12點醫生來打個招呼,手術準備開始。

宛如電動、電影畫面,我的視角是天花板的日光燈,從來沒想過我是躺在床上的那個人,需要被照顧,被fix。一個麻醉師、一個麻醉助理,兩個人推我到手術室,我甚至覺得不好意思。手術室很奇幻,一片淺藍色。不過沒多久我就pass out了…

第一次醒來的時候還在恍神,首先我不在手術室了,那應該是手術完了厚?但是我一點都沒感覺到痛,不像已經手術了呀?還沒手術好像也不錯…我想繼續睡…然後我就又睡著了,實在睡得很舒服呀。後來才聽小芭轉述護士說我真的睡了很久,護士不忍把我叫醒?!

第二次醒來應該不算隔太久,仍然不是護士叫我的。我主動搭話,幾點了?3:55…(所以我睡了3小時) discharge的流程基本上就是換好衣服、被規定一定要坐輪椅直到上車(os:醫院很小心免責這塊)

在術後休息區半夢半醒的那段時間,我好想睡覺,我想,生活算是踩了煞車、有時間來看看自己身體了。星期一我還一直加班到晚上10點,星期二我基本上是不請假的,手術破了例。生病、手術、接受自己需要被照顧的事實算是打了自己一巴掌,my shallow ego. 好想睡覺,而且是光明正大的睡、放下工作的睡,今天睡超多、品質超好,我幾乎都要認為我是為了去補眠而不是手術的了


**

要感謝小芭的照顧。本來我也是想說自己來就好,小芭堅持要開車載我。事實上醫院也是這樣要求。小芭事前告知兩小,12/7要乖一點,似懂非懂,會問我病狀、給我抱抱,但爸爸該陪玩的不能少,沒多久就說要陪玩board game、lego機器人…蠻好笑的。小芭準備了晚餐,很香!