技術(shù)人如何修煉內(nèi)功(高級篇)
技術(shù)人為何要修煉好內(nèi)功
記得在大學(xué)里學(xué)習(xí)思想政治課中有一條原理是“科學(xué)技術(shù)是第一生產(chǎn)力”,可見科學(xué)技術(shù)對于人類的發(fā)展有多么的重要,從人類開始制作工具、種植農(nóng)作物、發(fā)明造紙術(shù)、發(fā)明火藥等,在歷史的長河中,無一不是科學(xué)技術(shù)在推動著人類的發(fā)展,到了現(xiàn)代的工業(yè)革命、計算機(jī)革命,再到網(wǎng)絡(luò)互聯(lián)、區(qū)塊鏈和人工智能,科學(xué)技術(shù)不斷的把人類帶入新時代,可見沒有科學(xué)技術(shù)就沒有我們?nèi)祟惉F(xiàn)在的發(fā)展。
在我們飛速發(fā)展的IT時代,科學(xué)技術(shù)更是人類發(fā)展的源動力,對于我們IT人,技術(shù)是我們做事兒的核動力,沒有了技術(shù)我們很難體現(xiàn)我們的個人價值,但是,在做好技術(shù)、用好技術(shù)的同時,我們不能忽略我們是社會人,在大千社會中我們除了創(chuàng)造價值,我們還需要體現(xiàn)創(chuàng)造的價值,推廣我們的成果和產(chǎn)出,保護(hù)我們的價值,讓更多人接受我們的技術(shù)價值。從另一方面講,技術(shù)是推動我們前行的動力,但是我們前行的方向也至關(guān)重要,我們必須保證前行方向的正確性,否則我們就會走錯路走彎路,因此,我們在掌握好技術(shù)的同時,我們需要修煉好內(nèi)功,起航之前我們要設(shè)定合適的目標(biāo),否則就更容易在茫茫大海中偏離方向。
2017年8月6日,筆者在趣直播組織的百人規(guī)模的2017技術(shù)人成長交流會上分享了關(guān)于《技術(shù)人如何修煉內(nèi)功》的主題,會后有好多小伙伴與筆者探討技術(shù)、架構(gòu)、人生、生活、工作和思想等,筆者決定將更多的內(nèi)容納入《技術(shù)人如何修煉內(nèi)功》這篇文章,幫助更多的小伙伴在專研技術(shù)的同時,也多抬頭看看是否偏離了自己既定的方向,或者抬頭看看是否走了彎路而捷徑就在身邊,總結(jié)成一句話就是:低頭干活,抬頭走路。
計算機(jī)基礎(chǔ)知識的修煉
我們在大學(xué)里計算機(jī)專業(yè)都會系統(tǒng)化的學(xué)習(xí)計算機(jī)等相關(guān)技術(shù),但是這些技術(shù)通常會被IT行業(yè)從業(yè)者忽略掉,尤其在互聯(lián)網(wǎng)行業(yè),我發(fā)現(xiàn)很多學(xué)經(jīng)濟(jì)的、學(xué)語言的小伙伴也過來從事IT行業(yè),有些做的還不錯,這是因為互聯(lián)網(wǎng)處在風(fēng)口,機(jī)會多,這些小伙伴即使對計算機(jī)原理一無所知但是有其他的才能,也能找到適合自己的位置,但是我還是推薦小伙伴們,既然做IT行業(yè),就一定要有技術(shù)功底和內(nèi)功,不要憑空的構(gòu)建空中花園,這樣地基不穩(wěn),也難以支撐你一直走下去。
對于基礎(chǔ)的計算機(jī)知識,最重要的兩個方向就是操作系統(tǒng)和網(wǎng)絡(luò)、算法和數(shù)據(jù)結(jié)構(gòu)。
操作系統(tǒng)和網(wǎng)絡(luò)
互聯(lián)網(wǎng)里面最大的應(yīng)用場景就是高并發(fā)、高可用、高性能的線上服務(wù),做這類系統(tǒng)實際上考驗的是我們對操作系統(tǒng)和網(wǎng)絡(luò)的理解,任何一個系統(tǒng)最后都是運行在操作系統(tǒng)之上的,也都是運行在網(wǎng)絡(luò)之上的,包括分布式系統(tǒng),所以,對于操作系統(tǒng)和網(wǎng)絡(luò)本身一定要有較深的造詣,尤其對于高并發(fā)和高性能,如果對操作系統(tǒng)原理一無所知,基本很難理解到什么是并發(fā)和鎖,很難理解到高性能用什么指標(biāo)來衡量,以及怎么實現(xiàn)高并發(fā)、高可用和高性能。
對于操作系統(tǒng),我們必須了解CPU的多核體系結(jié)構(gòu)、內(nèi)存分頁和緩存技術(shù)、磁盤IO的優(yōu)略和網(wǎng)卡IO的情況,并且要理解計算機(jī)的工作原理,并且會根據(jù)這些指標(biāo)粗略評估服務(wù)能夠輸出的性能。
對于網(wǎng)絡(luò),必須理解理論上定義的7層模型,了解TCP/IP的三次握手,另外由于我們在分布式服務(wù)架構(gòu)中多數(shù)使用應(yīng)用層的HTTP協(xié)議,我們需要對HTTP協(xié)議理解的很深刻。
算法和數(shù)據(jù)結(jié)構(gòu)
應(yīng)用層面的小伙伴們可能對算法和數(shù)據(jù)結(jié)構(gòu)的應(yīng)用比較少,即使有應(yīng)用也比較簡單,但是算法能力代表了一個人的邏輯思維和思考能力,能把各種基礎(chǔ)算法理解的人智商都不會低,能夠把程序?qū)懞玫娜诉壿嬎季S一定很強(qiáng),另外,我一般面試小伙伴的時候,我都會考察一下小伙伴會不會高級算法,例如:遞歸、剪枝、貪婪、動態(tài)規(guī)劃,仔細(xì)想一下就會知道,會動態(tài)規(guī)劃的人,他不是勤奮的就是聰明的,無論哪一樣,你都有錄取他的沖動。
互聯(lián)網(wǎng)技術(shù)的修煉
在互聯(lián)網(wǎng)公司里,一共有3個大的方向:線上高并發(fā)服務(wù)方向、大數(shù)據(jù)方向、專家方向。
線上高并發(fā)服務(wù)方向
線上高并發(fā)服務(wù)方向是個強(qiáng)需求,想象一下無論你開發(fā)哪類應(yīng)用和網(wǎng)站,線上服務(wù)都是必須的,有了服務(wù)才有了功能,才有了產(chǎn)品,因此筆者也主要從事互聯(lián)網(wǎng)后臺高并發(fā)服務(wù)的設(shè)計與實現(xiàn)。解決高并發(fā)服務(wù)其實并沒有那么難,這些年高并發(fā)服務(wù)的技術(shù)棧也已經(jīng)沒有了門檻,只要可以投入足夠的成本,構(gòu)建可伸縮的服務(wù)不是問題,達(dá)到多大的TPS也都不是問題,核心思想就是"分而治之,大而化下,小而化了。
無論是使用緩存抗讀、使用消息隊列抗寫、數(shù)據(jù)庫分庫分表、緩存分片、應(yīng)用層伸縮、減少競爭、7層負(fù)載均衡、三四層負(fù)載均衡等、CDN、DNS輪訓(xùn)等等,這一切的一切都是"分而治之"的思
想。
分而治之并不是一個新概念,周朝的周天子實施分封制,冊封自己的親戚為諸侯,受封的諸侯能夠有效地管理地方,為周王提供貢賦等經(jīng)濟(jì)來源,戰(zhàn)時為周王提供軍隊,聽從周王調(diào)遣。周朝繁榮昌盛了幾百上千年,但是,受封諸侯隨著自身實力的增強(qiáng)壯大,對抗周王、不聽從周王調(diào)遣的情況越來越嚴(yán)重,導(dǎo)致周朝王室衰落,最終崩潰瓦解,這和我們分布式服務(wù)一樣,當(dāng)系統(tǒng)的功能變多了,通過拆分可以化解復(fù)雜的系統(tǒng)為多個微小的職責(zé)單一的微服務(wù),各個微服務(wù)完全自治,通過互相通信協(xié)調(diào)共同完成一個大任務(wù),然后,不一致的問題就出現(xiàn)了,這也是一個亟待解決的問題。
另外,互聯(lián)網(wǎng)的項目注重非功能質(zhì)量,我把這些主要的非功能質(zhì)量成為六脈神劍:一致性保證、高性能、高可用、可伸縮、可擴(kuò)展、安全性,每個主體就是一個方法論,每個方法論就想楊過手中的玄鐵重劍,大家可以參考《分布式服務(wù)架構(gòu):原理、設(shè)計與實戰(zhàn)》一書。
學(xué)技術(shù)得學(xué)它的內(nèi)功,內(nèi)功就是基礎(chǔ),不要一味的去追求高大上的技術(shù),而是要尋根究底,撥開現(xiàn)象看本質(zhì)。記得一個小伙伴在【云時代架構(gòu)】技術(shù)社群里提出一個問題,問題顯得非常的骨干:“如何實現(xiàn)10ms延遲的內(nèi)存計算”,這個問題聽起來確實很高大上,首先有內(nèi)存計算,然后還有10ms的延遲,聽起來可是一個高手提出的問題,但是仔細(xì)想一下,這里的內(nèi)存計算其實是直接陷入了方法,10ms是目標(biāo),但是沒有詳細(xì)說明什么樣的場景下,有什么樣的數(shù)據(jù),數(shù)據(jù)的特點是什么,怎么分布的,要從數(shù)據(jù)中如何分析,使用什么規(guī)則找到什么樣的結(jié)果,因此,對這類問題的討論通常是無效的,大家各抒己見,有人說用spark實現(xiàn),有人說用storm實現(xiàn),實際上在問題沒有明確之前,使用什么技術(shù)都難以回答這類問題,想一下分布式系統(tǒng)中,機(jī)房一個來回的網(wǎng)絡(luò)通信都需要幾個毫秒,不從系統(tǒng)和網(wǎng)絡(luò)的基礎(chǔ)上評估,又如何能解決好這類問題呢?
大數(shù)據(jù)方向
大數(shù)據(jù)是最近比較火的方向,大小公司都在使用大數(shù)據(jù)技術(shù),大公司使用大數(shù)據(jù)分析從眾多數(shù)據(jù)中分析出來業(yè)務(wù)模型,得出有價值的結(jié)果,來幫助企業(yè)制定市場和銷售策略,中小公司多數(shù)使用大數(shù)據(jù)出報表和做風(fēng)控等。
所有的大數(shù)據(jù)技術(shù)的根基都來自Mapreduce、Gfs和Bigtable這三篇論文,推薦大家閱讀一下以下論文:谷歌大數(shù)據(jù)的三駕馬車
理解了這些基礎(chǔ)技術(shù)原理,再去學(xué)習(xí)hadoop、hbase、storm、spark、cassandra、mangodb、es等都不是問題。
專家方向
還有一個比較大的方向,就是專家方向,例如:DBA、性能專家、安全專家、區(qū)塊鏈專家、人工智能AI專家等。
面試官眼里的優(yōu)秀技術(shù)候選人
作為一個面試官,這兩年內(nèi)筆者面試了無數(shù)的候選人,筆者通常通過知識的廣度、深度和高度三個維度來衡量一個候選人。
對于知識的廣度就是天馬行空的聊技術(shù),或者簡歷寫什么主題就聊什么主題,主要看候選人做過哪些工作、使用過哪些工具、解決過哪些問題、會哪些計算機(jī)語言等。
對于知識的深度我會讓候選人自己選擇主題,然后深入探討,有的候選人會一時不知道如何挖掘自己的深度,那么筆者就會挑幾個關(guān)鍵點,例如:GC、索引、鎖、并發(fā)等深入探討。建議每個候選人都要挑選幾個主題深入學(xué)習(xí)和探索,并總結(jié)落地,象征著進(jìn)行技術(shù)科研的能力。
高度就看這個人的思維模式,會不會換位思考,能不能把握大的方向,是否從生產(chǎn)力和產(chǎn)出的角度來看待技術(shù)的價值。
另外,在選擇人才的過程中,有人想選擇絕對忠誠的人,不過,絕對忠誠是個偽命題,與其要求人家忠誠還不如滿足人家的需求,人家才會給你好好干活。
做事的內(nèi)功
做事兒是需要有能力的這話不假,但是有了能力,我們也要保證做事兒的方向的正確性,南轅北轍的方法實在是不可取,即使再努力也無法達(dá)到目標(biāo)。
目標(biāo)、原則、方法、結(jié)果
這里我要給大家介紹的是一個做事兒的方法論,這個方法論包括:目標(biāo)、原則、方法、結(jié)果。
做事兒要先制定目標(biāo),只有目標(biāo)明確了,后面做的事情才是有意義的,其次就是要有原則,建立自己的底線,也要為事情建立底線,底線是說什么事兒不可以做、什么事兒不能做。
為了實現(xiàn)目標(biāo),可以有很多不同的方法,我們要選擇最適合的,而不是最高大上的,在實現(xiàn)目標(biāo)的時候,要有明確的計劃,要懂得項目管理,懂得時間管理和目標(biāo)管理。
任何的事情最終都會有一個產(chǎn)出和結(jié)果,要檢查最終的結(jié)果是否與最初的目標(biāo)對應(yīng),如果沒對應(yīng)到一開始設(shè)立的目標(biāo),就說明偏離目標(biāo),需要反思自己在這過程中存在的問題和不足。
慎用我以為
經(jīng)常聽見小伙伴們會說:“我以為,我認(rèn)為”,尤其我聽見有些講師在臺上講的時候,也會說這類不確定的詞匯,這是非常不可取的,這些主觀的詞匯基本不能描述一個客觀的事實,建議換成這些表達(dá),我們推薦做什么,必須做什么,禁止做什么。
高效溝通
在生產(chǎn)實踐中,我發(fā)現(xiàn)了小伙伴在溝通過程中,會出現(xiàn)3種異常的情況:
- 兩個人溝通完畢后,A認(rèn)為B應(yīng)該懂了,但是B確實沒懂。
- 兩個人溝通完畢后,A認(rèn)為B懂了,B也認(rèn)為自己懂了,但是A和B的想法不一致。
- 兩個人溝通完畢后,A認(rèn)為B懂了,B也說自己懂了,但是B內(nèi)心里面其實沒懂。
無論哪種情況,都會影響溝通的效率,我們應(yīng)該盡量用常識溝通,溝通完確認(rèn)是否對方理解了,不能假設(shè)對方理解了,也不能假設(shè)自己理解了,必須達(dá)成共識后,才算溝通完畢。
另外一方面,假如兩個人討論一個事情,假如兩個人達(dá)成共識有多個,一部分達(dá)成了共識,一部分沒有達(dá)成共識,例如:討論項目有10個,只有1個沒有達(dá)成共識,其他9個都達(dá)成了共識,這時候就需要分開來看,達(dá)成共識的可以開始計劃和實現(xiàn),未達(dá)成共識的可以繼續(xù)尋找解決方案,不能因為一個事兒沒有達(dá)成共識,就認(rèn)為所有的事兒都沒有達(dá)成共識。
那么對于一個人來講,什么是善于溝通呢,善于溝通并不是侃侃而談,也不是非常會來事就是會溝通和交流,而是要能站在別人的角度考慮事情,具有同理心,了解對方的目的和期待,才能更容易的做有效的溝通。
解決有效的問題
無論我們是在定義產(chǎn)品還是定義一個品類,我們都需要找到當(dāng)前的痛點,從痛點出發(fā)才能改變現(xiàn)狀,推動世界進(jìn)步。因此,無論我們是做一個創(chuàng)新還是完成一個目標(biāo),其實我們都是在解決一個問題,筆者最近發(fā)現(xiàn)很多小伙伴在解決一些無效的問題,或者解決一些不存在的問題,還有些不知道在解決什么問題,這都是非常不可取的,因此,小伙伴們在解決問題的時候,一定先把問題了解清楚,了解了來龍去脈再去針對問題提出有效的解決方案,千萬不要一上來就直接陷入細(xì)節(jié)和方法,那樣就會以偏概全,斷章取義,就會不知道問題是什么,或者解決無效的問題,做無效的溝通。
國際上有一個著名的解決問題的方法論叫KT,大家感興趣的可以參考:The problem solving methodology of Kepner-Tregoe
解決問題的時候切記不要用一個錯誤掩蓋另外一個錯誤,要尋求方法徹底解決問題,而不要把問題遺留下來,久而久之遺留的問題多了,量變導(dǎo)致質(zhì)變,就會發(fā)生大問題,電影《深海浩劫》里講述了石油公司為了趕進(jìn)度和工期,不按照既定流程和規(guī)范進(jìn)行生產(chǎn)作業(yè),對已經(jīng)發(fā)現(xiàn)的問題視而不見,最終導(dǎo)致了海上油井爆炸,釀成了多人死亡的嚴(yán)重事故。
任務(wù)分配
我一直認(rèn)為每個人都是一個管理者,沒有下屬的小伙伴需要管理自己的時間、資源、情緒和項目,有下屬的小伙伴還要管理下屬小伙伴的目標(biāo)、方法和結(jié)果,因此,任何人都需要有管理的技能。
這里我要提醒讀者的是,管理者分配任務(wù)一定要聚焦、具體、明確。如果是給下屬分配任務(wù),一定要邊界清晰,不要一個任務(wù)分給了2個責(zé)任人,2個責(zé)任人就等于沒有責(zé)任人,這和一個和尚有水喝、兩個和尚抬水喝、三個和尚沒水喝的典故如出一轍。
做人的內(nèi)功
人分為平庸的人、聰明的人和智慧的人,平庸的人會多次的掉入同樣的坑里,聰明的人是掉進(jìn)坑里后下次就會避免,智慧的人聽別人講述掉坑里的故事自己就能繞過坑,大家都要做智慧的人,學(xué)習(xí)前人分享的干貨。
別人對你的印象其實離不開兩個因素,靠譜和有腦子??孔V就是要讓人對你產(chǎn)生信任感,有腦子就是靈活、不做作、做事有條理。
其次就是膽大、心細(xì)、樂觀,做人一定要敢于去嘗試,也要樂觀,所謂福禍相依,無論發(fā)生什么事都要樂觀,一個事情過去了1天、一個月、一年,回頭再去看事情的重要程度和后果是不一樣的,有可能從壞變好,也有可能從好變壞。
如果遇到一些坎坷,尤其是在工作中,不用糾結(jié)、不用懊惱也不用沮喪,要么忍、要么狠、要么滾,從這三條路中選一條就好了,因為也沒有別的辦法可走。
有一種人很善于思考,會剖開現(xiàn)象看本質(zhì),還有個一種人是自己不會思考,但是你告訴他思考,他就會沿著你說的想法來思考,這種也很不錯,我們都要爭當(dāng)做善于思考的人,因為思考才有創(chuàng)新,才能使人進(jìn)步。
另外,每個人生活的背景不同、環(huán)境不同,每個人的成長軌跡也不同,因此,人不要去與別人攀比,要給自己制定一個明確的進(jìn)步計劃,與之前的自己比進(jìn)步就足夠了,當(dāng)然也不能失去進(jìn)步的動力。
最后,要早結(jié)婚,早生小孩,早買房,因為早結(jié)婚早生小孩就會早買房,早買房大家都懂的。
點擊《技術(shù)人如何修煉內(nèi)功(高級篇)》閱讀原文。
【本文為51CTO專欄作者“李艷鵬”的原創(chuàng)稿件,轉(zhuǎn)載可通過作者簡書號(李艷鵬)或51CTO專欄獲取聯(lián)系】