這篇主要有3個目的,1是給未來就讀的同學一些data point作為選課或選校選系的參考,2是意識到一些感想如果不趕緊記錄下來,之後回憶起來會需要花更多時間3是練習summarize的能力。
首先快速說明一下CMU的修課制度。一個完整的16週會被拆分成2個session(Mini 1 和 Mini 2),如果一堂課橫跨2個mini session就會是12units,只上8週(either Mini 1 or Mini 2)就是6 units,除此之外有些課比較例外會有15 units 或9units的出現,以及少量的只上4週的micro mini (3units)。不過大部分情況MISM的課都是6units或12units,而基本上所有CMU和coding有關的master program,感覺MISM應該是要上最多mini course的program了,相比其他如ECE, INI, SE都是12學分的大課為主,MISM有很多「淺嘗輒止」的管院必修課,優點是這些課loading不重,可以多出不少時間刷題或做自己的事,缺點是因為這些必修課,第一學期沒有可以放上履歷的hard core大作業。
修課體驗:
- Object-Oriented Programming Java (95712, 12 units)
Heinz的Java必修課,不論是MISM General或MISM BIDA都要修。我自己的感覺是,如果是想走Data Science或Data Analysis,其實不會Java好像也不會有太大影響,如果是轉碼選手,這堂課教的深度也不足以讓自己熟悉Java這個語言,比較像是教你怎麼寫語法和應用,但沒有很深入的探討為什麼要這麼設計。課堂外:每週20-30分鐘左右的影片放在canvas上,看完寫self assessment。課堂上:每週都有10題class quiz(Monday) 和lab(Wednesday),另外還有3次期中考(取2次高分)和一次期末考。整體來說沒有太刁難的考試,只要lab前有把它的practice problem做過基本上都可以時間內寫完,我最後1個多月除了期中期末考之外就沒再去上課了(喜歡自己安安靜靜的寫code,有時候印度人討論的聲音實在會讓人分心)
2. Organization Design and Implementation(94700, 6 units)
ODI是這學期要讀+寫最多東西的課,每週800字的作業和期末1500字的報告。老師David Lassman是一個很有活力的人,會鼓勵同學發表自己想法,也會很快地給予feedback(雖然我覺得有點正向過頭了,任何idea都是positive feedback,很老美的風格)。學習的東西的話,有點像之前在台大修的組織行為學和企業管理的結合。大概就是回家讀個案,上課帶討論。雖然這堂對於寫code沒有任何一點關係,上課過程還是可以從同學間觀察到一些有趣的現象。美國人很踴躍發言這個不意外,印度人真的如之前在網上所看到的,非常樂於發表想法,雖然有時候我覺得有時候真的有點太多了,但他們不care,仍然瘋狂舉手。相比之下,台灣人和中國人的發言次數少非常多,我自己也是因為發言有算分才每堂課逼自己發言1–2次。剛好最近一畝三分地(中國留學生論壇)一個很熱門的話題就是為何印度裔逐漸佔據美國科技公司的領導地位,但是華人卻很少見,我覺得這堂課讓我看到了一個很小的縮影(甚至可能有bias,所以聽聽就好)。仔細回想從國小到高中,所有課堂似乎都圍繞在如何找到題目的答案,並在越短時間內寫出越多正確答案,但是沒有訓練我們看到問題後把自己的思路清晰地表達給其他人聽。而印度人從小就講英語,這點對他們來說是從以前就在做的事了。此外,相比東亞的儒家思想,印度更適應美國主流的企業文化,導致我們目前所看到的現象。有點扯遠了,但是這門課學到的東西我想如果沒太多工作經驗可能也沒什麼體會,所以講了比較多現象層面的東西。
3. Professional Speaking(95718, 6 units)
這堂就是每週都在重複做簡報、上台簡報的循環,講的主題很雜,有對於Covid政策的看法、用幾分鐘解釋xxx、對xxx的迷思之類的。一開始會覺得為什麼要花時間上這種課,不過之後掌握節奏後把每週準備的時間縮短在2小時左右,就完全是門loading超輕的課,而且可以強迫自己練習英文口語表達也還不錯。老師的黃金獵犬和漂亮的韓國助教是課堂之外的亮點。
4. Business Writing (94701, 6 units)
也是門涼課,作業就是寫CV, Cover Letter, LinkedIn profile, Business Proposal。上課就是讓同學互相看對方的作業然後提出建議。老師也是超級樂觀的那種人,不管怎麼樣都會說「看看我們是不是又進步很多了呢!」因為早8的關係,我後來都沒怎麼去上課了,平時作業成績也不差,期末被給C+也是滿頭問號。
5. Accounting and Finance Foundation (95719, 6units)
之前的學長姐這兩門應該是拆成兩個mini的必修,我們這學期合併成一門。好處是多了6學分的選修學分可以運用,壞處是要在8堂課濃縮可以上兩學期的初級會計和一學期的財務管理,進度真的是用飆的。所幸實際考的難度完全沒有大學時那麼刁難,也不是第一次接觸這些,所以loading不算很重。整體來說有種重回大一的感覺。
6. Economic Analysis (95710, 6units)
同樣就是把大一上過的經濟學原理重新再上一次,不同的是這堂作業和考試都沒有台大那麼難,也比較有趣,所以至少讓我對於再次接觸經濟學沒那麼排斥。不過老師似乎真的沒發揮什麼作用,上了還是要自己讀,所以我只去了第一堂課(還遲到20分鐘)就沒有再去了。考試前的助教課還是滿推薦的,因為真正的試題和考古題相去不遠,如果自學有困難可以去聽助教解題開個竅。
7. Java for Application Programming (17681, 6units)
這堂課和mini 2的Data Structure組合包對轉碼選手來說CP值還挺高的,可以在短時間內熟悉Java這門語言還有它的魅力。老師Terry Lee是韓國人,非常有課堂的魅力,雖然有口音但是他完全不害怕講,這點很值得我敬佩,換作是我,應該沒有辦法每堂課都這麼生動有活力的把之前已經重複無數次,且又相對基礎的東西說給學生聽。雖然沒有Java的基礎,但是因為大學上過C++的程式設計,所以入手Java不會很難。Terry Lee的特點是作業有很多edge case要考慮, coding convention很嚴格,考試則是考超級細的那種。雖然有時候覺得為什麼要考這麼刁鑽的東西,但長久下來也的確養成了注意細節, 注意垃圾input並且throw exception的習慣。上課大概就是從Bit Manipulation, Primitive & Reference Data Type, Class Modifier, Inheritance, Interface vs Abstract Class, GUI, I/O, Multithread… 不過後期步調比較快沒有時間細講I/O的東西有點可惜。整體來說的確有滿多東西是面試可能會問到跟Java相關的東西,如果是基礎紮實且學分足夠的話,也還滿推薦修這門課填補一些之前沒注意過的細節知識,順便減輕laoding。Homework除了Multithread打地鼠花了7–8小時外,其他平均大概1–2個小時左右可以bug free寫完。期末上機考沒有注意時間,一開始還在慢慢寫,結果最後10分鐘才發現一個很重要的method的bug,做Terry Lee的考試一定要注意時間,17683也是同樣套路,題多時間短。小亮點: 老師考試會當聖誕老公公發巧克力,我17681邊考試邊吃結果血糖提太高專注度明顯下降,後來17683吸取教訓把它先收進書包裡…
8. 17683 Data Structure and Application Programmers
教的東西大致可以分為Java Collections裏常用的Data Structure, 常見的Sorting Algorithm, 還有其他如Big O Analysis, Recursive, Hash等等基礎知識,作業和Lab就是手刻簡單版的Data Stucture。內容有帶到ArrayList, LinkedList, Stack, Queue, ArrayDeque, HashMap, Binary Search Tree, TreeMap, PriorityQueue。B+Tree和紅黑樹只有在TreeMap的部分草草帶過。作業有些一直想不到的edge case建議直接拿去問助教比較快,平均來說大概花3小時左右可以bug free。課堂小考和期末的特點就是明明是考上課的東西,但是他把code換個方式包裝就又蒙了。期末考80分鐘20題真的超趕,主要是code挖空或者給一段code問output,我最後大概留了2題沒寫完。考題我印象的有
- 用個特殊的方法把array的size double,並且問複雜度
- 先build a tree,然後用Moris traversal preorder 遍歷樹
- 用stack做inorder traversal 但是稍微變形
- 用areaylist實現MinHeap
- 用PriorityQueue 實現huffman coding
- 對MinHeap一陣操作後求output
- Turtoise an hare算法確認singly link list裏元素是palindrome
- Recursive 確認array裏元素是palindrome
- 證明binary search是O(log n) in worse case
- 需要幾個bit encode [A-Za-z]
- linkedlist insert last 再remove last印出結果
- 給一段Generate hashValue的code,問有什麼問題
整體來說,這門課幫我對Java有更深一點的了解,也讓我開始滿喜歡這個語言。以前寫Python來CMU開始寫Java會覺得這個語言很囉唆,但是也因此更清楚知道自己在寫什麼
生活體驗
匹茲堡就還滿無聊的,如果有像水源BOT的711那樣子的空間就感動得痛哭流涕了,大部份時候還是學校(上課)、TCS(讀書)、家(讀書、吃飯、睡覺)三點一線的行程。不過我很慶幸自己住松鼠山,猶太人社區治安沒什麼問題,有時候半夜12點像之前在台北那樣夜跑也沒有太多安全上的疑慮(不過台北12點一定見得到車跟人,這邊12點就是鹿比人多了) 再加上Schenley Park 和Frick Park兩個超大的公園(其實更像森林,畢竟都是5, 6個大安森林公園的大小)都離松鼠山不遠,週末有空就會跑去trail run。對好吃的沒什麼慾望,所以餐館那些很少上,印象中只吃過2次。
找實習
來美國前,我以為簡歷應該至少可以拿到面試,所以只專注在刷題上,來了之後才發現不是這麼回事,swe的競爭異常激烈,目前只拿到2個面試,不過和很多人相比我投的家數也不算很多,大概100家左右。至於MISM的學位究竟能不能過簡歷關,我覺得還是很玄的,有人可以有人不行,我自己被拒的原因可能更多是履歷不match軟體工程師的要求,只得趁寒假多長一些技能樹努力補回來。
總結
但於非CS科系轉碼,缺點是很多不想上或對找工作沒有幫助的必修得上,優點是這些課相較CS的課loading很輕可以拿來騰出找工作的時間,減輕壓力,但是當壓力被調節還是沒有找到工作,壓力就更大了xD。