Life At Cu Boulder

2 minute read

轉眼間來美國讀書已經過了3個學期,這段時間真的學習到很多東西,但之前實在太忙碌了沒辦法一一紀錄,今天就來寫一篇在 CU Boulder 讀 CS Master 的心得吧!

生活

小弟大部份時間都在宅或是跑到Lab假用功,所以就不著墨太多在生活上,有興趣的朋友可以參靠 Chih-Wei 大大的文章

修課

CU 的 CS 課感覺上不像其他學校那麼多,系也不是特別重點的感覺,基本上 CU 比較強的領域是航太跟物理,有興趣的話也是可以去修修這兩個系的課程。我自己的話選課通常是選水課或機器人方向的課程,這樣的選課策略主要是按照我的興趣跟時間分配,值不值得參考就按大家自己的狀況去考量囉。

  1. Data Mining:這門課主要教一些 data mining 基本的技術,包含前處理、推論、還有一些分析資料的方法。作業的話程式用 Python,還有一些手算的題目,例如 Bayes Classifier, Decision Tree 等等,不是特別難,只有一次期末考也跟作業出的差不多,基本上把投影片看熟,不太懂的名詞去查一查課本就能拿高分。還有一個佔分很重的 final project。我個人覺得需要學分的話是可以考慮這門課的,loading 重的地方只有 project,考試不失常的話不難拿到 A,缺點是教得東西比較入門,但其實我認為這樣的課非常有彈性,因為這樣一來就不必花太多時間在作業,且想要學得深入一點可以做一個比較有挑戰性的 project,並且有問題的話老師也非常厲害,所以不必擔心。但這學期我都在寫 leetcode,沒有把 project 做得很好。連結給大家參考,個人會推薦給想選涼課又不排斥資料科學的人。
  2. User-Centered Design:也是一門涼課,每個禮拜會做一次作業、quiz和閱讀,教得東西在概念上,並不會帶大家做真正的作品。大概是講怎麼 brainstorming、設計 prototype、怎麼做問卷、怎麼樣去觀察使用習慣等等。期末 project 是用 Figma 做一個 prototype,包含讓同學試用做 iteratively improvement。對 UI/UX 理論有興趣且想選涼課的話還是可以選的。
  3. Advanced Robotics:這門課主要的目的是做一台小車繞行一個方形的迴廊,老師涵蓋了很多的機器人相關知識,但也因為實在太多了所以都不深入,從一開始的 control 講到 SLaM 和深度學習,要真正深入理解這些理論並練習實作完全需要靠自己下苦功,但還是從這門課學到很多東西。作業基本上不限制語言,有時候會給 Matlab 的 base code,但並不是強制一定要使用 Matlab,我自己偏好使用 C++ 和 ROS 也是被允許的,作業內容包含實作 RRT、熟悉 ROS、寫 Kalman Filter 來處理真實的 IMU 數據、兜一個 Bundle Adjustment 算法來最佳化 SLaM 數據等等。至於期末考的小車測驗,因為地形不是特別複雜,我們用狀態機和簡單的 PID 控制就解決了大部分的問題,當然如果想用更高端的解法也可以,只不過車子的電子零件是固定的,有 3D 相機、一個 Arm 板和 Pololu 的馬達控制器,所以也並不是所有方法都能使用上。總體而言,我還是很喜歡這門課,雖然我花了比其他同學多很多的額外時間去讀延伸的東西,但也是因為這樣收穫很多,未來也打算繼續朝機器人相關的領域前進的同學非常值得來上,退一萬步來說,能認識這門課的教授跟同學就值得了!
  4. Phys Human-Robot Interaction:這是小弟老闆開的課,CU CS 系上寫著 7000 的課通常是比較偏研究一點,上課大多是讀讀 paper 分享,並且最後做一個相關的 final project 這樣。這門課也離不開這個套路,主要是在講機器人與人類的互動,現在比較多的情況是發生在工廠,機器手臂與產線人員的互動,最高理念在於兼顧安全與效率,從 controller 到 planner, sensor 都有涵蓋,包山包海。老實說每兩個禮拜要報告一篇 paper 對我來說壓力真的非常大,因為我本身英文不太好,尤其口說更慘,但因為是老闆的課,也只能硬著頭皮上了。最後做了一個 project 讓機器人試圖理解人類社會中的 interruption cues,也算是很有收穫的一門課。但不太推薦給不喜歡報告的同學。
  5. Computer Graphics:因為一直對 rendering, OpenGL, shader 等等的東西不太熟悉,就抱著好奇心上了這門課,但跟我原本預期的有點小落差,我本來想說期末作業可以做跟 3D 視覺相關的東西,但這門課更著重在用 OpenGL 畫出複雜的場景,且希望我們儘量不要一直用現成的模型去畫,多自己加 normal, texture 等等的東西。這門課只有作業跟期末專題,作業的話基本上不會太花時間,總共6個作業大部份一兩天都能做完一個。期末作業的話我自己主要是做了一個樹的產生器,並用樹畫了一個森林,大概一個禮拜左右可以做完,但老師的範例大多是 C,不喜歡寫 C 的朋友建議不要選,但總體來說是一門很涼爽的課。
  6. Software Engineer for Scientists:這門課也是輕鬆的課,主要教很基礎的 Git Workflow 和用 Python 寫寫資料結構,只要目的是想讓讀基礎科學的同學能多會一些 CS 工具。主要是因為這學期在找全職工作,就選了這門涼課,推薦給缺學分也缺時間的人。
  7. Independent Study(兩學期):因為我本身是讀 traditional MS,必須要修兩學期的 independent study,簡單來說就是找教授做研究或開發,他覺得你做得還可以的話就給你學分,適合想走 research 路線的同學,我基本上都在 HIRO Group 工作,我非常喜歡老闆的專業度跟帶人風格,所以這兩學期過得很開心,如果之後有心想走機器人領域的同學也推薦可以跟 Alessandro 聊聊天並決定是不是要加入 HIRO。
  8. Algorithmic Human-Robot Interaction:這門課是 Bradley Hayes 教授開的,內容從控制、規劃、強化學習到事件分類,很多領域都有涉及。講解的內容深入淺出,搭配老師選的論文來學習真的收穫蠻多的。這門課基本上沒有作業(只有很簡單的 ROS 小作業),主要是圍繞在 Paper Presentation、quiz (paper 內容)、還有最重要的 Final Project。Final Project 主要是做人機相關的各種題目都可以,老師也會參與一起幫忙完善題目和給技術支持,我覺得體驗算是很不錯的一門課。
  9. Foundations of Software Engineering:這門課再最後一學期,想說跟朋友一起修,順便學學寫網頁的相關技術。講師是業界工程師,很樂於幫我們看程式碼一起討論,算是我覺得這門課最好的地方。課程評分有幾個部份,Quiz、Essay、作業跟期末專題。Quiz 就是上課的內容,題目從講義出居多,都是很基本的題。Essay 也算是蠻有趣的一部份,主要是寫自己期末專題用到的 tech stack 相關內容,例如有用到 Django、React 之類的東西,就可以寫一些你覺得實用或有趣的介紹等等,一學期一組要寫 8 篇,涵蓋自己大部分的 tech stack。作業跟期末專題是合在一起的,作業裏面會要求 run iterations 去開發我們的網頁。總體來說不難,適合想學 web 開發的人。

求職

面試經歷

來美國念 CS 的人許多都是想要在美找工作,所以就寫一下自己的心得,這邊先介紹一下我自己,可能多少可以消除一些 bias,小弟本人求職時 28 歲,leetcode 赴美才開始刷,總共也才 247 題,交大資工5年碩,台灣工作3年,主要偏 Robotics 方向求職。

Offer: Orbbec 3D, Occipital, Zoox

on-site 後被拒: Torc Robotics

履歷拒:數不清

  • Orbbec 3D

    這間公司是我暑假實習的公司,在密西根的 Troy,環境相當不錯,同事人也很 nice。實習的話只有兩輪 phone,第一輪介紹一下自己的履歷,第2輪考 C++ 的基本知識跟講一下 3D sensor 的相關經驗。實習中 software team 還非常新,所以人不多,自己負責幾個項目,過程中如果有遇到問題任何部門的同事都很快能找到並都樂意幫忙,除了要跟中國總公司溝通的時候會慢一些,其他時間都能很快得到回覆跟幫助,最後實習做了幾個項目學到不少,也拿了 return offer,很愉快的實習經驗。

  • Occipital

    這應該算是 Orbbec 的競爭對手之一,因為總部在 Boulder,所以也就去面試看看。面試的職位是 Robotics + Calibration 方面的,投了履歷之後跟 PM 還有 GM 聊聊天,主要是看經歷夠不夠 match,在 Boulder 的好處是我每個面試都是 in person 的,對溝通能力比較弱的我來說非常有幫助。結束了之後約了一次 on-site,主要考兩個 C/C++ 相關的 coding 題,然後還有兩次 on-site,可能是因為我就住在附近的關係給了我很多輪不同天的 on-site,一次對 manager,一次對 co-funder,都是講以前的經歷和考一些 3D geometry 的知識。最後有幸拿到 offer,這間公司給我的感覺是高手雲集,但大多都要自己負責一個大項目就是了。

  • Zoox

    這間公司是位在加州的自駕車公司,也是面試 Calibration/Optimization 相關的組,OA 是兩題演算法題,接著會給一輪 phone 考 C++ 和 system design,過的話就可以去加州 on-site 玩耍,當天面試了五個人,第一輪是考邏輯、機率、物理和數學,感覺答對或答錯不太像是重點,主要是看你怎麼去面對一個未知的問題,並且找出答案,過程中面試官也會給不少提示。第2輪是跟面試官吃吃午餐問問題,輕鬆愉快。第3輪是 coding,江湖在走,leetcode 要有。第四輪是跟未來的 manager 聊聊天,講一下自己的經歷,這邊我準備了投影片來講,第五輪也差不多。

  • Torc Robotics

    這間公司的 OA 印象中蠻多題的,但都不太難。Phone 的時候是考兩題,一題 C++ 的 OOP 題,一題是 leetcode 題。on-site 面試來到了 Blacksburg,我自己挺喜歡那個城市的,可惜最後沒上 QQ 主要也是講自己以前的經歷跟介紹他們那邊的環境,我覺得答得還可以,可能有些地方不是那麼 match 最後被拒了真的挺可惜的。

準備

  • 履歷

    基本上我很多輪都是在講以前的 project,可能因為我投的職缺都是跟 Robotics 相關,求學期間也都做相關的專案,履歷的話就是儘量把貢獻量化,把專案的 goal, motivation, contribution 都儘量表達出來,讓 recruiter 覺得你能有足夠的專業度通過面試。也要常常練習一到兩分鐘簡短介紹自己的 project,一樣要把重點講出來,這樣拿到後續面試的機會就會增大不少了。而且我所有的面試都是自己網丟拿到的,如果想去的領域能幫忙內推的人不多,寫好自己的履歷跟 cover letter 絕對是必要的,而且這個項目可以有很多時間打磨,請人幫忙看,在我的觀念裡是一定不能太差的環節。

  • LeetCode

    刷起來就對了,一開始可以按照分類把不熟悉的算法練到熟,然後很推薦多多複習,這樣可以漸漸的強化對題的印象,也可以多看別人的討論多熟悉一點解法。除了演算法本身,對於複雜度的掌握也要有一定的程度,因為面試時常會遇到這樣的問題。最基本的話至少要能很快想到暴力解,然後有辦法嘗試去優化這個解。至於語言的話,機器人相關的職缺大多要求 C++,所以我也是一直都使用 C++ 來刷題。

  • 英文

    英文溝通能力非常重要,在 lab 工作對我來說幫助很大,因為同學通常比較 chill 的跟我聊天,儘管我都回答的零零落落 XD 平常的話 shadowing 跟聽寫應該可以有很大的幫助,但我實在太懶了,上工之前我會著重練習這個部份。

  • 心態

    心態上的調整在求職過程中也非常重要,一邊上課一邊找工作確實蠻忙碌的,所以適當的調適不可少,得失心也不要太重,以免像滾雪球般影響到生活還有課業。我自己的想法一直都是到美國學習,能找到工作也好,不能也罷,最重要的是努力過好每一天,其實這也是我唯一能做的事情,如果真的認真的話,無論結果如何我也都勇於接受,畢竟這就是我自己。之後上班的話我也會抱持一樣的心態,盡力去做,能多做一天就是多一天學習跟展現的機會,堅持邁進。

總結 CU 求職

總結一下 CU 的話,要找工作還是有的,基本上很多大廠的面試都能拿到,但就是要排在排名好的學校後面,排名參照 us news ranking。實際上許多朋友最後都找到好工作,所以也不必太擔心 CU 的知名度。我自己的話算是比較偏向 Robotics 所以沒有投太多常見的科技公司。優點的話,找工作的話目前很大一部份需要依賴刷題,在這個需求上,CU 提供了不少涼課可以讓你一邊拿 A 一邊刷題準備面試,算是一個好選擇。但 location 可能就不如東西岸的大學那麼好,很多人可能會說 Boulder 愈來愈多公司設點,但說真的要找還是會先找名校畢業生,公司也都出得起機票飯店請人來面試,所以地點上 CU 真的沒佔到太多便宜,風景美倒是真的就是了 XD 整體上 CU 要在美國找找工作還是可以的,而且申請門檻也不高,小弟我托福不到 90,GRE 不到 315 都能來這邊的 CS,應該基本上不會太難申請,對在職準備且英文底子不太好的人可以算一個保底吧。如果有決心認真刷題,履歷不要寫得太差,面試時溝通清楚,我覺得找工作還是沒問題的,也希望這篇能幫助想就讀 CU CS MS 的同學。

Updated:

Leave a comment