第一種工程師
- 給一段復(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ì)借助紙筆寫寫畫畫芯咧,最終搞定。
- 給一個(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ù)載理論锹漱,這類人的working memory容量超越常人箭养,可以將多種因素同時(shí)納入大腦進(jìn)行思考而不會(huì)出現(xiàn)大腦過(guò)載。他們寫出來(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)知能力寫出來(lái)的程序普通人維護(hù)起來(lái)有困難愿题。
第二種工程師是天資正常的普通人,working memeory的容量大概就是可以心算兩位數(shù)加兩位數(shù)帶進(jìn)位的加法蛙奖。但是他們掌握了解決認(rèn)知負(fù)載的方法潘酗。閱讀復(fù)雜代碼的時(shí)候,他們借助紙筆雁仲,把對(duì)其中的小片段的分析結(jié)論先寫下來(lái)崎脉,避免大腦緩存太多東西,然后就這些數(shù)量變少的中間結(jié)果再進(jìn)行分析伯顶,始終保持放入大腦的東西不要太多囚灼。寫代碼的時(shí)候骆膝,他們無(wú)法一下子把所有的細(xì)節(jié)想清楚,因此需要分步搞定灶体,要么先把關(guān)鍵步驟逐次實(shí)現(xiàn)好再去整合整個(gè)方案阅签,要么先寫好一個(gè)大而化之的框架,然后分頭實(shí)現(xiàn)細(xì)節(jié)蝎抽。往往寫完之后會(huì)發(fā)現(xiàn)有一點(diǎn)顧此失彼政钟,因此還要調(diào)整清理一番。特點(diǎn)是不管那種方法樟结,大腦在任何一個(gè)階段都不會(huì)過(guò)載养交。按照這種方法寫出來(lái)的代碼,也不會(huì)讓它的讀者大腦過(guò)載瓢宦。
對(duì)于團(tuán)隊(duì)來(lái)說(shuō)碎连,我們希望工程師具有第一種工程師的天份,同時(shí)寫出來(lái)的代碼要像第二種工程師那樣方便理解驮履。需要注意提升的是第三種工程師鱼辙,他們?nèi)狈Φ谝环N工程師的天資,同時(shí)還沒(méi)有掌握第二種工程師的技能玫镐,經(jīng)常自己被自己寫出來(lái)的代碼搞糊涂倒戏。
作者的其他文章:
為「PPT架構(gòu)師」正名
一道題識(shí)別優(yōu)秀的程序員
一道題識(shí)別不靠譜的程序員