前面我們聊了很多關(guān)于怎么做設(shè)計(jì),怎么做編碼的事情。我們今天聊一下,什么是真正的技術(shù)能力,我們每個人和團(tuán)隊(duì)又如何去修煉。
什么是真正的技術(shù)能力
每個工程師都懷揣著成為技術(shù)達(dá)人的夢想。努力地學(xué)習(xí)著各種新奇的技術(shù)方向。執(zhí)著于爭論哪種開發(fā)框架、哪種開發(fā)語言更好等等。但是,技術(shù)的革新實(shí)在太快,一路追逐的過程中往往是迷茫的。到底什么東西真正體現(xiàn)了技術(shù)水平呢?什么技能才是值得修煉的呢?又如何去修煉呢?
我們先來看一下什么是真正的技術(shù)水平。當(dāng)我們做系統(tǒng)設(shè)計(jì)的時候,做編碼的時候,做線上服務(wù)運(yùn)維的時候,很多工程師都會期待有一個高大上的、一勞永逸的解決方案出現(xiàn)。就會覺得所謂的技術(shù)水平就是高手突然間的靈光乍現(xiàn),就會覺得這個東西需要悟性,無跡可尋。
但實(shí)際過程中,根本不是大家想象的那么玄幻,而且也是有路徑去修煉的。所有高大上的方案,都是一個個小的問題,被扎扎實(shí)實(shí)的解決后,最后累積的結(jié)果。
這個過程說難很難,說簡單也很簡單。簡單說就是,回到你要解決的問題本身,徹底搞清楚,拆解到具體細(xì)節(jié),把細(xì)節(jié)做到極致。拆解思考的能力和做到極致的心才是真實(shí)的技術(shù)能力。怎么去修煉呢,就是要重復(fù)這個拆解的過程,刻意練習(xí),把他變成你骨子里的習(xí)慣。
如何修煉
下面,我們來看看在具體的開發(fā)過程中,怎么來修煉。
我們先來看看架構(gòu)設(shè)計(jì)階段??催^了這么多設(shè)計(jì)思想,是不是就能夠信手拈來呢。實(shí)際上很難,即便我們把現(xiàn)成的設(shè)計(jì)思想端來,也往往不能適應(yīng)我們實(shí)際的情況。要解決這個問題,我們還是要回歸到設(shè)計(jì)的本質(zhì),明確我們的目標(biāo)。設(shè)計(jì)的目標(biāo)就是解決業(yè)務(wù)功能和非功能性的需求。明確了這個目標(biāo),事情才變得簡單、可操作。
比如我們要解決業(yè)務(wù)功能問題,就需要仔細(xì)的研究需求細(xì)節(jié)。將問題拆解為具體有哪些功能點(diǎn)來實(shí)現(xiàn),每個功能點(diǎn)又有哪些業(yè)務(wù)邏輯。這些業(yè)務(wù)邏輯又有哪些特殊的地方,怎么實(shí)現(xiàn)才可以讓時間和空間成本最合算,再就是有哪些邊界的情況需要考慮等等。
比如要解決非功能性需求,那就是考慮未來系統(tǒng)的可擴(kuò)展性和穩(wěn)定性??蓴U(kuò)展的點(diǎn)到底有哪些?當(dāng)前設(shè)計(jì)里怎么來支持。核心流程有哪些?每個流程的核心節(jié)點(diǎn)有哪些,哪些節(jié)點(diǎn)是可以降級的呢?整個系統(tǒng)的架構(gòu)又如何,可能的故障單點(diǎn)在哪,又怎么來備份等等。
你會發(fā)現(xiàn),架構(gòu)設(shè)計(jì)沒那么高大上。無非就是拆解問題,解決問題,一個個細(xì)節(jié)考慮到極致。
再來看看測試階段。是不是采用了高大上的測試工具和技術(shù),就算水平高呢?其實(shí)不全是,再好的測試技術(shù)和工具也只是一個輔助。我們要先想清楚測試的目標(biāo)是什么。我們的目標(biāo)就是盡可能的把功能測全面、測透徹,而且每次變更都要保證質(zhì)量。比如每次更改了測試環(huán)境,上線的各個過程等等。只要有變更就要測。想清楚了這個目標(biāo),就可以進(jìn)一步進(jìn)行拆解。
怎么測試全、測試透,就是仔細(xì)地扣每個測試用例。仔細(xì)地看是否覆蓋了所有的功能點(diǎn),每個測試點(diǎn)的邊界條件是否都考慮清楚。
你看,高深的測試技術(shù)和工具只是提升了我們的效率,但并不能提升我們的測試水平。如何提升?還是明確目標(biāo),拆解細(xì)節(jié),每個用例仔仔細(xì)細(xì)的扣,堅(jiān)決的執(zhí)行到極致。這樣才能真正保證質(zhì)量。
再看看運(yùn)維階段。我們會看到運(yùn)維工作全是細(xì)節(jié)。大家可以看看前兩篇寫的高效運(yùn)維文章。明確目標(biāo),拆解細(xì)節(jié),剩下的就是極致執(zhí)行。再好的監(jiān)控體系,如果你不重視每一個收到的報警,不找到報警背后的原因,就會造成意想不到的后果。同時,也錯過了優(yōu)化系統(tǒng)的好時機(jī)。當(dāng)系統(tǒng)發(fā)生變更的時候,還需要及時去更新監(jiān)控策略,不要留下死角。我們越覺得不可能發(fā)生的事情,就越會發(fā)生。
每次系統(tǒng)上線的過程中,任何一個環(huán)節(jié)沒做到位,都會是巨大的風(fēng)險。我們看這是馬虎大意的問題嗎?我覺得不是,這是認(rèn)識是否深刻的問題。如果你疏忽了,就說明你根本沒有把他重視到極致的程度。高手與低手的差距就在于此。這就類比職業(yè)運(yùn)動員和業(yè)余選手的區(qū)別,業(yè)余選手可能也會有偶爾的極致發(fā)揮,但是,職業(yè)運(yùn)動員能穩(wěn)定持續(xù)的高質(zhì)量表現(xiàn)。
最后看看客戶端的開發(fā)。在移動互聯(lián)的時代,產(chǎn)品的體驗(yàn)只有極致好,沒有中庸。中庸的產(chǎn)品就是失敗。這個認(rèn)知是有點(diǎn)反常識的,我們覺得差不多也算及格吧,但是,這里沒有及格線。而產(chǎn)品體驗(yàn)都是什么東西呢,就是每一個小處的細(xì)節(jié)的用心。
所以,一切都是細(xì)節(jié)。什么代表了技術(shù)的水平,不是高大上的設(shè)計(jì)、技術(shù)、工具,而是明確目標(biāo),拆解細(xì)節(jié),以及對細(xì)節(jié)極致的把控。
如何修煉呢?針對別人高大上的解決方案,我們不能簡單模仿,而是還原他當(dāng)時面臨的問題,看他是怎么拆解的,一個個細(xì)節(jié)又是怎么考慮的。我們也不能只看幾個解決方案,而應(yīng)該大尺度的看各個行業(yè)的大量的解決方案,不好的方案也要看,也要看他不行的點(diǎn)在哪。我們看的是門道,看的是別人拆解的過程和思路。
然后,忘記別人的方案,回到要解決的問題上來。把復(fù)雜問題簡單化,簡單的事情重復(fù)做。每個細(xì)節(jié)做到極致。量變才能帶來質(zhì)變,我們才能有真正的提升。
最后,我們要對自己的技藝有敬畏之心。技術(shù)也是一門手藝,一個需要長期刻意練習(xí)才可以做好的手藝。手藝人就要有手藝人的心態(tài),這個心態(tài)就是對技藝的敬畏,對每一個細(xì)節(jié)發(fā)自內(nèi)心的敬重和畏懼。只有有了這樣的心態(tài),我們才能長久的進(jìn)步。期待你我都能成為這樣的手藝人。