Have you ever used “final”, “really_final”, and “really_really_final” as your names of files when doing projects? Every time you write a report, you would need to maintain numerous versions of files, and sometimes you accidentally delete files by mistake. What a sad story!

你有沒有曾經寫 project 的時候用 final、really_final、really_really_final 命名?每寫一份的報告就會無數個版本的檔案,有時候還會不小心誤刪檔案,心酸血淚史啊!

Git is all you need!

Git 是一個你必須會的工具!

Git is mainly used for version control and maintenance. It makes use of DAG (Directed Acyclic Graph) to track snapshots of your archives at various time points. Worth mentioning is that Git does not equal GitHub. …

You are reading this book for two reasons. First, you are a programmer. Second, you want to be a better programmer. Good. We need better programmers.

This article just simply excerpts the highlights of the book and would be updated if I have some new ideas.

Chapter 1 — Clean Code 無瑕的程式碼

I like my code to be elegant and efficient. The logic should be straightforward to make it hard for bugs to hide, the dependencies minimal to ease maintenance, error handling complete according to an articulated strategy, and per- formance close to optimal so as not to tempt people to make the code messy with…

This article mainly focuses on the big picture of traditional machine learning algorithms; as for the details, please check or search on your own.

What is the difference between regression and classification?
There are both types of supervised machine learning. The main difference is that the output variable in the regression is numerical (continuous) while that for classification is categorical (discrete).

What is linear regression? [supervised, regression, mean square error]
We find the relationship between independent and dependent variables by fitting the regression line which is polynomial equation. …

In this article, I will focus more on algorithms and theory, including neural network itself, activation function, gradient descent, learning rate, and loss function. And the next piece would discuss programming skills.

What are the steps of deep learning?
1. create a function (neural network)
2. evaluate the goodness of the function
3. pick the best function as the final question answer machine

What is a neural network?
Neural network simulates the ways human learn but is much simpler. It can be imagined as a function. When you feed it input, you are supposed to get an output. …

Another commonly used topic must be file accessing, including finding, reading, and writing. There is not much content on this topic, so the article’s length wouldn’t be too long. Just read them without pressure!


We know path has two types, absolute path as well as relative path, and sometimes it is possible to find a common prefix path for many paths and so on. In addition, we might need to confirm the existence of the file for subsequent read and write actions. Moreover, there is a package called “glob”, which I think is very useful. …

I am initially hesitant about writing the topic: time, since it is useless, the standard functions are really common for us… However, I am not currently waiting for my model in the training process, so…

剛開始很猶豫要不要寫這個主題,因為他其實很無用,該會的就那幾個,而且應該也早就會了,就好像也沒啥好介紹的⋯⋯。但現在,趁著 model 還沒跑出來,我還是寫了啦。

At the beginning, I would like to introduce the usage of the module “datetime”. It includes three classes — date, time, and datetime. today() is the function to get the date today; we can print them in manually set format by date.strftime(). To calculate the days between them can easily get by subtraction.

首先,要介紹的是 datetime 這個模組。他主要由三個部分組成,date、time 以及 datetime。today() 回傳的是今日的日期,而如果我們要將其印為特定格式則使用 date.strftime()。要計算兩個日期之間的差,則更簡單的直接將兩者相減就好。

from datetime…

There are 4 mainly used data types. According to W3schools, the definition are as following.

主要我們會使用的變數型態有四種,以下是 W3schools 針對不同型態分別的定義。

  • List is a collection which is ordered and changeable. Allows duplicate members. 有順序,可變,允許相同 elements。
  • Tuple is a collection which is ordered and unchangeable. Allows duplicate members. 有順序,不可變,允許相同 elements。
  • Set is a collection which is unordered and unindexed. No duplicate members. 無順序,可變,不允許相同 elements。
  • Dictionary is a collection which is unordered, changeable and indexed. No duplicate members. 無順序,可變,不允許相同 elements。

List 列表

To insert an element, there are two approaches, append() and insert(). To remove an element, there are three methods, remove(), pop() and del. The followings…

After introducing “number,” another essential type of variable is “string.”


First, I want to talk about “how to check the content of the string,” the most commonly used function is to check if the string is consists of specific characters, such as digits or alphabets. If the string does not only consists of a number, and you directly change the type to int or float, the error appears; that’s one of the situations you need the isdigit() as condition statement. Or, if you are writing a process for setting a password which must contain special characters, isalpha() would be…

訊連科技 CyberLink
奇卓科技 AndroVideo

威盛電子 VIA Technology
意藍資訊 ELand
願境網訊 KKBOX
NeXT++ Research Assistant
NUS SoC Dissertation Assistant


這一篇主要會講整體的準備。第一個部分跟申請學校一樣是 resume、再來是 coding test 跟 interview,還有是我有另外做的額外準備跟薪水。

resume 的目標,應該是讓面試官能在最短的時間內,相信你的能力。在上一篇已經介紹過該注意的重點,所以這篇我會著重在講跟申請學校不一樣的地方。在申請學校的時候,社團、幹部經歷等等都是展現你有領導能力、有社交能力的必要佐證;然而,這些跟做研究的能力、處理問題的能力其實八竿子打不著,也因此在面試的時候,從來不會有哪個主管問你相關問題,如果其他更重要的經歷都塞不下的話,為什麼要浪費版面空間去寫這件事呢?

Coding Test
很多公司都會有 coding test,我自己的做法是刷 leetcode 拉,但我也沒有很認真⋯⋯因為 leetcode 的題型好像都差不多,主要是 bfs、dfs 跟 linked list,只要能夠分得出來應該就不是什麼大問題。有遇過要自己編 input/output 的,也有給定格式的;所以練習找出對你最有利的 input 方式也蠻重要的。另外,推薦大家用 python,高級語言跟鬼一樣,但因為 sublime 有很多幫你補字的部分,我剛開始連 function 都忘記怎麼寫⋯⋯。

在過程中,看著面試官講話是基本,而邏輯性也是非常必要的。內容的部分,除了最基本的資料結構、演算法、系統以外,我會事先瞭解公司主要在做什麼,跟自己面試的職位複習一下,例如 NLP 相關就必須要會 BERT,又或者 CV 領域需要會的就會是 Data Augmentation 還有各種基礎的 NN 架構,專精於 FR 的話可能就要會 Product Quantization 等等。以前上課的投影片要留著,我自己是每一科都有做筆記,所以複習起來也比較快速,如果你什麼都沒有的話,網路上有很多資源,簡體中文的資料甚至有題庫可以練習,總之運用一切資源,讓你的準備更加完整。

Others(Self Intro、Company Info、Question Time)
除此之外要準備的還有很多東西。1. 自我介紹:這個部分,我有準備中文的兩個版本,分別是一分鐘跟三分鐘,另外還有簡單的投影片,包含一些學經歷還有做過的 project 跟專題等等。還有切記!一定要對自己 resume 上的內容熟習,複習一下你曾經寫過的報告! 2. 公司的大致發展方向:這就不用說了,上網一定要查過,對自己應徵的職位也要有一定的瞭解。3. 面試結束前的發問時間:我自己是有根據公司的專長領域,以及研發中的產品,去專門查一些最新的資訊,可能遇到的瓶頸,稍微看一些 paper 的相關演算法,最後裝做不經意的說出『我以前有看過一篇 paper,主要是在說某某某解法,公司目前是比較偏向哪種方式?』

Others II(Salary)
最後一個,可能大家也比較有興趣的部分是 4. 期望薪資:我要分享的重點是『怎麼談薪水』,我們都知道公司會希望以你所能接受的最低價格聘請你,也因此你開的最低價格甚至更低就會是你們最後談成的薪水。當然看到這裡,可能會想說那就是越高越好麻!不是這樣的!事先了解薪資行情是必須的(可以藉由多面試幾家觀察到),不然只會讓人覺得你很沒有 sense,進而顯得沒有底氣。我通常會開的比市場價高一些(其實高很多些),但前提是你能夠證明自己,從有條理的談吐、從你對這份工作勢在必得的自信、還有從朋友教授及別家公司的認可,都是證明的方式。記住,你的專業就是你的價值,也就是你薪水高低的關鍵!

最後在兩家待過的公司都有要到高出市場價蠻多的薪水。最想告訴大家的是,做最充分的準備、盡最大的努力、展現最完美的自信,機會就是你的。啊忘記分享國外的,不過大同小異,只是全部都是英文版拉,迎向我的 WFH 工作人生。

NUS MSc in Computing
UToronto MSc in Applied Computing
UToronto MSc in Computer Science
UCLA MSc in Computer Science
UCB MSc in Computer Science

從很久以前就很想出國,去欣賞不同角落的風景、認識不同國家的朋友,也很努力的朝著這個方向前進 吧!然後 NASA 直接被當,交換機會再見;GRE 的 quantative 爆炸,美國學校也差不多離我遠去,但還是抱持著『如果有一個成績比我爛、表現比我差的人,一不小心上了,我一定會很想揍人』的心態,申請了各知名大學,但錢難賺所以只有幾所QQ

決定好要申請哪些學校之後,也算是做了蠻多準備。第一個需要的當然是resume、personal statement 跟 statement of purpose,再來大家比較有疑問的大概是 reference letter 的部分。除此之外,我還有額外聯繫教授,提前讀一些教授發的 paper,討論實驗室主要的研究方向,重點是要讓教授對你有印象,簡單來說就是刷存,這部分就看自己決定要不要拉,我個人認為蠻有用,但見仁見智,所以我就不多說了。

我自己寫 resume 的方法是先列出所有有做過的事,可以包含專題、實習、甚至是期末報告、side project 等等,只要你能講出一番豐功偉業,凸顯出你希望呈現的能力就可以。條列式『具體』能夠描述內容的幾句話,形容詞並不具有說服力,『量化』你在那些事的成效很重要,kaggle 上的 private score 之類的都是很好的例子。最後提醒一個我覺得挺重要的點,resume 的排版要是簡潔有力看起來專業,花俏對於資工系不太適用(?);另外長度最好落在一到兩頁之間,塞太多東西並不會顯得你比較厲害,只會表現出你不懂得取捨跟抓重點。

Personal Statement / Statement of Purpose
personal statement 跟 statement of purpose 的差別主要在於前者強調的是『自己』,後者強調的是『目的』。怎麼說呢,PS 主要的目的在於行銷自己,因為那些你的課堂經驗、你的實習經歷,告訴對方你從中學到什麼,進而具有什麼樣的能力。而 SOP 則除了你的實力外,要能說出為什麼要選這個 program,可能因為有哪些課你很感興趣,或者是哪個教授寫的 paper 是你很著迷的主題,以及你能藉由你的優勢帶給學校什麼樣的正面影響。有些學校會分別要兩個,而有些只要求一個,如果只有要求一個的話我個人是把兩篇的內容融合起來,所以我總共寫了三個版本。還有『客製化』也是展現誠意蠻重要的一環,一定要認真查每個學校的教授、課程跟合作計畫。

TOEFL 一戰 96 二戰 108

GRE 一戰 304
Q 跟 V 分數差不多,結果之慘烈請自行想像。V 最重要的就是背單字!狂背猛背感謝同學的單字表救援,我是自己做 quizlet 的單字卡,這樣才會有印象,最後 V 有衝上希望的分數,偉哉戴夫。Q 的話⋯⋯好像沒什麼立場講話⋯⋯,我寫完得時候覺得挺容易,可能是英文太爛、數學太爛、或理解能力太爛之類的,用的是 magoosh 的題庫,但結果如此之讓人傻眼,大家斟酌XD

Reference Letter
我請了兩個指導教授跟修過課的老師幫我寫。推薦跟教授約時間討論,讓他更瞭解你,也更知道你的優勢在哪裡;除此之外,你也能夠知道教授對你的印象是什麼,再根據這些去做內容的調整,推薦信寫起來才不會像是制式化的文件。通常教授會希望你能打草稿給他,就像前面提到的,形容詞並不具有說服力,可以用一些實際發生在課堂上、專題過程中的經驗當成佐證,讀起來會更具有公信力。一個老師我是寫兩件事分別呈現我的能力,一個是 technical skills、一個是 transferable skills,不能只會專業能力,其他方面也是不可或缺的。

最後去了新加坡,因為不想浪費時間多讀一學期的大學,而只有新加坡有提供 spring program 其他學校都只有 fall admission。本來是打算如果有上其他間學校的話,可以轉校抵學分,但碰上疫情,所以就此作罷。歡樂繼續迎接住在台灣的新加坡碩士生活!


BS in Computer Science, National Taiwan University (NTU); MS in Artificial Intelligence, National University of Singapore (NUS)

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store