170827

之前的文章已經提過,我對於這邊的資格考筆試非常苦惱,因為它不是考你數學或演算法等專業科目,反倒像作文比賽,考你建立答題框架與論述的能力。簡單來說,我們有一份 reading list,裡面有約 50 篇軟體工程各領域的經典文獻,你必須先讀完(可以透過修兩個 quarter 的討論課來讀及與同學教授討論),然後在考試時回答一些大哉問的問題,表現出你有架構問題及引用文獻的能力。考試分成早上下午各 3 小時,早上回答兩題必答題,下午回答兩題 8 選 2 的選答。考試結果有 PhD Pass, Master Pass 及 Fail 三種 (沒錯,UCI 的 Software Engineering program 碩士畢業也要考這個筆試,或是選擇寫論文)。今年我回答的題目如下:

  1. 敏捷式開發流程已經征服了全世界,為什麼?既然我們崇尚「快速產出雛型再根據反饋修改」的流程,那幾十年來在軟體開發流程,分析,架構,測試等子領域上的軟體工程研究,究竟有什麼意義?有哪些研究為實務打下了基礎?又有哪些研究是「沒用」的?
  2. 不同的軟體工程研究方法 (質化與量化的各種方法,如問卷、數據分析、理論推導、訪談、個案研究等),各有什麼優缺點?舉出幾個例子說明哪些研究子領域特別適合哪些研究方法 (例如 Usability 的研究特別適合用訪談或問卷,Formal verification 特別適合用理論推導等);舉出一個在文獻上很少搭配在一起的研究領域及研究方法,但你覺得應該要搭配的理由。
  3. 有許多的軟體架構框架 (e.g., Spring, Django, Android) 被提出用來增加工程師的生產力,但同時也引入了新的問題,例如框架的 bug, 安全漏洞,及誤用等,你覺得這些問題的原因何在?有哪些研究領域能夠幫助 framework 的設計者與使用者緩解這些問題?
  4. 研究者對於什麼是好的研究方法 (或說什麼才叫做知識) 有不同的立場。有些人認為:根據可觀察及量測的事實現象推演而來的,才叫做知識,推演過程及結果不因人而異;有些人認為:知識形成的過程不能抽離應用該知識的人與環境,什麼叫做「有用」是見仁見智的。討論這兩種看法的哲學立場,並舉出一個可以同時應用這兩種立場的研究領域。

每個問題有一個半小時,如果是你,會怎麼回答這些問題?光是第一題就要你質疑自己作研究的意義,其他題目則是研究方法與哲學立場的探討。坦白說,對於 Native speaker 且有許多實務經驗的人來說,可能不太需要熟讀文獻就能行雲流水的寫出想法,但我只能戰戰兢兢的準備。

讀這些東西有用嗎?這剛好呼應了考試的題目:什麼叫做「有用」?怎麼定義有沒有用? 一方面來說,我之前有講過這個考試對自己的研究領域不一定有幫助,而且早期的文獻 (8, 90 年代) 多半還在爭論「軟體工程」作為一門 engineering discipline 的正當性,當時的爭論在今天答案已經很明顯。但另一方面,這樣的考試對於非英文母語的我來說,是練習讀寫及思考的大好機會,這也是研究的基礎能力;再者有些文獻是我的研究領域一輩子也不會讀到的,讀這些 paper 目前看來沒用,但總是增加了知識廣度,哪一天可能會派上用場。因此我還是很高興有機會準備這個考試。