[{"data":1,"prerenderedAt":1172},["ShallowReactive",2],{"$Nehrp7Lchg":3},[4,954],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"layout":11,"series":12,"image":13,"keywords":18,"head":23,"body":37,"_type":948,"_id":949,"_source":950,"_file":951,"_stem":952,"_extension":953},"/blog/us-stuff/00","us-stuff",false,"","美國大學 Computer Science - 教了什麼 ?","在四年制的美國大學資工系 Computer Science Major 到底都教了些什麼，而又能學到什麼呢？四年的時間不長也不短，但剛好適合讓人入門一項新的技術。而美國的大學最不同的就是入學前不需要選定專業，這讓還有志向的學生能夠在第一年的大學生活中體驗不同科系的樂趣。","post","美國那些事",{"src":14,"alt":15,"width":16,"height":17},"hero.png","hero",750,536,[12,19,20,21,22],"cs","university","usa","other",{"meta":24},[25,28,31,34],{"name":26,"content":27},"author","小貓貓工程師",{"name":29,"content":30},"read","4 min read",{"property":32,"content":33},"article:published_time","2021-07-28T00:00:00.000Z",{"property":35,"content":36},"article:modified_time","2023-03-20T00:00:00.000Z",{"type":38,"children":39,"toc":934},"root",[40,80,84,91,99,104,109,112,117,122,334,339,368,374,388,394,429,434,439,464,469,564,569,574,579,584,589,614,628,654,667,677,687,700,725,730,738,751,756,782,792,816,833,838,851,862,887,892,895,900,912,931],{"type":41,"tag":42,"props":43,"children":44},"element","p",{},[45,48,58,60,68,70,78],{"type":46,"value":47},"text","這系列文章會分成兩個部分，分別是以我的經驗來分享四年的 CS 大學裡學校 ",{"type":41,"tag":49,"props":50,"children":51},"strong",{},[52],{"type":41,"tag":53,"props":54,"children":55},"em",{},[56],{"type":46,"value":57},"(1) 教了什麼",{"type":46,"value":59}," 和 ",{"type":41,"tag":49,"props":61,"children":62},{},[63],{"type":41,"tag":53,"props":64,"children":65},{},[66],{"type":46,"value":67},"(2) 沒教什麼",{"type":46,"value":69},"，而如果後面還有想分享的我會繼續補上。這一篇則會專注在",{"type":41,"tag":49,"props":71,"children":72},{},[73],{"type":41,"tag":53,"props":74,"children":75},{},[76],{"type":46,"value":77},"美國大學資工專業到底都教了什麼",{"type":46,"value":79}," 。",{"type":41,"tag":81,"props":82,"children":83},"hr",{},[],{"type":41,"tag":85,"props":86,"children":88},"h2",{"id":87},"cs-技能天賦圖",[89],{"type":46,"value":90},"CS 技能天賦圖",{"type":41,"tag":42,"props":92,"children":93},{},[94],{"type":41,"tag":95,"props":96,"children":98},"img",{"alt":8,"src":97},"chart.png",[],{"type":41,"tag":42,"props":100,"children":101},{},[102],{"type":46,"value":103},"University of California, Santa Cruz 舊版 Computer Science Curriculum Chart，這只是大概而已，實際上還有更多課程和選擇！",{"type":41,"tag":42,"props":105,"children":106},{},[107],{"type":46,"value":108},"我覺得大學的升學之路大多數都非常相似，就和玩網路遊戲一樣。就是每一學期升一個等級，然後得到一些技能點數，然後根據需求分配點數給各項技能，慢慢的建立起自己的技能樹。下面用我以前的學校來介紹一下遊戲規則。",{"type":41,"tag":81,"props":110,"children":111},{},[],{"type":41,"tag":85,"props":113,"children":115},{"id":114},"上課升等的遊戲",[116],{"type":46,"value":114},{"type":41,"tag":42,"props":118,"children":119},{},[120],{"type":46,"value":121},"一年有三個學期，而每一個新的學期學生可以選擇 15-22 個技能點數值得課程。普通課程要 5 點，小型實驗課程只要兩點。如果上一學期成績優秀則可以申請得到高於 22 學分的技能點數，但學校會根據成績來批准學生的要求。",{"type":41,"tag":42,"props":123,"children":124},{},[125,130,132,140,142,146,152,154,157,162,164,167,171,172,175,180,182,185,189,190,193,198,200,203,207,209,212,216,218,221,226,228,231,235,237,240,244,246,251,253,256,260,261,265,267,270,274,276,279,283,284,289,291,294,298,299,304,305,308,312,313,317,319,322,326,327,332],{"type":41,"tag":49,"props":126,"children":127},{},[128],{"type":46,"value":129},"選擇職業",{"type":46,"value":131}," - 完成所有入門課程後被學校認可為 ",{"type":41,"tag":49,"props":133,"children":134},{},[135],{"type":41,"tag":53,"props":136,"children":137},{},[138],{"type":46,"value":139},"CS 專業",{"type":46,"value":141}," 成為 CS 初階生。",{"type":41,"tag":143,"props":144,"children":145},"br",{},[],{"type":41,"tag":147,"props":148,"children":149},"span",{},[150],{"type":46,"value":151},"       ",{"type":46,"value":153},"↓",{"type":41,"tag":143,"props":155,"children":156},{},[],{"type":41,"tag":49,"props":158,"children":159},{},[160],{"type":46,"value":161},"CS 初階生",{"type":46,"value":163}," - 學生可以開始學習初階技能，並且在完成_所有初階技能_後進階。",{"type":41,"tag":143,"props":165,"children":166},{},[],{"type":41,"tag":147,"props":168,"children":169},{},[170],{"type":46,"value":151},{"type":46,"value":153},{"type":41,"tag":143,"props":173,"children":174},{},[],{"type":41,"tag":49,"props":176,"children":177},{},[178],{"type":46,"value":179},"CS 中階生",{"type":46,"value":181}," - 學生可以學習所有中階技能，並且在完成_多數中階技能_後進階。",{"type":41,"tag":143,"props":183,"children":184},{},[],{"type":41,"tag":147,"props":186,"children":187},{},[188],{"type":46,"value":151},{"type":46,"value":153},{"type":41,"tag":143,"props":191,"children":192},{},[],{"type":41,"tag":49,"props":194,"children":195},{},[196],{"type":46,"value":197},"CS 高階生",{"type":46,"value":199}," - 學生必須習得_規定高階技能_，並選擇兩條畢業路線。",{"type":41,"tag":143,"props":201,"children":202},{},[],{"type":41,"tag":147,"props":204,"children":205},{},[206],{"type":46,"value":151},{"type":46,"value":208},"↓ ⇢ 完成一個專案",{"type":41,"tag":143,"props":210,"children":211},{},[],{"type":41,"tag":147,"props":213,"children":214},{},[215],{"type":46,"value":151},{"type":46,"value":217},"↓ ⇢ 完成一篇論文",{"type":41,"tag":143,"props":219,"children":220},{},[],{"type":41,"tag":49,"props":222,"children":223},{},[224],{"type":46,"value":225},"CS 畢業生",{"type":46,"value":227}," - 畢業後可以選擇多條路線",{"type":41,"tag":143,"props":229,"children":230},{},[],{"type":41,"tag":147,"props":232,"children":233},{},[234],{"type":46,"value":151},{"type":46,"value":236},"⇢ 繼續研讀",{"type":41,"tag":143,"props":238,"children":239},{},[],{"type":41,"tag":147,"props":241,"children":242},{},[243],{"type":46,"value":151},{"type":46,"value":245},"     ",{"type":41,"tag":49,"props":247,"children":248},{},[249],{"type":46,"value":250},"⌙→",{"type":46,"value":252}," 研究生 Master",{"type":41,"tag":143,"props":254,"children":255},{},[],{"type":41,"tag":147,"props":257,"children":258},{},[259],{"type":46,"value":151},{"type":46,"value":245},{"type":41,"tag":49,"props":262,"children":263},{},[264],{"type":46,"value":250},{"type":46,"value":266}," 博士生 PhD",{"type":41,"tag":143,"props":268,"children":269},{},[],{"type":41,"tag":147,"props":271,"children":272},{},[273],{"type":46,"value":151},{"type":46,"value":275},"⇢ 面試獲得轉職機會",{"type":41,"tag":143,"props":277,"children":278},{},[],{"type":41,"tag":147,"props":280,"children":281},{},[282],{"type":46,"value":151},{"type":46,"value":245},{"type":41,"tag":49,"props":285,"children":286},{},[287],{"type":46,"value":288},"⌙→ 前端",{"type":46,"value":290},"工程師",{"type":41,"tag":143,"props":292,"children":293},{},[],{"type":41,"tag":147,"props":295,"children":296},{},[297],{"type":46,"value":151},{"type":46,"value":245},{"type":41,"tag":49,"props":300,"children":301},{},[302],{"type":46,"value":303},"⌙→ 後端",{"type":46,"value":290},{"type":41,"tag":143,"props":306,"children":307},{},[],{"type":41,"tag":147,"props":309,"children":310},{},[311],{"type":46,"value":151},{"type":46,"value":245},{"type":41,"tag":49,"props":314,"children":315},{},[316],{"type":46,"value":250},{"type":46,"value":318}," 系統工程師",{"type":41,"tag":143,"props":320,"children":321},{},[],{"type":41,"tag":147,"props":323,"children":324},{},[325],{"type":46,"value":151},{"type":46,"value":245},{"type":41,"tag":49,"props":328,"children":329},{},[330],{"type":46,"value":331},"......",{"type":46,"value":333}," (各種不同類型的 Software Engineer)",{"type":41,"tag":42,"props":335,"children":336},{},[337],{"type":46,"value":338},"特別可以注意的一點是，在美國大學無論時長，只要在完成畢業要求後申請畢業就能獲得畢業證書。所以常聽到有人 2-3 年就畢業獲得學位，也聽過有人過了 6 年還沒取得畢業資格。",{"type":41,"tag":340,"props":341,"children":342},"note",{},[343],{"type":41,"tag":42,"props":344,"children":345},{},[346,348,356,358,366],{"type":46,"value":347},"💡畢業不過就是獲得了最基本的工程師資格、取得了和各個公司面試的機會。但每個人的在學時所點的",{"type":41,"tag":49,"props":349,"children":350},{},[351],{"type":41,"tag":53,"props":352,"children":353},{},[354],{"type":46,"value":355},"技能天賦圖",{"type":46,"value":357}," 除了路線不同外，技能質量也會不所同，還有人可以近乎點滿所有技能，甚至開拓",{"type":41,"tag":49,"props":359,"children":360},{},[361],{"type":41,"tag":53,"props":362,"children":363},{},[364],{"type":46,"value":365},"額外隱藏技能",{"type":46,"value":367}," 等等。簡單來說單單一張畢業證書在職場上是沒有什麼競爭力的，除非是史丹佛或哈佛之類的畢業生。",{"type":41,"tag":85,"props":369,"children":371},{"id":370},"課程內容-curriculum",[372],{"type":46,"value":373},"課程內容 Curriculum",{"type":41,"tag":42,"props":375,"children":376},{},[377,379,386],{"type":46,"value":378},"因為這篇的主旨是",{"type":41,"tag":49,"props":380,"children":381},{},[382],{"type":41,"tag":53,"props":383,"children":384},{},[385],{"type":46,"value":77},{"type":46,"value":387}," ，所以接下來要大致分類各項技能的內容啦！",{"type":41,"tag":389,"props":390,"children":392},"h3",{"id":391},"技能介紹課",[393],{"type":46,"value":391},{"type":41,"tag":42,"props":395,"children":396},{},[397,399,407,409,417,419,427],{"type":46,"value":398},"在進入入門技能之前，我們學校有一堂超級無敵簡單的零基礎課程。雖然還是要學一點點編程，但比起說是編程更像是畫圖。我們那時候學了一個叫做 Processing 的東西，當時只知道就是用來畫圖和做簡單動畫的。後來學到中階技能後才知道這到底是什麼。課程內容就是講述",{"type":41,"tag":49,"props":400,"children":401},{},[402],{"type":41,"tag":53,"props":403,"children":404},{},[405],{"type":46,"value":406},"電腦的歷史",{"type":46,"value":408}," 、",{"type":41,"tag":49,"props":410,"children":411},{},[412],{"type":41,"tag":53,"props":413,"children":414},{},[415],{"type":46,"value":416},"一些簡單又重要的知識",{"type":46,"value":418}," 像是霍夫曼編碼 Huffman coding、",{"type":41,"tag":49,"props":420,"children":421},{},[422],{"type":41,"tag":53,"props":423,"children":424},{},[425],{"type":46,"value":426},"做幾個簡單的遊戲專案",{"type":46,"value":428}," 像是圈圈擦擦。",{"type":41,"tag":389,"props":430,"children":432},{"id":431},"入門技能",[433],{"type":46,"value":431},{"type":41,"tag":42,"props":435,"children":436},{},[437],{"type":46,"value":438},"入門技能是在還沒有成為 CS 專業時就可以學習的課程，其用意是在確認學生真的對 CS 有興趣。課程難度其實對毫無 CS 經驗的學生來說是非常不容易的，但對已經有基本功的人來說並沒有什麼難度。我的學校甚至把入門路線分成了三條，(1) 兩堂超級入門課 + 一堂中等課 (2) 兩堂課中等課 (3) 一堂超級濃縮困難課。選擇路線 ③ 繼本上就是一學期把其餘人一年的課程內容都上完。",{"type":41,"tag":42,"props":440,"children":441},{},[442,444,452,454,462],{"type":46,"value":443},"入門技能的主要內容就是基礎的 ",{"type":41,"tag":49,"props":445,"children":446},{},[447],{"type":41,"tag":53,"props":448,"children":449},{},[450],{"type":46,"value":451},"編程 Programing",{"type":46,"value":453},"  和簡單的 ",{"type":41,"tag":49,"props":455,"children":456},{},[457],{"type":41,"tag":53,"props":458,"children":459},{},[460],{"type":46,"value":461},"資料結構 Data Structure。",{"type":46,"value":463}," 根據時代、選課、和學校的不同，教授的編程語言也不太一樣。像是2014年時大多數學校都是用 Java 來教課的，但近年來大多數學校慢慢改成 Python 為主了，畢竟比較容易上手而且用途廣泛不局限於 CS 專業。",{"type":41,"tag":42,"props":465,"children":466},{},[467],{"type":46,"value":468},"在這幾堂課的學習過程中，如果是零 CS 基礎的學生，我印象中會學習到：",{"type":41,"tag":470,"props":471,"children":472},"ul",{},[473,486,505,524],{"type":41,"tag":474,"props":475,"children":476},"li",{},[477,479,484],{"type":46,"value":478},"基本的編程語言，我們學校是 ",{"type":41,"tag":49,"props":480,"children":481},{},[482],{"type":46,"value":483},"Java、Python、或 C++",{"type":46,"value":485},"。",{"type":41,"tag":474,"props":487,"children":488},{},[489,491,496,498,503],{"type":46,"value":490},"常見的資料結構像是 ",{"type":41,"tag":49,"props":492,"children":493},{},[494],{"type":46,"value":495},"哈希表 Hashmap、陣列 Array、鏈表 Linked List",{"type":46,"value":497},"，和一些衍生結構 ",{"type":41,"tag":49,"props":499,"children":500},{},[501],{"type":46,"value":502},"Stack & Queue",{"type":46,"value":504}," 等等。",{"type":41,"tag":474,"props":506,"children":507},{},[508,510,515,517,522],{"type":46,"value":509},"各種",{"type":41,"tag":49,"props":511,"children":512},{},[513],{"type":46,"value":514},"排序算法 Sorting Algorithm",{"type":46,"value":516},"，Bubble Sort、Quick Sort、Merge Sort... 一大堆，還有像是 ",{"type":41,"tag":49,"props":518,"children":519},{},[520],{"type":46,"value":521},"二分查找算法 Binary Search",{"type":46,"value":523}," 等等",{"type":41,"tag":474,"props":525,"children":526},{},[527,529,534,536],{"type":46,"value":528},"使用終端機 Terminal 學習到簡單的 ",{"type":41,"tag":49,"props":530,"children":531},{},[532],{"type":46,"value":533},"Linux 系統指令",{"type":46,"value":535},"。\n",{"type":41,"tag":470,"props":537,"children":538},{},[539,544,549,554],{"type":41,"tag":474,"props":540,"children":541},{},[542],{"type":46,"value":543},"切換目錄（就像打開資料夾一樣）",{"type":41,"tag":474,"props":545,"children":546},{},[547],{"type":46,"value":548},"文件的編輯、創建、刪除",{"type":41,"tag":474,"props":550,"children":551},{},[552],{"type":46,"value":553},"遠端登入",{"type":41,"tag":474,"props":555,"children":556},{},[557,559,562],{"type":46,"value":558},"...... 各種基本上你已經用點腦做過的東西，只是用終端機看起來很厲害而已。",{"type":41,"tag":143,"props":560,"children":561},{},[],{"type":46,"value":563},"\n下面放個短片，有興趣可以看看上面說的都是幹嘛的！",{"type":41,"tag":565,"props":566,"children":568},"asciinema",{"id":567},"384480",[],{"type":41,"tag":42,"props":570,"children":571},{},[572],{"type":46,"value":573},"入門課程中還會有一堂課程被稱作是“勸退課程”，以我們學校來說就是入門路線中必經的最後一堂課 Data Structure。實話說真的不難，但是如果不認真學的話是會很容易被當的那種課。",{"type":41,"tag":42,"props":575,"children":576},{},[577],{"type":46,"value":578},"這段時間學的入門技能真的非常基本，但對毫無基礎的人來說可能像是碰見新大陸一樣什麼都沒聽過。這些技能是未來課程和工作的基底，內容都算是 Software Engineer 的常識。",{"type":41,"tag":389,"props":580,"children":582},{"id":581},"初階技能",[583],{"type":46,"value":581},{"type":41,"tag":42,"props":585,"children":586},{},[587],{"type":46,"value":588},"在和學校申報轉業 Declare Major 後，則正式進入了 CS 專業的學習路程。",{"type":41,"tag":42,"props":590,"children":591},{},[592,594,599,601,606,608,613],{"type":46,"value":593},"以我們學校來說，初階的課程開始有許多的",{"type":41,"tag":49,"props":595,"children":596},{},[597],{"type":46,"value":598},"先修課 prerequisite",{"type":46,"value":600}," 要求，像是修某堂課前必需先完成微積分、離散數學等等。而課程內容則開始包括一些基本的",{"type":41,"tag":49,"props":602,"children":603},{},[604],{"type":46,"value":605},"抽象資料型別 Abstract Data Type",{"type":46,"value":607},"、",{"type":41,"tag":49,"props":609,"children":610},{},[611],{"type":46,"value":612},"電腦架構 Computer Architecture、彙編語言 Assembly",{"type":46,"value":504},{"type":41,"tag":615,"props":616,"children":617},"note-img",{},[618],{"type":41,"tag":42,"props":619,"children":620},{},[621,626],{"type":41,"tag":95,"props":622,"children":625},{"alt":623,"src":624},"Discrete Math 曾經的作業已經一頭霧水了...現在突然覺得以前的自己好像滿厲害的！","math.png",[],{"type":46,"value":627},"\nDiscrete Math 曾經的作業已經一頭霧水了...現在突然覺得以前的自己好像滿厲害的！",{"type":41,"tag":42,"props":629,"children":630},{},[631,633,638,640,645,647,652],{"type":46,"value":632},"數學方面 ",{"type":41,"tag":49,"props":634,"children":635},{},[636],{"type":46,"value":637},"微積分",{"type":46,"value":639}," 就不用我多做說明了，但 ",{"type":41,"tag":49,"props":641,"children":642},{},[643],{"type":46,"value":644},"離散數學 Discrete Math",{"type":46,"value":646}," 就不一定是大家都聽過的了。這堂課的內容不少，要學 ",{"type":41,"tag":49,"props":648,"children":649},{},[650],{"type":46,"value":651},"概率、組合分析、數學歸納法（proof by induction）",{"type":46,"value":653}," 等等。反正都是一些數學和證明之類的，我覺得如果高中數學有好好學，至少在機率方面不會有大問題。",{"type":41,"tag":615,"props":655,"children":656},{},[657],{"type":41,"tag":42,"props":658,"children":659},{},[660,665],{"type":41,"tag":95,"props":661,"children":664},{"alt":662,"src":663},"以前邏輯運算的作業","logic.png",[],{"type":46,"value":666},"\n以前邏輯運算的作業",{"type":41,"tag":42,"props":668,"children":669},{},[670,675],{"type":41,"tag":49,"props":671,"children":672},{},[673],{"type":46,"value":674},"Assembly Language 彙編語言",{"type":46,"value":676}," 就是完全一個新世界了！和入門時學的高階語言不同，像 Assembly 這種低階語言是用於底層硬件操作等等的。我覺得這語言和 Python 那種語言不同的最大點就是難寫，簡單的東西 Python 只要兩三行，但 Assembly 卻要十幾二十行，只能說專門寫 Assembly 的人真厲害。課程中除了要學 Assembly 外，還要學一些 邏輯閘、集成電路組建等等，作業則是用模擬器用各種邏輯做出一些小程序。在這堂課中我才認識到原來我們的電腦軟體也不過是些相較複雜的電路而已！",{"type":41,"tag":42,"props":678,"children":679},{},[680,685],{"type":41,"tag":49,"props":681,"children":682},{},[683],{"type":46,"value":684},"Computer Architecture 電腦架構",{"type":46,"value":686}," 是一門我沒有好好學，至今仍感到後悔的其中一堂課。內容是教一些像是 CPU、Memory 等等的底層內容，這對未來在 System Engineering 有關的內容非常相關。",{"type":41,"tag":615,"props":688,"children":689},{},[690],{"type":41,"tag":42,"props":691,"children":692},{},[693,698],{"type":41,"tag":95,"props":694,"children":697},{"alt":695,"src":696},"以前課堂的 PowerPoint","ppt.png",[],{"type":46,"value":699},"\n以前課堂的 PowerPoint",{"type":41,"tag":42,"props":701,"children":702},{},[703,705,709,711,716,718,723],{"type":46,"value":704},"初階技能中我認為最重要的就是 ",{"type":41,"tag":49,"props":706,"children":707},{},[708],{"type":46,"value":605},{"type":46,"value":710}," 了！因為絕大多數的面試考題都和這堂課的內容有關。學習內容有各種不同的抽象資料型別像是用初級技能中學過的 陣列 Array 或 鏈表 Linked List 來表示一個抽象的 ",{"type":41,"tag":49,"props":712,"children":713},{},[714],{"type":46,"value":715},"樹狀資料型別 Tree",{"type":46,"value":717},"，還要學習如何算出算法的 ",{"type":41,"tag":49,"props":719,"children":720},{},[721],{"type":46,"value":722},"時間複雜度 Time Complexity",{"type":46,"value":724},"。這些都是面試時 100% 會遇到的問題。",{"type":41,"tag":389,"props":726,"children":728},{"id":727},"中階技能",[729],{"type":46,"value":727},{"type":41,"tag":340,"props":731,"children":732},{},[733],{"type":41,"tag":42,"props":734,"children":735},{},[736],{"type":46,"value":737},"這裡的技能開始有很多分枝，而且內容對沒有 CS 背景的人會感到生澀，所以這裡不會介紹所有課程內容係項，只選幾門我認為比較大眾的來說說。",{"type":41,"tag":615,"props":739,"children":740},{},[741],{"type":41,"tag":42,"props":742,"children":743},{},[744,749],{"type":41,"tag":95,"props":745,"children":748},{"alt":746,"src":747},"Agile Development 會學的 Kanban Board","kanban.png",[],{"type":46,"value":750},"\nAgile Development 會學的 Kanban Board",{"type":41,"tag":42,"props":752,"children":753},{},[754],{"type":46,"value":755},"中階技能開始所學習的東西都開始變得越來越有專業性了。",{"type":41,"tag":42,"props":757,"children":758},{},[759,761,766,768,773,775,780],{"type":46,"value":760},"內容包括 ",{"type":41,"tag":49,"props":762,"children":763},{},[764],{"type":46,"value":765},"編譯器開放 Compiler Design、敏捷 Agile Development、演算法解析 Analysis of Algorithm、作業系統  Operating System",{"type":46,"value":767}," 等等許多。但雖說是具有專業性，但其實現在許多工作並不會要求員工具備這些技能，即便如此我依舊認為這些仍然是作為一個優秀的 CS 工程師所的必備知識。換句話說，這些技能大多數",{"type":41,"tag":49,"props":769,"children":770},{},[771],{"type":46,"value":772},"對未來職業的選擇沒有太直接的關係",{"type":46,"value":774},"，但精通它們的",{"type":41,"tag":49,"props":776,"children":777},{},[778],{"type":46,"value":779},"優點會更容易體現在許多職業的發展上",{"type":46,"value":781},"。舉個例子，同樣是寫軟體的兩人，當東西出了問題並且問題不是在代碼上，而是更加裏層的東西像是作業系統上時，這些技能包準能讓你在團隊裡一鳴驚人吧 😏。",{"type":41,"tag":42,"props":783,"children":784},{},[785,790],{"type":41,"tag":49,"props":786,"children":787},{},[788],{"type":46,"value":789},"編譯器開放 Compiler Design",{"type":46,"value":791}," 這堂課以我的角度來說就是一個字～「難」。內容就是教授如何將我們平時寫好的高階語言 (C++, Java, ...) 翻譯成機器讀得懂的代碼。我記得當時考完了期中考試，公佈成績後雖然是 A+ 但我憑良心講，我非常認真地聽課，也去了每一個課後輔導，但自己真的還是沒理解多少內容。當時坐我旁邊的那兩個學生就在那竊竊私語說到：「這課也不怎麼樣，我覺得挺簡單的」。於是我偷偷的撇了一眼那兩人的考卷... 這不是只有個 B 和 B+ 而已嗎，他們哪來的自信？只能說對於這項技能是我學藝不精，至今尚且未能參透其中奧妙。",{"type":41,"tag":42,"props":793,"children":794},{},[795,800,802,807,809,814],{"type":41,"tag":49,"props":796,"children":797},{},[798],{"type":46,"value":799},"演算法解析 Analysis of Algorithm",{"type":46,"value":801}," 是一門極其重要的課，各種理論知識以及著名演算法等著你一一了解。從各種 ",{"type":41,"tag":49,"props":803,"children":804},{},[805],{"type":46,"value":806},"圖算法 Graphing Algorithm",{"type":46,"value":808}," 到理解 ",{"type":41,"tag":49,"props":810,"children":811},{},[812],{"type":46,"value":813},"動態編程 Dynamic Algorithm",{"type":46,"value":815},"，許多對未來寫軟體時會有大幫助的東西都會在這堂課中學到。舉列來說 Google Interview 裡常碰到的題目，像是寫一個算法找出圖中某一點的所有相近色塊，這時就要考你對圖算法中 DFS 這種基本算法有沒有辦法靈活運用了。這是一門非常有深度的課，但也是我有史以來最認真的一堂課。當時班上居然有一位長得非常楚楚動人的學姊，所以這一堂課成為我大學生涯中唯一一堂出席全滿的電腦課！所以 A+ 也是運氣運氣。",{"type":41,"tag":42,"props":817,"children":818},{},[819,824,826,831],{"type":41,"tag":49,"props":820,"children":821},{},[822],{"type":46,"value":823},"作業系統  Operating System",{"type":46,"value":825}," 這堂課就是在教大家平時使用的 Mac OSX 、Windows、和 Linux 這些作業系統的運作原理了。其中會教各種 ",{"type":41,"tag":49,"props":827,"children":828},{},[829],{"type":46,"value":830},"Process 進程、Thread 線程、File System 資料系統",{"type":46,"value":832}," 的運作原理等等。這門課我們學校是直接拿 Stanford 同名課程的教材來用的，我那時也是學的頭有點痛，所以只能說 Stanford 學生還是挺厲害的。現在回想起來當時真該好好磨練一下這項技能，雖然 A- 也是個不錯的成績，但這項技能對我目前的工作內容有極大的額外幫助，若時能再更努力一些也許現在就會更好了！",{"type":41,"tag":389,"props":834,"children":836},{"id":835},"高階技能",[837],{"type":46,"value":835},{"type":41,"tag":615,"props":839,"children":840},{},[841],{"type":41,"tag":42,"props":842,"children":843},{},[844,849],{"type":41,"tag":95,"props":845,"children":848},{"alt":846,"src":847},"那時上網頁開發時的作品","result.png",[],{"type":46,"value":850},"\n那時上網頁開發時的作品",{"type":41,"tag":42,"props":852,"children":853},{},[854,856,861],{"type":46,"value":855},"到了高階技能時，技能的",{"type":41,"tag":49,"props":857,"children":858},{},[859],{"type":46,"value":860},"內容與未來職業的發展開始有了比較直接的關係",{"type":46,"value":485},{"type":41,"tag":42,"props":863,"children":864},{},[865,867,872,874,879,881,886],{"type":46,"value":866},"這些技能雖說和職業路線已經扯上邊了，雖然沒接觸過的人肯定是會覺得稍微有些生澀的，不過這一些技能是 CS 學習路程中最讓人感到有趣的！這些課程有像是 ",{"type":41,"tag":49,"props":868,"children":869},{},[870],{"type":46,"value":871},"Mobile Application Design 手機 App 開發、Web Application Design 網頁開發、Machine Learning 機器學習、Artificial Intelligent 人工智能",{"type":46,"value":873},"、以及各個",{"type":41,"tag":49,"props":875,"children":876},{},[877],{"type":46,"value":878},"中階技能的進階課程",{"type":46,"value":880},"等等，課程的數量多到上不完。這些課程的內容許多都是可以滿足畢業要求的，而且在學習的途中許多人也可以發掘出更適合自己未來的職業道路。所以與其說是高階技能，也可以稱作",{"type":41,"tag":49,"props":882,"children":883},{},[884],{"type":46,"value":885},"職業入門技能",{"type":46,"value":485},{"type":41,"tag":42,"props":888,"children":889},{},[890],{"type":46,"value":891},"這些課程的內容大概也不用多做說明了，就是大家比較常聽到的工作內容了。比較值得一提的是這些內容雖然是有比較重的工作性質，但內容還是偏向基礎與介紹。想要更加深入的理解各項技術的內容，還是必須繼續研讀或是在職場上闖一翻。",{"type":41,"tag":81,"props":893,"children":894},{},[],{"type":41,"tag":85,"props":896,"children":898},{"id":897},"結語",[899],{"type":46,"value":897},{"type":41,"tag":42,"props":901,"children":902},{},[903,905,910],{"type":46,"value":904},"到這邊大概介紹了在美國大學 CS 四年的課綱裡到底都教了些什麼。",{"type":41,"tag":49,"props":906,"children":907},{},[908],{"type":46,"value":909},"說真的學校能教給學生的很多，但還不夠讓人在職場上出類拔萃",{"type":46,"value":911},"。學校能給的東西大多數都是基本功，即便是非常好的大學也一樣。四年的時間裡學校能教的不多，更多是取決於學生本身能夠吸收多少。",{"type":41,"tag":913,"props":914,"children":915},"epilogue",{},[916],{"type":41,"tag":42,"props":917,"children":918},{},[919,921,924,926,929],{"type":46,"value":920},"我是小貓貓工程師",{"type":41,"tag":143,"props":922,"children":923},{},[],{"type":46,"value":925},"\n期待下次繼續與你分享",{"type":41,"tag":143,"props":927,"children":928},{},[],{"type":46,"value":930},"\n美國大學 CS 有關的各種大小事",{"type":41,"tag":81,"props":932,"children":933},{},[],{"title":8,"searchDepth":935,"depth":935,"links":936},2,[937,938,939,947],{"id":87,"depth":935,"text":90},{"id":114,"depth":935,"text":114},{"id":370,"depth":935,"text":373,"children":940},[941,943,944,945,946],{"id":391,"depth":942,"text":391},3,{"id":431,"depth":942,"text":431},{"id":581,"depth":942,"text":581},{"id":727,"depth":942,"text":727},{"id":835,"depth":942,"text":835},{"id":897,"depth":935,"text":897},"markdown","content:1.blog:018.us-stuff:00.md","content","1.blog/018.us-stuff/00.md","1.blog/018.us-stuff/00","md",{"_path":955,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":956,"description":957,"layout":11,"series":12,"image":958,"keywords":959,"head":960,"body":966,"_type":948,"_id":1169,"_source":950,"_file":1170,"_stem":1171,"_extension":953},"/blog/us-stuff/01","美國大學 Computer Science - 沒教什麼 ?","上次說過了在四年制的美國大學資工系 Computer Science Major 都教了些什麼，說實話學校能給的東西很多，但實際上能夠吸收多少還是取決於學生。這篇文章將會著重於分享我在 CS 大學、實習、到剛畢業找工作的這段時間中都學到了些什麼學校不曾告訴我的事情。換句話說，在矽谷如果能更早知道這些事情，也許我能做出更好的選擇！",{"src":14,"alt":15,"width":16,"height":17},[12,19,20,21,22],{"meta":961},[962,963,964,965],{"name":26,"content":27},{"name":29,"content":30},{"property":32,"content":33},{"property":35,"content":36},{"type":38,"children":967,"toc":1157},[968,982,988,993,996,1001,1006,1009,1014,1019,1022,1027,1039,1042,1047,1059,1062,1067,1072,1077,1082,1085,1090,1095,1098,1103,1114,1117,1122,1127,1130,1134,1139,1154],{"type":41,"tag":340,"props":969,"children":970},{},[971],{"type":41,"tag":42,"props":972,"children":973},{},[974,976],{"type":46,"value":975},"💡 上一篇 ",{"type":41,"tag":977,"props":978,"children":979},"a",{"href":5},[980],{"type":46,"value":981},"四年制的美國大學資工系 Computer Science Major 都教了些什麼",{"type":41,"tag":85,"props":983,"children":985},{"id":984},"理論派-vs-實踐派",[986],{"type":46,"value":987},"理論派 vs 實踐派",{"type":41,"tag":42,"props":989,"children":990},{},[991],{"type":46,"value":992},"在矽谷附近有許多的大學，除了比較有名的 Stanford 及 UC 系列外，還有像是 San Jose State 這些臥虎藏龍的學校。畢業工作後一段時間後才慢慢了解到，原來學校教學的內容有很大的差別。大致上可以分成理論和實踐兩派，像是我的學校 UCSC 和其他 UC 系列就是教較多理論相關內容，比較少實踐和專案。而 San Jose State 則是完全相反，教的更多是工作後會時常用到的內容，所以在找工作時雖說名氣較小卻也非常吃香。",{"type":41,"tag":81,"props":994,"children":995},{},[],{"type":41,"tag":85,"props":997,"children":999},{"id":998},"學校沒你想的重要",[1000],{"type":46,"value":998},{"type":41,"tag":42,"props":1002,"children":1003},{},[1004],{"type":46,"value":1005},"一般來說道學校的名氣和排名在找工作時所佔的比重非常高，但在矽谷 CS 行業中並非如此。這算是本行業中多的好處之一吧！或多或少在找第一份工作時會有些影響，不過據我所知更多還是靠實力的。因為雖然 HR 要海量選取各個申請者，不過科技公司有的是各種自動化和程序化的方式來塞選人，像是回覆個 email 要求申請者在網路上做個測試等等，所以比的更多還是測試的成績不是學校的名氣。即便是新創公司也一樣，因為申請人想對大公司較少，所以可以一個一個慢慢塞選。而在有了第一份工作後，面試塞選看得也是工作經驗和技能等等。總結就是學校的名氣其實在矽谷科技業中不吃香。",{"type":41,"tag":81,"props":1007,"children":1008},{},[],{"type":41,"tag":85,"props":1010,"children":1012},{"id":1011},"基本功",[1013],{"type":46,"value":1011},{"type":41,"tag":42,"props":1015,"children":1016},{},[1017],{"type":46,"value":1018},"一般剛畢業的學生在初入職場時的選擇很小，因為公司知道大多畢業生會的東西也就是那些，說實在話就是大同小異。但實際上工作了之後才發現，沒學好學校教的東西是一件很痛苦的事情。職場上學到更多是經驗和熟練新的技術，但各種基本功和原理卻是很少會碰到的。想要在職業道路上慢慢攀升時會發現，是否理解各種東西背後的原理將會體現出自己和其他高手在能力上的差距。畢竟簡單的問題大家都能解決，但能真正解決困難問題的只有那少數幾個，而他們也會是升的最快的那一群。",{"type":41,"tag":81,"props":1020,"children":1021},{},[],{"type":41,"tag":85,"props":1023,"children":1025},{"id":1024},"課外學習",[1026],{"type":46,"value":1024},{"type":41,"tag":42,"props":1028,"children":1029},{},[1030,1032,1037],{"type":46,"value":1031},"在剛畢業看到各種工作的要求時，會發現這些東西怎麼學校都沒教過。那必須是的啊！學海無涯，四年的時間真心有限，學校已經盡力教了，那作為學生的我們呢？先別說工作上要求的各種語言完全沒碰過，再來就是一堆聽都沒聽過的新技術。",{"type":41,"tag":49,"props":1033,"children":1034},{},[1035],{"type":46,"value":1036},"所以課外學習是一種硬性要求",{"type":46,"value":1038},"！入門 Software Engineer 面試時雖說有一半看的是實力，但另一半看的是這個人有沒有求知慾。畢竟畢業生能力雖說在學生的眼中有著很大的差距，但在面試官的眼中卻是相差無幾。只要達到基本要求，比的更多是這個人是否能和公司一同成長 、與團隊共識等等。這時如果簡歷上有各種課外學習的東西，除了體現出申請者的求知慾，更是直接多出其他競爭者一項技能。",{"type":41,"tag":81,"props":1040,"children":1041},{},[],{"type":41,"tag":85,"props":1043,"children":1045},{"id":1044},"必須實習",[1046],{"type":46,"value":1044},{"type":41,"tag":42,"props":1048,"children":1049},{},[1050,1052,1057],{"type":46,"value":1051},"我記得那時我實習的面試共有三輪，而在最後一輪更是面試了整整 3 個小時。那時的我在得到這份實習機會時曾自滿了好一陣子，但到現在才知道其實那也沒什麼... ",{"type":41,"tag":49,"props":1053,"children":1054},{},[1055],{"type":46,"value":1056},"因為多數實習生的要求只有一個「找一個能培養的普通人」",{"type":46,"value":1058},"。在工作一陣子開始自己當面試官後，每當對象要找的是實習生時大家都會告訴我，我們要找的就是個能培養的普通人。也許並不是每一間公司都如此，畢竟想進 Google 當實習生的人真的很多，但矽谷裡的科技公司已經多到滿到別州去了，還怕你找不到區區一個實習嗎？策略很簡單，想去的都申請，不想去的也申請，反正申請不用錢也不費力，看誰回覆就去找誰面試，總會找到一份適合自己的實習。實習的經驗很寶貴，某些方面來說甚至比學業還要重要，這是未來找工作上的一大助力。",{"type":41,"tag":81,"props":1060,"children":1061},{},[],{"type":41,"tag":85,"props":1063,"children":1065},{"id":1064},"教授的重要性",[1066],{"type":46,"value":1064},{"type":41,"tag":42,"props":1068,"children":1069},{},[1070],{"type":46,"value":1071},"都說認識教授很重要，但到底有什麼好處呢？說說我知道的幾個例子吧！",{"type":41,"tag":42,"props":1073,"children":1074},{},[1075],{"type":46,"value":1076},"這個教授外面自己有一兩間公司，而我這個朋友跟教授關係不錯，以至於還沒畢業教授就找他進公司做事了，他除了有錢領以外因為公司的各種進度優先，教授甚至讓他在自己的課上可以有各種好處，從作業到考試... 反正到底成績都是教授決定的😏，而且畢業後也直接多了一個工作機會。",{"type":41,"tag":42,"props":1078,"children":1079},{},[1080],{"type":46,"value":1081},"以我自己的例子來說，這個教授是博士班和研究生的老大，所以手下有很多研究。說到研究就是學費減免甚至免學費的各種好處了！我當時以為自己抽不到美國工作簽證，只能繼續讀書或是回國，就跑去找這個教授說我現在志願幫他做研究，然後又說我想申請研究所可是平時要上班沒時間準備考試。做了一陣子後，教授直接跟我說要我不用在意考試，幾分都一樣走個行事而已，申請回學校當研究生或博士生幫他做現在這個研究，學費也免了。這好處還不夠吸引人嗎！當然研究方面也是要好好努力一陣子讓教授感覺是個可造之材才行！（後來抽中簽證就不做了～）",{"type":41,"tag":81,"props":1083,"children":1084},{},[],{"type":41,"tag":85,"props":1086,"children":1088},{"id":1087},"人脈創造機會",[1089],{"type":46,"value":1087},{"type":41,"tag":42,"props":1091,"children":1092},{},[1093],{"type":46,"value":1094},"上面說要去認識教授，但說實話我自己真的有互動的教授也就那麼一兩個，這時人脈的重要性就體現出來了。我認識一個教授，我朋友每人也都認識一個教授，這樣需要幫助時互相介紹一下，有幾個朋友就有幾個教授！別說不可能，我上面那個做研究例子的教授就是畢業後透過以前朋友引薦的，之前我連學校裡有這個教授都不知道呢！美國大學不像亞洲一樣，還有分班分座位這種東西，每次上課坐旁邊的人都不一樣，一堂課有上百人，雖說會有點尷尬，但認識新朋友的機會還是不少的。",{"type":41,"tag":81,"props":1096,"children":1097},{},[],{"type":41,"tag":85,"props":1099,"children":1101},{"id":1100},"專案的重要性",[1102],{"type":46,"value":1100},{"type":41,"tag":42,"props":1104,"children":1105},{},[1106,1108,1112],{"type":46,"value":1107},"這是畢業生簡歷上唯一的亮點！比起成績、上過的課，做過的專案才是真正有實體的經歷。我實習面試時，三分之一的時間都被著重於我做過的那一兩個專案，而且每個面試官都要問我一次，害我越說越起勁。專案能夠讓學生提前將各種技能學以致用，並且更早的發現自己的不足之處，才好讓自己去做夠多的",{"type":41,"tag":49,"props":1109,"children":1110},{},[1111],{"type":46,"value":1024},{"type":46,"value":1113},"。專案的質量更是重要，一個好的大型專案不是學生獨自一人就能完成的，需要整個團隊透過不段的學習並且與教授溝通和改進來慢慢完成的。每個人都有自己負責的區塊，在團隊中能夠扛起責任完成自己專精的部分，這樣的成就將會是未來面試時和面試官對談的底氣之一。",{"type":41,"tag":81,"props":1115,"children":1116},{},[],{"type":41,"tag":85,"props":1118,"children":1120},{"id":1119},"多得是機會",[1121],{"type":46,"value":1119},{"type":41,"tag":42,"props":1123,"children":1124},{},[1125],{"type":46,"value":1126},"學校裡面除了各種課程之外多的是機會，只是學生不知道而已。我也是到了很後面才發現學校裡常常會有各種讓學生成長的機會像是時不時就會很幾間矽谷大老像 Google 之類的辦個活動，讓學生長長見識。每一年的駭客松也都是 CS 學院的盛事之一。各種教授主辦的課外訓練，幫助學生學習一些平時學不道確實用的知識，順便物色一下可用之才。學校各部門網站和 IT 相關工作也都會有一堆實習機會。學校還有各種免費的 Tutor，除了前期當個學生外，後期也能自己試試看教別人，還會有工資拿。各個博士生和教授帶領的研究工作等等也都是有許多開放的機會，畢竟每年畢業的人這們多，只要肯找就一定能遇到。重點就是，機會真的多到數不完，如果能更早把握這些機會並多做準備，相信準備就緒的自己會比其他人更有競爭力。",{"type":41,"tag":81,"props":1128,"children":1129},{},[],{"type":41,"tag":85,"props":1131,"children":1132},{"id":897},[1133],{"type":46,"value":897},{"type":41,"tag":42,"props":1135,"children":1136},{},[1137],{"type":46,"value":1138},"上面說了這麼多，都是根據我個人在矽谷學習 CS 的經驗來分享的。雖說這些東西好像眾人皆知，但是當局者迷，至少我在學習的路上對這些事情的理解是非常模糊的。希望這篇文章能幫助到正在學習的讀者和其身邊的朋友，讓初入職場的自己更有競爭力！",{"type":41,"tag":913,"props":1140,"children":1141},{},[1142],{"type":41,"tag":42,"props":1143,"children":1144},{},[1145,1146,1149,1150,1153],{"type":46,"value":920},{"type":41,"tag":143,"props":1147,"children":1148},{},[],{"type":46,"value":925},{"type":41,"tag":143,"props":1151,"children":1152},{},[],{"type":46,"value":930},{"type":41,"tag":81,"props":1155,"children":1156},{},[],{"title":8,"searchDepth":935,"depth":935,"links":1158},[1159,1160,1161,1162,1163,1164,1165,1166,1167,1168],{"id":984,"depth":935,"text":987},{"id":998,"depth":935,"text":998},{"id":1011,"depth":935,"text":1011},{"id":1024,"depth":935,"text":1024},{"id":1044,"depth":935,"text":1044},{"id":1064,"depth":935,"text":1064},{"id":1087,"depth":935,"text":1087},{"id":1100,"depth":935,"text":1100},{"id":1119,"depth":935,"text":1119},{"id":897,"depth":935,"text":897},"content:1.blog:018.us-stuff:01.md","1.blog/018.us-stuff/01.md","1.blog/018.us-stuff/01",1775365448614]