第一種工程師
- 給一段復(fù)雜的程序,比如有7個(gè)局部變量,5層循環(huán)和if嵌套,他能赤手空拳上陣,迅速領(lǐng)會(huì)程序意圖、找到bug,不用借助任何工具甚至紙筆。
- 給一個(gè)復(fù)雜的問(wèn)題,能在一個(gè)函數(shù)之內(nèi)一氣呵成,立馬給出正確實(shí)現(xiàn),這個(gè)函數(shù)可能有七個(gè)變量,5層循環(huán)和if嵌套。沒(méi)有廢話,刪無(wú)可刪,但是單一函數(shù)復(fù)雜度高,一般人要費(fèi)老鼻子勁方能看懂。
第二種工程師
- 給一段復(fù)雜的程序,比如有7個(gè)局部變量,5層循環(huán)和if嵌套,他無(wú)法馬上看出程序的意圖,但是他通常會(huì)借助紙筆寫(xiě)寫(xiě)畫(huà)畫(huà),最終搞定。
- 給一個(gè)復(fù)雜的問(wèn)題,要磨嘰磨嘰好半天,一般用幾個(gè)函數(shù)組合起來(lái)實(shí)現(xiàn),這些函數(shù)職責(zé)單一明確,身段苗條,通常一兩個(gè)變量,循環(huán)和if不超過(guò)2層嵌套。單一函數(shù)復(fù)雜度低,一般人都能輕輕松松看懂。
第一種軟件工程師是天生的聰明人,他們處理復(fù)雜事物的能力與生俱來(lái),可以流利的心算三位數(shù)加三位數(shù)帶進(jìn)位的加法。根據(jù)認(rèn)知負(fù)載理論,這類(lèi)人的working memory容量超越常人,可以將多種因素同時(shí)納入大腦進(jìn)行思考而不會(huì)出現(xiàn)大腦過(guò)載。他們寫(xiě)出來(lái)的復(fù)雜程序,一般的看法是沒(méi)有掌握分而治之的正確編程風(fēng)格,其實(shí)際是他們腦筋太好使,普通人為了克服認(rèn)知過(guò)載而發(fā)明的編程方法對(duì)他們而言純粹就是多此一舉。當(dāng)遇到更為復(fù)雜的問(wèn)題時(shí),他們自然會(huì)分而治之。缺點(diǎn)是不經(jīng)刻意訓(xùn)練,他們按照自己的認(rèn)知能力寫(xiě)出來(lái)的程序普通人維護(hù)起來(lái)有困難。
第二種工程師是天資正常的普通人,working memeory的容量大概就是可以心算兩位數(shù)加兩位數(shù)帶進(jìn)位的加法。但是他們掌握了解決認(rèn)知負(fù)載的方法。閱讀復(fù)雜代碼的時(shí)候,他們借助紙筆,把對(duì)其中的小片段的分析結(jié)論先寫(xiě)下來(lái),避免大腦緩存太多東西,然后就這些數(shù)量變少的中間結(jié)果再進(jìn)行分析,始終保持放入大腦的東西不要太多。寫(xiě)代碼的時(shí)候,他們無(wú)法一下子把所有的細(xì)節(jié)想清楚,因此需要分步搞定,要么先把關(guān)鍵步驟逐次實(shí)現(xiàn)好再去整合整個(gè)方案,要么先寫(xiě)好一個(gè)大而化之的框架,然后分頭實(shí)現(xiàn)細(xì)節(jié)。往往寫(xiě)完之后會(huì)發(fā)現(xiàn)有一點(diǎn)顧此失彼,因此還要調(diào)整清理一番。特點(diǎn)是不管那種方法,大腦在任何一個(gè)階段都不會(huì)過(guò)載。按照這種方法寫(xiě)出來(lái)的代碼,也不會(huì)讓它的讀者大腦過(guò)載。
對(duì)于團(tuán)隊(duì)來(lái)說(shuō),我們希望工程師具有第一種工程師的天份,同時(shí)寫(xiě)出來(lái)的代碼要像第二種工程師那樣方便理解。需要注意提升的是第三種工程師,他們?nèi)狈Φ谝环N工程師的天資,同時(shí)還沒(méi)有掌握第二種工程師的技能,經(jīng)常自己被自己寫(xiě)出來(lái)的代碼搞糊涂。
作者的其他文章:
為「PPT架構(gòu)師」正名
一道題識(shí)別優(yōu)秀的程序員
一道題識(shí)別不靠譜的程序員