1. 一個合格的程序員應該讀過哪些書
1、《代碼大全》 史蒂夫·邁克康奈爾
推薦數:1684
「優秀的編程實踐的網路全書,《代碼大全》注重個人技術,其中所有東西加起來, 就是我們本能所說的「編寫整潔的代碼」。這本書有50頁在談論代碼布局。」 —— Joel Spolsky
對於新手來說,這本書中的觀念有點高階了。到你准備閱讀此書時,你應該已經知道並實踐過書中99%的觀念。– esac
Steve McConnell的原作《代碼大全》(第1版)是公認的關於編程的最佳實踐指南之一, 在過去的十多年間,本書一直在幫助開發人員編寫更好的軟體。
現在,作者將這本經典著作全新演繹,融入了最前沿的實踐技術,加入了上百個嶄新的代碼示例, 充分展示了軟體構建的藝術性和科學性。 McConnell匯集了來自研究機構、學術界以及業界日常實踐的主要知識, 把最高效的技術和最重要的原理交織融會為這本既清晰又實用的指南。
無論您的經驗水平如何,也不管您在怎樣的開發環境中工作,也無論項目是大是小, 本書都將激發您的思維並幫助您構建高品質的代碼。
《代碼大全(第2版))》做了全面的更新,增加了很多與時俱進的內容,包括對新語言、新的開發過程與方法論的討論等等。
2、《程序員修煉之道》
推薦數:1504
對於那些已經學習過編程機制的程序員來說,這是一本卓越的書。 或許他們還是在校生,但對要自己做什麼,還感覺不是很安全。
就像草圖和架構之間的差別。雖然你在學校課堂上學到的是畫圖,你也可以畫的很漂亮, 但如果你覺得你不太知道從哪兒下手,如果某人要你獨自畫一個P2P的音樂交換網路圖,那這本書就適合你了。—— Joel
《程序員修煉之道:從小工到專家》內容簡介:《程序員修煉之道》由一系列獨立的部分組成, 涵蓋的主題從個人責任、職業發展,知道用於使代碼保持靈活、並且易於改編和復用的各種架構技術, 利用許多富有娛樂性的奇聞軼事、有思想性的例子及有趣的類比, 全面闡釋了軟體開發的許多不同方面的最佳實踐和重大陷阱。
無論你是初學者,是有經驗的程序員,還是軟體項目經理,《程序員修煉之道:從小工到專家》都適合你閱讀。
3、《計算機程序的構造和解釋》
推薦數:916
就個人而言,這本書目前為止對我影響醉倒的一本編程書。
《代碼大全》、《重構》和《設計模式》這些經典書會教給你高效的工作習慣和交易細節。 其他像《人件集》、《計算機編程心理學》和《人月神話》這些書會深入軟體開發的心理層面。 其他書籍則處理演算法。這些書都有自己所屬的位置。
然而《計算機程序的構造和解釋》與這些不同。 這是一本會啟發你的書,它會燃起你編寫出色程序的熱情; 它還將教會你認識並欣賞美; 它會讓你有種敬畏,讓你難以抑制地渴望學習更多的東西。
其他書或許會讓你成為一位更出色的程序員,但此書將一定會讓你成為一名程序員。
同時,你將會學到其他東西,函數式編程(第三章)、惰性計算、元編程、虛擬機、解釋器和編譯器。
一些人認為此書不適合新手。 個人認為,雖然我並不完全認同要有一些編程經驗才能讀此書,但我還是一定推薦給初學者。 畢竟這本書是寫給著名的6.001,是麻省理工學院的入門編程課程。 此書或許需要多做努力(尤其你在做練習的時候,你也應當如此),但這個價是對得起這本書的。
4、《C程序設計語言》
推薦數:774
這本書簡潔易讀,會教給你三件事:C 編程語言;如何像程序員一樣思考;底層計算模型。 (這對理解「底層」非常重要)—— Nathan
《C程序設計語言》(第2版新版)講述深入淺出,配合典型例證,通俗易懂,實用性強, 適合作為大專院校計算機專業或非計算機專業的C語言教材,也可以作為從事計算機相關軟硬體開發的技術人員的參考書。
《C程序設計語言》(第2版新版)原著即為C語言的設計者之一Dennis M.Ritchie和著名的計算機科學家Brian W.Kernighan合著的 一本介紹C語言的權威經典著作。 我們現在見到的大量論述C語言程序設計的教材和專著均以此書為藍本。 原著第1版中介紹的C語言成為後來廣泛使用的C語言版本——標准C的基礎。
人們熟知的「hello,world」程序就是由本書首次引入的,現在,這一程序已經成為所有程序設計語言入門的第一課。
5、《演算法導論》
推薦數:671
《代碼大全》教你如何正確編程; 《人月神話》教你如何正確管理; 《設計模式》教你如何正確設計……
在我看來,代碼只是一個工具,並非精髓。 開發軟體的主要部分是創建新演算法或重新實現現有演算法。 其他部分則像重新組裝樂高磚塊或創建「管理」層。
我依然夢想這樣的工作,我的大部分時間(>50%)是在寫演算法,其他「管理」細節則留給其他人…… —— Ran Biron
經典的演算法書,被亞馬遜網,《程序員》等評選為2006年最受讀者喜愛的十大IT圖書之一。
演算法領域的標准教材,全球多所知名大學選用
MIT名師聯手鑄就,被譽為「計算機演算法的聖經」
編寫上採用了「五個一」,即一章介紹一個演算法、一種設計技術、一個應用領域和一個相關話題。
6、《重構:改善既有代碼的設計》
推薦數:617
《重構:改善既有代碼的設計》清晰地揭示了重構的過程,解釋了重構的原理和最佳實踐方式, 並給出了何時以及何地應該開始挖掘代碼以求改善。 書中給出了70多個可行的重構,每個重構都介紹了一種經過驗證的代碼變換手法的動機和技術。
《重構:改善既有代碼的設計》提出的重構准則將幫助你一次一小步地修改你的代碼,從而減少了開發過程中的風險。
《重構:改善既有代碼的設計》適合軟體開發人員、項目管理人員等閱讀, 也可作為高等院校計算機及相關專業師生的參考讀物。
我想我不得不推薦《重構》:改進現有代碼的設計。—— Martin
我必須承認,我最喜歡的編程語錄是出自這本書:任何一個傻瓜都能寫出計算機能理解的程序, 而優秀的程序員卻能寫出別人能讀得懂的程序。—— Martin Fowler
7、《設計模式》
推薦數:617
自1995年出版以來,本書一直名列Amazon和各大書店銷售榜前列。 近10年後,本書仍是Addison-Wesley公司2003年最暢銷的圖書之一。 中文版銷售逾4萬冊。
就我而言,我認為四人幫編著的《設計模式》是一本極為有用的書。 雖然此書並不像其他建議一樣有關「元」編程,但它強調封裝諸如模式一類的優秀編程技術, 因而鼓勵其他人提出新模式和反模式(antipatterns),並運用於編程對話中。—— Chris Jester-Young
8、《人月神話》
推薦數:588
在軟體領域,很少能有像《人月神話》一樣具有深遠影響力並且暢銷不衰的著作。
Brooks博士為人們管理復雜項目提供了最具洞察力的見解。 既有很多發人深省的觀點,又有大量軟體工程的實踐。 本書內容來自Brooks博士在IBM公司System/360家族和OS/360中的項目管理經驗。
該書英文原版一經面世,即引起業內人士的強烈反響,後又譯為德、法、日、俄中等多種語言,全球銷量數百萬冊。 確立了其在行業內的經典地位。
9、《計算機程序設計藝術》
推薦數:542
《計算機程序設計藝術》系列著作對計算機領域產生了深遠的影響。 這一系列堪稱一項浩大的工程,自1962年開始編寫,計劃出版7卷,目前已經出版了4卷。
《美國科學家》雜志曾將這套書與愛因斯坦的《相對論》等書並列稱為20世紀最重要的12本物理學著作。 目前Knuth正將畢生精力投入到這部史詩性著作的撰寫中。
這是高德納傾注心血寫的一本書。—— Peter Coulton
10、《編譯原理》(龍書)
推薦數:462
我很奇怪,居然沒人提到龍書。(或許已有推薦,我沒有看到)。 我從沒忘過此書的第一版封面。 此書讓我知道了編譯器是多麼地神奇絕妙。- DB
2. 作為程序員計算機基礎的書推薦幾本唄
生活不僅僅只有寫代碼,作為程序員,我們不僅要將數據結構、計昌敬讓算機網路、操作系統這三把斧玩好,更要擁有一個強健的體魄!
網路:
萬物互稿山聯時代,如果你還不懂網路知識,那將寸步難行。這里推薦三本經典書籍:
TCP/IP詳解
該書是網路專家、著名技術作家W.RichardStevens的傳世之作,內容詳盡且極具權威,被譽為TCP/IP領域的不朽名著,就我認識的老通信行業的專業開發人員,基本人手一本。本書共三卷,其中卷一偏重於基礎原理,卷二、卷三更多偏重於編程細節,作為基礎書籍推薦,卷一即可,對於學有餘力的童鞋,可學習二、三卷。
圖解HTTP
應用最廣泛的協議之一,前端工程師分析抓包分析數據,後端工程師實現RESTAPI、搭建自己的HTTP伺服器等過程中都繞不開HTTP這一知識點,《圖解HTTP》,用通俗易懂的語言講解了HTTP協議的方方面面,本書列舉諸多常見通信場景及實戰案例,最後延伸到Web安全、最新技術動向等方面,實在是一本不可多得的好書。
Wireshark網路分析就這么簡單
「授人以魚不如授人以漁」,全書以詼諧幽默的寫法為我們講解了枯燥的技術問題,由淺入深的用Wireshark分析了常見的網路協議,還通過身邊的真實案例分享了Wireshark使用技巧,對初學者是很好的啟蒙書籍。本書可搭配前面介紹的兩本基礎理論書籍一起學習,必能達到事半功倍的效果。
操作系統:
現代操作系統
程序員的耐局自我修養——鏈接、裝載和庫
如果你是高手,LinuxHacker或者geek,請繞行
但如果你是新手
如果你曾好奇過windows系統目錄下和軟體目錄下大堆大堆的dll文件是什麼?
如果你曾疑惑過我寫下的代碼經歷的怎樣的歷程最後怎樣到達了內存?
編譯器每天用,它到底做了什麼?
如果你已經學習或接觸了C,匯編,計算機結構,但還是沒辦法把三者的關系理順。
那麼,《程序員的自我修養——鏈接、裝載和庫》這本書絕對是對你的有幫助。
數據結構
基礎入門的話,這里推薦《大話數據結構》。本書以一名教師的教學為場景,用生動形象的語言講解數據結構和相關演算法的知識。全文大量引用了各種各樣的生活知識來類比數據結構中的專業知識。
程序員必備書籍
重要!
重要!
重要!
作為本文的壓軸戲,也是最重要的一本書《程序員健康指南》推薦給各位程序猿友們,專門為程序員量身製作的健康指南,針對頭痛、眼部疲勞、背部疼痛和手腕疼痛等常見的問題介紹了其成因和對策。身體是革命的本錢,各位在長期面對996的同時,一定要注意身體,加強鍛煉,提高免疫力!
3. java基礎的書有哪些比較好的
書籍的話你可以看看以下幾本書,從java入門到精通:
1.零基礎入門《零基礎學Java》
推薦理由簡單易懂、而且還有配套視頻教程,寫、記都方便。
2、Head First Java
《Head First Java》是本完整的面向對象(object-oriented,OO)程序設計和Java的學習指導。此書是根據學習理論所設計的,讓你可以從學習程序語言的基礎開始一直到包括線程、網路與分布式程序等項目。最重要的,你會學會如何像個面向對象開發者一樣去思考。
而且不只是讀死書,你還會玩游戲、拼圖、解謎題以及以意想不到的方式與Java交互。在這些活動中,你會寫出一堆真正的Java程序,包括了一個船艦炮戰游戲和一個網路聊天程序。
Head First系列的圖文並茂學習方式能讓你快速地在腦海中掌握住知識。敞開心胸准備好學習這些關鍵性的主題:
*Java程序語言
*面向對象程序開發
*Swing圖形化介面
*使用Java API函數庫
*編寫、測試與布署應用程序
*處理異常
*多線程
*網路程序設計
*集合與泛型
3、Effective java 中文版(第2版)
領導開發Java集合框架和並發API包的 約書亞·布洛克 大神所著。
本書適合於有著數年開發經驗Java程序員,通過本書我們可以很多編程中的最佳實踐,並且可以從JDK貢獻者布洛克大神這里汲取經驗。Effective Java從質量,內容和問題解答方式上來說都是一本評價很高的書,因此讀這本書會是一種感覺很棒的體驗。另外本書的章節相對比較輕量,與其他章節耦合度較低,因此在旅行或者閑暇時間閱讀也是可以的。在內容方面,Effective Java包含了從靜態工廠,序列化,equals和hashcode到泛型,枚舉,可變參數以及反射的最佳解決方法。本書對Java各方面知識點的講解會讓你受益匪淺。
4、《Java 編程思想》
是個大部頭,足足 880 頁,文字更是密密麻麻。我不建議大家一個字一個字的讀,知曉其中的精華就可以了。
本書贏得了全球程序員的廣泛贊譽,即使是最晦澀的概念,在Bruce Eckel的文字親和力和小而直接的編程示例面前也會化解於無形。從Java的基礎語法到最高級特性(深入的面向對象概念、多線程、自動項目構建、單元測試和調試等),本書都能逐步指導你輕松掌握。
從本書獲得的各項大獎以及來自世界各地的讀者評論中,不難看出這是一本經典之作。本書的作者擁有多年教學經驗,對C、C++以及Java語言都有獨到、深入的見解,以通俗易懂及小而直接的示例解釋了一個個晦澀抽象的概念。本書共22章,包括操作符、控制執行流程、訪問許可權控制、復用類、多態、介面、通過異常處理錯誤、字元串、泛型、數組、容器深入研究、Java I/O系統、枚舉類型、並發以及圖形化用戶界面等內容。這些豐富的內容,包含了Java語言基礎語法以及高級特性,適合各個層次的Java程序員閱讀,同時也是高等院校講授面向對象程序設計語言以及Java語言的絕佳教材和參考書。
5、Java Web高級編程
Java成為世界上編程語言之一是有其優勢的。熟悉JavaSE的程序員可以輕松地進入到Java EE開發中,構建出安全、可靠和具有擴展性的企業級應用程序。編寫《Java Web高級編程——涵蓋WebSockets、Spring Framework、JPA Hibernate和Spring Security》一書的目的正是如此。
《Java Web高級編程:涵蓋WebSockets、Spring Framework、JPA 》面向的讀者是已經了解Java SE、SQL和基本的HTML,准備將他們的Java編碼技能提升到更高水平的程序員。軟體開發者可以按順序閱讀本書或者在遇到特定的編程問題時將某個章節用作參考。
主要內容
◆ 為企業級Web應用的Java編碼提供了自我指導、自我學習的方法
◆ 幫助Web應用架構師在開發團隊的項目中或者開發過程中應用新的概念
◆ 對Java EE平台7和其中的許多技術提供了詳細的介紹
◆ 講解了Servlet、JSP、WebSockets、Spring Framework、AMQP、JPA和O/RM、Spring Data、全文搜索、Apache Lucene和Hibernate Search、Spring Security和OAuth
◆ 重點介紹Java SE 8中新增加的常用功能,如lambda表達式和新的JSR 310 Java 8 Date and Time API等
6、高性能MySQL
《高性能mysql(第3版)》是mysql 領域的經典之作,擁有廣泛的影響力。第3 版更新了大量的內容,不但涵蓋了最新mysql 5.5版本的新特性,也講述了關於固態盤、高可擴展性設計和雲計算環境下的資料庫相關的新內容,原有的基準測試和性能優化部分也做了大量的擴展和補充。全書共分為16 章和6 個附錄,內容涵蓋mysql 架構和歷史,基準測試和性能剖析,資料庫軟硬體性能優化,復制、備份和恢復,高可用與高可擴展性,以及雲端的mysql 和mysql相關工具等方面的內容。每一章都是相對獨立的主題,讀者可以有選擇性地單獨閱讀。
7、MySQL 5.7從入門到精通(視頻教學版)(第2版)
本書主要包括MySQL的安裝與配置、資料庫的創建、數據表的創建、數據類型和運算符、MySQL函數、查詢數據、數據表的操作(插入、更新與刪除數據)、索引、存儲過程和函數、視圖、觸發器、用戶管理、數據備份與還原、日誌以及性能優化。
後通過3個綜合案例的資料庫設計,進一步講述MySQL在實際工作中的應用。重點介紹MySQL安裝與配置、數據類型和運算符以及數據表的操作。本書注重實戰操作,幫助讀者循序漸進地掌握MySQL中的各項技術。
本書共有480個實例和19個綜合案例,還有大量的經典習題。隨書贈送了近20小時培訓班形式的視頻教學錄像,詳細講解了書中每一個知識點和每一個資料庫操作的方法和技巧。同時光碟中還提供了本書所有例子的源代碼,讀者可以直接查看和調用。 本書適合MySQL資料庫初學者、MySQL資料庫開發人員和MySQL資料庫管理員
8、《深入理解Java虛擬機:JVM高級特性與最佳實踐》
本書適合所有Java程序員、系統調優師和系統架構師閱讀。共分為五大部分,圍繞內存管理、執行子系統、程序編譯與優化、高效並發等核心主題對JVM進行了全面而深入的分析,深刻揭示了JVM的工作原理。
第一部分從宏觀的角度介紹了整個Java技術體系、Java和JVM的發展歷程、模塊化,以及JDK的編譯,這對理解本書後面內容有重要幫助。
第二部分講解了JVM的自動內存管理,包括虛擬機內存區域的劃分原理以及各種內存溢出異常產生的原因;常見的垃圾收集演算法以及垃圾收集器的特點和工作原理;常見虛擬機監控與故障處理工具的原理和使用方法。
第三部分分析了虛擬機的執行子系統,包括類文件結構、虛擬機類載入機制、虛擬機位元組碼執行引擎。
第四部分講解了程序的編譯與代碼的優化,闡述了泛型、自動裝箱拆箱、條件編譯等語法糖的原理;講解了虛擬機的熱點探測方法、HotSpot的即時編譯器、編譯觸發條件,以及如何從虛擬機外部觀察和分析JIT編譯的數據和結果。
第五部分探討了Java實現高效並發的原理,包括JVM內存模型的結構和操作;原子性、可見性和有序性在Java內存模型中的體現;先行發生原則的規則和使用;線程在Java語言中的實現原理;虛擬機實現高效並發所做的一系列鎖優化措施。
9、《Redis 深度歷險:核心原理與應用實踐》
· Redis 是互聯網技術架構在存儲系統中使用得最為廣泛的中間件,也是中高級後端工程師技術面試中面試官最喜歡問的工程技能之一,特別是那些優秀的互聯網公司,通常要求面試者不僅僅掌握 Redis 基礎用法,還要理解 Redis 內部實現的細節原理。
· 《Redis 深度歷險:核心原理與應用實踐》作者老錢在使用 Redis 上積累了豐富的實戰經驗,希望幫助更多後端開發者更快、更深入地掌握 Redis 技能。
· 《Redis 深度歷險:核心原理與應用實踐》分為基礎和應用篇、原理篇、集群篇、拓展篇、源碼篇共 5 大塊內容。基礎和應用篇講解對讀者來說最有價值的內容,可以直接應用到實際工作中;原理篇、集群篇讓開發者透過簡單的技術表面看到精緻的底層世界;拓展篇幫助讀者拓展技術視野和夯實基礎,便於進階學習;源碼篇讓高階的讀者能夠讀懂源碼,掌握核心技術實力。
· 《Redis 深度歷險:核心原理與應用實踐》適合以下人群閱讀:有 Redis 基礎,渴望深度掌握 Redis 技術原理的中高級後端開發者;渴望成功進入大型互聯網企業研發部的中高級後端開發者;需要支撐公司 Redis 中間件運維工作的初中級運維工程師;對 Redis 中間件技術好奇的中高級前端技術研究者。
10、Spring Cloud微服務實戰
《Spring Cloud微服務架構實戰》以Spring Cloud為基礎,深入講解微服務開發的相關框架,包括服務管理框架Eureka、負載均衡框架Ribbon、服務客戶端Feign、容錯框架Hystrix、消息框架Stream等。除了介紹這些微服務相關的框架外,在本書的第11章,還介紹了如何使用Spring Data框架操作各個主流資料庫(MySQL、MongoDB、Redis)。在第12章,以一個案例為基礎結束本書內容,在該章中講解了模板引擎Thymeleaf,整本書將會為大家提供一整套微服務應用開發的解決方案。
11、《深入淺出Spring Boot2.x》《springboot實戰實踐》
深入淺出Spring Boot2.x:Spring框架是Java EE開發的事實標准,而Spring Boot是業界最流行的微服務開發框架。本書從一個最簡單的工程開始講解Spring Boot企業級開發,其內容包含全註解下的Spring IoC和AOP、資料庫編程、資料庫事務、NoSQL技術、Spring MVC、Spring 5新一代響應式框架WebFlux、REST風格和Spring Cloud分布式開發等。
springboot實戰實踐:本書是Spring Boot領域的經典著作,從技術、實踐和原理3個維度對Spring Boot進行了系統且深入的講解。作者是SpringBoot領域的資深專家,有超過15年的IT行業Boot領域的資深專家,有超過15年的IT行業。
12、Nginx實戰:基於Lua語言的配置、開發與架構詳解
講解了Nginx 在反向代理和應用開發中的作用,閱讀本書可以了解Nginx 在互聯網開發中扮演的多個角色,充分利用這些角色的各項功能有助於提升服務的整體性能。本書所介紹的大部分功能是通過Nginx Lua 進行開發和配置的,但並不要求讀者精通Lua,在必要的位置,本書會對Lua 進行選擇性講解。涉及實戰的內容會有配套源碼,方便讀者學習和使用。
本書適合廣大運維人員和開發人員學習,對使用Nginx 完成各種服務架構感興趣的架構師也可以閱讀本書。閱讀本書需要有對Nginx 的初級或中級配置經驗。
我目前是在職Java開發,如果你現在正在學習Java,了解Java,渴望成為一名合格的Java開發工程師,在入門學習Java的過程當中缺乏基礎入門的視頻教程,都可以相互交流學習,可以加我的技術討論自學資料qun:前面是926:中間是452:最後是303
知識體系整理好(源碼,筆記,pdf教程,學習視頻)免費領取
13、spring技術內幕-解析架構原理
spring技術內幕:深入解析spring架構與計原理(第2版)》是國內唯一一本系統分析spring源代碼的著作,也是spring領域的問鼎之作,由業界擁有10餘年開發經驗的資深java專家親自執筆,java開發者社區和spring開發者社區聯袂推薦。
本書第1版不僅在內容上獲得了讀者的廣泛好評,而且在銷量上也摘取了同類書的桂冠,曾經一度掀起java類圖書的銷售熱潮。第2版不僅繼承了第1版在內容組織和寫作方式上的優點,而且還根據廣大讀者的反饋改進了若干細節上的不足。更為重要的是,結合spring的最新版本對過時的內容進行了更新,並增加了大量新內容,使本書更趨近於完美。
《spring技術內幕:深入解析spring架構與計原理(第2版)》從源代碼的角度對spring的內核和各個主要功能模塊的架構、設計和實現原理進行了深入剖析。你不僅能從本書中參透spring框架的優秀架構和設計思想,還能從spring優雅的實現源碼中一窺java語言的精髓。
本書在開篇之前對spring的設計理念和整體架構進行了全面的介紹,能讓讀者從宏觀上釐清spring各個功能模塊之間的關系;
第一部分詳細分析了spring的核心:ioc容器和aop的實現,能幫助讀者了解spring的運行機制;
第二部分深入闡述了各種基於ioc容器和aop的java ee組件在spring中的實現原理;
第三部分講述了acegi安全框架、dm模塊以及flex模塊等基於spring的典型應用的設計與實現。
無論你是java程序員、spring開發者,還是平台開發人員、系統架構師,抑或是對開源軟體源代碼著迷的代碼狂人,都能從本書中受益。
4. 《自製編譯器》pdf下載在線閱讀,求百度網盤雲資源
《自製編譯器》[日]青木峰郎電子書網盤下載免費在線閱讀
鏈接: https://pan..com/s/1fOP78HCfHLZHKwnx5PoAUw
書名:自製編譯器
作者名:[日]青木峰郎
豆瓣評分:7.7
出版社:人民郵電出版社
出版年份:2016-6
頁數:472
內容介紹:
本書將帶領讀者從頭開始製作一門語言的編譯器。筆者特意為本書設計了CЬ語言,CЬ可以說是C語言的子集,實現了包括指針運算等在內的C語言的主要部分。本書所實現的編譯器就是C Ь語言的編譯器, 是實實在在的編譯器,而非有諸多限制的玩具。另外,除編譯器之外,本書對以編譯器為中心的編程語言的運行環境,即編譯器、匯編器、鏈接器、硬體、運行時環境等都有所提及,介紹了程序運行的所有環節。
作者介紹:
程序員,著有《Ruby程序設計268技(第2版)》《Ruby源代碼完全解說》《Linux程序設計》等多部編程相關著作。並積極參與標准庫維護、文檔維護等各種各樣的活動。
5. 有沒有比龍書通俗易懂的編譯原理書籍
大學課程為什麼要開設編譯原理呢?這門課程關注的是編譯器方面的產生原理和技術問題,似乎和計算機的基礎領域不沾邊,可是編譯原理卻一直作為大學本科的必修課程,同時也成為了研究生入學考試的必考內容。編譯原理及技術從本質上來講就是一個演算法問題而已,當然由於這個問題十分復雜,其解決演算法也相對復雜。我們學的數據結構與演算法分析也是講演算法的,不過講的基礎演算法,換句話說講的是演算法導論,而編譯原理這門課程講的就是比較專註解決一種的演算法了。在20世紀50年代,編譯器的編寫一直被認為是十分困難的事情,第一Fortran的編譯器據說花了18年的時間才完成。在人們嘗試編寫編譯器的同時,誕生了許多跟編譯相關的理論和技術,而這些理論和技術比一個實際的編譯器本身價值更大。就猶如數學家們在解決著名的哥德巴赫猜想一樣,雖然沒有最終解決問題,但是其間誕生不少名著的相關數論。
推薦參考書
雖然編譯理論發展到今天,已經有了比較成熟的部分,但是作為一個大學生來說,要自己寫出一個像TurbocC,Java那樣的編譯器來說還是太難了。不僅寫編譯器困難,學習編譯原理這門課程也比較困難。
第一本書的原名叫《CompilersPrinciples,Techniques,andTools》,另外一個響亮的名字就是龍書。原因是這本書的封面上有條紅色的龍,也因為獗臼樵詒嘁朐?砘?嘴域確實?忻?所以很多國外的學者都直接取名為龍書。最近機械工業出版社已經出版了此書的中文版,名字就叫《編譯原理》。該書出的比較早,大概是在85或86年編寫完成的,作者之一還是著名的貝爾實驗室的科學家。裡面講解的核心編譯原理至今都沒有變過,所以一直到今天,它的價值都非凡。這本書最大的特點就是一開始就通過一個實際的小例子,把編譯原理的大致內容羅列出來,讓很多編譯原理的初學者很快心裡有了個底,也知道為什麼會有這些理論,怎麼運用這些理論。而這一點是我感覺國內的教材缺乏的東西,所以國內的教材都不是寫給願意自學的讀者,總之讓人看了半天,卻不知道裡面的東西有什麼用。
第二本書的原名叫《ModernCompilerDesign》,中文名字叫做《現代編譯程序設計》。該書由人民郵電出版社所出。此書比較關注的是編譯原理的實踐,書中給出了不少的實際程序代碼,還有很多實際的編譯技術問題等等。此書另外一個特點就是其現代而字。在傳統的編譯原理教材中,你是不可能看到如同Java中的垃圾回收等演算法的。因為Java這樣的解釋執行語言是在近幾年才流行起來的東西。如果你想深入學習編譯原理的理論知識,那麼你肯定得看前面那本龍書,如果你想自己動手做一個先進的編譯器,那麼你得看這本《現代編譯程序設計》。
第三本書就是很多國內的編譯原理學者都推薦的那本《編譯原理及實踐》。或許是這本書引入國內比較早吧,我記得我是在高中就買了這本書,不過也是在前段時間才把整本書看完。此書作為入門教程也的確是個不錯的選擇。書中給出的編譯原理講解也相當細致,雖然不如前面的龍書那麼深入,但是很多地方都是點到為止,作為大學本科教學已經是十分深入了。該書的特點就是注重實踐,不過感覺還不如前面那本《現代編譯程序設計》的實踐味道更重。此書的重點還是在原理上的實踐,而非前面那本那樣的技術實踐。《編譯原理及實踐》在講解編譯原理的各個部分的同時,也在逐步實踐一個現代的編譯器TinyC.等你把整本書看完,差不多自己也可以寫一個TinyC了。作者還對Lex和Yacc這兩個常用的編譯相關的工具進行了很詳細的說明,這一點也是很難在國內的教材中看到的。
推薦了這三本教材,都有英文版和中文版的。很多英文好的同學只喜歡看原版的書,不我的感覺是這三本書的翻譯都很不錯,沒有必要特別去買英文版的。理解理論的實質比理解表面的文字更為重要。
編譯原理的實質
幾乎每本編譯原理的教材都是分成詞法分析,語法分析(LL演算法,遞歸下降演算法,LR演算法),語義分析,運行時環境,中間代碼,代碼生成,代碼優化這些部分。其實現在很多編譯原理的教材都是按照85,86出版的那本龍書來安排教學內容的,所以那本龍書的內容格式幾乎成了現在編譯原理教材的定式,包括國內的教材也是如此。一般來說,大學裡面的本科教學是不可能把上面的所有部分都認真講完的,而是比較偏重於前面幾個部分。像代碼優化那部分東西,就像個無底洞一樣,如果要認真講,就是單獨開一個學期的課也不可能講得清楚。所以,一般對於本科生,對詞法分析和語法分析掌握要求就相對要高一點了。
詞法分析相對來說比較簡單。可能是詞法分析程序本身實現起來很簡單吧,很多沒有學過編譯原理的人也同樣可以寫出各種各樣的詞法分析程序。不過編譯原理在講解詞法分析的時候,重點把正則表達式和自動機原理加了進來,然後以一種十分標準的方式來講解詞法分析程序的產生。這樣的做法道理很明顯,就是要讓詞法分析從程序上升到理論的地步。
語法分析部分就比較麻煩一點了。現在一般有兩種語法分析演算法,LL自頂向下演算法和LR自底向上演算法。LL演算法還好說,到了LR演算法的時候,困難就來了。很多自學編譯原理的都是遇到LR演算法的理解成問題後就放棄了自學。其實這些東西都是只要大家理解就可以了,又不是像詞法分析那樣非得自己寫出來才算真正的會。像LR演算法的語法分析器,一般都是用工具Yacc來生成,實踐中完全沒有比較自己來實現。對於LL演算法中特殊的遞歸下降演算法,因為其實踐十分簡單,那麼就應該要求每個學生都能自己寫。當然,現在也有不少好的LL演算法的語法分析器,不過要是換在非C平台,比如Java,Delphi,你不能運用YACC工具了,那麼你就只有自己來寫語法分析器。
等學到詞法分析和語法分析時候,你可能會出現這樣的疑問:詞法分析和語法分析到底有什麼?就從編譯器的角度來講,編譯器需要把程序員寫的源程序轉換成一種方便處理的數據結構(抽象語法樹或語法樹),那麼這個轉換的過程就是通過詞法分析和語法分析的。其實詞法分析並非一開始就被列入編譯器的必備部分,只是我們為了簡化語法分析的過程,就把詞法分析這種繁瑣的工作單獨提取出來,就成了現在的詞法分析部分。除了編譯器部分,在其它地方,詞法分析和語法分析也是有用的。比如我們在DOS,Unix,Linux下輸入命令的時候,程序如何分析你輸入的命令形式,這也是簡單的應用。總之,這兩部分的工作就是把不規則的文本信息轉換成一種比較好分析好處理的數據結構。那麼為什麼編譯原理的教程都最終把要分析的源分析轉換成樹這種數據結構呢?數據結構中有Stack,Line,List這么多數據結構,各自都有各自的特點。但是Tree這種結構有很強的遞歸性,也就是說我們可以把Tree的任何結點Node提取出來後,它依舊是一顆完整的Tree。這一點符合我們現在編譯原理分析的形式語言,比如我們在函數裡面使用函樹,循環中使用循環,條件中使用條件等等,那麼就可以很直觀地表示在Tree這種數據結構上。同樣,我們在執行形式語言的程序的時候也是如此的遞歸性。在編譯原理後面的代碼生成的部分,就會介紹一種堆棧式的中間代碼,我們可以根據分析出來的抽象語法樹,很容易,很機械地運用遞歸遍歷抽象語法樹就可以生成這種指令代碼。而這種代碼其實也被廣泛運用在其它的解釋型語言中。像現在流行的Java,.NET,其底層的位元組碼bytecode,可以說就是這中基於堆棧的指令代碼的。
關於語義分析,語法制導翻譯,類型檢查等等部分,其實都是一種完善前面得到的抽象語法樹的過程。比如說,我們寫C語言程序的時候,都知道,如果把一個浮點數直接賦值給一個整數,就會出現類型不匹配,那麼C語言的編譯器是怎麼知道的呢?就是通過這一步的類型檢查。像C++語言這中支持多態函數的語言,這部分要處理的問題就更多更復雜了。大部編譯原理的教材在這部分都是講解一些比較好的處理策略而已。因為新的問題總是在發生,舊的辦法不見得足夠解決。
本來說,作為一個編譯器,起作用的部分就是用戶輸入的源程序到最終的代碼生成。但是在講解最終代碼生成的時候,又不得不講解機器運行環境等內容。因為如果你不知道機器是怎麼執行最終代碼的,那麼你當然無法知道如何生成合適的最終代碼。這部分內容我自我感覺其意義甚至超過了編譯原理本身。因為它會把一個計算機的程序的運行過程都通通排在你面前,你將來可能不會從事編譯器的開發工作,但是只要是和計算機軟體開發相關的領域,都會涉及到程序的執行過程。運行時環境的講解會讓你更清楚一個計算機程序是怎麼存儲,怎麼裝載,怎麼執行的。關於部分的內容,我強烈建議大家看看龍書上的講解,作者從最基本的存儲組織,存儲分配策略,非局部名字的訪問,參數傳遞,符號表到動態存儲分配(malloc,new)都作了十分詳細的說明。這些東西都是我們編寫平常程序的時候經常要做的事情,但是我們卻少去探求其內部是如何完成。
關於中間代碼生成,代碼生成,代碼優化部分的內容就實在不好說了。國內很多教材到了這部分都會很簡單地走馬觀花講過去,學生聽了也只是作為了解,不知道如何運用。不過這部分內容的東西如果要認真講,單獨開一學期的課程都講不完。在《編譯原理及實踐》的書上,對於這部分的講解就恰到好處。作者主要講解的還是一種以堆棧為基礎的指令代碼,十分通俗易懂,讓人看了後,很容易模仿,自己下來後就可以寫自己的代碼生成。當然,對於其它代碼生成技術,代碼優化技術的講解就十分簡單了。如果要仔細研究代碼生成技術,其實另外還有本叫做《》,那本書現在由機械工業出版社引進的,十分厚重,而且是英文原版。不過這本書我沒有把它列為推薦書給大家,畢竟能把龍書的內容搞清楚,在中國已經就算很不錯的高手了,到那個時候再看這本《》也不遲。代碼優化部分在大學本科教學中還是一個不太重要的部分,就是算是實踐過程中,相信大家也不太運用得到。畢竟,自己做的編譯器能正確生成執行代碼已經很不錯了,還談什麼優化呢?
編譯原理的課程畢竟還只是講解原理的課程,不是專門的編譯技術課程。這兩門課程是有很大的區別的。編譯技術更關注實際的編寫編譯器過程中運用到的技術,而原理的課
6. 請問學x86匯編語言用什麼編譯器
編譯器自舉!搜索這個關鍵字
程序都是編譯器編譯的。這個是肯定的
至於第一款X語言編譯器是不是直接1010101010自己寫的那就不知道啦
一般開發編譯器的話。有兩條路選擇
1.利用yacc(或者其變種)&lex(詞法分析)-等工具自己生成語法模板
詞法語法都可以使用這些工具自己生成
然後自己編寫生成的中間碼和生成的機器碼就可以了
一般做編譯原理類似試驗都是如此的。許多編譯器也的確是這樣
2.自己寫詞法分析和語法分析。可以參考一些開源的編譯器
lcc-這個是ANSI C99標準的編譯器是開源的
或者nasm,watcom等編譯器到上不少開源的編譯器
總的來說。高級語言編譯器比較難寫
如果想快速寫出一個的話
可以採用第一種做法。利用工具生成語法詞法模板
先寫一個簡單的匯編編譯器比較簡單
開源的有nasm,jwasm(支持masm語法開源的編譯器)
fasm(這款編譯器是自舉的.就是自己可以編譯自己),
剩下的就是自己做好語言規則關鍵字map
引用高手的話。語言map做好了你的編譯器也做好一半了
剩下的都是機械性的工作了。
生成x86或者arm指令。
優化工作這個很難解釋.根據你所需要的做吧
畢竟可以做出一個無錯,又XX的編譯器已經很難得
你可以選擇使用現有的編譯器開發自己的編譯器
然後等到你的編譯器支持相當數量指令和成熟度的時候
使用自己的語法重新寫一遍編譯器.
這樣你就可以用自己的編譯器開發自己的編譯器了(是不是很邪惡?)
另外舉幾個例子
Delphi的編譯器是C++ Builder開發的。
而C++ Builder的IDE是Delphi開發的
C++ Builder的編譯器是C++ Builder開發的-這個就是編譯器自舉了。。Delphi和C++ Builder共享一個後端化優化器。
Delphi 早期的版本的編譯器是tasm直接編譯的。可見Anders的匯編功力多強悍(Anders也就是後來VJ++,C#,.NET工程的核心架構師.最關鍵的靈魂級人物)
VC++的編譯器是VC++開發的。很明顯這都說明了編譯器自舉
自己開發自己。如果一個編譯器可以做到自己編譯自己。那基本上就可以實現任何功能了。
關於編譯器開發的書籍可以看一下
龍書《編譯原理(第二版)》
虎書《現代編譯原理-C語言描述》
鯨書《高級編譯器設計與實現》
建議從鯨書看起。然後是龍書
再來是虎書--虎書裡面描述了許多現代編譯器(正如其名)技術
例如面向對象啦,優化,垃圾回收等等.
鯨書看完基本上就可以實現一個簡單的Tiny C編譯器了
然後在龍書鞏固,讀一下語言規范,自己看一些開源的匯編編譯器代碼
自己就可以嘗試做一個匯編語言編譯器了.等到技術提高了
在嘗試做一些高級語法識別,參考LCC代碼做一下ANSI C99的
C語言編譯器。再來就看你自己的興趣和領悟度拉
如果想支持C++的話就得要對編譯器做許多方便的研究
類似Java那種跨平台或者Ruby,Python等動態語言
虎書中也有描述。當然看自己功力了