我認為這門課是一門真正與**做鬥爭的課程,,而且編譯原理可以說是乙個電腦科學的縮影。你學習它更多的是去追尋程式語言的本質,學完這門課程,我相信,你對你所寫的程式、程式語言都會有更深的本質認識,這樣的認識也會讓你站的高度完全不同,如果你真的學的好,我想別人看到的是語法,你看到的是背後的實現,
在歐洲教會還不允許做屍體解剖的時候就有兩類人在一起偷偷摸摸的搞人體解剖:一類是醫生,從外科手術的角度來說應該比較容易理解,不解剖根本不可能知道如何做外科手術;還一類則是畫家,他們只是為了可以更好的在描繪**時體現肌肉的質感,就願意冒著被教會處罰的危險來參與人體解剖。而且即使是現在,所有的現代繪畫的教育雖然不會再像醫生那樣實際操作解剖,但是肌肉層的解剖圖仍然是必修課。
在我看來,完全不懂編譯原理的程式設計師,就好像是完全沒有學過人體解剖圖的畫家一樣,當然不會說一定就無法成功,但更好的基礎可以提高成功的機率。在知道底層的情況下,對上層的描繪會更加寫實,更加生動。
從現實的方面來說,編譯原理學過之後的益處(不考慮最後都沒有入門的情況)包括:
1、可以更加容易的理解在乙個語言種哪些寫法是等價的,哪些是有差異的
2、可以更加客觀的比較不同語言的差異
3、更不容易被某個特定語言的宣揚者忽悠
4、學習新的語言是效率也會更高
5、其實從語言a轉換到語言b是乙個通用的需求,學好編譯原理處理此類需求時會更加游刃有餘
另外還有一點,就是一直有人說不用重複造輪子,所以不需要學習編譯原理這樣的課程。我想說的是,學編譯原理不是讓你去造輪子(大多數人的實力,學了也造不出輪子),而是要讓你知道現在一共有多少種輪子可以選擇,它們特性如何?
個人不太建議一上手就拿起龍書、虎書等等來看。
學過編譯原理課程的同學應該有體會,各種文法、各種詞法語法分析演算法,非常消磨人的耐心和興致;中間**生成和優化,其實在很多應用場景下並不重要(當然這一塊對於「編譯原理」很重要);語義分析要處理很多很多細節,特別對於比較複雜的語言;最後的指令生成,可能需要讀各種手冊,也比較枯燥。
你就可以學會但不限於下面幾種技能:
1、強大的除錯能力(譬如說你用你的語言寫了個程式,出錯了,你怎麼知道是編譯器搞錯、虛擬機器搞錯、還是你的指令碼自己搞錯了)
2、牛逼的記憶體管理能力(寫虛擬機器,垃圾收集記憶體不洩露,屌!)
3、組織大量**的能力
4、寫庫的能力(你開發的語言沒有容器?沒有字串?沒有多執行緒?沒有io?那有什麼用!)
5、混合語言開發的能力
6、開發高質量單元測試的能力
7、寫指令碼產生release資料夾的能力
程式設計的大部分工作,都是在處理字串,也可以說是數字吧。
在我看來,編譯器最大的作用除了讓你深入了解語言機制外,就是培養了你嫻熟的處理字串技能。
你會解析字串,就已經和只會用庫的人大不相同了。像json yaml這些,蘋果平台直到ios5才有自帶的json庫。
web領域什麼scss之類的,例子太多。
額外的,你擁有了乙個語言編譯到另乙個語言的能力,這個就很實用了。web開發領域經常出個coffeescript這樣的東西就高興壞了,社群大震動。。。。其實主要因為web領域高水平程式設計師比較少,會做語言編語言的事情的人一抓一大把,可惜人家大多不做web開發,你想要好東西,只能等,哈哈。。。
所以操縱語言這個超能力還是很好的,起碼lv5吧,而且反正你可以開發多種超能力,是吧
不學編譯原理,可能永遠給各種寫編譯器的人當奴隸,以為寫程式只能按照他們設計的語言哲學來做。學好了編譯原理,不一定非要自己寫語言,但是至少能把很多其他程式設計師覺得很酷的東西看得透徹一點,不會被程式語言的設計表象騙到太多。
對編譯原理的理解
編譯原理就是什麼?在我看來,編譯原理就是將高階語言翻譯成計算機語言 即計算機所能識別的二進位制 所遵循的規律,並且讓你理解機器是如何理解高階語言的。學習編譯原理有什麼好處?當你真正完成編譯原理的學習後,你對你所寫的程式 程式語言都會有更深的本質認識,這樣的認識也會讓你站的高度完全不同,並且知道編譯的...
編譯原理(整體理解)
編譯原理實際上是傳統編譯器的工作原理。它可以分為六個部分 詞法分析 語法分析 語義分析 中間 生成 優化 目標 生成。整個過程其實就像把一篇英語文章翻譯成中文,讓只懂中文的人看懂。詞法分析是乙個程式,輸入的是字元流 源 輸出的是token。這就好比英語中看到幾個字母組在一起,不能說它是乙個單詞,乙個...
0909關於編譯原理的理解
1 編譯原理學什麼?答 編譯原理學習做程式的編譯器的原理和方法,內容包括語言和文法 詞法分析 語法分析 語法制導翻譯和中間 生成 儲存管理 優化和目標 生成等內容。2 為什麼學編譯原理?答 編譯原理蘊含著電腦科學中解決問題的思路 形式化問題和解決問題的方法,對軟體的設計開發具有一定的指導作用,學習它...