CMU 的 Software Engineering 到底在學什麼?

如果來不及嫁給軟體工程師,那至少要生個軟體工程師,要不然就自己成為軟體工程師吧!在美國知名軟體公司擔任工程師的作者,因為實在太多人問她到底「Software Engineering 和 Computer Science 差別在哪裡?」於是被敲碗生出此文來解答大眾疑惑,CMU課程內容一次解密。

CMU 的 Software Engineering 到底在學什麼?

2018年,我錄取了Carnegie Mellon University(下稱CMU)的Master of Software Engineering,同年八月底正式入學!為期16個月的program,究竟我學到了什麼呢?

不要自己腦補  CMU 基本資料在這

CMU 有許多時間長度不同的program:12個月的、16個月的、也有將近兩年的。個人認為若以找工作為目標當前提,16個月的program非常剛好,不會太短如12個月,剛適應完學校生活就要找到工作,但也不會太長到兩年。是否可實習每個program有不同的規定,就讀前記得要看清楚!

The Bill and Melinda Gates Building at Carnegie Mellon University
Photo by Jonathan Speek / Unsplash

我所就讀的Master of Software Engineering(MSE),隸屬於CMU最有名的School of Computer Science(SCS)下!(撒花)SCS下有七個departments:

  • Computational Biology Department
  • Computer Science Department
  • Human-Computer Interaction Institute
  • Institute for Software Research (ISR)
  • Language Technologies Institute
  • Machine Learning Department
  • Robotics Institute

可以把 SCS 理解為台灣的學院,而每個department 是一個系所。我就讀的MSE隸屬於ISR,這篇文章也會集中介紹此系所。(其他系所開放的program可以看CMU官網

系所 ISR

此系所下面開了五個 program:

  • Master of Information Technology Strategy
  • Master of Science in Information Technology - Privacy Engineering
  • Master of Software Engineering (MSE)
  • Master of Science in Information Technology - Software Engineering(MSIT-SE 目前改名為 Scalable Systems)
  • Master of Software Engineering - Embedded Systems

我錄取的program是MSE,而其中MSE 和MSIT-SE 的必修課程幾乎一模一樣,所以會一起介紹。

關於MSE 你知道的太多也太少 必修課程一次看

MSE 的必修課程大概有六個主軸:

搜集與分析需求——軟體開發中會有使用者提出他的需求,但該需求可能範圍很大很模糊,此課程會教一些model讓你在分析客戶需求時使用。課程尾聲有一個團體project,要學生們實際訪問潛在使用者,並根據回答設計一個符合主題的產品。課程僅專注於分析需求,所以不需要實作產品。分析需求其實很主觀,邏輯講得通應該都可以被接受。但我們組的產出多被助教評的異常低分,花了許多時間與助教溝通,仍百思不得其解助教究竟想要什麼。在這堂課學到最深刻的,大概是成績於我如浮雲吧。(菸)

敏捷式開發Scrum——為了變因太多的軟體產業而發展的一套專案管理模式,包含如何切分一個大project至小的milestone甚至是task、如何評估task的難度與排序task的優先度等。老師透過大量的課堂團體活動讓我們體驗Scrum,讓學生能夠完整體驗Scrum的每一個環節,因為公司組織為節省成本,通常是閹割版的Scrum。此外,Scrum是許多軟體公司會採用的專案管理模式,對於沒有Scrum經驗的學生算是一門很不錯的實際應用課。

Team actively working on a sprint to achieve the sprint goal
Photo by Lala Azizli / Unsplash

Software Architecture——設計不同軟體元件(例如server、資料庫)之間的關係以及根據需求選擇最符合的元件。著重在訓練軟體工程師最重要的技能:分析pros and cons並針對需求選出最佳解。例如:client端的資料要即時還是定期更新?資料庫要用SQL還是noSQL?不同的軟體元件有不同的屬性也提供不同的功能,並不是新的技術就比較好,應視情況而定。這門課的老師有點兩光,整學期只學到皮毛,實在是愧為一門必修課。

Quality Assurance——課程介紹了各種不同的測試:unit test、integration test、load test等,也包含各種評估你實作的test的工具,例如涵蓋範圍(coverage)。測試就是良藥苦口,雖乏味但可以幫你與公司省下許多不必要的debug成本。團體project佔了課程非常大的比例,必須和組員實作功能並幫功能寫test,課程loading如果有 100 公斤重,實際與測試相關的知識含量大概是30公斤重。

Run a usability test
Photo by David Travis / Unsplash

Communication——前半段為英文課、後半段為說故事課,主要是訓練你的寫文件能力(因為多數工程師不愛寫文件)。課程前半段各種寫文章,並且老師會嚴格改你的文法(嚴格到美國人也不知道哪個時態才是對的)、分段是否適當、主題句是否夠切題等;課程後半段則是分組討論不同的 topic。這堂課的目的,主要是為了訓練工程師能夠寫出易於閱讀的文件並順暢地表達出自己的想法。

Studio Project——系上會找來一些外部企業來當我們的客戶,學生要利用系上所學,為客戶實作軟體。系上稱這門課為類實習課程,但我認為這門課程實際上有不少盲點:不少客戶是校內教授需要的專案,根本稱不上是企業實習;即使客戶是外部企業,也不會對付出勞動的學生支薪(學生甚至還要付學費);因為不支薪,學生可能擺爛,導致客戶需要的軟體無法如期完成,什麼樣的企業或是專案能承受這種風險?

選修課程

MSE和MSIT-SE的可以自行選修其他四門課程,值得注意的是:在我們這屆,至少有一半的選修學分必須選ISR下面的課程,大大限制了我們的選課範圍,提供給考慮就讀MSE program 的人參考。

總結

當初選擇工作過後再念一個碩士,本是期待學習電腦科學的基礎,但MSE的必修課程和我當初的期待有落差,還好選修課程稍微補足了我的需求。也因為期待有落差,就讀過程中每天都在問自己:「我是誰?我在哪?」雖說事前就大概知道課程內容,但我也沒得選(CMU 是我當初唯二錄取的學校其中之一),再選一次我還是會做一樣的選擇,認清目標與現實就好。

我總是戲稱CMU為"寫作業大學":「我不是在寫作業,就是在寫作業的路上。」不管是必修還是選修,每門課幾乎都有滿滿的作業要完成,也等於有滿滿的知識要消化。念CMU的碩士不只訓練你的學習能力,也鍛鍊你的抗壓力。所以,我還是心懷感激我有機會可以就讀這間世界名校!

認識本文作者:Mia Chen

在高雄長大,高中畢業就開始漂向遠方的遊子。工作時是理性的工程師,下班後是情感豐沛的追劇少女。喜歡聽別人的故事之餘,也在想著自己的故事可以如何幫助別人。

執行編輯:I Cheng Huang
核稿編輯:Sophia Cheng

《NEX媒體實驗室》為NEX Foundation台灣未來基金會提供給讀者與作者的意見交流平台,所有言論不代表NEX媒體實驗室與NEX Foundation台灣未來基金會立場。本文章內容僅反映作者個人意見,並經作者保證文章內容並未侵犯任何人之權利或違反相關法令。