眾所周知,編譯技術是計算機科學皇冠上的明珠之一。歷史上各門計算機語言的發明人,總是被當作英雄膜拜。
比爾·蓋茨早期最主要的成就,就是寫了一個Basic的直譯器。很多國外廠商的軟體,普遍都具備二次程式設計能力,比如Office、CAD、GIS、Mathematica等等。
德國SAP公司的企業應用軟體也是用自己的業務級語言編寫的。
目前來看,谷歌也好,蘋果也好,微軟也好,這些技術巨頭們的核心能力,都是擁有自己的語言和生態。
此前,北京物演科技CEO宮文學具體闡述了編譯技術對程式設計師的重要性,可見編譯技術有多麼重要。
學習編譯原理的思維導圖:
編譯技術,與你的工作息息相關有一些程式設計師認為:“我不可能自己去寫一門新的語言,還有必要學習編譯原理嗎?”
這種想法是把編譯原理的用途簡單化了。編譯原理不是隻能用於炫耀的屠龍技。
別的不說,作為程式設計師,在實際工作中你經常會碰到需要編譯技術的場景。
Java程式設計師想必很熟悉Hibernate和Spring,前者用到了編譯技術做HQL的解析,後者對註解的支援和位元組碼動態生成也屬於編譯技術。
所以,如果你要深入理解和用好這類工具,甚至想寫這種型別的工具,會需要編譯技術。
而PHP程式設計師在寫程式的時候,一般會用到模板引擎實現介面設計與程式碼的分離。模板引擎對模板進行編譯,形成可執行的PHP程式碼。模板引擎可以很強大,支援條件分支、迴圈等語法。
如果你瞭解編譯技術,會更容易掌握這些模板引擎,甚至寫出更符合領域需求的模板引擎。
如果你要參與編寫一個基礎設施類的軟體,比如資料庫軟體、ETL軟體、大資料平臺等,很多需要採用編譯技術提供軟體自帶的語言功能,比如SQL。這種功能無法由外部通用語言實現。
除此之外,解析使用者輸入,防止程式碼注入,為前端工程師提供像React那樣的DSL,像TypeScript那樣把一門語言翻譯成另一門語言,像CMake和Maven那樣透過配置檔案來靈活工作,以及運維工程師分析日誌檔案等等高級別的需求,都要用到編譯技術。
除了豐富的應用場景,學習編譯技術對於提升程式設計師的競爭力也很重要。
現在一些大公司在招聘程式設計師時,有難度的面試題都是涉及底層機制的。因為理解了底層機制,才能有更深入思考問題,以及深層次解決問題的能力,而不是隻能盲目地搜尋答案,從表面解決問題。
而學習編譯原理能讓你從前端的語法維度、程式碼最佳化的維度、與硬體結合的維度幾個方面,加深對計算機技術的理解,提升自己的競爭力。
所以,無論你是前端工程師、後端工程師,還是運維工程師,不論你是初級工程師還是職場老手,編譯技術都能給你幫助,甚至讓你提升一個級別。現在,你應該知道了編譯原理對程式設計師來說有多麼重要了。但是,你可能會說“我知道編譯技術很重要,我也很想把它啃下,可是我每次鼓起勇氣拿起《編譯原理》,啃不了多少頁就放下了。編譯原理已經成了我的心魔……”
其實,你之所以遇到困難,很大一個原因在於市面上講述編譯原理的內容往往過於抽象和理論化。