一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

程序員升級指南之編程語言

 zhuxrgf 2020-12-20

為了進入專業(yè)的編程領域,我們需要認真學習以下三方面的知識。

編程語言。你需要學習 C、C++ 和 Java 這三個工業(yè)級的編程語言。為什么說它們是工業(yè)級的呢?主要是,C 和 C++ 語言規(guī)范都由 ISO 標準化過,而且都有工業(yè)界廠商組成的標準化委員會來制定工業(yè)標準。次要原因是,它們已經(jīng)在業(yè)界應用于許多重要的生產(chǎn)環(huán)境中。

  • C 語言不用多說,現(xiàn)今這個世界上幾乎所有重要的軟件都跟 C 有直接和間接的關系,操作系統(tǒng)、網(wǎng)絡、硬件驅(qū)動等等。說得霸氣一點兒,這個世界就是在 C 語言之上運行的。
  • 而對于 C++ 來說,現(xiàn)在主流的瀏覽器、數(shù)據(jù)庫、Microsoft Office、主流的圖形界面、著名的游戲引擎等都是用 C++ 編寫的。而且,很多公司都用 C++ 開發(fā)核心架構(gòu),如 Google、騰訊、百度、阿里云等。
  • 而金融電商公司則廣泛地使用 Java 語言,因為 Java 的好處太多了,代碼穩(wěn)定性超過 C 和 C++,生產(chǎn)力遠超 C 和 C++。有 JVM 在,可以輕松地跨平臺,做代碼優(yōu)化,做 AOP 和 IoC 這樣的高級技術。以 Spring 為首的由龐大的社區(qū)開發(fā)的高質(zhì)量的各種輪子讓你只需關注業(yè)務,是能夠快速搭建企業(yè)級應用的不二之選。

此外,我推薦學習 Go 語言。一方面,Go 語言現(xiàn)在很受關注,它是取代 C 和 C++ 的另一門有潛力的語言。C 語言太原始了,C++ 太復雜了,Java 太高級了,所以 Go 語言就在這個夾縫中出現(xiàn)了。這門語言已經(jīng) 10 多年了,其已成為云計算領域事實上的標準語言,尤其是在 Docker/Kubernetes 等項目中。Go 語言社區(qū)正在不斷地從 Java 社區(qū)移植各種 Java 的輪子過來,Go 社區(qū)現(xiàn)在也很不錯。

如果你要寫一些 PaaS 層的應用,Go 語言會比 C 和 C++ 更好,目前和 Java 有一拼。而且,Go 語言在國內(nèi)外一些知名公司中有了一定的應用和實踐,所以,是可以學習的(參看:《Go 語言、Docker 和新技術》一文)。此外,Go 語言語法特別簡單,你有了 C 和 C++ 的基礎,學習 Go 的學習成本基本為零。

理論學科。你需要學習像算法、數(shù)據(jù)結(jié)構(gòu)、網(wǎng)絡模型、計算機原理等計算機科學專業(yè)需要學習的知識。為什么要學好這些理論上的知識呢?

  • 其一,這些理論知識可以說是計算機科學這門學科最精華的知識了。說得大一點,這些是人類智慧的精華。你只要想成為高手,這些東西是你必需要掌握和學習的。
  • 其二,當你在解決一些很復雜或是很難的問題時,這些基礎理論知識可以幫到你很多。我過去這 20 年從這些基礎理論知識中受益匪淺。
  • 其三,這些理論知識的思維方式可以讓你有觸類旁通,一通百通的感覺。雖然知識比較難啃,但啃過以后,你將獲益終生。

另外,你千萬不要覺得在你的日常工作或是生活當中根本用不上,學了也白學,這樣的思維方式千萬不要有,因為這是平庸的思維方式。如果你想等我用到了再學也不晚,那么你有必要看一下這篇文章《程序員的荒謬之言還是至理名言?》。

系統(tǒng)知識。系統(tǒng)知識是理論知識的工程實踐,這里面有很多很多的細節(jié)。比如像 Unix/Linux、TCP/IP、C10K 挑戰(zhàn)等這樣專業(yè)的系統(tǒng)知識。這些知識是你能不能把理論應用到實際項目當中,能不能搞定實際問題的重要知識。

當你在編程的時候,如何和系統(tǒng)進行交互或是獲取操作系統(tǒng)的資源,如何進行通訊,當系統(tǒng)出了性能問題,當系統(tǒng)出了故障等,你有大量需要落地的事需要處理和解決。這個時候,這些系統(tǒng)知識就會變得尤為關鍵和重要了。

這些東西,你可以認為是計算機世界的物理世界,上層無論怎么玩,無論是 Java NIO,還是 Nginx,還是 Node.js,它們都逃脫不掉最下層的限制。所以,你要好好學習這方面的知識。

編程語言

Java 語言

學習 Java 語言有以下入門級的書(注意:下面一些書在入門篇中有所提及,但為了完整性,還是要在這里提一下,因為可能有朋友是跳著看的)。

  • 《Java 核心技術:卷 1 基礎知識》,這本書本來是 Sun 公司的官方用書,是一本 Java 的入門參考書。對于 Java 初學者來說,是一本非常不錯的值得時常翻閱的技術手冊。書中有較多地方進行 Java 與 C++ 的比較,因為當時 Java 面世的時候,又被叫作 "C++ Killer"。而我在看這本書的時候,發(fā)現(xiàn)書中有很多 C++ 的東西,于是又去學習了 C++。學習 C++ 的時候,發(fā)現(xiàn)有很多 C 的東西不懂,又順著去學習了 C。然后,C -> C++ -> Java 整條線融匯貫通,這對我未來的技術成長有非常大的幫助。
  • 有了上述的入門后,Java 的 Spring 框架是你玩 Java 所無法回避的東西,所以接下來是兩本 Spring 相關的書,《Spring 實戰(zhàn)》和《Spring Boot 實戰(zhàn)》。前者是傳統(tǒng)的 Spring,后者是新式的微服務的 Spring。如果你只想看一本的話,那么就看后者吧。

認真學習前面的書可以讓你成功入門 Java,但想要進一步成長,就要看下面我推薦的幾本提升級的書。

  • 接下來,你需要了解了一下如何編寫高效的代碼,于是必需看一下《Effective Java》(注意,這里我給的引用是第三版的,也是 2017 年末出版的書),這本書是模仿 Scott Meyers 的經(jīng)典圖書《Effective C++》的。Effective 這種書基本上都是各種經(jīng)驗之談,所以,這是一本非常不錯的書,你一定要讀。
  • 《Java 并發(fā)編程實戰(zhàn)》,是一本完美的 Java 并發(fā)參考手冊。書中從并發(fā)性和線程安全性的基本概念出發(fā),介紹了如何使用類庫提供的基本并發(fā)構(gòu)建塊,用于避免并發(fā)危險、構(gòu)造線程安全的類及驗證線程安全的規(guī)則,如何將小的線程安全類組合成更大的線程安全類,如何利用線程來提高并發(fā)應用程序的吞吐量,如何識別可并行執(zhí)行的任務,如何提高單線程子系統(tǒng)的響應性,如何確保并發(fā)程序執(zhí)行預期任務,如何提高并發(fā)代碼的性能和可伸縮性等內(nèi)容。最后介紹了一些高級主題,如顯式鎖、原子變量、非阻塞算法以及如何開發(fā)自定義的同步工具類。
  • 了解如何編寫出并發(fā)的程序,你還需要了解一下如何優(yōu)化 Java 的性能。我推薦《Java 性能權威指南》。通過學習這本書,你可以比較大程度地提升性能測試的效果。其中包括:使用 JDK 中自帶的工具收集 Java 應用的性能數(shù)據(jù),理解 JIT 編譯器的優(yōu)缺點,調(diào)優(yōu) JVM 垃圾收集器以減少對程序的影響,學習管理堆內(nèi)存和 JVM 原生內(nèi)存的方法,了解如何最大程度地優(yōu)化 Java 線程及同步的性能,等等。看完這本書后,如果你還有余力,想了解更多的底層細節(jié),那么,你有必要去讀一下《深入理解 Java 虛擬機》。
  • 《Java 編程思想》,真是一本透著編程思想的書。上面的書讓你從微觀角度了解 Java,而這本書則可以讓你從一個宏觀角度了解 Java。這本書和 Java 核心技術的厚度差不多,但這本書的信息密度比較大。所以,讀起來是非常耗大腦的,因為它會讓你不斷地思考。對于想學好 Java 的程序員來說,這是一本必讀的書。
  • 《精通 Spring 4.x》,也是一本很不錯的書,就是有點厚,一共有 800 多頁,都是干貨。我認為其中最不錯的是在分析原理,尤其是針對前面提到的 Spring 技術,應用與原理都講得很透徹,IOC 和 AOP 也分析得很棒,娓娓道來。其對任何一個技術都分析得很細致和全面,不足之處就是內(nèi)容太多了,所以導致很厚,但這并不影響它是一本不錯的工具書。

當然,學 Java 你一定要學面向?qū)ο蟮脑O計模式,這里就只有一本經(jīng)典的書《設計模式》。如果你覺得有點兒難度了,那么可以看一下《Head First 設計模式》。學習面向?qū)ο蟮脑O計模式時,你不要迷失在那 23 個設計模式中,你一定要明白這兩個原則:

  • Program to an 'interface', not an 'implementation'
  • 使用者不需要知道數(shù)據(jù)類型、結(jié)構(gòu)、算法的細節(jié)。
  • 使用者不需要知道實現(xiàn)細節(jié),只需要知道提供的接口。
  • 利于抽象、封裝,動態(tài)綁定,多態(tài)。符合面向?qū)ο蟮奶刭|(zhì)和理念。
  • Favor 'object composition' over 'class inheritance'
  • 繼承需要給子類暴露一些父類的設計和實現(xiàn)細節(jié)。
  • 父類實現(xiàn)的改變會造成子類也需要改變。
  • 我們以為繼承主要是為了代碼重用,但實際上在子類中需要重新實現(xiàn)很多父類的方法。
  • 繼承更多的應該是為了多態(tài)。

至此,如果你把上面的這些知識都融匯貫通的話,那么,你已是一個高級的 Java 程序員了,我保證你已經(jīng)超過了絕大多數(shù)程序員了。基本上來說,你在技術方面是可以進入到一線公司的,而且還不是一般的崗位,至少是高級程序員或是初級架構(gòu)師的級別了。

C/C++ 語言

不像我出道那個時候,幾乎所有的軟件都要用 C 語言來寫?,F(xiàn)在,可能不會有多少人學習 C 語言了,因為一方面有 Java、Python 這樣的高級語言為你屏蔽了很多的底層細節(jié),另一方面也有像 Go 語言這樣的新興語言可以讓你更容易地寫出來也是高性能的軟件。但是,我還是想說,C 語言是你必須學習的語言,因為這個世界上絕大多數(shù)編程語言都是 C-like 的語言,也是在不同的方面來解決 C 語言的各種問題。這里,我想放個比較武斷話——如果你不學 C 語言,你根本沒有資格說你是一個合格的程序員!

  • 這里尤其推薦,已故的 C 語言之父 Dennis M. Ritchie 和著名科學家 Brian W. Kernighan 合作的圣經(jīng)級的教科書《C 程序設計語言》。注意,這本書是 C 語言原作者寫的,其 C 語言的標準不是我們平時常說的 ANSI 標準,而是原作者的標準,又被叫作 K&R C。但是這本書很輕薄,也簡潔,不枯燥,是一本你可以拿著躺在床上看還不會看著看著睡著的書。
  • 然后,還有一本非常經(jīng)典的 C 語言的書《C 語言程序設計現(xiàn)代方法》。有人說,這本書配合之前的 The C Programming Language 那本書簡真是無敵。我想說,這本書更實用,也夠厚,完整覆蓋了 C99 標準,習題的質(zhì)量和水準也比較高。更好的是,探討了現(xiàn)代編譯器的實現(xiàn),以及和 C++ 的兼容,還揭穿了各種古老的 C 語言的神話和信條……是相當相當干的一本學習 C 語言的書。

對了,千萬不要看譚浩強的 C 語言的書。各種誤導,我大學時就是用這本書學的 C,后來工作時被坑得不行。

在學習 C 語言的過程中,你一定會感到,C 語言這么底層,而且代碼經(jīng)常性地崩潰,經(jīng)過一段時間的掙扎,你才開始覺得你從這個爛泥坑里快要爬出來了。但你還需要看看《C 陷阱與缺陷》這本書,你會發(fā)現(xiàn),這里面的坑不是一般大。

此時,如果你看過我的《編程范式游記》那個系列文章,你可能會發(fā)現(xiàn) C 語言在泛型編程上的各種問題,這個時候我推薦你學習一下 C++ 語言??赡軙泻芏嗳擞X得我說的 C++ 是個大坑。是的,這是世界目前來說最復雜也是最難的編程語言了。但是,C++ 是目前世界上范式最多的語言了,其做得最好的范式就是 " 泛型編程 ",這在靜態(tài)語言中,是絕對地劃時代的一個事。

所以,你有必要學習一下 C++,看看 C++ 是如何解決 C 語言中的各種問題的。你可以先看看我的這篇文章 "C++ 的坑真的多嗎?" ,有個基本認識。下面推薦幾本 C++ 的書。

  • 《C++ Primer 中文版》,這本書是久負盛名的 C++ 經(jīng)典教程。書是有點厚,前面 1/3 講 C 語言,后面講 C++。C++ 的知識點實在是太多了,而且又有點晦澀。但是你主要就看幾個點,一個是面向?qū)ο蟮亩鄳B(tài),一個是模板和重載操作符,以及一些 STL 的東西??纯?C++ 是怎么玩泛型和函數(shù)式編程的。
  • 如果你想繼續(xù)研究,你需要看另外兩本更為經(jīng)典的書《Effective C++》和《More Effective C++》。 這兩本書不厚,但是我讀了 10 多年,每過一段時間再讀一下,就會發(fā)現(xiàn)有更多的收獲。這兩本書的內(nèi)容會隨著你經(jīng)歷的豐富而變得豐富,這也是對我影響最大的兩本書,其中影響最大的不是書中的那些 C++ 的東西,而是作者的思維方式和不斷求真的精神,這真是太贊了。
  • 學習 C/C++ 都是需要好好了解一下編譯器到底干了什么事的。就像 Java 需要了解 JVM 一樣,所以,這里還有一本非常非常難啃的書你可以挑戰(zhàn)一下《深度探索 C++ 對象模型 》。這本書是非常之經(jīng)典的,看完后,C++ 對你來說就再也沒有什么秘密可言。我以前寫過的《C++ 虛函數(shù)表解析》,還有《C++ 對象內(nèi)存布局》屬于這個范疇。
  • 還有 C++ 的作者 Bjarne Stroustrup 寫的 C++ FAQ (中文版),也是非常值得一讀的。

學習 Go 語言

C 語言太原始了,C++ 太復雜了,Go 語言是不二之選。有了 C/C++ 的功底,學習 Go 語言非常簡單。

首推 Go by Example 作為你的入門教程。然后,Go 101 也是一個很不錯的在線電子書。如果你想看紙書的話,The Go Programming Language 一書在豆瓣上有 9.2 分,但是國內(nèi)沒有賣的。(當然,我以前也寫過兩篇入門的供你參考 "GO 語言簡介(上)- 語法" 和 "GO 語言簡介(下)- 特性")。

另外,Go 語言官方的 Effective Go 是必讀的,這篇文章告訴你如何更好地使用 Go 語言,以及 Go 語言中的一些原理。

Go 語言最突出之處是并發(fā)編程,Unix 老牌黑客羅勃·派克(Rob Pike)在 Google I/O 上的兩個分享,可以讓你學習到一些并發(fā)編程的模式。

  • Go Concurrency Patterns( 幻燈片和演講視頻)。
  • Advanced Go Concurrency Patterns(幻燈片、演講視頻)。

然后,Go 在 GitHub 的 wiki 上有好多不錯的學習資源,你可以從中學習到多。比如:

  • Go 精華文章列表。
  • Go 相關博客列表。
  • [Go Talks])(https://github.com/golang/go/wiki/GoTalks)。

此外,還有個內(nèi)容豐富的 Go 資源列表 Awesome Go,推薦看看。

小結(jié)

好了,最后我們來總結(jié)一些今天分享的內(nèi)容。在編程語言方面,我推薦學習 C、C++、Java 和 Go 四門語言,并分別闡釋了推薦的原因。

  • 我認為,C 語言是必須學習的語言,因為這個世界上絕大多數(shù)編程語言都是 C-like 的語言,也是在不同的方面來解決 C 語言的各種問題。
  • 而 C++ 雖然復雜難學,但它幾乎是目前世界上范式最多的語言了,其做得最好的范式就是 " 泛型編程 ",這在靜態(tài)語言中,是絕對地劃時代的一個事。尤其要看看 C++ 是如何解決 C 語言中的各種問題的。
  • Java 是我認為綜合能力最強的語言。其實我是先學了 Java,然后又去學了 C++,之后去學了 C 語言的。C -> C++ -> Java 整條線融匯貫通,這對我未來的技術成長有非常大的幫助。
  • 在文章最末,我推薦了 Go 語言,并給出了相關的學習資料。

我認為,一個合格的程序員應該掌握幾門語言。一方面,這會讓你對不同的語言進行比較,讓你有更多的思考。另一方面,這也是一種學習能力的培養(yǎng),會讓你對于未來的新技術學習得更快。

  • 開篇詞
  • 入門篇

零基礎啟蒙

正式入門

  • 修養(yǎng)篇

程序員修養(yǎng)

  • 專業(yè)基礎篇

編程語言

理論學科

系統(tǒng)知識

  • 軟件設計篇
  • 高手成長篇

完整內(nèi)容可以關注我后,看動態(tài)的。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲人妻av中文字幕| 日本中文字幕在线精品| 老司机精品视频在线免费| 欧美日不卡无在线一区| 国产av天堂一区二区三区粉嫩| 五月综合婷婷在线伊人| 久久黄片免费播放大全| 欧美精品一区久久精品| 欧美韩日在线观看一区| 视频在线免费观看你懂的 | 国产av天堂一区二区三区粉嫩| 欧美日韩亚洲精品在线观看| 精品精品国产欧美在线| 黄色日韩欧美在线观看| 亚洲精品国产精品日韩| 国产又大又黄又粗又免费| 亚洲日本中文字幕视频在线观看| 日韩aa一区二区三区| 翘臀少妇成人一区二区| 国产高清三级视频在线观看| 亚洲性日韩精品一区二区| 午夜免费精品视频在线看| 国产一区二区三中文字幕| 欧美美女视频在线免费看| 五月婷婷综合缴情六月| 国产视频在线一区二区| 国产人妻熟女高跟丝袜| 99热九九热这里只有精品| 午夜福利精品视频视频| 精品一区二区三区乱码中文| 草草夜色精品国产噜噜竹菊| 高清免费在线不卡视频| 国产麻豆一区二区三区在| 国产水滴盗摄一区二区| 91日韩欧美中文字幕| 欧美人妻免费一区二区三区| 国产精品午夜性色视频| 午夜福利直播在线视频| 日本一区二区三区黄色| 国产精品成人一区二区在线| 亚洲精品深夜福利视频|