有哪些比較好的關於編譯原理 ,操作系統的網路公開課?
本人是測控系專業 ,由於對本專業實在沒有興趣於是自學編程,自學的語言是JAVA(因為之前對編程完全不懂,根本不知道學哪個語言好,現在看來JAVA在知乎好像被大神們黑出翔了。)現在已經自學JAVA三個月,然後學習了一些前端知識,寫了一個簡單的網站,回頭髮現雖然應用層雖然能給自己帶來一點成就感但是對底層完全一點不理解,除了大一上學期學了一點簡單的C,算是唯一的和底層語言有一點關係(但是哪個時候完全不懂。),對底層的理解可以說是完全無知的狀態。
最近在學習數據結構和演算法,但是看到知乎很多大神說想做一個優秀的程序員必須了解底層的編譯原理和操作系統這些,於是希望各位大神能幫忙推薦一些學習視頻(中文的或者有中文字幕的,我英語水平較差。)而且想知道如果想寫一個操作系統或者簡單的編譯器都需要會什麼。
針對問題的回答:
OS: 浙江大學李善平 操作系統 - 浙江大學
Compiler: 中科大華保健 編譯原理 - 網易雲課堂
個人建議:
OS最好看視頻。每天看一點。 由於時間原因,已經堅持每天看一個OS視頻將近40天。 積少成多。理解的也更深刻。編譯原理最好也是從視頻或者小項目入手,然後再去看書 。不要上來就看龍書虎書。 推薦閱讀順序:1. 很多大神都推薦過的,實踐性強,超級適合小白。 Compiler Construction (豆瓣) 不看視頻直接上這本書也可以的。
2. 比較全面《Engineering a Compiler, 2nd Edition》 編譯器設計 (豆瓣)3. 加強前端: Parsing Techniques (豆瓣)如果你對FP感興趣,可以從PLT開始 例如這門 華盛頓大學的神課。UW CSE341, Spring 2013, 或者先去看The Little Schemer (神器的小書)入門lisp之後去看 scheme三劍客《SICP》《EOPL》...........不過多建議了。感興趣翻翻姚大的高質量回答@姚培森
其他相關資源推薦:(沒怎麼整理,隨手發的)
Compiler:文章,項目類:
Learn C ? Build Your Own Lisp C語言寫個Lisp解釋器,代碼量不大。適合有一定C語言基礎。Writing Your Own Toy Compiler Using Flex, Bison and LLVM (gnuu.org) 如鏈接題目。LEMON語法分析生成器 (豆瓣) 編譯器前端《構造正則表達式引擎》新鮮出爐啦! 輪子哥的博客有C++或沒C++基礎都可以去瞅瞅。OS: 30天自製操作系統 (豆瓣)
修正:圖中書籍PLT和Compiler兩類混在一起了。
題外話:可以看中視頻入門,可以看中文書入門。但是最好在多看一遍原版,鞏固一下。體會一下原版的魅力。
知乎上的大神絕大多數都是上原版的。因為國內的爛書毒害大而且高質量的東西都是英文。隨便貼幾個或許可以刺激一下題主,讓你下定決心:
閱讀流水帳 - 負暄瑣話 傳說中的g9yuayon 大神: 輪子哥曾說過g9大神10年寫的東西他都看不懂。每次看他blog我都覺得自己白活了一場,人家10年前才大二的時候寫的東西。我10年後都大三了還99%理解不能啊。
姚大的專欄:PLT的好書都是英文的。
編程語言相關的好書 - Continuation - 知乎專欄----------------------------------------------------------------------------------------很多人問中科大 華保健老師的課看不了。操作系統:
MIT 6.828Stanford: PintosUCB: NachosTHU: UcoreHarvard: OS161以上均為開源,自己學。編譯:
UCB CS164,強推
MIT 6.035 OCW上的project是開源的,現在的貌似不開放了Upenn的PL方面的課程CMU 15-411以上所有課程的lecture notes 基本約等於一本好書,並且assignment project均開放下載還有更多我推了也沒用,畢竟精力有限,很多我自己都沒看完CS143: Introduction to CompilersCS243 - Program Analysis and OptimizationsCS 343https://www.cs.cmu.edu/~410/
15-411: Compiler Design (Fa"12)
15-440/640, Spring 2015: Distributed Systems斯坦福編譯原理課程 Coursera - Free Online Courses From Top Universities
說些題外話..如果以英文不好為理由而永遠不敢看英文的話,永遠也學不會英語的,要敢於邁出第一步務必首先熟悉英文技術資料OS:MIT 6.828 http://pdos.csail.mit.edu/6.828/2014/schedule.html動手實現一個基於x86體系的UNIX v6
From nand to tetris, coursera上有這門課。
推薦閱讀:
※精通機器學習為什麼同時也必須精通一門編程語言?
※C++11 中為什麼是auto,而不是var?
※為什麼大家都很否定中文編程?
※Rust 和 Go 的並發模型有什麼不同,為什說 Rust 的並發模型更好 ?(1.0已沒有內建模型?
※為什麼微軟的編程語言C# F#的編譯器要那麼多黑科技?