1. 程式人生 > >學習編譯原理的意義

學習編譯原理的意義

   在國內,只有一本學校會教編譯原理和計算理論的課程。我們這邊的招聘經驗也表明,好學校學過編譯原理的學生的程式碼能力還是非常不錯的。視野也寬闊的多。我認為,學習的語言少了,只有一兩門,就會容易鄙視其他的語言使用者。 我認為這是潛意識的一種自我保護行為。視野容易變得狹隘。我認為這是軟體工程專業學生的必修課。很不幸,我就讀的只是普通的二本學校。我的同學中也很少有人自修過這麼課程的。這麼有意思的課程在最有時間的階段被錯過了,很可惜。我能自學這門課程是因為一個人,王垠,我看了他早期的新浪部落格,很受啟發。雖然他現在的一些文章顯得有點偏激了,但是,他的整個經歷,就是一個絕佳的案例,他也以己為例的告訴後來者,不要著急,不要陷入對技術的宗教崇拜,不要對所謂的成名的人陷入崇拜,要自己思考,要去了解本質,要去感受程式設計的樂趣。    不知誰提出了“程式設計師的三大浪漫,編譯原理,圖形學,作業系統”這個說法。這三個方向,我都看了一些書研究過,我的過程是編譯原理-> 作業系統 -> 圖形學。現在只做圖形學方向了,其他兩個暫停掉了,或者說暫時夠用了。我當時自學這門課程的一個重要原因,是我想克服內心的恐懼:我不能認識程式世界的執行原理的恐懼,為什麼 Magnus Lie Hetland 會那麼多程式語言,為什麼我不會。學習作業系統同樣處於此條。之後學習圖形學方面,促使我前進的動力不再是恐懼,而是探索的樂趣。後來我總結:對於一個領域的初學者,初始階段前進的動力很大一部分是恐懼,對於未知的恐懼。現在我明白了,只要我投入足夠多的時間,就能克服這些恐懼,他人能夠獲取的成就,我也有肯能獲取到。    學習編譯原理是一個籠統的說法,其實分為兩個部分:形式語言理論 和 編譯原理實踐。我當初認為要弄明白語言執行原理,就要了解多種語言的特徵,所以就學習了Python, Scheme, Common Lisp, 彙編,Erlang,Java,JS,C++,學習了《程式設計語言概念》(第9版)、《程式設計語言:實踐之路》(第3版),這也是我經常向身邊做技術的人推薦的書籍。要想了解一個東西,就要去了解它的歷史。學完了這些,我才開始學龍書。 看不懂,就找來《編譯原理與實踐》,兩本書一起看,反覆看。後來感覺不夠,買了 《形式語言,自動機理論與計算導論》、《自動機理論.語言和計算機導論》,我特別喜歡後面一本。我現在也寫不出一門完整的計算機語言,但是,這個學習過程中,我基本上明白了諸多語言執行的基本原理。這對我程式設計幫助很大。它是是我大學四年中學過的最為受用的課程。從畢業到現在,我還沒有遇到對這個方向特別感興趣並且研究的比較深入的人,甚為可惜。一直都是我在給身邊的同伴講解一些語言上的特徵、原理,解決編譯上遇到的問題,我也想能夠找個人來解決我的疑問。    我想說的只是: 去了解事物的本質,是一件非常愉快的事情。我希望學習軟體工程的同學們都能享受到這份愉悅。