Computer Science Open Roadmap === {%hackmd @idoleat/spoiler-plus %} ## 目標 從入門到專精的一張地圖,給予入門的新手,已入門的中手一個可依循的學習道路(其實也不一定要依循,大量讀就對了),並且有足夠的教材可以學習,避免學員浪費時間在零碎、鬆散甚至不正確的教材上。每個項目都設有常備助教,隨時可以針對學員提出的問題和作業進行回答和批閱 認證機制:每個項目皆有一定的驗收機制,若學員合格則給予通過證明,當學員取得某一條到路上所有項目的證明之後便可認證為具有一定就業能力的工程師。 :::spoiler 私心覺得有機會變成一種就業媒合機制 畢竟與學員長期互動下來可以了解一個人所掌握的能力以及做事的方式,若正是某公司要找的人就可以直接洽談了。如此過程所招募的人遠比僅花費幾場面試速食認識的人來的有可信度吧?對學員來說也不需再花費力氣準備如何在面試場合表演還有 leetcode 框架,自身實力也可以比較完整的被看到,只要你盡心盡力參與課程。目前有類似概念的:[The Audio Programmer 社群](https://www.theaudioprogrammer.com/) ::: <br> 需要讓學生知道某些項目學習的目的是什麼,會在哪邊被用到(可以在 road map 上用 dependency 線連接提示),例如學硬體是為了溝通和了解設計背景和原理。像我以前就對硬體不是很感興趣,我覺得數位電路偏無聊(我就只對 minecraft 電路和合成器電路有興趣),微處理機更無聊覺得他根本不應該當作必修,直到需要用到了才發覺重要性。 ### 大學課程常見問題 * 教材與世界嚴重脫節 * 計算機組織教的 CPU 跟現代 CPU 架構差太多 * 教材涵蓋不全 * 平行程式設計太著重於演算法,但是 runtime 及相關執行時會遇到的問題可需要加深探討 ## Subjects 以下為科目草稿列表 (歡迎隨意加),最後應該要用 [Graphiz](https://hackmd.io/s/MathJax-and-UML-tw#%E5%A6%82%E4%BD%95%E6%92%B0%E5%AF%AB%E6%95%B8%E5%AD%B8%E5%BC%8F%E5%8F%8A%E5%9C%96%E8%A1%A8) 畫成路線圖(其實我現在覺得不需要),並連結到各科目的頁面,像是這樣: 好像不必有特定學習順序 :thinking_face: 太慢又沒有什麼顯著的必要 ```graphviz digraph hierarchy { nodesep=1.0 // increases the separation between nodes node [color=Grey,fontname=Courier,shape=box] //All nodes will this shape and colour edge [color=Black, style=dashed] //All the lines look like this 電腦概論->{資料結構與演算法 物件導向程式設計 編譯器概論} 資料結構與演算法->{計算理論 密碼學} 編譯器概論->{作業系統 LinuxKernel[href="http://wiki.csie.ncku.edu.tw/linux/schedule" fontcolor=blue]} } ``` * 普通電腦科學 * 科普電腦概論 * 數學:避免直接出現嚇到人,應該由會使用到的科目引用 * 資料結構與演算法 * 物件導向程式設計 * 可以順便多提一些其他 paradigm * 網路概論 * 網通原 * 網程設 * 網路管理 * 系統管理 * DevOps * 下略三千字 * 數位電路 * 電腦組織 * 進階電腦組織 * 作業系統 (OSTEP) * 編譯器概論 * [Linux kernel](http://wiki.csie.ncku.edu.tw/linux/schedule) * 微控制器 + 計算理論 + 密碼學 + 資訊安全概論 + reverse/binary exploitation/pwn + 網路安全 * 機器學習概論 * 進階機器學習 - 網頁設計 - 資料庫 - 進階網頁設計 * 音訊處理 * 電腦圖學 * 多媒體 * 遊戲引擎、動畫、VJ、音樂製作 * Android/iOS APP 開發 - 資工系介紹 ### 文化 開源文化:https://hackmd.io/@sysprog/linux2021-culture 開源社群:[MozTW](https://t.me/moztw_general), [ArchTW](https://t.me/ArchLinuxTaiwan), [開源社群推廣目錄](/p3oE3Xi6SlWwuGsOGeHL_Q) 活動:[SITCON](https://sitcon.org/), [COSCUP](https://coscup.org/), [HITCON](https://hitcon.org/), MOPCON --- ## 參考/雜項 https://hackmd.io/@idoleat/HJlq3nNXQ https://openstax.org/ https://github.com/ossu/computer-science 程式人公益教育集團 https://www.ted.com/talks/shimon_schocken_the_self_organizing_computer_course [Stanford CS Curriculum 2021](https://docs.google.com/spreadsheets/d/1zfw8nPvJeewxcFUBpKUKmAVE8PjnJI7H0CKimdQXxr0/htmlview) 還有很多其他知名大學也都開放課程資料 https://github.com/goodjack/developer-roadmap-chinese https://blog.v123582.tw/2021/05/17/Python-%E7%B6%B2%E9%A0%81%E7%88%AC%E8%9F%B2%E7%9A%84%E5%AD%B8%E7%BF%92%E5%9C%B0%E5%9C%96%E8%88%87%E7%AD%96%E7%95%A5/ https://news.ycombinator.com/item?id=27744255 https://www.youtube.com/watch?v=SzJ46YA_RaA [CMU 機器人課程](https://www.cmu.edu/roboticsacademy/index.html) [Algo&DS textbook](https://news.ycombinator.com/item?id=29217252) [CS101](https://news.ycombinator.com/item?id=32043433) [Free online courses from top universities](https://news.ycombinator.com/item?id=32213153) [Recommanded by HN](https://news.ycombinator.com/item?id=36088224) 希望可以有其他不同種類的 OpenRoadMap,例如設計類、文化、公民教育、文學 音樂類和遊戲開發類正在慢慢生產中..... There are two hard things in Computer Science: One is cache invalid and another one is naming. 歷史 https://livingcomputers.org https://windows96.net/ https://geekprank.com/ https://simone.computer/#/webdesktops https://news.ycombinator.com/item?id=29274377 ### 電腦概論 * 一門靜態語言、一門動態語言 * [如何提問](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way) * git * 團隊合作、專案管理 * [開源貢獻 zero to hero](https://news.ycombinator.com/item?id=29219962) * [The joy of small projects](https://schroer.ca/2022/04/10/the-joy-of-small-projects/)