從工作角度出發,學習編譯原理和操作系統哪個對於個人幫助更大?

Hi,本人米碩一枚,方向偏cs。由於本科階段學的不是這個領域,自己這幾年稀里糊塗編了一些程序但總覺得對提高幫助不是很大。在知乎上瀏覽了很多問題後,我覺得原因可以歸結為自己缺乏「內功」:除了數據結構、AI與計算機硬體(這個課更像是在玩單片機...)外,其他基礎課都有所欠缺,因此對計算機的整體認識還不是很到位...我認為對我而言最重要的知識體系就是編譯原理和操作系統了,然而碩士階段也沒有太多選課空間讓我把這些東西全都補回來,所以就想聽聽知乎上各位從業大神的意見:如果Compiler和OS只能二選一的話,從工作角度出發,學習哪一個對於個人的幫助更大一些...?謝謝~!

ps. 這裡的幫助其實也沒有特別功利的意思...我的意思是工作開發中,因為有了這兩個領域的知識後,自己寫代碼時會有意無意地去考慮一些細節,從而寫出更合理的代碼...想要的就是這樣一種效果 0_0


很顯然是操作系統


操作系統以及彙編。編譯原理真的太窄了,特別是詞法語法分析什麼的。


當然是編譯原理,編譯原理告訴你的是一環扣一環的、只要其中一個步驟沒搞定後面就永遠都別想學會的知識,組織特別清晰。當你去實現一遍的時候,你就至少要寫一個略有規模、計算過程複雜、不用一點設計模式(特別是visitor)的話無論怎麼搞都巨丑的程序。要是工程能力不強的話,結果永遠都是寫爛掉。所以學這個當然是有利於提高你的工程能力的。


當然是操作系統,你很少有機會(或用處)開發一個編譯器,但只要你寫系統級程序你就避免不了要知道系統調用,虛擬內存,緩存優化。


沒學編譯原理之前我自己就(用字元串切割、大量switch/if語句)寫過一個把C#文件當腳本跑的嵌入式解釋器,所以編譯原理不是那麼關鍵

後來學了計算理論發現編譯原理的原理已經被涵蓋了,再次覺得編譯原理不學也無所謂,除非要靠搞編譯器吃飯


我覺得是操作系統。

編譯器當成一個黑盒子用著就挺好了。


其實和你編的程序有關,對代碼質量要求更高的建議先學編譯原理,對開發效率要求更高則是操作系統。反正要提高專業修養的話,遲早兩個都要學。

從提高水平來講,操作系統更偏實用,編譯原理更偏理論,所以建議先學操作系統,而等操作系統學了,再去學編譯原理要輕鬆很多,很多地方就會豁然開朗。

話說回來這倆個不都是必修課嗎?


偏題中。。。

跟題主一樣,也是這兩科都沒學,專業原因。所以只知道這兩個很重要,沒法判斷哪個更重要。

我想的是寧願時間再擠也要兩個都學,只是在考慮先後問題。

這段時間在找實習,方向是後台開發,發現面試必問操作系統的知識,所以決定先看操作系統了。


編譯原理的llvm方向。


對於一個寫業務代碼的程序員,搞過無線開發,搞過web開發,甚至低端ssh,你懂的。果斷編譯原理,將來必有大作為


OS


先csapp吧,簡單易速成,之後再有針對性的弄OS或編譯器


推薦閱讀:

如何看待清華大學計算機科學在U.S.News的排名中位列第二?
C++關於無參數初始化類對象的問題?

TAG:操作系統 | 計算機科學 | 編譯原理 |