最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2023年Java程序員入門進階必讀書籍書單和學(xué)習(xí)成長路線(含Java編程思想、算法導(dǎo)論

2023-06-29 15:07 作者:程序員老J  | 我要投稿


目錄

1 程序員如何讀書?
2 程序員快速成長寶典
2.1 程序員是做什么的?
2.2 企業(yè)為什么需要程序員?
2.3 程序員快速成長的方法
3 Java程序員必讀書單
3.1 初級經(jīng)典書籍(適合初學(xué)者)
3.2 中級經(jīng)典書籍(適合具有一定編程經(jīng)驗的工程師)
3.3 高級經(jīng)典書籍(適合有大型項目架構(gòu)經(jīng)驗的工程師)
4 Java開發(fā)常用資源
5 推薦學(xué)習(xí)路線
6 Java程序員成長常見問題解答

作者:打工人索隆
鏈接:https://zhuanlan.zhihu.com/p/178642132
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

程序員如何讀書?

  1. 要讀就讀經(jīng)典好書,差的書不光浪費你的金錢,更浪費你的時間。對于程序員來講,空余時間非常寶貴,要想在有限的時間內(nèi)有好的回報,選書很重要。

  2. 程序員一定要學(xué)好英語。國外的大牛工作不加班,也喜歡分享,而國內(nèi)的大?;旧隙荚诿χ影?,沒時間寫書。所以國外的文章、書籍、教程質(zhì)量要比國內(nèi)的好很多,技術(shù)也新,差不多領(lǐng)先兩到三年。所以,如果英語不錯,能閱讀第一手的英語書籍資料,在信息差上會有很大優(yōu)勢。所以,程序員一定要學(xué)好英語,不要用百度搜問題,用bing英文搜索來搜問題,有機會看一些原版英文書提升自己的英語水平。一開始會比較痛苦,看的多了,計算機術(shù)語也就那么多,比考研英語要簡單很多。

  3. 豆瓣評分是一個很重要的選書標準,8分以下的一般就不要考慮了,除非這個領(lǐng)域內(nèi)的書籍非常少。

  4. 要根據(jù)自己的基礎(chǔ)和學(xué)習(xí)能力選擇合適的書。太簡單的書會沒有提高,太難的書會看不懂,適合自己當(dāng)前階段的書才最有利于快速成長。

  5. 計算機是一門實踐科學(xué),讀書的同事也要通過編碼來積累項目經(jīng)驗。我上學(xué)的時候?qū)W習(xí)的做法是先把書看一遍,然后去做一些和書籍內(nèi)容相關(guān)的項目開發(fā),開發(fā)中會越到不懂的內(nèi)容,針對這些不懂的地方去翻書,查缺補漏。最后項目搞得差不多了,再把書重新過一遍。這樣效率會比較高,因為一開始讀書的時候不知道哪些是重要的、自己不會的,通過做項目可以讓你對書籍的重點和自己薄弱的地方有一個清晰的認識,然后再回過頭來讀書,可以有的放矢,效率會高很多。

  6. 想看的、自己當(dāng)前需要的書,不需要等優(yōu)惠活動,直接下單即可。國內(nèi)圖書20多年價格基本上沒太大變化,性價比能和火車票媲美了。所以,遇到自己喜歡的書,不要猶豫,和書的價格相比,你的時間才是最寶貴的。當(dāng)前還不怎么需要、買了暫時也看不過來的書,可以放入購物車,等雙11、雙12或者618搞活動的時候買。

  7. 學(xué)生如果缺錢,要買更便宜的書可以去多抓魚、閑魚上購買二手書,尤其是多抓魚都是消毒翻新的,價格比新書也要優(yōu)惠很多,買了看完還可以再在平臺上賣掉,看一本書的成本也就一二十塊錢。

程序員是來做什么的?

在講程序員如何成長之前,應(yīng)該先把這個問題講清楚。程序員是來做什么的?程序員工作的意義是什么?很多同學(xué)會感覺這個問題很簡單,程序員不就是來寫程序的嗎。其實這個問題很深奧。

簡單的講,程序員是通過計算機方法(一般是編程)來解決各種現(xiàn)實問題,創(chuàng)造經(jīng)濟和社會價值的。比如老馬在縣里開了個商場,感覺來錢比較慢,想去開個網(wǎng)上商場,和全國全世界的顧客交個朋友。如何在網(wǎng)上開商場,這就是個問題。程序員要做的就是通過軟件來解決這個問題。

如何解決問題呢?程序員的工作解決問題一般都分為2步:

  1. 把現(xiàn)實問題轉(zhuǎn)換為數(shù)學(xué)問題。這其實就是個數(shù)學(xué)建模的過程,針對商場可以對商業(yè)模式進行分析,把商品按照SPU、SKU進行區(qū)分,把商家和顧客分為B端和C端。這部分能力靠的是業(yè)務(wù)知識和邏輯分析能力。這部分內(nèi)容變化會比較慢,對數(shù)學(xué)要求比較高,問題分析能力決定一個程序員的上限。

  2. 通過計算機方法(一般是編程)來解決這個數(shù)學(xué)問題。商場的數(shù)學(xué)模型分析好了,就需要通過軟件系統(tǒng)來實現(xiàn)功能了。比如選用哪種框架、使用哪種語言、數(shù)據(jù)庫用什么、安全防護需要做哪些?這部分內(nèi)容會變化得比較快,隨著框架和底層技術(shù)的發(fā)展,入門門檻逐漸降低。程序員如果只是能簡單的完成這一步(CURD Boy),并且對底層原理沒有太多研究,就很容易被淘汰。

企業(yè)為什么需要程序員?

現(xiàn)在每家企業(yè)都會找一些程序員,信息化、互聯(lián)網(wǎng)化是現(xiàn)代企業(yè)的訴求。但更根本的原因是追求利潤,老板需要賺錢,有好多業(yè)務(wù)問題只有靠程序員才能解決,老板招聘程序員就是想讓程序員通過技術(shù)來解決業(yè)務(wù)問題、推動業(yè)務(wù)發(fā)展,讓老板賺更多錢。所以,對于大部分企業(yè)來講,程序員只專注于技術(shù)是不行的,要能讓技術(shù)解決業(yè)務(wù)痛點,能幫老板賺錢,才能有好的發(fā)展。Bob大叔曾經(jīng)在《架構(gòu)整潔之道》中講過,好的架構(gòu)就是能用更好的人干更多的活(我加一句,能幫老板賺更多的錢)。企業(yè)的程序員一定要記住,能幫老板賺錢是程序員在企業(yè)中最重要的價值。

程序員如何快速成長?

但萬事萬物都要講究科學(xué)方法,個人成長也不例外,對于開發(fā)者而言,索隆認為有3個方法非常重要:

  1. 站在巨人的肩膀上。

  2. 針對薄弱的地方進行刻意訓(xùn)練。

  3. 學(xué)會提問。

站在巨人的肩膀上

讀研的時候,實驗室的老師都在強調(diào)一個問題,要看頂級會議和期刊的英文文章,盡量不要看中文的文章。因為看一流的文章,好好學(xué)的話,大概率能寫出二流的文章,如果一開始就看國內(nèi)三四流水平的中文文章,那碩士畢業(yè)基本上就要成問題了。

技術(shù)精進也一樣,你每天獲取學(xué)習(xí)信息的質(zhì)量決定了你的上限。國內(nèi)知名技術(shù)達人“左耳耗子”也一直在強調(diào)這一點,他說現(xiàn)在國外的技術(shù)比國內(nèi)還是要領(lǐng)先兩三年,如果能經(jīng)常看國外技術(shù)網(wǎng)站上的優(yōu)質(zhì)英文文章,領(lǐng)先國內(nèi)同行一兩年是沒問題的。所以,學(xué)習(xí)信息的選擇非常重要。

那么哪些信息是優(yōu)質(zhì)的呢,索隆這里列舉2個比較重要的優(yōu)質(zhì)信息來源:

  • 經(jīng)典書籍,尤其是國外大牛寫的技術(shù)書籍。國外大牛寫書都非常認真,他們寫的書籍質(zhì)量也很高。和博客、公眾號相比,書籍的信息密度也更大,質(zhì)量也要高很多。不管你現(xiàn)在處于什么階段,看書都是非常高效的提升方法。如果剛?cè)腴T,先把計算機經(jīng)典的書籍過一遍,保證功力大增。

  • 知名開源項目。技術(shù)開發(fā)光看書還是不行的,動手做項目同樣重要。要想提升自己的編碼水平,跟著大牛學(xué)習(xí)也非常重要。那大牛的代碼從哪里找呢,要感謝開源社區(qū),現(xiàn)在Github上的知名開源項目,有很多大牛在維護。通過看這些大牛的代碼,是快速提升編碼水平的一個捷徑。

針對薄弱點刻意訓(xùn)練

很多經(jīng)典的講高效學(xué)習(xí)的科學(xué)著作(比如《刻意訓(xùn)練》和《精進》)都提到了這一點,針對薄弱點刻意訓(xùn)練是提升個人能力最高效的方法。對于開發(fā)者而言,建議畫張腦圖,針對開發(fā)設(shè)計到的知識點進行分類匯總,每次遇到不懂的問題,不管是開發(fā)中遇到的,還是面試中遇到的,都去這個知識樹中去找,看自己那塊薄弱,然后針對薄弱的地方進行有針對性的復(fù)習(xí)。這樣不斷循環(huán),知識樹會越來越完整,自己的水平也會越來越高。

學(xué)會提問

對于開發(fā)者而言,提問也非常的重要。針對自己的項目,要經(jīng)常去反思,哪里還有提高的地方。對于自己,也要經(jīng)常反思,自己還有哪里需要提高的地方。開發(fā)的時間長了,也可以問下自己,技術(shù)是如何創(chuàng)造價值的,開發(fā)者對于老板的意義在哪里。要經(jīng)常地反思,不斷提出問題,才能更快的進步。


Java程序員必讀書單

書單說明:

  1. 圖書列表按照初級、中級、高級進行了大致區(qū)分,初級是指剛?cè)腴TJava的同學(xué)或者開發(fā)經(jīng)驗很少的初級工程師;中級是有一定開發(fā)經(jīng)驗,但還沒有獨立設(shè)計過大型項目的工程師;高級是指由大型項目設(shè)計經(jīng)驗,并且有一定項目架構(gòu)、管理經(jīng)驗的工程師。但推薦書目只是大致進行了區(qū)分,區(qū)分了書籍最適應(yīng)的人群。初級的同學(xué)可以閱讀中高級的推薦書目,只是有些讀起來會有些吃力。

為了方便閱讀,對書目進行了匯總,大家可以先看這個,然后再看下面詳細的介紹。

初級經(jīng)典書籍(適合初學(xué)者)

作為一個初學(xué)者,首先要了解Java這門語言。Java入門語言書,首推《Java核心技術(shù)》,因為 《Java編程思想》和《Head First Java》這兩本書都是10年前寫的,當(dāng)時的Java版本還是5,而今年9月份Java 15已經(jīng)正式發(fā)布。現(xiàn)在國內(nèi)一線公司也已經(jīng)以Java 8為主。Java 5是Java比較重要的一個版本,但是后面的Java 7支持了Future,Java 8支持了Lamda表達式和Stream。都是比較大的更新,因此現(xiàn)在學(xué)習(xí)《Java編程思想》和《Head First Java》已經(jīng)有些過時了。這兩本書雖然經(jīng)典,還是推薦學(xué)習(xí)《Java核心技術(shù)》,因為《Java核心技術(shù)》最新版本已經(jīng)支持到了Java 11,更新非常及時。知乎上之所有很不少大牛也在狂推《Java編程思想》,是因為大牛入門Java的時候基本上都是在很多年前,那時候《Java編程思想》的技術(shù)還是很新的。《Java編程思想》的作者已經(jīng)寫了第五版,英文名叫《On Java 8》,Java版本更新到8,實在想用《Java 編程思想》入門的同學(xué)可以去讀英文版,或者看網(wǎng)友翻譯的中文版On Java 8網(wǎng)友翻譯版。正式中文版圖靈出版社正在加緊翻譯,預(yù)計下半年會上市,并且會在原書的基礎(chǔ)上增加Java 9的內(nèi)容,圖靈出版社出版的圖書質(zhì)量都很高,大家敬請期待。

《穿越計算機的迷霧》

圖書簡介:之所以把這本書放在第一位,是因為這本書非常適合入門。和后面的《深入理解計算機系統(tǒng)》相比,這本書內(nèi)容主要講計算機硬件相關(guān)知識,不夠全面。但是這本書更加通俗易懂,讀起來非常有意思,在輕松的氣氛中能讓讀者對計算機有個較為全面的了解,所以把這本書更加適合初學(xué)者,少有的國產(chǎn)經(jīng)典好書。針對電路、CPU、指令、存儲器等都有詳細的介紹。大一新生或者剛開始轉(zhuǎn)行學(xué)計算機的其他專業(yè)的同學(xué),推薦先把這本書讀完。


《Java核心技術(shù)》

圖書簡介:和后面兩本語言書比,這本書更像國內(nèi)的教科書風(fēng)格。沒有太多的理論講解,每一張都有不少示例,更加實用。并且本書分為上下兩卷,基礎(chǔ)篇和高級篇。我12年讀的這本書,感覺更適合用來做手冊,遇到不了解的部分拿來查查,按照示例寫寫代碼能很快解決問題。初學(xué)者直接看基礎(chǔ)篇,有一定開發(fā)經(jīng)驗的可以看高級篇。


Java編程思想》

圖書簡介:這本書在香港科技大學(xué)是本科Java課程的指定教材。沒有編程經(jīng)驗的同學(xué)看起來會有點吃力,但是讀完會很有收獲。本書不光對Java語法的方方面面進行了詳細的介紹,對面向?qū)ο笏枷胍沧隽撕芎玫闹v解,同時將Java和C++進行了客觀的比較,如果同學(xué)們之前學(xué)過C++,讀這本書會感到很親切。作者Bruce Eckel是語言領(lǐng)域的大牛,作為C++標準委員會擁有表決權(quán)的成員之一,同時也是《C++編程思想》的作者。這本書值得每位Java程序員買一本仔細閱讀。注意,對于初學(xué)者,一定要自己做下課后習(xí)題,學(xué)習(xí)編程動手很重要。當(dāng)然,課后習(xí)題答案還是要給的 https://github.com/kinggggg/thinking_in_java_answer

注:第五版(英文名《On Java 8》)中文版圖靈出版社已經(jīng)在組織翻譯,預(yù)計明年會正式出版。

等不及的同學(xué)可以看網(wǎng)友翻譯版 https://github.com/LingCoder/OnJava8

書很經(jīng)典,但版本有點老,可以作為參考,不推薦以這本書為主。


《Head First Java》

圖書簡介:和Head First其他系列一樣,這本入門書圖文并茂,還有游戲、解謎題等,讀起來會非常有意思。如果感覺《Java 編程思想》過于枯燥,可以買這本書來看看。書很經(jīng)典,但版本有點老,可以作為參考,不推薦以這本書為主。



《Spring實戰(zhàn)》

圖書簡介:Spring是Java程序員必學(xué)的框架,現(xiàn)在Web開發(fā)基本上離不開Spring生態(tài)的各種框架,微服務(wù)領(lǐng)域Spring Cloud也占據(jù)了半壁江山。隨著Spring版本的迭代,本書每隔幾年就會更新一次,2020年2月最新的第五版中文版已經(jīng)出版。本書會介紹Spring的核心原理,但更偏向于應(yīng)用。按照書上的例子,自己寫一寫,可以快速掌握Spring的基本特性。第五版講了一些異步和響應(yīng)式的內(nèi)容,對初學(xué)者來講有一定的難度,可以忽略。


《深入理解計算機系統(tǒng)》

圖書簡介:這本書在CMU是大一的入門導(dǎo)論課程教程,但書其實很有深度,從硬件到軟件,從編譯原理到Web網(wǎng)絡(luò)都有講解,是一本難得的深入淺出的好書。很久之前就有這種說法,這本書你能看懂多少頁,畢業(yè)就能拿多少錢。豆瓣9.5(中文版)的高分也客觀反映了大家對這本書的認同。初學(xué)者看起來會有難度,能看懂多少算多少,盡量多做些課后習(xí)題,做了這些習(xí)題才能更好的理解這本書的精華。中級讀者也建議時不時的翻一下,相信每次看都會有新的收獲。


《算法導(dǎo)論》

圖書簡介:現(xiàn)在好多同學(xué)練習(xí)算法直接開刷LeetCode,其實不是太建議這樣做。算法練習(xí),刷題固然重要,但要先打好基礎(chǔ)。就像學(xué)習(xí)數(shù)學(xué),要先學(xué)好教材,再去刷習(xí)題集?!端惴▽?dǎo)論》就是學(xué)習(xí)算法最好的那本教材。這本書讀起來會很難,尤其是對于初學(xué)者。建議有一定編程基礎(chǔ)后,再去讀這本書。和算法競賽指導(dǎo)書相比,這本書針對算法理論進行了詳細的講解,比如復(fù)雜度分析、各種算法的證明公式??雌饋聿粚嵱茫荒茏屇懔ⅠR去AC幾道題。但是會讓你打好算法基礎(chǔ),讓你的算法上限更高。


《SQL必知必會》

圖書簡介:隨著年齡的增大,越發(fā)的感覺學(xué)好SQL的重要性,其他的知識比如云計算、微服務(wù)都是日新月異,但是SQL幾十年過去了,基本上沒有什么變化,并且在工作中SQL會用得越來越多。學(xué)好了SQL,目前看再用十幾年沒問題,并且不用重新學(xué),性價比非常高。《SQL必知必會》作為SQL入門的經(jīng)典,不局限于某個數(shù)據(jù)庫(比如Mysql、SQLServer等),針對SQL常用的知識點做了詳細的講解,比如組合查詢、存儲過程、視圖等基礎(chǔ)知識和一些實用的優(yōu)化技巧。如果剛開始學(xué)SQL,推薦這本書,看書的同時,可以裝個Mysql實踐一下,效果會更好。


中級經(jīng)典書籍(適合有一定編程經(jīng)驗的工程師)

有了一定的項目經(jīng)驗,需要學(xué)習(xí)如何寫出優(yōu)雅的代碼。首先要記住一點,代碼雖然是讓機器運行的,但更重要的是讓人讀得懂?,F(xiàn)在的軟件很少有一個人單獨完成的,都是要一個團隊一起合作來完成的。所以,代碼規(guī)范非常重要。如何寫出優(yōu)雅的代碼,有4本經(jīng)典好書推薦:

《重構(gòu)》

圖書簡介:我第一次看《重構(gòu)》這本書是2011年,但是看的是導(dǎo)師從香港帶來的英文版??赐赀@本書感覺自己之前寫的代碼不忍直視,只能算得上碰巧能跑的指令集合?,F(xiàn)在會帶一些應(yīng)屆生做項目,我給他們推薦的第一本書就是《重構(gòu)》。這本書介紹了DRY(Don't Repeat Yourself)原則,介紹了命名規(guī)則,介紹了常見的重構(gòu)方法(這些方法Eclipse、Idea這些IDE都進行了支持),介紹了壞味道的危害。對于提高代碼質(zhì)量非常有幫助,適合初學(xué)者仔細閱讀。這本書2018年作者編寫了第二版,很快去年(2019年)5月份中文版就出來了。新版比舊版增加了更多的內(nèi)容,并添加了示例,非常適合入手。


《代碼整潔之道》

圖書簡介:這本書是大名鼎鼎的Bob大叔(世界級軟件開發(fā)大師、70年代初已經(jīng)開始從事軟件開發(fā)工作)寫的編程指南,書中有一個重要的觀念:代碼質(zhì)量和整潔度成正比,越整潔的代碼質(zhì)量越高,并給出了一些保證代碼整潔的切實可行的方法。想和Bob大叔一樣寫出優(yōu)雅的代碼,本書也是必須。


《Effective Java》

圖書簡介:作者是Google公司的首席Java架構(gòu)師,有著非常豐富的Java開發(fā)經(jīng)驗,在這本書里作者給出了很多Java編碼中的注意事項和最佳實踐,比如組合和繼承哪個更好,equal實現(xiàn)需要注意的地方。適合有一定開發(fā)經(jīng)驗的同學(xué)閱讀,讀完會有醍醐灌頂?shù)母杏X,對提升代碼質(zhì)量有很大的好處。


《Head First 設(shè)計模式》

圖書簡介:設(shè)計模式是四人組(Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)提出來的,最初的設(shè)計模式的書也是四人組寫的。但是原書比較枯燥,《Head First 設(shè)計模式》更加地深入淺出,語言更加輕快詼諧,適合閱讀,在豆瓣評分也超過了原書。另外索隆多說幾句,作為國內(nèi)軟件工程泰斗的不得意弟子,設(shè)計模式這東西不用花太多精力研究,尤其是沒有足夠開發(fā)經(jīng)驗的時候。設(shè)計模式屬于軟件哲學(xué)的范疇,沒有足夠的系統(tǒng)設(shè)計經(jīng)驗,說實話是看不太懂,搞不清楚的。不要看某些所謂的大佬張口閉口設(shè)計模式,真正能明白設(shè)計模式精髓的人不會太多。所以學(xué)習(xí)初期還是以實用的開發(fā)技術(shù)為主,設(shè)計模式了解就可以了,等有開發(fā)經(jīng)驗了,建議沒隔一兩天再回顧一遍,每次會能多理解一點。



《阿里巴巴Java開發(fā)手冊》

圖書簡介:這本書是本書單中少有的國人作品。阿里巴巴算得上國內(nèi)Java第一大廠,這本書介紹了阿里的Java編程規(guī)范,非常詳盡、可操作,值得學(xué)習(xí)。這本書可以直接看電子版,每年都會有更新,最新版本為嵩山版,還有IDE插件(支持Eclipse、Idea),可以自動進行代碼檢查。


《深入理解Java虛擬機》

圖書簡介:這也是一本國內(nèi)難得的經(jīng)典書籍,有了一定的Java開發(fā)經(jīng)驗,就要對Java虛擬機原理有所了解。當(dāng)然,我們可以直接看Java Virtual Machine Specification,但是Oracle官方文檔還是比價晦澀難懂的,普通開發(fā)者也難以把握重點,因為這個文檔是寫給JVM開發(fā)者的。《深入理解Java虛擬機》這本書從Java應(yīng)用開發(fā)者的角度介紹了JVM的實現(xiàn)原理,周志明老師以深厚的技術(shù)功底把JVM晦澀的概念寫得深入淺出,值得中、高級Java開發(fā)同學(xué)閱讀。


《MySQL技術(shù)內(nèi)幕:InnoDB存儲引擎》

圖書簡介:這是一本難得的國內(nèi)Mysql技術(shù)精品,InnoDB作為Mysql應(yīng)用最廣泛的存儲引擎,有好多實現(xiàn)細節(jié)具有創(chuàng)新性。這本書針對InnoDB的表空間、索引構(gòu)造、鎖、事務(wù)等實現(xiàn)原理進行了詳細的講解。作者姜承堯是國內(nèi)數(shù)據(jù)庫圈的知名專家,這本書寫得很走心,推薦學(xué)習(xí)Mysql數(shù)據(jù)庫的同學(xué)購買。



《高性能Mysql》

圖書簡介:學(xué)習(xí)Mysql如果只打算看一本,那選這本《高性能Mysql》就足夠了。在美團的時候隔壁團隊組織過《高性能Mysql》的每周專題學(xué)習(xí)。這本書比較厚,針對Mysql的實現(xiàn)原理有詳細的介紹,這些讀起來會有些難度,但能提升內(nèi)功。讀完這本書,常見的Mysql問題應(yīng)該都能解決。由于原理性的內(nèi)容介紹很多,對找工作面試也很有幫助。



高級經(jīng)典書籍(適合有大型項目架構(gòu)經(jīng)驗的工程師)

《架構(gòu)整潔之道》

圖書簡介:Bob大叔的又一本力作,幾十年的系統(tǒng)設(shè)計經(jīng)驗的總結(jié)。不建議初學(xué)者看這本書,很多內(nèi)容需要一定的經(jīng)驗積累才能看得懂。提出了很多新穎、實用的概念和方法。架構(gòu)的本質(zhì)就是用更少的人(錢)干更多得活,這句話真的很扎心,但是很實際。六邊形模型的提出,對于系統(tǒng)的可拓展性也非常重要,只有業(yè)務(wù)模型才是穩(wěn)定不變的,接入層、存儲層都是會經(jīng)常發(fā)生變化的,應(yīng)該放在核心模型之外。懂得隔離變和不變,是稱為架構(gòu)師的開端。


《A Philosophy of Software Design》

圖書簡介:作者John Ousterhout是斯坦福的教授,同時也是Tcl語言的發(fā)明人,具有多年硅谷創(chuàng)業(yè)經(jīng)驗,軟件開發(fā)經(jīng)驗非常豐富。John Ousterhout已經(jīng)60多歲,他說自己從產(chǎn)業(yè)界重新回到斯坦福就是在現(xiàn)在軟件開發(fā)中還有很多難以解決的問題,他要通過學(xué)術(shù)研究的方法來解決這些難題。《A Philosophy of Software Design》是John回到斯坦福出版的第一本書,解決的問題也是當(dāng)今軟件行業(yè)最大的難題之一--軟件腐化。兩年前,華為宣布要投入10億美元解決軟件腐化問題,可見這個問題的嚴重性。大家都會遇到過這樣的問題,一個項目剛建好的時候開發(fā)效率很高,bug也少,但隨著項目的推進,系統(tǒng)變得越來越復(fù)雜,開發(fā)效率越來越低,bug也越來越多。最后成為老破系統(tǒng),不得不推倒重來。很多同學(xué)說重構(gòu)可以解決這個問題,但有沒有想過為什么老是需要重構(gòu)呢?有沒有什么好的方法可以避免重構(gòu),又能讓系統(tǒng)健康演進?這本書給出了答案,Google在這本書剛出版的時候就邀請John去公司給高級開發(fā)人員做專題演講。目前國內(nèi)本書還沒有出版,需要的可以在美亞購買。我是18年托同學(xué)從美國帶回來的讀的。


《領(lǐng)域驅(qū)動設(shè)計》

圖書簡介:DDD的經(jīng)典書籍?,F(xiàn)在微服務(wù)設(shè)計都要做領(lǐng)域劃分,如何有效地劃分邊界,做良好的架構(gòu)設(shè)計,這本書都有介紹。


《Building Evolutionary Architectures》

圖書簡介:這本書在國外推薦的人很多,豆瓣評分低有可能是很多人并沒有讀懂這本書。這本書很偏理論,針對現(xiàn)有的架構(gòu)模式包括單體架構(gòu)、微服務(wù)架構(gòu)、響應(yīng)式架構(gòu)、數(shù)據(jù)驅(qū)動式架構(gòu)都進行了理論分析,講出了優(yōu)缺點。并對如何設(shè)計可演進式架構(gòu)給出了建議。這本書的缺點也是太偏理論,看完會感覺可操作性不強,可以和《A Philosophy of Software Design》結(jié)合起來看。


推薦學(xué)習(xí)路線

Java學(xué)習(xí)和其他語言學(xué)習(xí)一樣,是一個理論學(xué)習(xí)和編碼實踐相結(jié)合的過程,通過理論學(xué)習(xí),掌握基本知識,然后去編碼實踐會發(fā)現(xiàn)自己不懂的地方,然后再來學(xué)習(xí)理論。依次循環(huán),螺旋狀上升。具體的學(xué)習(xí)可以分為幾個階段

小白入門階段

  1. 先學(xué)習(xí)《Java核心技術(shù)》來了解Java語言基礎(chǔ)知識,同時把課后題選一些做做。語言是基礎(chǔ),但也沒必要花太多的時間,因為語言書都很厚,如果仔仔細細的看一遍,3個月差不多就過去了。推薦花1個月時間來了解Java基本知識。

  2. 學(xué)習(xí)《Spring實戰(zhàn)》,同時著手搭建一個簡單的Web后臺應(yīng)用。Java主要的方向就是做Web后臺開發(fā),Spring是必須可少的框架。通過學(xué)習(xí)《Spring實戰(zhàn)》可以對Spring框架有個基本的了解,學(xué)完之后應(yīng)該能自己動手寫個基于Spring Boot的小應(yīng)用。需要注意的是,操作數(shù)據(jù)庫最后用Mybatis,Hibernate和Spring JDBC實際項目中用的很少。

  3. 學(xué)習(xí)《SQL必知必會》。通過第二步,應(yīng)該已經(jīng)了解了如何搭建Web后臺項目,但是數(shù)據(jù)庫的具體操作應(yīng)該還不熟悉。通過學(xué)習(xí)《SQL必知必會》可以對常見的數(shù)據(jù)庫操作有基本的了解,應(yīng)付一般的開發(fā)需求應(yīng)該沒問題了。

  4. 學(xué)習(xí)Maven、Git這些項目管理工具,都是項目中常用到的。

經(jīng)過這一階段的學(xué)習(xí),應(yīng)該已經(jīng)能搭建簡單的Web后臺項目,能夠?qū)崿F(xiàn)《學(xué)生信息管理系統(tǒng)》這樣的項目。但是對于項目底層的原理還沒有了解,不要慌,先動起來,能完成一個網(wǎng)站的后臺開發(fā)會讓人很有成就感,提高學(xué)習(xí)的積極性。至于原理性的東西,后面會逐步補上。

初級進階階段

  1. 學(xué)習(xí)編碼規(guī)范。編碼規(guī)范其實非常重要,尤其是學(xué)習(xí)的初期階段,養(yǎng)成一個良好的編碼規(guī)范非常有必要。可以學(xué)習(xí)《重構(gòu)》來了解什么樣的代碼才是好的代碼,如何去除代碼中的Bad smell。同時看下《阿里巴巴Java開發(fā)手冊》,這個手冊更加具體,每條都是可以執(zhí)行的規(guī)范,并且提供了IDE插件,檢查代碼是不是規(guī)范非常方便。

  2. 學(xué)習(xí)《深入理解計算機系統(tǒng)》了解各種原理。這個階段其實需要學(xué)習(xí)網(wǎng)絡(luò)、操作系統(tǒng)、編譯原理、組成原理等多門計算機課程才能了解Web后臺項目代碼背后的原理,但是系統(tǒng)的學(xué)習(xí)會很費時間。這里推薦《深入理解計算機系統(tǒng)》這本書,作為一本導(dǎo)論性質(zhì)的書,覆蓋面很廣,并且有一定的深度。這本書有一定的難度,但是學(xué)完會讓你收獲很大,為了以后能找份好工作,加油吧。

  3. 深入學(xué)習(xí)數(shù)據(jù)庫,推薦《MySQL技術(shù)內(nèi)幕:InnoDB存儲引擎》。數(shù)據(jù)庫其實是后臺開發(fā)很重要的一部分,如何建索引,如何聯(lián)合查詢,都需要對數(shù)據(jù)庫的實現(xiàn)原理有一定的了解。MySQL是現(xiàn)在互聯(lián)網(wǎng)公司用的最多的數(shù)據(jù)庫,《MySQL技術(shù)內(nèi)幕:InnoDB存儲引擎》針對MySQL的實現(xiàn)原理進行了介紹,這一階段很適合看這本書。注意,這本書里有些內(nèi)容還是比較深的,看不懂的可以先跳過。

  4. 開始看一些簡單的開源項目??磿耐驴梢詣邮指阋恍╉椖?,可以看Spring社區(qū)的Demo項目學(xué)習(xí)下,并自己動手實現(xiàn)同樣功能的項目。

經(jīng)過了進階階段的學(xué)習(xí),編碼水平應(yīng)該有了顯著的提升,并且有了一定的代碼閱讀能力,對計算機的基本原理也有所掌握。和入門階段比,經(jīng)過了這一階段會有了更多的困惑,感覺不懂的地方更多了,這是正常的,因為你的知識邊界在拓寬,未知的邊界也變得更廣,這一階段難度顯著提升,更需要你的堅持。

中級進階階段

經(jīng)過上個階段的學(xué)習(xí),具備了基本的功能實現(xiàn)能力。這時候就需要高難度、大型項目的鍛煉。這個階段一般要在公司完成,高可用、高并發(fā)互聯(lián)網(wǎng)項目,大型金融、ERP項目,都是比較好的升級打怪的項目。但是不是每個同學(xué)都有這樣的機會,那應(yīng)該怎么提高呢?這時候可以找一些分布式開源項目好好讀讀,試著提一些PR??磧?yōu)秀的項目,讀優(yōu)秀的代碼,站在巨人的肩膀上,對自己提升幫助會很大。推薦的項目有Apollo配置中心(中等難度)、Dubbo(高級難度)、GPRC(高等難度)??炊?,可以自己試著寫一些簡版的功能,比如實現(xiàn)一個簡單的分布式動態(tài)配置中心、簡單的RPC框架。如果能做到這一步,已經(jīng)能超過80%的程序員了,看著簡單,其實有很多細節(jié)需要自己去學(xué)習(xí),難度挺大,但是實現(xiàn)時候?qū)ψ约簬椭鷷艽蟆?/p>

這個時候可以看一些源碼分析類的書籍以及比較深入的分布式架構(gòu)理論書籍,比如《深入理解Kafka:核心設(shè)計與實踐原理》、《數(shù)據(jù)密集型應(yīng)用系統(tǒng)設(shè)計》(豆瓣9.6分,強烈推薦)

高級進階階段

經(jīng)過上一階段(3-5年)的鍛煉,應(yīng)該具備了大型系統(tǒng)中小模塊的設(shè)計和開發(fā)能力。這個時候要想繼續(xù)進步,就要往架構(gòu)的方向發(fā)展。和具體的技術(shù)知識相比,架構(gòu)顯得比較玄乎。很多架構(gòu)方面的文章和書籍也只是一些個人經(jīng)驗的總結(jié),缺少系統(tǒng)的理論支持。

走向成熟階段


Java開發(fā)常用資源

開發(fā)工具:推薦Intellij Idea,Eclipse開發(fā)效率不如Idea,不推薦使用。

問題搜索網(wǎng)站:https://stackoverflow.com/ 老外搞技術(shù)還是很認真的,Stack Overflow上的回答質(zhì)量比國內(nèi)的同類網(wǎng)站要高很多

教程網(wǎng)站:https://www.tutorialspoint.com 交互式學(xué)習(xí)網(wǎng)站,教程指令挺高,適合快速入門

JSON格式化工具網(wǎng)站:JSON在線解析及格式化驗證 - JSON.cn 在線JSON校驗格式化工具(Be JSON) ?這兩個都不錯

刷題網(wǎng)站:LeetCode 英文網(wǎng)站 ? 中文版本 力扣

技術(shù)博客:阿里技術(shù) 美團技術(shù)團隊 國內(nèi)大公司中Java用的最多的就是阿里和美團(前東家,但非廣告),這兩家的技術(shù)博客都入職了知乎,分享的技術(shù)文章質(zhì)量都很高,強烈推薦

知乎技術(shù)大牛推薦:

R大,Java虛擬機專家,Java方面有很多高贊回答

RednaxelaFXwww.zhihu.com/people/rednaxelafx


阿萊克西斯,美國亞馬遜技術(shù)專家,書迷,對編程的本質(zhì)有深刻的理解

阿萊克西斯www.zhihu.com/people/ming-zi-zong-shi-hen-nan-qi

阿萊克西斯的必看回答,關(guān)于編程本質(zhì)的理解,索隆看完感覺收獲很大

編程到底難在哪里?1.9 萬贊同 · 836 評論回答


Java程序員成長常見問題解答


問題:文中提到Java學(xué)習(xí)需要看書和實踐相結(jié)合?那哪里去找這些項目呢?

答案:學(xué)習(xí)初期建議做課后題,比如像《Java編程思想》、《Head First Java》這種語言書都會有練習(xí)題,初期對語言不熟悉,可以先把這些練習(xí)題做了。

語言熟悉了可以往兩個方向積累實踐經(jīng)驗,一個方向是算法方法,多刷算法題,如果不參加ACM這種編程比賽,建議刷LeetCode,因為和POJ這種純算法網(wǎng)站相比,LeetCode的題目很多都是產(chǎn)業(yè)界實際項目抽象出來的,更有工程意義,和面試題也更加接近;另外一個方向是產(chǎn)業(yè)界實際項目,可以從github上找,比如Spring的示例項目(https://github.com/spring-projects/spring-mvc-showcase)等。

問題:我是非計算機專業(yè)的學(xué)生,看到計算機專業(yè)賺錢很多,我要不要轉(zhuǎn)行搞計算機?

答案:和其他專業(yè)相比,計算機專業(yè)收入尤其是起薪還是不錯的。但是現(xiàn)在也過了快速發(fā)展期,入行就能賺大錢的時代已經(jīng)過去了,計算機行業(yè)加班也比較多、中年失業(yè)風(fēng)險比較大。所以,不建議無腦轉(zhuǎn)行計算機。如果喜歡編程并擅長編程是可以轉(zhuǎn)行計算機的,不過不喜歡又不擅長不建議轉(zhuǎn)行計算機。那么如何判斷自己是否真正喜歡并擅長呢?可以先自學(xué)3個月編程試試,每天學(xué)習(xí)5個小時,看3個月后自己是否依然還喜歡編程,是否編程水平長進的比較快。如果答案都是是的話,可以考慮轉(zhuǎn)行計算機。記住,不要只憑第一感覺,學(xué)了hello world就感覺自己適合這行,立馬轉(zhuǎn)行計算機,這是不行的。一定要每天抽出幾小時堅持自學(xué)一段時間后再下結(jié)論,因為好多同學(xué)堅持不了3個月就放棄了,發(fā)現(xiàn)自己其實不適合。

詳細解答可以參考索隆最近寫的這個回答

2020年java市場飽和了嘛?現(xiàn)在轉(zhuǎn)行學(xué)java會不會太遲?246 贊同 · 81 評論回答

問題:為什么那么多人選擇Java作為職業(yè)發(fā)展方向?

答案:首先語言沒有高低之分,除了java其他的很多語言也非常優(yōu)秀。Java有這么高的占有率是因為Java學(xué)習(xí)門檻低,開源生態(tài)做得好?,F(xiàn)在國內(nèi)阿里、美團、攜程這些公司都是以Java作為主要開發(fā)語言。這些大廠同時培養(yǎng)了很多小公司的工程師和技術(shù)負責(zé)人,讓Java的應(yīng)用更加廣泛。對于一個公司來講,由于生態(tài)和人才市場的繁榮,很容易組建一個Java開發(fā)團隊,而像Go需要功能也很強大,但很難招到足夠的人才。這樣就形成了馬太效應(yīng)。對于國內(nèi)的學(xué)生來講,學(xué)習(xí)Java是一個比較好的選擇,因為畢業(yè)后會有足夠多的工作機會和發(fā)展空間,所以越來越多的人選擇Java作為職業(yè)發(fā)展方向。

問題:如何快速提升編碼水平?

答案:當(dāng)然初期提升編碼水平的關(guān)鍵還是多練,先積累2W行變成經(jīng)驗才能算入門。入門以后快速提升編碼水平有2個切實有效的方法:

  1. 讀大牛的代碼,和寫論文一樣,讀A類的頂級文章,學(xué)得好了可以發(fā)出B類的文章,整天讀水平一般的國內(nèi)文章,最后畢業(yè)都會成問題。寫代碼也一樣,一定要多讀大牛的、經(jīng)典的代碼。有2個來源,一個是可以讀JDK源碼,平時寫代碼用到JDK的的各種類和方法可以點進去看看JDK官方的大牛是怎么寫代碼的;另外一個是開源社區(qū)的知名項目,優(yōu)先閱讀國外的項目,比如Google的grpc源碼https://github.com/grpc/grpc-java

  2. 找高手幫著檢視代碼。近幾年我會帶一些新人,不管是之前在美團還是現(xiàn)在在券商,對于新人來講高手幫著檢視代碼非常重要,尤其是剛進公司。代碼中的錯誤、不規(guī)范、實現(xiàn)不夠優(yōu)美的地方都會被指出來,來來回回檢視上兩個月,代碼水平會有很大提升?,F(xiàn)在很多培訓(xùn)機構(gòu)也發(fā)現(xiàn)了這一點,我發(fā)現(xiàn)騰訊課堂的一些官方課就提供代碼檢視服務(wù),一次100元左右,如果真是資深工程師幫著檢視的話,還是很值的(注:和騰訊課堂沒有任何利益關(guān)系,這里只是舉個例子)。如果公司沒有高手幫著檢視代碼,又不想花錢怎么辦呢?方法是有的,去開源社區(qū)提PR,自然會有大牛幫你檢視代碼,當(dāng)然,前提是你要能看懂知名開源項目的源碼,并且能解Bug。

問題:我是一名本科生,想畢業(yè)后找一份Java工程師的工作,需要參加Java培訓(xùn)班嗎?

問答:索隆本科學(xué)的是物理專業(yè),因為喜歡計算機,本科自學(xué)的計算機課程,碩士讀的是計算機。我之前一直認為學(xué)習(xí)計算機是不需要報培訓(xùn)班的。但是最近幾年,自己會帶一些項目,也會接觸一些外包同學(xué),有些同學(xué)就是培訓(xùn)班出來的,有些本來是做其他行業(yè)工作的,通過培訓(xùn)班快速轉(zhuǎn)入了計算機行業(yè),經(jīng)過幾年的磨煉水平也不錯。

現(xiàn)在看來,如果還在讀大一大二,自學(xué)就可以,因為計算機行業(yè)的知識更新很快,自學(xué)本身就是程序員的基本技能,并且現(xiàn)在網(wǎng)上資料比索羅讀書的時候要豐富太多。如果已經(jīng)大三大四了,離找工作時間所剩不多了,可以考慮報輔導(dǎo)班,但要注意培訓(xùn)班只是個速成班,只能讓有機會進入計算機行業(yè),要成為一個優(yōu)秀的程序員,還是要靠自己不斷地學(xué)習(xí),成為大牛之路沒有捷徑,必須要用正確的方法不斷的努力。

問題:工作中沒有高并發(fā)場景,但是高并發(fā)是互聯(lián)網(wǎng)公司面試必問的問題,如何積累高并發(fā)經(jīng)驗?zāi)兀?/strong>

回答:簡單的講可以參與知名開源高并發(fā)中間件比如Dubbo、Grpc的開發(fā)來積累這方面的經(jīng)驗,剛開始難度會比較大,并且要給知名項目提交不錯的PR需要持續(xù)的努力,但是含金量很高。國內(nèi)包括阿里、美團在內(nèi)的知名公司都會去知名項目的貢獻者列表里找聯(lián)系方式發(fā)面試邀請。具體的操作方法可以參考索隆這個高贊回答

我沒啥高并發(fā)項目經(jīng)驗,但是面試的時候經(jīng)常問到高并發(fā)、性能調(diào)優(yōu)方面的經(jīng)驗,有啥好辦法么?797 贊同 · 29 評論回答

更多問題可以關(guān)注索隆進一步交流

想要領(lǐng)取資料的小伙伴們,請關(guān)注下方微信公眾號領(lǐng)取哦~?

然后就等著私信查收吧~


。


2023年Java程序員入門進階必讀書籍書單和學(xué)習(xí)成長路線(含Java編程思想、算法導(dǎo)論的評論 (共 條)

分享到微博請遵守國家法律
兴文县| 宜春市| 合江县| 鄯善县| 黄冈市| 耒阳市| 陇南市| 和顺县| 大石桥市| 武强县| 德庆县| 砚山县| 高雄市| 财经| 榆中县| 洪江市| 建湖县| 光泽县| 岳阳市| 乌拉特前旗| 杭锦后旗| 政和县| 福海县| 孝感市| 铜陵市| 芜湖市| 昌平区| 忻州市| 滦南县| 多伦县| 南通市| 蒲城县| 乐清市| 聂荣县| 红桥区| 上林县| 肇源县| 南宁市| 交城县| 济阳县| 清新县|