以下內(nèi)容節(jié)選自《碼農(nóng)翻身》善镰,我對(duì)這些內(nèi)容深有感觸跟衅,因此整理出來推薦給年輕的程序員們看看忧侧,希望激發(fā)大家去看看原書的興趣,從而在IT技術(shù)道路上精進(jìn)牌芋。
順便說一下:此書80%的內(nèi)容蚓炬,還是在講IT技術(shù)的(用講故事的形式、淺顯易懂)躺屁,適合架構(gòu)師以下級(jí)別试吁。
凡事必先騎上虎背
有人問我,說他所在的是一家中小型公司楼咳,開發(fā)團(tuán)隊(duì)有十來個(gè)人熄捍、七八條槍,做行業(yè)軟件母怜,現(xiàn)在公司沒有技術(shù)經(jīng)理余耽,只有一個(gè)懂業(yè)務(wù)的總監(jiān)來管理所有開發(fā)人員,而且開發(fā)人員都是初級(jí)水平苹熏,大部分只有一兩年經(jīng)驗(yàn)碟贾,相比而言,他還算老人轨域「さⅲ總監(jiān)認(rèn)可他的技術(shù),似乎有意讓他做技術(shù)經(jīng)理干发,最近公司招人也讓他去面試朱巨。
但是他不太自信,覺得表達(dá)能力不行枉长,有些技術(shù)還比較薄弱冀续,領(lǐng)導(dǎo)布置的功能可以做出來,但是說原理就有可能卡売必峰。我告訴他洪唐,這正好是一次機(jī)會(huì),是最好的學(xué)習(xí)時(shí)機(jī)吼蚁,有了問題的引導(dǎo)凭需,你會(huì)瘋狂地學(xué)習(xí),迅速地提升自己肝匆。
我想起了2009年看過的一本書《陳寅恪與傅斯年》粒蜈,里面形容傅斯年的性格是“凡事必先騎上虎背”,這句話我一直印象深刻术唬。
對(duì)于我這樣一個(gè)性格內(nèi)向的程序員來說薪伏,我在遇到機(jī)會(huì),猶豫不決粗仓、縮手的時(shí)候總會(huì)想起這句話嫁怀,然后鼓起勇氣先騎上虎背设捐,讓自己下不來臺(tái)再說,但是真的盡自己最大力以后就會(huì)發(fā)現(xiàn)塘淑,事情沒那么難萝招,最后還都把事情完成了。
作為一個(gè)擅長(zhǎng)和機(jī)器打交道的群體存捺,大部分程序員的性格都比較內(nèi)向槐沼、沉默。別看在網(wǎng)上捌治、在O群里談突風(fēng)生岗钩、幽默有趣,斗斗得不亦樂乎肖油,但是回現(xiàn)實(shí)中兼吓,面對(duì)一群“真人”的時(shí)候,連準(zhǔn)確地表達(dá)自己的觀點(diǎn)可能都做不到森枪,更不用說去柔中帶剛视搏、唇槍舌劍地去爭(zhēng)搶某個(gè)東西了。
程序員大多實(shí)誠县袱、謹(jǐn)小慎微浑娜,很多事情不敢也不會(huì)去努力爭(zhēng)取,完全靠自己的能力吃飯式散。這樣很吃虧筋遭,因?yàn)槟愕哪芰o法完全體現(xiàn),在工作中只能表現(xiàn)出一部分杂数,比如10分的能力只能顯露出7分宛畦,剩下的3分可能就被埋沒了。
對(duì)于ー個(gè)內(nèi)向的人來說揍移,害怕失敗,害伯被別人說自己不夠格反肋,所以總想把自己修煉得盡善盡美那伐,在達(dá)到基至遠(yuǎn)遠(yuǎn)超過那個(gè)職位的要求以后心里オ會(huì)踏實(shí),才會(huì)想著領(lǐng)導(dǎo)會(huì)看到石蔗,讓自己去負(fù)責(zé)那項(xiàng)工作罕邀。可是反過來講养距,世上哪兒有等你完全準(zhǔn)備好以后才開始做的事情诉探?你覺得完全準(zhǔn)備好以后,黃花菜都涼了棍厌。
IBM每年害期都有一項(xiàng)叫作“藍(lán)色之路”的實(shí)習(xí)生計(jì)劃肾胯,招聘學(xué)生到公司實(shí)習(xí)竖席,在這項(xiàng)計(jì)劃中有四五個(gè)被稱為 Extreme Blue(青出于藍(lán))的項(xiàng)目,面向的是優(yōu)秀的大學(xué)實(shí)習(xí)生敬肚。這個(gè) Extreme Blue項(xiàng)目是由IBM的員工提出有創(chuàng)新的毕荐、有商業(yè)價(jià)值的想法,由這些優(yōu)秀的學(xué)生去實(shí)現(xiàn)艳馒。
作者在2008年提出了一個(gè)想法:在一個(gè)3D虛擬世界中構(gòu)建一個(gè)支持?jǐn)?shù)捷軟件開發(fā)的環(huán)境憎亚,有幸被選中作為 Extreme Blue項(xiàng)目之ー。當(dāng)時(shí)我對(duì)散捷軟件開發(fā)還算了解弄慰,但是對(duì)于在3D虛擬世界中建模第美、編程一無所知÷剿可是已然騎上虎背什往,下不來了,接下來馬上要帶著實(shí)習(xí)生來實(shí)現(xiàn)墓陈,怎么辦恶守?只剩華山一條路,明知山有虎贡必,偏向虎山行兔港。那就是逼著自己趕緊進(jìn)入未知領(lǐng)域,拼命地去學(xué)仔拟,像海綿一樣吸收各種知識(shí)衫樊。幾個(gè)月以后,我們確實(shí)把這個(gè)項(xiàng)目做出來了利花。
舉這個(gè)例子就是想說:對(duì)于性格內(nèi)向的程序員科侈,很多時(shí)候你認(rèn)為基本準(zhǔn)備好了其實(shí)就夠了,凡事必先騎上虎炒事,勇敢地邁出去臀栈,努力地爭(zhēng)取一下,你就會(huì)發(fā)現(xiàn)自己登上了更高層的臺(tái)階挠乳。
一名架構(gòu)師的總結(jié)
我和很多人交流過一個(gè)有趣的現(xiàn)象:那就是從剛畢業(yè)到30歲這段時(shí)間权薯,會(huì)覺得時(shí)間過得很慢,總覺得自己還很年輕睡扬;但是一旦過了30歲盟蚣,時(shí)間就如白駒過,一年又一年飛逝而過卖怜。我自己也是屎开,眼看著畢業(yè)快15年了,15年間從一個(gè)剛畢業(yè)的菜鳥成長(zhǎng)為技術(shù)骨干马靠,做到架構(gòu)師的職位奄抽,回頭看看蔼两,編程雖然枯燥辛苦,但是如果真的感興趣如孝,就能體會(huì)到其中的樂趣宪哩。
好奇心
劉慈欣在《朝聞道》中描繪過這樣一個(gè)情節(jié):在古老的非洲大陸上,有一個(gè)原始人無意間抬頭仰望星空第晰,凝視的時(shí)間稍微長(zhǎng)了一些锁孟,超過了外星人設(shè)置的國值,立刻拉響了人類即將產(chǎn)生文明的警報(bào)茁瘦。因?yàn)橥庑侨苏J(rèn)為品抽,人類已經(jīng)產(chǎn)生了對(duì)宇宙的好奇心。有了好奇心甜熔,文明的產(chǎn)生圆恤、科技的發(fā)展不過是一瞬間的事情。
確實(shí)是這樣的腔稀,好奇心驅(qū)動(dòng)人類不斷向前盆昙,在短短的幾千年(相對(duì)于長(zhǎng)達(dá)幾十萬年的原始時(shí)代)里就登上了月球,并且努力向其他行星拓展焊虏。
對(duì)于程序員來說也是如此淡喜,如果你看到新技術(shù)、新產(chǎn)品沒有像小孩看到新玩具那樣兩眼放光诵闭,沒有立刻在自己的電腦上試試的沖動(dòng)炼团,你就需要仔細(xì)考慮一下是否真的對(duì)軟件開發(fā)有興。如果根本沒興趣疏尿,那不要浪費(fèi)時(shí)間瘟芝,還是趁早轉(zhuǎn)行,有更多話合你的職業(yè)在等著你褥琐。
沒有好奇心锌俱,就不愿意追本溯源,追求技術(shù)的本質(zhì)敌呈。
沒有好奇心嚼鹉,就難以靜下心來,耐得住寂寞驱富,遠(yuǎn)離浮躁,更難以跨過這個(gè)行業(yè)所帶來的種種挑戰(zhàn)匹舞。
沒有好奇心褐鸥,就不愿意學(xué)習(xí)新技術(shù)。一名架構(gòu)師赐稽,如果沒有對(duì)技術(shù)的敏感度和前性叫榕,直抱著一套技術(shù)架構(gòu)不變浑侥,估計(jì)很快就會(huì)被海汰。
當(dāng)然晰绎,自制力強(qiáng)大的人除外寓落。但話說回來,靠著自制力讓自己做自己不喜歡的事情不非常痛苦荞下?
在一堂關(guān)于領(lǐng)導(dǎo)力的培訓(xùn)課上伶选,老師一直在說 Passion(激情)、Passion尖昏、 Passion仰税。但我直覺得,沒有好奇心抽诉,沒有興趙陨簇,怎么會(huì)產(chǎn)生 Passion呢?所以迹淌,對(duì)技術(shù)的好奇心河绽、興趣是一切的基礎(chǔ)。
抽象的能力
抽象思考的能力怎么強(qiáng)調(diào)都不為過唉窃。
現(xiàn)實(shí)的需求紛繁復(fù)雜耙饰,如果架構(gòu)師不能把這些亂無頭緒的需求抽象成一些“概念”,在概念的層次進(jìn)行思考句携,那么系統(tǒng)根本就無法設(shè)計(jì)榔幸。
我認(rèn)為,把紛雜的事物抽象到數(shù)學(xué)層面是最高的抽象矮嫉。也許有人會(huì)說哲學(xué)層面才是削咆,但到數(shù)學(xué)層面已經(jīng)非常難了。
我在之前的公司有率遇到一次蠢笋,把針對(duì)稅務(wù)領(lǐng)域的 Credit拨齐, Debit s等概念抽象為在一個(gè)二維坐標(biāo)下點(diǎn)的運(yùn)動(dòng),問題一下子簡(jiǎn)化了很多昨寞,實(shí)現(xiàn)簡(jiǎn)單瞻惋,并且非常安全可靠。
但是抽象成數(shù)學(xué)模型和算法通常是可遇而不可求的援岩,在這種情況下歼狼,我們需要退而求其次,試圖抽象成若干個(gè)正交的概念享怀,以此來降低復(fù)雜度羽峰。
“正交”在數(shù)學(xué)上指的是線性無關(guān),最常見的例子就是坐標(biāo)系下的x軸和y軸。對(duì)于一個(gè)點(diǎn)來講梅屉,它的x值的變化不會(huì)影響到y(tǒng)值纱,y值的變化不會(huì)影響到x,即x和y是正交的坯汤。
正交的威力在于互不影響虐唠、擴(kuò)展方便。單用一個(gè)x軸可以表示一條直線上的所有點(diǎn)惰聂;再加一個(gè)y軸就能表示平面上的所有點(diǎn)疆偿;再加一個(gè)z軸,三維空間中的所有點(diǎn)都能表示出來庶近。
人類的大腦在思考問題的時(shí)候是有容量限制的翁脆,難以同時(shí)駕馭太多復(fù)雜的概念。如果我們的軟件系統(tǒng)也能做成x鼻种、y反番、z坐標(biāo)這樣,就帶來了無與倫比的好處叉钥。你在處理與x軸相關(guān)的事情時(shí)罢缸,不用考慮與y軸和z軸相關(guān)的事情,因?yàn)槟阒浪鼈儾粫?huì)受到影響投队。這樣問題的復(fù)雜度就從三維一下子下降到一維枫疆,更容易把握了。
抽象能力的訓(xùn)練沒有捷徑敷鸦,就是經(jīng)驗(yàn)的積累息楔,勤于思考和學(xué)習(xí)。例如學(xué)習(xí) Java Web:開發(fā)的可以思考一下為什么 Spring有 Controller扒披、ViewResolver這樣的概念值依?學(xué)習(xí) Android的可以思考一下 Android是怎么對(duì)未知的、紛緊復(fù)雜的應(yīng)用程序進(jìn)行抽象的碟案?為什么會(huì)有Maven愿险、Git、Nginx价说、Hadoop這些產(chǎn)品呢辆亏?
開始寫作吧
我時(shí)常會(huì)有這樣的感覺:自己心里黨得對(duì)一個(gè)技術(shù)點(diǎn)已經(jīng)掌握了,但是當(dāng)我試圖給別人講述的時(shí)候鳖目,發(fā)現(xiàn)并不能輕松自如扮叨、深入淺出地講出來。
這就說明了一個(gè)問題:自認(rèn)為掌握了领迈,其實(shí)并沒有真正掌握甫匹,大腦只是對(duì)這個(gè)技術(shù)點(diǎn)建立了一個(gè)整體的概念甸鸟,在一些細(xì)節(jié)處做了想當(dāng)然的假設(shè),等到你用語言再來表達(dá)的時(shí)候就會(huì)發(fā)現(xiàn)兵迅,原來這個(gè)假設(shè)井不完全成立,是有問題的薪贫。
估計(jì)大家都有這樣的經(jīng)驗(yàn):如果你能把一門技術(shù)通俗易懂地給別人講明白恍箭,那就說明你已經(jīng)掌握了。這種“轉(zhuǎn)教別人”( Teach others)的辦法屬于主動(dòng)學(xué)習(xí)瞧省,效率是最高的扯夭。但是在工作和生活當(dāng)中,你是很少有機(jī)會(huì)去給別人講授的鞍匾。
那怎么辦交洗?總不能拉著你正忙著的同事說:“哥們兒,來橡淑,我別學(xué)了 Java CAS构拳,我給你講講吧×禾模”也許你的同事很有禮貌置森,耐著性子聽你地講完了,然后不知所云符糊。前幾次還行凫海、次數(shù)多了,就對(duì)你敬而遠(yuǎn)之了男娄。既然沒法給別人講行贪,那就退而求其次吧,把自己的理解寫出來模闲。
當(dāng)然不是泛泛地記流水賬建瘫,或者把幾個(gè)孤立的點(diǎn)羅列在那里,而是要把思路厘清楚围橡,尤其要寫出為什么要有這門技術(shù)暖混、這門技術(shù)解決了什么問題,然后才是這門技術(shù)是怎么使用的翁授。
當(dāng)你逼著自己去回答這些問題的時(shí)候拣播,很快就會(huì)發(fā)現(xiàn),自己的理解還不夠收擦,還需要查找更多的資料贮配。在你從網(wǎng)上查找資料的時(shí)候,你會(huì)發(fā)現(xiàn)塞赂,網(wǎng)上的這些文章怎么這么差勁泪勒,重復(fù)的內(nèi)容這么多,大部分都是復(fù)制、粘貼的圆存,大部分都在講述怎么使用叼旋,對(duì)于“為什么”從來都是只字不提,或者猶抱琵琶半遮面沦辙,羞羞答答地不說出來夫植。
這個(gè)整理資料和思考的過程是很珍貴的,只有這樣才能把信息變成你自身的知識(shí)油讯。如果實(shí)在搞不定详民,就帶著問題去論壇提問,去QQ群發(fā)言陌兑,找大牛請(qǐng)教沈跨,總是可以解決的。
有人可能要問了:我也可以按照這個(gè)思路去學(xué)習(xí)兔综,為什么要寫下來呢饿凛?原因很簡(jiǎn)單:不寫出來,很容易放棄深度思考邻奠。
我們已經(jīng)進(jìn)入了一個(gè)碎片化的時(shí)代笤喳,我們的大腦已經(jīng)養(yǎng)成了碎片化的習(xí)慣。寫作會(huì)逼著你去深度思考碌宴,梳理知識(shí)體系杀狡。