我,還是忍不住上了逼乎···
上次逼乎的那件事之后自己確實(shí)承受了很大的打擊,很久沒上了。(不清楚發(fā)生了什么的朋友可以回顧一下:知乎事件通報(bào))
前幾天又上了趟知乎,發(fā)現(xiàn)了這么個(gè)問題:

下面是我的一點(diǎn)回答。
首先,什么是大佬?
大佬都有一個(gè)共性:寬廣的技術(shù)知識面+某一領(lǐng)域的專業(yè)研究。
其實(shí)就是我們常說的技術(shù)的廣度與深度。
我們以一個(gè)后端開發(fā)程序員為例,來看一下,想要成為大佬,需要學(xué)習(xí)哪些東西?

當(dāng)然,這張圖可能列舉的并不全面,但即便如此,你也基本上不可能掌握上圖的所有內(nèi)容,但作為大佬,你至少得知道吧。
常用的后端語言有哪些,他們的優(yōu)勢和劣勢分別是什么?你的項(xiàng)目最適合什么語言的技術(shù)棧?
常用的后端服務(wù)和中間件有哪些,什么樣的場景和場合該去使用誰?
后端常打交道的技術(shù)有哪些,在你設(shè)計(jì)系統(tǒng)的時(shí)候哪些會用得上?
···
等等一系列的問題,作為大佬,你可以不會,但你得了解,得知道。
下面揀一些要緊的來說。
編程語言
編程語言就像程序員的兵器,選擇一件牛逼且稱手的兵器是非常重要的第一步。
對于后端程序員,Java、C++、Python這些一線語言隨便選,穩(wěn)得很。
而想成為大佬,一件兵器還不夠,得選多件。編譯型語言、虛擬機(jī)語言、解釋型語言至少都得會一樣,還得知道他們執(zhí)行的原理與區(qū)別,以便在不同的項(xiàng)目場景下決斷什么樣的語言最合適,而不是像剛?cè)胄械男∨笥颜旌暗溃簒xx是最好的語言。
編程語言的學(xué)習(xí)有三個(gè)層次:
第一層:會熟練使用語言來編程,掌握語法和特性的使用。 第二層:熟悉語言相關(guān)的技術(shù)棧,如C++的STL/Boost/Linux C++開發(fā),Java的Spring/SpringBoot等 第三層:掌握語言的代碼執(zhí)行原理,如C/C++編譯原理、虛函數(shù)原理,面向?qū)ο髮?shí)現(xiàn)機(jī)制,函數(shù)調(diào)用原理,堆棧變化,代碼執(zhí)行匯編指令級理解;Java做到class文件結(jié)構(gòu)熟悉,JVM啟動過程,垃圾回收,鎖機(jī)制、字節(jié)碼執(zhí)行原理。
學(xué)編程語言,我推薦的精品書籍有:
Java:
《Head First Java》 《Java編程思想》 《Java核心技術(shù)·卷1》 《深入理解Java虛擬機(jī)》

C/C++:
《C++ Primer》 《Effective c++》 《More Effective c++》 《深度探索C++對象模型》

Python:
《Python編程·從入門到實(shí)踐》 《Python學(xué)習(xí)手冊》 《Python Cookbook》 《Python核心編程》

Web技術(shù)
作為最基本的CRUDer,基本的Web技術(shù)肯定得學(xué)吧,常用的后端服務(wù)器有哪些,處理請求的流程是怎么樣的,基本的工作原理得知道吧,Cookie和Session是什么關(guān)系,JWT又是什么原理?你寫的程序是如何與Web服務(wù)器交互也得弄明白吧?
這方面的知識,你可以看:
《Web性能權(quán)威指南》 《深入分析Java Web技術(shù)內(nèi)幕》 《Tomcat與Java Web開發(fā)技術(shù)詳解》 《深入理解Nginx:模塊開發(fā)與架構(gòu)解析》

數(shù)據(jù)庫技術(shù)
后端工程師,與數(shù)據(jù)庫打交道是家常便飯,常用的數(shù)據(jù)庫有哪些?SQL語句怎么寫?MySQL背后的存儲原理是什么?索引是什么實(shí)現(xiàn)的,這些都是后端工程師的基本功。
這方面的知識,你可以看:
《高性能MySQL》 《MySQL必知必會》 《MySQL技術(shù)內(nèi)幕:InnoDB存儲引擎》

除了關(guān)系數(shù)據(jù)庫,NoSQL也應(yīng)用的越來越多,什么是NoSQL?和傳統(tǒng)關(guān)系數(shù)據(jù)庫區(qū)別是什么?什么場景下使用它們?又該如何使用?
這方面的知識,你可以看:
《MongoDB權(quán)威指南》 《ElasticSearch權(quán)威指南》 《NoSQL精粹》

緩存技術(shù)
高性能高并發(fā)時(shí)代,緩存技術(shù)也是必修課,Redis已經(jīng)成為后端工程師必須掌握的技能了,什么是緩存?緩存如何組織數(shù)據(jù)?如何搜索數(shù)據(jù)?
這方面的知識,你可以看:
《Redis設(shè)計(jì)與實(shí)現(xiàn)》 《Redis 深度歷險(xiǎn):核心原理與應(yīng)用實(shí)踐》

設(shè)計(jì)模式
稍微有點(diǎn)追求的程序員,對自己的代碼都會講究的吧,模塊怎么劃分,接口怎么設(shè)計(jì),如何降低耦合,如何易于擴(kuò)展···
這是關(guān)于設(shè)計(jì)模式的范疇,你可以看:
《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》 《Head First 設(shè)計(jì)模式》

前端技術(shù)
什么?前端技術(shù)?做后端開發(fā)的也要學(xué)前端?
是的,畢竟你是奔著成為大佬去的,又不是只當(dāng)一個(gè)普通的CURDer。
不懂前端開發(fā)技術(shù)演進(jìn)歷史,不懂現(xiàn)在前端流行的開發(fā)技術(shù),不懂瀏覽器的基本工作原理,怎么能和前端同學(xué)愉快的對話呢?遇到跨域問題前后端互相甩鍋怎么辦?遇到緩存不刷新互相扯皮怎么辦?這時(shí)候懂點(diǎn)前端技術(shù)才能更好的進(jìn)行對(si)話(bi)。以后晉升leader后,下面的前端小伙伴評估工作量的時(shí)候你才知道有沒有被忽悠。
當(dāng)然,對于咱們后端的同學(xué),不要求像專業(yè)前端一樣能熟練使用Vue/React/AngularJS開發(fā)大型項(xiàng)目,但基本的HTML/CSS/JavaScript得知道吧,jQuery/Ajax了解一下也不錯嘛,瀏覽器如何工作的最好也知道一下吧。
這方面的知識,你可以看:
《Webkit技術(shù)內(nèi)幕》 《JavaScript權(quán)威指南》 《Web前端開發(fā)技術(shù)》 《深入淺出Vue.js》

前面說的都是一些后端工程師們工作上直接打交道的東西,但光會這些,還只是在浮沙筑高臺,勉強(qiáng)是一個(gè)合格的后端工程師,但離大佬還遠(yuǎn)遠(yuǎn)不夠。
真正的大佬除了應(yīng)用,還得對計(jì)算機(jī)從上到下的運(yùn)作了然于心,接下來這些基礎(chǔ),都是大佬的必修課。
HTTP & HTTPS
后端工程師,每天寫接口,連HTTP協(xié)議工作原理是怎么樣都說不清楚,這說不過去吧?HTTP從0.9->1.0->1.1-2.0>3.0發(fā)展了這么多代,每一代協(xié)議又有哪些不同?
除了常見的字段和狀態(tài)碼,那些不常見的HTTP頭部字段和狀態(tài)碼又是什么意思?
HTTPS在HTTP的基礎(chǔ)上到底做了什么,詳細(xì)過程是什么樣的?
這方面的知識,你可以看:
《HTTP權(quán)威指南》 《圖解HTTP》 《HTTP抓包實(shí)戰(zhàn)》

計(jì)算機(jī)網(wǎng)絡(luò)
接下來,你將面臨的是成為大佬的三座大山。
第一座大山:計(jì)算機(jī)網(wǎng)絡(luò)。
既然已經(jīng)說到HTTP了,那計(jì)算機(jī)網(wǎng)絡(luò)知識就不能不提了(但我還是把HTTP單獨(dú)拎出來說了,就是因?yàn)镠TTP實(shí)在是太重要了)。
輸入網(wǎng)址之后網(wǎng)頁是如何穿越千山萬水來到你電腦的?TCP是如何實(shí)現(xiàn)可靠傳輸?shù)模縄P報(bào)文又是如何在無數(shù)網(wǎng)絡(luò)節(jié)點(diǎn)之間路由轉(zhuǎn)發(fā)的?TCP/IP四層又各是如何交互工作的?
作為大佬,計(jì)算機(jī)網(wǎng)絡(luò)知識是你工作所必備的基礎(chǔ)儲備。
這方面的知識,你可以看:
《TCP/IP詳解·協(xié)議》 《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下》 《圖解TCP/IP》 《網(wǎng)絡(luò)是怎樣連接的》

網(wǎng)絡(luò)安全
你寫的程序安不安全,會不會被惡意攻擊?黑客是如何攻破網(wǎng)站服務(wù)器?勒索病毒和挖礦軟件到底怎么進(jìn)來的?到底怎樣保護(hù)你的服務(wù)?
不懂網(wǎng)絡(luò)安全,是沒辦法回答這些問題的。
這方面的知識,你可以看:
《黑客大曝光》 《白帽子講Web安全》 《黑客攻防技術(shù)寶典》 《漏洞戰(zhàn)爭》 《加密與解密》

操作系統(tǒng)
成為大佬的三座大山之二:操作系統(tǒng)。
你寫的程序是如何被操作系統(tǒng)調(diào)度的?這么多進(jìn)程線程是如何共處的?內(nèi)核模式里面有什么東西?虛擬內(nèi)存是什么原理?硬盤上的0和1如何組織成文件的?
操作系統(tǒng)所蘊(yùn)含的內(nèi)容之多,之廣,使其地位實(shí)在是太重要了!上承應(yīng)用開發(fā),下承計(jì)算機(jī)組成原理,是非常非常重要的一環(huán)。
操作系統(tǒng),不光要看理論概述,還要具體研究兩大主流操作系統(tǒng)Linux和Windows它們的實(shí)現(xiàn)異同,比較它們在內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧、文件系統(tǒng)、IO管理等各方面的實(shí)現(xiàn)差異,各自的優(yōu)劣勢等等。
這方面的知識,你可以看:
《現(xiàn)代操作系統(tǒng)》 《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》 《Windows內(nèi)核原理與實(shí)現(xiàn)》 《深入解析Windows操作系統(tǒng)》

數(shù)據(jù)結(jié)構(gòu)與算法
成為大佬的三座大山之三:數(shù)據(jù)結(jié)構(gòu)與算法。
數(shù)據(jù)結(jié)構(gòu)與算法,是整個(gè)計(jì)算機(jī)的基石,它跨域了語言,跨域了系統(tǒng),跨越了網(wǎng)絡(luò),超出三界之外,不在五行之中,是所有程序員都必須掌握的一門課。
常用的數(shù)據(jù)結(jié)構(gòu)有哪些,各個(gè)數(shù)據(jù)結(jié)構(gòu)又有哪些實(shí)際應(yīng)用,它們是如何組織表達(dá)計(jì)算機(jī)系統(tǒng)中紛繁復(fù)雜的各種數(shù)據(jù),各種算法又是如何在這些數(shù)據(jù)結(jié)構(gòu)上穿針引線?
想成為大佬,數(shù)據(jù)結(jié)構(gòu)與算法是你繞不過去的一道坎,你可以不精通,但你得懂。
這方面的知識,你可以看:
《算法圖解》 《算法導(dǎo)論》 《編程珠璣》 《劍指offer》 《大話數(shù)據(jù)結(jié)構(gòu)》

計(jì)算機(jī)組成原理
接下來,你來到了想成為大佬的最底層的那道坎:計(jì)算機(jī)組成原理。
CPU是如何執(zhí)行代碼指令的?CPU又是如何與內(nèi)存、硬盤交互通信的?計(jì)算機(jī)IO是怎么完成的?如何讓程序跑得更快,CPU利用率最高?零拷貝是什么意思?超線程技術(shù)是什么?NUMA架構(gòu)有是什么?硬盤讀寫怎樣最快?
想搞懂這些問題,不懂計(jì)算機(jī)組成原理根本無從回答,打通這一關(guān),是成為大佬至關(guān)重要的一步。
這方面的知識,你可以看經(jīng)典的黑皮書系列:
《計(jì)算機(jī)組成原理》 《計(jì)算機(jī)存儲與外設(shè)》 《深入理解計(jì)算機(jī)系統(tǒng)》

以上就是我列舉的一些成為大佬路上要學(xué)的技術(shù)和推薦參考的書籍。
總結(jié)一下,先打好基礎(chǔ),掌握一門編程語言,在某一個(gè)領(lǐng)域內(nèi)有自己的專長,端穩(wěn)自己吃飯的飯碗,這是第一步。
接下來,加深自己所在領(lǐng)域的技術(shù)深度,大量補(bǔ)充學(xué)習(xí)技術(shù)棧內(nèi)的知識和技術(shù),鞏固自己專業(yè)領(lǐng)域的地位。
再接著,將眼光跳出自己的技術(shù)棧,一方面大量了解接觸其他技術(shù)棧的知識,進(jìn)行橫向比較;另一方面重新學(xué)習(xí)計(jì)算機(jī)基礎(chǔ),自頂向下摸透計(jì)算機(jī)原理,進(jìn)行縱向鞏固,溫故而知新。
以上就是我的一點(diǎn)經(jīng)驗(yàn)之談,文中提到的學(xué)習(xí)書籍,如果有需要的朋友可以后臺添加我微信,我私發(fā)給你。
如果覺得有點(diǎn)用的話,歡迎給我點(diǎn)個(gè)贊哦~
