20年工齡技術(shù)大牛的肺腑感言,字字珠璣!
技術(shù)不斷迭代,掌握其中一門技術(shù)就可以悠閑到老么?盲目搬磚就能以量變換取質(zhì)變么?世界的快速發(fā)展,本質(zhì)是什么?如何鑒別出有潛力的技術(shù)?如何突破自身學(xué)習(xí)和能力的瓶頸,更好做到自我管理?
本文是左耳朵耗子老師在「云加社區(qū)沙龍 online」的分享整理,詳細闡述了技術(shù)人應(yīng)如何面對焦慮,把控技術(shù),更好適應(yīng)未來技術(shù)發(fā)展的沖擊。
從我二十多年的工作經(jīng)歷來看,期間經(jīng)歷了很多技術(shù)的更新?lián)Q代,整個技術(shù)模式、業(yè)務(wù)模式也是一直變來變?nèi)ァ?/p>
所以我針對這一話題,談一談技術(shù)人員應(yīng)該怎樣適應(yīng)這樣一種變化?
第一,如果想要把控技術(shù),應(yīng)對這個世界的一些變化,需要大致知道這個世界的一些規(guī)律和發(fā)展趨勢,另外還得認(rèn)識自己,自己到底適合做什么?
在這個趨勢和規(guī)律下屬于自己的發(fā)揮領(lǐng)域到底是什么?這是我們每個人都需要了解的。
第二,打牢基礎(chǔ),以不變應(yīng)萬變,不管世界怎樣變化,我都能很快適應(yīng)它。
第三,提升成長的效率,因為現(xiàn)在社會的節(jié)奏實在太快了,比二十年前快得太多,技術(shù)層出不窮,所以我們的成長也要更有效率。
效率并不單指的快,效率是怎么樣更有效,是有用工除以總工,怎么學(xué)到更有效的東西,或者怎么更有效學(xué)習(xí),是我們需要掌握的另一關(guān)鍵。
認(rèn)識世界,了解自己
①世界發(fā)展的大趨勢
首先要認(rèn)識這個世界發(fā)展的趨勢,人類社會目前處于第三次工業(yè)革命期間,信息化革命也正在進行。
第一次工業(yè)革命是蒸汽機時代,即用蒸汽機代替勞動力。第二次工業(yè)革命是內(nèi)燃機,電力被發(fā)明也在第二次工業(yè)革命。
第三次工業(yè)革命就是今天,主要是以信息化、原子能還有空間技術(shù)以及一些生物應(yīng)用工程等。
我們可以看到,這三次工業(yè)革命圍繞著都是能源的迭代、能源的升級。從蒸汽時代到內(nèi)燃機時代,再到原子能。
②技術(shù)演進的規(guī)律
為什需要這些動力和能源?因為人類發(fā)明各種機器都是需要能源和動力的,所以從蒸汽、內(nèi)燃到電力、原子能都是在不停的解決怎樣讓機器動起來的問題。
要讓機器動起來必須有一個外力,所以能源變成很重要的事情,機器可以不知疲倦的做,但是能源要跟得上。所以解決能源問題就是為了解決機器的自動化。
今天的信息革命其實也是在解決自動化,只要能夠被數(shù)字化了,就可以實現(xiàn)自動化。
以通訊為例,最早是飛鴿傳輸、然后是無線點播傳輸,到現(xiàn)在通過互聯(lián)網(wǎng)通訊,都是在解決自動化,自動化的過程就是只有機器在不知疲倦工作。
自動化可以帶來規(guī)模化,規(guī)?;梢詭沓杀緲O度的下降和效率極大的攀升,工業(yè)革命其實基本上都在干這些事。
接下來關(guān)注信息化革命,信息化革命分成三個階段:
1990 年代到 2000 年,這個時代叫兆比(MB)時代,是雅虎、新浪、搜狐、網(wǎng)易門戶網(wǎng)站的時代,這個時代就是 SP 互聯(lián)網(wǎng)提供商,把一些資訊數(shù)字化,然后發(fā)布到網(wǎng)絡(luò)上。
2000 年到 2010 年,這個時代叫多媒體或者是 UGC 時代,上網(wǎng)開始變得普遍了,每個人手里的數(shù)碼設(shè)備開始變得多了起來,可以上傳照片,可以上傳視頻,甚至可以在網(wǎng)上做社交。
從 2010 年到 2020 年,這過去的十年是移動互聯(lián)網(wǎng)時代,移動互聯(lián)網(wǎng)只需要手機在線,不需要依靠電腦。
因為手機隨時在線,所以個人的各種各樣的數(shù)據(jù)始終在被收集,只要用戶上網(wǎng)就會產(chǎn)生數(shù)據(jù),所以人的行為最終也被數(shù)字化了。
下一個十年,也許把手機丟了都可以。即使手機扔了,照樣可以數(shù)字化,這是因為線下有很多攝像頭、互聯(lián)網(wǎng)也可以虛擬化人類的很多行為。
整個世界的大趨勢基本上就是解決能源和自動化。我們了解到這些東西就可以知道未來世界會向什么方面變化。
過去用機器代替牲口,或者代替人類操作。比如說織布機,一個人可以管幾百臺織布機,數(shù)控機床以前靠人操作,后來數(shù)控就不需要人了,這是數(shù)字化帶來的一個更好體驗。
說得好聽叫解放生產(chǎn)力,說難聽點就是讓人失業(yè),但是是讓勞動密集型失業(yè),未來卻可能會讓知識密集型失業(yè)。
有一些知識密集型崗位,比如律師,未來是比較容易失業(yè)的,一些低端、中端的律師會被算法和機器取代。
因為律師行業(yè)里面很多東西是比較教條、公式化的,所有的案例、法律都是公開的,這些東西是可以被機器快速學(xué)習(xí)的。
技術(shù)的演進規(guī)律基本是自動化加規(guī)?;?,從而降低成本,提升效率。這就是為什么世界變得越來越快,人類都快跟不上節(jié)奏的原因,主要是整個社會不斷被機器、數(shù)據(jù)所驅(qū)動。
③技術(shù)世界的組成
技術(shù)世界是怎樣組成的,最大的基礎(chǔ)是什么?一般是理論,首先理論得突破,理論突破以后,產(chǎn)生質(zhì)變就能到下一個層次,理論突破了,就會有產(chǎn)生一些技術(shù)的基礎(chǔ),這些短期看起來可能賺不了錢,但是沒有這些東西后面就轉(zhuǎn)不了。
像操作系統(tǒng),操作系統(tǒng)并不解決人類的業(yè)務(wù)問題,但是如果沒有操作系統(tǒng),沒有網(wǎng)絡(luò),上傳應(yīng)用就不會存在。生存技術(shù)底層技術(shù)就像高速公路一樣,是不可或缺的。
不同人有不同的能力,不同的人有不同見解,不同的喜好。能看懂理論就進入理論,能深入底層原理就到技術(shù)那邊去,想解決某項問題,提升效率就去發(fā)明工具。
還有產(chǎn)品,產(chǎn)品是用戶體驗,想要提升一些體驗可以去做產(chǎn)品。項目基本上是為了完成一或解決一個具體問題,項目可能是這些技術(shù)工種里面最接近需求的,但是也是技術(shù)含量比較低的,生命周期可能會較短一些。
這個生命周期不是項目,操作系統(tǒng)任何產(chǎn)品都有生命周期,但是理論、基礎(chǔ)技術(shù)、工具它們所需要的基礎(chǔ)沉淀或者這方面技術(shù)人員的生命周期會比做項目的人員的生命周期要長。
分工也是這么來的,不是說做前端、后端、算法等這些基本的分工,而是更抽象的分工,這個分工是看每個人的能力還有他的個人喜好,這個世界就這么分出來的。
④世界需要的人才
這個世界需要什么樣的人?我們需要勞工,勞工能使用技術(shù)就好了。還有另外一種是技工,技工不但是使用技術(shù),還可以把活兒做好,這是有技能的勞動力。
勞工就是勞動力,勞動就好了,重復(fù)勞動。勞工最大的問題很有可能會被淘汰,因為他是在做一些重復(fù)勞動,做這種重復(fù)勞動的人很容易被淘汰。
技術(shù)工人能夠把技術(shù)弄好了,活兒做好,他屬于一種手藝人,隨著技術(shù)門檻的下降他可能就會被淘汰掉。
特種工人是必須了解原理和解決難題的一類工人,他們是解決比較難的、特定的一些技術(shù)問題。
當(dāng)一種技術(shù)被淘汰,他并不容易被淘汰,因為他懂原理,原理就是解決問題的能力,是解決問題的套路和方法。
關(guān)于設(shè)計和架構(gòu),設(shè)計和架構(gòu)人員主要是開發(fā)一些工具,提升效率和提升用戶體驗,提升穩(wěn)定性、性能、代碼重用等,總的來說就是為了降本增效。
這一類人的工作降低了技術(shù)得到門檻,他們把技術(shù)門檻降低了以后,就可以把這個技術(shù)普及開來,就可以由廣大勞工、技工、特殊工人使用了。
對于經(jīng)理,經(jīng)理主要是創(chuàng)造利潤,組織團隊。不同的場景下,經(jīng)理也需要不同的技能。比如說創(chuàng)造利潤,不同領(lǐng)域不同玩法,包括組織團隊也是一樣。
不同時代帶人也是完全不一樣。就像我們 70 后和今天 00 后、90 后怎么帶他們,完全是兩碼事。因為大家背景不一樣,經(jīng)歷不一樣。
這就是我總結(jié)的世界需要哪些人才,我們了解這些東西以后大概就明白應(yīng)該如何適應(yīng)這個世界的變化。
⑤技術(shù)領(lǐng)域的 11 個等級
下圖所示是谷歌的 SRE 評分卡,這個評分卡主要把谷歌內(nèi)部技術(shù)領(lǐng)域分 11 個等級。
我們可以看到:
- 0 等級對于相關(guān)領(lǐng)域不熟悉,屬于剛?cè)腴T。
- 1 是讀懂這個技術(shù)的基礎(chǔ)知識,能讀懂技術(shù)基礎(chǔ)就已經(jīng)不錯了。
- 2 可以實現(xiàn)小的改變,有小的動手能力,并能夠在簡單指導(dǎo)下找到更多的細節(jié),只要簡單指導(dǎo)一下就能跑了,有靈性。
- 3 基本懂這個領(lǐng)域,完全不需要別人幫助。
- 4 對于這個技術(shù)領(lǐng)域非常熟悉,可以完成日常工作,這基本需要有一定的經(jīng)驗的。對于這個技術(shù)領(lǐng)域有非常底層的深入和了解。
- 5 基本上能夠解決很多難題,相對前面的 0123 登記基本可以看做是勞工和技工層次,345 可以達到特種工人層次,到 678 基本就屬于設(shè)計和架構(gòu)了。
- 6 是從零開發(fā)大規(guī)模系統(tǒng),掌握底層和內(nèi)部系統(tǒng)。
- 7 是了解和利用技術(shù)和相關(guān)原理,從根本上自動化大量的系統(tǒng)管理運維工作。
- 8 是對于邊角技術(shù)有深入了解,能夠設(shè)計部署并負(fù)責(zé)關(guān)鍵大規(guī)模基礎(chǔ)設(shè)施,并且構(gòu)建自動化設(shè)施。這里面的關(guān)鍵詞是基礎(chǔ)、底層原理、自動化,這些東西是我們科技工作者或者程序員的技術(shù)特征,跟前文的分析是一致的。
- 9 和 10 是能夠在該技術(shù)領(lǐng)域出本書,到理論級了,并和標(biāo)準(zhǔn)委員會的人一起工作,了解相關(guān)的標(biāo)準(zhǔn)和方法經(jīng)典的書,不是隨便寫的書,至少要像 TCPIP 級別,或者像 Linux 高級編程,這種經(jīng)典圖書或者是教科書?;蛘呤悄軌虬l(fā)明技術(shù),這樣的人已經(jīng)走在絕大多數(shù)人前面了。
⑥認(rèn)識自己
我們除了要了解這個世界大概的一些趨勢,還需要了解自己。
如果你需要能夠扛得住變化,首先你要找得到自己特長。你要認(rèn)識自己的特長,找到自己的天賦,找到你在 DNA 里比別人強的東西,就拿你的 DNA 跟別人競爭就好了。
所以你要找到自己可以干成的事,找到別人找你請教的事,你身邊人找你請教就是說明你有特長。這是找到自己特長非常非常重要,揚長避短。
如果你沒有找到自己特長,就找自己有興趣的東西。什么叫興趣?興趣是再難再累都不會放棄的事。如果你遇到困難就會放棄不叫興趣,那叫葉公好龍。
如果你沒有特長,沒有興趣就要學(xué)方法。這種方法就是要有時間觀念,要會做計劃,要懂統(tǒng)籌、規(guī)劃。
對于做過的事情,犯過的錯誤多總結(jié),舉一反三,喜歡自己找答案,自己探究因果關(guān)系,這是一些方法,自己總結(jié)一些套路。
如果你沒有特長,沒有興趣,也沒有方法,你還能做的事就是勤奮,勤奮注定會讓你成為一個比較勞累的人,也是很有可能被淘汰的人。
隨著你的年紀(jì)越來越大,你的勤奮也會越來越不值錢。因為年輕人會比你更勤奮,比你更勤奮、比你斗志更強,比你能力更強,比你要錢更少的人會出現(xiàn)。勤奮最不值錢,但是只要你勤奮至少能夠自食其力。
以上就是為了應(yīng)對未來技術(shù)變化,作為個人必須要從特長、興趣、方法一層一層篩選挖掘,如果沒有這些你就要努力和勤奮。
從我個人而言,我不算是特別聰明的人,但自認(rèn)為對技術(shù)還是比較感興趣的,難的我不怕。
有很多比較難啃的技術(shù),聰明點的人啃一個月就懂了,我不行,我可能啃半年。但是沒有關(guān)系,知識都是死的,只要不怕困難總有一天會懂的。最可怕是畏難,為自己找借口,這樣就不太好了。
打牢基礎(chǔ),以不變應(yīng)萬變
①基礎(chǔ)緣何如此重要?
前面提到的谷歌評分卡中,我們看到了許多基礎(chǔ)原理方面的內(nèi)容,其實要應(yīng)對未來的變化,很重要的一點就是無招勝有招,以不變應(yīng)萬變。
世界變化都是表面的東西,內(nèi)在的東西其實并沒有太多的變化。理論層面上變得不多,反而形式上的東西今天一個花樣,明天一個花樣,所以如果要去應(yīng)對這種變化,就一定要打牢自己的基礎(chǔ),提升內(nèi)功休養(yǎng)。
比如像編程的一些方式和套路,修飾模式原理本質(zhì),解耦,提升代碼的重用度等。
提升代碼重用度必須解耦,要跟現(xiàn)實解耦,提升抽象,這些都是一些技術(shù)基礎(chǔ)。無論用什么語言,都是這么做的。
打牢基礎(chǔ)就可以突破瓶頸,不打牢基礎(chǔ)沒有辦法突破瓶頸。在技術(shù)世界不要覺得量變會造成質(zhì)變,這是不可能的。
技術(shù)這個東西就像砌磚頭蓋房子,按照砌磚頭方式做代碼你不行的,因為你不懂原理,你沒有辦法成長上去的。
所以你必須學(xué)習(xí)基礎(chǔ)的理論知識,如果不學(xué)這些基礎(chǔ)理論知識,你在表面,當(dāng)這個技術(shù)有變化,就會發(fā)現(xiàn)以前學(xué)的都沒用了,要重頭學(xué)一遍。
掌握技術(shù)推理可以讓自己找到答案和知識,基礎(chǔ)是抽象和歸納,很容易形成進一步的推論。
我們學(xué)的很多技術(shù)實現(xiàn)都逃不脫基礎(chǔ)原理,不管是 Java,還是其他語言,只要用 TCP 用的都是相同的原理,逃不出范圍,只要抓住原理,甚至還可以自己推導(dǎo)一些技術(shù)。
②什么才算是基礎(chǔ)技術(shù)?
一些技術(shù),比如程序語言,像 C 和 C++,原理主要就是編譯、內(nèi)存管理、指針等。Java 語言原理基本是在虛擬機 JVM、垃圾回收、JVM 字節(jié)碼等。
Python 基本在解釋器,Go 語言就是并發(fā),基本都是這些,內(nèi)存是怎么管的,Java 里面為什么沒有指針,Java 虛函數(shù)是什么意思?......
你需要了解重要類庫的事件,它的數(shù)據(jù)結(jié)構(gòu)是紅黑樹,還是哈希表?還有代碼設(shè)計,并發(fā)、異步,編程范式、設(shè)計模式。
操作系統(tǒng)就是計算原理,Linux、網(wǎng)絡(luò)協(xié)議、還有數(shù)據(jù)庫,像數(shù)據(jù)庫設(shè)計的范式,后臺原理都要搞清楚。
中間件 Kafka 是什么原理,你要了解里面的原理,還有一些東西巨耗內(nèi)存。網(wǎng)管代理,調(diào)度系統(tǒng)等等,理論知識算法和數(shù)據(jù)結(jié)構(gòu)......
前文所述,這個世界一直在做自動化,所以未來一定會自動化一些知識,因此算法和數(shù)據(jù)很重要,數(shù)據(jù)庫設(shè)計范式、網(wǎng)絡(luò)模型這些都是理論知識,理論知識可以讓你從本質(zhì)了解很多的東西。
這些知識其實就是一個計算機科學(xué)專業(yè)的學(xué)生他所要學(xué)習(xí)的原理,除了中間件可能學(xué)校沒有教,但是一般學(xué)生時代學(xué)這些東西也沒必要,我們的一些學(xué)校教得也很糟糕,一些老師可能都不行,他怎么能教學(xué)生呢?
而且教學(xué)生的書都是自己寫的,凡是世界上最優(yōu)秀的教課書不用了,一定要自己寫一本。
我自己就遭遇過這樣的經(jīng)歷,丹尼斯 C 語言程序設(shè)計不用了,一定要自己弄一本,譚浩強的語言設(shè)計,我也不明白為什么這樣,人家好的不用,非要用自己的,然后里面錯誤百出。
拿不出原汁原味的東西,你的學(xué)習(xí)效率一定是下降的。在大學(xué)基本都是這樣的。這些基礎(chǔ)技術(shù)大概需要四五年的時間堆疊。
我工作二十年了,這二十年來基本還是這些原理沒變,無論形式怎么變,但是核心永遠還是這些,理論創(chuàng)新很難,這是以不變應(yīng)萬變。
③如何識別好的技術(shù)?
有了這些理論知識以后,離實際操作還會有一些距離?,F(xiàn)在技術(shù)這么多,什么才是好技術(shù)?
首先了解這個技術(shù)解決什么問題。如果這個技術(shù)能解決很普遍的問題,那么這個技術(shù)可能就很牛,如果這個技術(shù)只是解決很小眾的問題,這個技術(shù)可能也就隨之小眾。
技術(shù)一定降低技術(shù)門檻,提高開發(fā)效率,或者提升穩(wěn)定性,基本所有的技術(shù)更迭都是為了這些東西。所以,技術(shù)越普遍越好。
Lisp 大家都說很好,但是 Lisp 解決的只是一種理論上的問題,其實并不具有普遍性。我們可以學(xué) Lisp,但是你要指著它吃飯就不太行了。
我們需要提升什么樣的能力?能夠進行更為復(fù)雜的計算?能夠自動化更為復(fù)雜和困難的事情,基本上所有技術(shù)都是這樣按這樣的方向發(fā)展的。
哪一些技術(shù)有潛力能成為主流技術(shù)?好的技術(shù)不一定能成為主流技術(shù)。成為主流技術(shù)特征通常來說有三點:
- 有大公司背書
- 有殺手級的應(yīng)用
- 有強大的社區(qū)
這樣的技術(shù) Java 稱得上是第一,所有大公司都在 Java,而且 Java 有前端、有手機端、有后端,各種殺手級應(yīng)用一堆又一堆。
還有強大的社區(qū),而且 Java 是企業(yè)級的,所以可以看到像交易型的系統(tǒng)基本都是 C、C++、Java 這條線還有多 .NET 也是這條線,要用開源,生產(chǎn)率還想高一點、系統(tǒng)穩(wěn)定點就用 Java。
還有像 Go 語言,也有大公司背書,殺手級應(yīng)用,社區(qū)也比較強大,社區(qū)把各種 Java 中間件往 GO 語言遷移,這些都是大技術(shù)。
那么 PHP 怎么樣,Node.js 怎么樣,這些都是腳本型語言,腳本型語言我并不覺得有多好。
PHP 未來也不會有太多的可能性。它們倒是降低技術(shù)門檻了,但是其實并不能解決更復(fù)雜的問題。要用 PHP 搞架構(gòu)也挺困難的。
為什么 Java 更容易做架構(gòu),因為一般來說一個架構(gòu)系統(tǒng)通常要有通訊系統(tǒng),很多人覺得架構(gòu)就是搞好這些系統(tǒng)和通訊。
系統(tǒng)間的通訊就是一個系統(tǒng)集成,架構(gòu)里面還有控制系統(tǒng),像服務(wù)畫像、一些配置管理和配置中心,還有一些網(wǎng)管、流量分發(fā),還有一些調(diào)度系統(tǒng),控制系統(tǒng)和一些流量分發(fā)系統(tǒng)。
還有像 DIVE 的 CICD 就是切流量的,還有數(shù)據(jù)系統(tǒng),一個架構(gòu)基本有控制系統(tǒng)、流量系統(tǒng)、調(diào)度系統(tǒng)、狀態(tài)系統(tǒng)、數(shù)據(jù)系統(tǒng)很多系統(tǒng)組成,以及通訊系統(tǒng)。
Java 社區(qū)里面這些東西最全,所以使用 Java 就比較方便。
我們怎么把控技術(shù),怎么識別什么是“好的技術(shù)”。不是學(xué)術(shù)上的好,而是能夠更為實用、務(wù)實的技術(shù)。
作為程序員,技術(shù)不是職業(yè),我們還是要甄別更為普及的,更為易用比較廣的技術(shù)。
但是無論怎么樣,基礎(chǔ)技術(shù)都是基本不變的。所以可以看到很多高級公司不是特別看重你用什么語言,像微軟、谷歌、Facebook 等基本都不是很看重,但是要員工把基本原理弄明白,因為這是你是否能成長的重要依據(jù)。
提升自身成長效率
技術(shù)在不斷更新,我這二十年基本也都是在不斷追趕,如果你跟進慢了肯定就不行,所以必須要跟進的快一些。
首先要有學(xué)習(xí)的效率,怎么樣提升你學(xué)習(xí)的效率,你若是學(xué)習(xí)效率提不上來,其實時間一長了就會被甩到后面去了。
下圖展示的是學(xué)習(xí)金字塔,如果你采取的是聽講得到形式學(xué)習(xí),最后可能只有 5% 的知識留存。
你自己讀書可以留下 10%,看一些視頻有 20% 留下,看別人演示做一遍有 30% 留下......
為什么這些效果都很差呢?因為這些都是屬于被動學(xué)習(xí),不經(jīng)過自己的思考就是被動學(xué)習(xí)。
但是主動參與學(xué)習(xí),比如說在討論組里面積極的跟別人討論問題能夠留下 50%。如果你能夠做出實踐,親自踩踩坑,就會留下 75%。
如果你教別人,就有 90% 知識留存,所以學(xué)習(xí)知識的過程可以想象一下講給其他人聽的過程。
學(xué)習(xí)方法
學(xué)習(xí)方法要主動學(xué)習(xí),主動學(xué)習(xí)我們稱之為深度學(xué)習(xí),如果你不能深度學(xué)習(xí),即使十年時間花費出去,也沒有任何意義。
①挑選一手知識和信息源
對于學(xué)習(xí)方法:第一我們一定要到知識源去挑選知識,知識信息源非常關(guān)鍵,二手信息丟失太大了,譚浩強寫的書就丟失太多信息了。
目前計算機一手知識基本都是國外的,所以英文非常重要。我鼓勵大家一定讀第一手的資料。
如果你英語有問題,至少要看翻譯過來,最好是原汁原味翻譯的,不要我理解了給你講那種,那種也是被別人嚼一遍再講給你。
你沒有體會,而是別人帶著你,別人的體會會影響你,也許你的體會會比他更好,因為是你自己總結(jié)出來的東西,所以知識源很重要。
②注意原理和基礎(chǔ)
第二要注重基礎(chǔ)原理。雖然可以忘記這個技術(shù),但是原理記在心里,我可以徒手實現(xiàn)出來,而且通過原理可以更快學(xué)習(xí)其他類似的技術(shù)。所以原理很重要!當(dāng)你學(xué)會 C、C++ 要學(xué) Java 和 GO 都很快。
③使用知識圖譜
一定要學(xué)會使用知識圖,把知識結(jié)構(gòu)化。大家都說 C++ 最難學(xué),C++ 三大塊,第一是解決 C 語言的問題,第二面向?qū)ο?,第三?STL;C 語言有指針問題、有宏問題。
對于 TCP 協(xié)議,首先第一個要記住狀態(tài)圖,怎么建立連接,怎么斷連接,狀態(tài)怎么變遷。TCP 沒有連接,是靠狀態(tài)維護連接的。
其次,要了解 TCP 怎么保證可靠性,就是丟包以后怎么重傳。
然后,重傳會帶來擁塞控制,發(fā)的速度和收的速度不一定對等,或者網(wǎng)絡(luò)上的速度不一定對等,涉及到擁塞控制。
這就是 TCP 基本三大塊,順著這個脈絡(luò)一點點往下想,比如說怎么做擁塞控制,滑動窗口消息技術(shù),怎么測試重傳等等類似這樣的有很多算法。所以你用知識圖關(guān)聯(lián)就可以進行順藤摸瓜。
不需要記所有知識,那些手冊的知識不需要記,你知道在哪里能找到就可以了。
你腦子里面要有地圖,學(xué)一個東西就跟在城市生活一樣,閉上眼睛就知道地圖,A 點到 B 點怎么去大概方向要知道。
我在北京我去廣州,廣州在南邊,我大概坐飛機還是火車要心里有數(shù)。雖然不用記住所有的細節(jié),但是大概知道我去找誰,我就可以知道怎么找到那個地方。
你不需要記住所有知識,記住大概地圖,要記住基本的方法和原理,知道在哪里可以找到他就可以了。
④學(xué)會舉一反三
舉一反三,就是用不同方法學(xué)一個東西,比如說學(xué) TCP 協(xié)議,看書是一種方法,編程是另外一種方法,還有用做 Debug 去看的,用不同方法學(xué)一個東西會讓你更加熟悉,你學(xué)一個知識的同時把周邊也學(xué)了。
比如說學(xué)前端能不能把 HTCP 學(xué)一下,比如說長連接、短連接,包括 hp1、hp2 有一些不一樣的東西。
⑤總結(jié)和歸納
一定要學(xué)會總結(jié)和歸納,形成自己的思維框架、自己的套路、自己的方法論,以后學(xué)這個東西應(yīng)該怎么學(xué)。
就像學(xué)一門新的語言,不管 GO 語言,還是 Rust 語言,第一件事情就是了解內(nèi)存是怎么管理的,第二是范性怎么管,并發(fā)怎么弄。還有一些抽象怎么弄,比如說怎么解耦,怎么實現(xiàn)多態(tài)?
套路這種東西只有學(xué)的多了以后才能形成套路,如果你只學(xué)會一門語言不會有套路,你要學(xué) C、C++,每年學(xué)門語言,不用學(xué)多精。
你思考這個語言有什么不一樣,為什么這個這種有玩法,那個有那種玩法,這些東西思考多了套路方法論就出來了。
比如說 Windows 和 Linux 有什么不同,Linux 和 UNIX 又有什么不同?只有總結(jié)自己的框架、套路和方法,這些才永遠不會被淘汰。
⑥實踐和堅持
剩下就是多做多練,多堅持,只有實踐才會有經(jīng)驗,只有鍛煉了才能夠把自己的脂肪變沒,所以要把知識變成技能必須練,就像小學(xué)生學(xué)會加減乘除,還是要演練,必須多做題,題目做得多了,自然掌握得好。
要挑選好的知識源,注重原理技術(shù),有一些原理的基礎(chǔ)的書太枯燥,但是我告訴你學(xué)習(xí)基礎(chǔ)太值得投入時間,搬磚賺幾十元不值得,因為賺的是辛苦錢,老了就賺不了,必須要賺更有能力的錢,這是學(xué)習(xí)投資。
主動管理
關(guān)于成長我們還需要主動管理,不主動管理會導(dǎo)致什么結(jié)果呢?被動管理,天天被人追著,沒有效率。
所以要學(xué)會主動管理,要想應(yīng)對未來,把控變化,不主動管理,就不會有好的效率,因為被動就會被別人牽著鼻子走。
①管理時間
主動管理第一是要學(xué)會時間管理,不要被別人打斷。如果你要干一個很重要的事情,建議開啟手機勿擾模式,或者直接把手機關(guān)機。
如果有一些重要的事就通知大家我現(xiàn)在干什么事情,從幾點到幾點需要全身心不要打擾我。
像我以前在一些大公司里面,如果我不想被別人打擾,就發(fā)郵件,就說不要打擾我。我害怕別人止不住打擾我,這是非常重要的。
你一天會領(lǐng)到很多作業(yè),有很多事情要做,我的經(jīng)驗就是最短作業(yè)優(yōu)先,有一些不是最緊急先做,我覺得先做短的,短的很快搞完了,后面會有大塊大塊時間,為了省出大塊大塊時間,要把這些短作業(yè)清一遍。這些短作業(yè)其實最討厭。
抓重點,一天干不了太多事情,所以一定要抓最重要的事情。另外想清楚再做,慢一點,欲速則不達,快速做完了要返工,又被別人管理。
你做不好,別人天天打擾你,這個問題,那個問題,你怎么主動管理?主動管理時間就是想清楚再做別返工。
②管理需求
管理需求,通過了解“XY 問題”,可以讓你減少很多工作量。“XY 問題”就是有個人在網(wǎng)絡(luò)上問別人,我怎么截取字符串最后三位?很多人提供了各種辦法,然后相互爭論哪種辦法更好。
這個時候有個人提問:“為什么截取字符串最后三位?”,提問者說:“因為我要拿文件名擴展,就是操作系統(tǒng)文件擴展名”,那個人說:“操作系統(tǒng)文件擴展名不一定三位,有可能兩位,有可能四位,有可能不知道多長”。
這就是“XY 問題”,這個世界絕大多數(shù)給你 X 問題,就是告訴你字符串最后三位怎么解,但是其實 X 問題是什么?
文件名擴展。這種問題太多了,產(chǎn)品經(jīng)理和領(lǐng)導(dǎo)經(jīng)常性不會告訴你 X,他就會覺得 Y 可以解決 X,他屏蔽了很多信息,讓你做 Y,你不知道怎么做,做出來以后達不到效果又讓你改。
X 問題其實很重要。產(chǎn)品經(jīng)理給你的需求很多,需要問他為什么做這個,要達到什么目標(biāo),做成什么效果?
然后你再告訴他,要達到這個功能為什么用這個方法,為什么不用一個更好的方法呢?這就是主動管理。
③管理上級
另外要學(xué)習(xí)抓重點,區(qū)分必要性和科學(xué)性。需求有一些東西不一定要一次做好,有時候先抓最重點的,多問問為什么要做,解決什么問題,達到什么目標(biāo)。
管理好需求,實在忙不過來說只能做三個需求,撐死了要做第四個需求,如果讓我一個星期做五個,我可能保證不了質(zhì)量了,出了問題你們自己要擔(dān)著,就是出 Bug 什么的。
這個就是向上管理。向上管理不是說讓你說“不”,我們永遠不要說“不”,說“不”以后不管上級和用戶都會討厭你,但是我們要說有條件的“是”。
我們要給多個選項,你讓我一周做五個需求,要給他三選項:
我一周做不了五個,我可以做三個,然后我做哪三個,抓重點。
給我兩人,我做五個,你看行不行?
一周可以做五個,但是質(zhì)量不保證,可能會有很多的 Bug,你愿意不愿意接受?
他把球扔給你了,你再把球扔出去,壓力給到他,讓他一起跟你承擔(dān)這個壓力,怎么讓他一起承擔(dān)這個壓力呢?這就是條件。
要把條件甩給他,我肯定做,但是你要承擔(dān)這個條件,就是上去承擔(dān)做事情的后果,要么給我時間,要么就犧牲質(zhì)量,又好又快肯定需要條件。如果不費口舌,未來就會累得要死,一定學(xué)會費口舌。
④管理爭論
第四是管理爭論。有時候爭論不休是挺痛苦的事情,你說服不了他,他說服不了你,這個事情到老板那邊去了,老板也說不清楚,所以說主動說服對方是很重要的事情。
你要站在很高的格局,找到一些數(shù)據(jù)說服對方。更高的格局什么意思呢?他來找你實現(xiàn)需求 ABC,你要跟他說,我們更高的格局是什么?用戶要滿意,用戶要滿意肯定不是 ABC,可能是 XYZ,這就是更高的格局。
如果只是在這些細節(jié)糾纏,其實誰也說服不了誰。比如說用戶是更高的格局,老板來了,CEO 來了也干不過用戶,因為用戶是掏錢的。所以站在用戶的角度會是比較好的,站在掙錢角度也是格局比較高的地方。
所以如果你想提升你的效率,你就需要主動管理時間,主動管理工作,主動管理你的上級甚至你的平級,甚至你的用戶,還要管理好你的爭論。
當(dāng)你全面主動操控這些事情的時候,別說技術(shù)把控力了,其實你已經(jīng)在在 PUA 他們,在精神控制他們。
否則你是被他們在 PUA,996 就是一種 PUA。所以主動管理誰的效率高,主動人高,被動人一定低。
總結(jié)
所以我們看學(xué)習(xí)方法包括整體提升效率,基本都需要主動,我們的學(xué)習(xí)要變主動,找一些方法,我們的管理也要變主動,找一些方法。
往大的方向,我們需要看到整個世界的發(fā)展趨勢,往小的地方,平時留意整個公司的發(fā)展趨勢。整個公司是業(yè)務(wù)是什么?怎么進行的?創(chuàng)造什么價值?解決什么問題?這些都是很實在的。
當(dāng)你知道了這些東西以后就會潛移默化改變你的選擇你的選擇,你行為方式,你的決定,包括你挑選什么樣的技術(shù)等。
再結(jié)合你如何認(rèn)識你自己,你有什么樣的特長,你感興趣的東西,你懂什么樣的方法,你知道往什么樣的地方付出.....
這些問題合起來就可以找到自己的一條路,在自己最適合的領(lǐng)域上。最后你還需要有一些比較科學(xué)的學(xué)習(xí)方法,還有一些比較科學(xué)的獨立的管理方法,這樣就可以面對焦慮、把控技術(shù)。
作者:陳皓(左耳朵耗子)
簡介:MegaEase 創(chuàng)始人,騰訊云最具價值專家(TVP)。資深程序員,酷殼 coolshell.cn 博主。前亞馬遜高級研發(fā)經(jīng)理,阿里巴巴資深架構(gòu)師技術(shù)總監(jiān)。目前創(chuàng)業(yè),公司 MegaEase 創(chuàng)始人,致力于為企業(yè)用戶提供一個可以不改一行代碼就可以提高系統(tǒng)性能和穩(wěn)定性的產(chǎn)品,即 Cloud Native 和微服務(wù)調(diào)度。