為了把本文的觀點講清楚纫事,需要先講一段黃石公和張良的小故事,如果你熟悉這個故事丽惶,可以略過這段:
漢初三杰之一的張良,在躲避秦朝戰(zhàn)亂隱姓埋名時诉字,遇上一位老人知纷,這個老人故意把鞋拋到橋下,看著張良說:“小子伍绳,下去把鞋取上來乍桂!”張良預先不知道是詐,有些愕然想揍他睹酌;因為見他年歲大了憋沿,才強忍怒火,下了橋辐啄,給他把鞋取上來。于是就跪著給他穿上悯舟。那位老人伸出腳來砸民,讓張良把鞋穿好,笑著走了便贵。張良感到很驚詫。他大約走出一里遠冗荸,又返了回來,對張良說:“年輕人倒是可以教育的蚌本!五天后的清晨,你在這里和我會面舷嗡∏独颍”張良更覺得奇怪,又跪下說:“是中鼠。”五天后的早晨矛渴,張良去了約定的地方惫搏,黃石公生氣的說:“你與老人約定,為什么后來铣猩?”再五天后的早晨約定茴丰,張良天不亮就去了,黃石公又早在那里了鳞绕,又生氣的說:“為什么晚來尸曼?”又五天的早晨的約定,張良半夜就去了冤竹。過了一會茬射,黃石公也來了,高興的說:“孺子可教也钟病!”于是拿出一本編書給張良刚梭,說:“你回去讀他朴读,就可以做帝王的老師了。十三年之后衅金,你見到的濟北谷城山下的黃石,就是我了鉴吹。”于是離去,看不見了肆糕。張良天亮翻開書一看竟然是《太公兵法》在孝。
作為小說或者歷史故事,這樣的情節(jié)是吸引人的始赎,因為一直有懸念仔燕。
但是,如果把這個故事的場景換成公司內(nèi)部培訓五辽,由一個講師給大家做培訓外恕,講師前邊講了很多細節(jié),直到最后一刻才給我們揭曉答案罪郊,也許很多人等不到答案出現(xiàn)尚洽,早已睡著或者離開會場腺毫。為什么會這樣?
是因為我們在聽故事的時候争舞,大腦是一種捕獲獵物模式澈灼,我們只需要找到一個興奮點店溢,其他的次要內(nèi)容記不住也沒有關(guān)系委乌。而在參加培訓的時候遭贸,大腦是一種學習模式,大腦有一張知識網(wǎng)著蛙,新知識點必須與現(xiàn)有知識網(wǎng)中的某個點建立聯(lián)系耳贬,才能成為知識網(wǎng)的一部分,這才是真正的聽懂顷蟆,到實際工作中才能用得上腐魂。而在我們參見培訓時,很多講師的講課方法其實就是照搬應試教育的講課方式肮街,只講結(jié)果少講其他判导。
【改造后的故事】
那什么樣的講述方式才能讓大家容易聽懂呢眼刃?我把黃石公和張良的故事改造一下:
第一層:黃石公通過對張良的考驗,把《太公兵法》傳給了張良仪际。
第二層:
第一步:黃石公考驗張良昵骤。
第二步:黃石公決定把《太公兵法》傳給張良。
第三層:
黃石公考驗張良成榜,分為三步:讓張良給他穿鞋蹦玫、第一次五日之約刘绣、第二次五日之約纬凤。
黃石公決定把《太公兵法》傳給張良撩嚼,實際上沒有第三層。
改造后恋技,思路清晰了很多舰涌,不需要再看故事原文你稚,我們就能明白故事要表達的所有重點刁赖。看起來鸡典,我們的改造很完美枪芒,但是這里還有一個重要問題并沒有解決:黃石公考驗張良,為什么要分為這三步纽甘?黃石公到底要考驗張良的哪些方面抽碌?
對于如上的疑問货徙,每個聽課者都會有自己的一個理解,就像“一千個人心中有一千個哈密雷特”一樣赏迟。對于小說來說蠢棱,這確實很好烹笔,它能給人以無限瞎想谤职。但現(xiàn)在是在工作啊亿鲜,講課的目的是讓大家都能得到明確的答案,而不是每一個人都有自己的理解饶套,明確的答案可以避免以后的很多誤解和爭論垒探。我認為這是現(xiàn)代企業(yè)做內(nèi)部培訓的一個重要目標圾叼。
于是我們再次修改(前兩層不變):
第三層:
黃石公考驗張良,分為三步:考驗張良對老人的恭敬之心构挤,考驗張良的信用惕鼓,考驗張良的耐心。
黃石公決定把《太公兵法》傳給張良矾飞,沒有第三層呀邢。
第四層:
考驗張良對老人的恭敬之心:具體做法是讓張良給他穿鞋來刁難張良驼鹅。
考驗張良的信用:具體做法是五天后的約會刁難張良。
考驗張良的耐心:具體做法是第二次五天后的約會繼續(xù)刁難張良豺型。
第二次的修改买乃,讓所有人都能得到一個沒有二義性的答案剪验,目標達成前联!
【改造的精妙之處】
現(xiàn)在我們就需要總結(jié)一下娶眷,改造后的故事到底好在哪里届宠。
我認為好處有三個:
一、層次感強烈伤塌,能解除人腦一次只能記住七樣東西的限制轧铁。
據(jù)研究齿风,人腦一次只能記住七樣東西(甚至有的人只能記住三樣)。現(xiàn)在我們把思維放在改造后的果善、層次感強烈的結(jié)構(gòu)中系谐,思維可以隨時移到下一層纪他,這樣就能再次記住七樣東西晾匠,這樣的好處其實是巨大的!但是像不少培訓師講的那樣薪寓,一次把所有細節(jié)都展開澜共,聽課者不犯困才怪嗦董。
好處再擴展一點,在層次感強烈的結(jié)構(gòu)中奇唤,聽課者一直都知道:當前講的內(nèi)容在整體結(jié)構(gòu)中處于什么地位、對全局有何作用甲葬、受到全局的什么影響冗栗。于是隅居,聽課者原本認為的枯燥的工作,經(jīng)過這樣一講棉钧,他會被吸引住涕蚤,因為他了解了自己的工作對全局的貢獻万栅,以及一種洞悉全局的美妙感覺!
二休溶、縱向?qū)哟螕碛袩o須解釋的關(guān)聯(lián)扰她,是因為下層給上層呈現(xiàn)的是結(jié)果而不是實現(xiàn)徒役。
我們讀第二次改造后的故事梗概,當讀到“黃石公考驗張良”時杉女,讀者最希望看到的下文是:與“考驗”兩字有顯而易見聯(lián)系的鸳吸,例如“恭敬之心”层释,這就是第二次改造故事的意義所在!上下兩個層次用這兩個詞關(guān)聯(lián)起來廉白,根本不需要再做任何解釋,因為“考驗恭敬之心”傳達出來的意義沒有二義性院溺。
而反觀第一次改造后的故事恭陡,“考驗”與“給他穿鞋”這兩個詞,雖然有點聯(lián)系懂衩,但是又說不太清楚撮躁,存在二義性,聽課者腦子還在這里打轉(zhuǎn)的時候杨帽,講師卻已經(jīng)翻到了下一頁注盈。
再深入一層叙赚,上下兩層之間的兩個詞纠俭,為什么擁有無須解釋的關(guān)聯(lián)浪慌?是因為在第三層來看,黃石公要考驗三個方面钓简,其他一個方面是“恭敬之心”外邓,這個“恭敬之心”是第四層“給他穿鞋”形成的一個結(jié)果古掏。也就是說,站在每個層次看下一層丧枪,只應該看下一層的結(jié)果拧烦,而不是看它們的實現(xiàn)方式,這種方式才能看得明白齐佳。我們一定有這樣的經(jīng)驗:一旦鉆進一件事情的細節(jié)债沮,就會淹沒在細節(jié)的海洋中炼吴,很難再看清事情的外部特性了。這個思路其實也是疫衩,上下級領(lǐng)導之間效果很好的交流方式缺厉。
三、站在更高的層次隧土,能激發(fā)更高的智慧提针!
還拿第二次改造后的故事舉例,如果你只是站在第四層那里曹傀,你所能看到的選項只有:讓他給我穿鞋辐脖、讓他給我捶背等。
如果你站在了更高的第三層嗜价,你會看到這個考驗的本質(zhì)(也可以理解為目標)是:考驗張良對老人的恭敬之心。
有人會說幕庐,本質(zhì)不本質(zhì)的有什么用久锥?
我現(xiàn)在來回答,這段很重要异剥,請仔細體會:你的實現(xiàn)方式(例如讓張良給他穿鞋)必須能滿足本質(zhì)或目標(例如考驗張良對老人的恭敬之心)瑟由,才能成其為一個合理的結(jié)構(gòu),但如果不滿足目標冤寿,就一定會讓這個結(jié)構(gòu)坍塌歹苦。
怎么講?在黃石公還沒想好怎么考驗張良的時候督怜,黃石公知道自己的目標是:考驗張良對老人的恭敬之心殴瘦。但這時黃石公該怎樣考驗張良,哪些方法能考驗出真正的品質(zhì)号杠,而不是虛假的品質(zhì)蚪腋?不站在這個場景上丰歌,我們怎么會知道黃石公還有這樣一個選擇難題?智慧就在這里屉凯。
這個選擇是很重要的动遭,因為它決定了能不能滿足目標,從而決定了這個結(jié)構(gòu)會不會坍塌神得。黃石公可以選擇:道聽途說厘惦、直接和張良開誠布公地談。但是哩簿,這些方法都會讓張良意識到他正在被考驗宵蕉,從人性的角度來看,張良一定會隱藏起自己自私的一面节榜。這就是為什么有一些外企考驗人的時候羡玛,要制造一個考試之外的意外情況!
【軟件開發(fā)領(lǐng)域的思想與此相通】
作為軟件開發(fā)者宗苍,很多人都會去學習:面向過程編程稼稿、面向?qū)ο缶幊獭++/Java讳窟、設計模式让歼、重構(gòu)等。你的方式是不是:強制記憶大師們的方法或者格言丽啡?如果讓你創(chuàng)造一個新的模式谋右、方法、格言补箍,我相信就幾乎沒有人能做到了改执。為什么?我認為關(guān)鍵在于沒有明白這些方法的背后是什么坑雅。
我提幾個與本文思想有關(guān)的軟件開發(fā)概念辈挂,它們背后的東西其實是相通的:
1.為什么有一條開發(fā)格言大概是這么說的:接口類中的函數(shù)個數(shù)盡量不要超過10個?
本質(zhì)上與我前文提到的“層次感強烈裹粤,能解除人腦一次只能記住七樣東西的限制”是一個理念终蒂。因為代碼是給人看的,如果超過10個函數(shù)蛹尝,一眼看上去就懵了后豫,而且關(guān)系隨著函數(shù)的增加而錯綜復雜悉尾,很容易出現(xiàn)邏輯漏洞突那。
2.為什么大師級人物Martin Fowler在《重構(gòu)》這本書中提到:“當你感覺需要撰寫注釋,請先嘗試重構(gòu)构眯,試著讓所有注釋都變得多余”愕难?
本質(zhì)上與我前文提到的“層次的縱向維度,擁有無須解釋的關(guān)聯(lián)”的是一個理念,只是大師并沒有解釋那么清楚猫缭。很多人就看不懂了葱弟,于是他們繼續(xù)我行我素,在代碼中充斥著無效注釋猜丹,還認為自己寫的注釋多么規(guī)范芝加、多么專業(yè)。忠實奉行大師理念的很多人射窒,會走到另外一個極端藏杖,就是沒有注釋或者很少注釋,實際上在沒有讓函數(shù)名符合我說的“擁有無須解釋的關(guān)聯(lián)”標準之前脉顿,不寫注釋就是一種災難蝌麸!
3.為什么寫《敏捷軟件開發(fā)原則模式實踐》一書的作者鮑勃大叔,會在書里提到如下兩條原則:接口隔離艾疟、依賴倒置来吩?
我的理解:接口隔離就是,把接口函數(shù)命名為結(jié)果而不是實現(xiàn)方式蔽莱,這樣多個類之間就能做到無須解釋弟疆,只看接口函數(shù)名就能無二義性地彼此明白。
依賴倒置就是盗冷,作為客戶代碼(即調(diào)用其他接口的代碼)兽间,應該在“我”的地盤定義“我”要使用一個什么東西(接口),而不是由這個接口的實現(xiàn)者去定義它給客戶提供什么正塌,這就是倒置嘀略。這樣才能做到無須解釋,因為接口是客戶定義的乓诽,它能清晰地知道它想要什么結(jié)果帜羊。
這兩個原則,本質(zhì)上與我前文提到的“層次的縱向維度鸠天,擁有無須解釋的關(guān)聯(lián)”的是一個理念讼育。你看到這里一定會發(fā)現(xiàn),我的一個這觀點能包含Martin
Fowler和鮑勃大叔兩個人的三個觀點稠集,這說明什么奶段?這說明很多道理都是相通的,它們的根也許都是一個剥纷,就看誰能挖出那個根痹籍!
注:如果想了解接口隔離、依賴倒置原則的詳細內(nèi)容晦鞋,請自行參閱相關(guān)書籍蹲缠,本文只講我個人的深層理解棺克。
4.很多人以為面向?qū)ο蟊让嫦蜻^程高級,要徹底拋棄面向過程线定。話雖然可以這么說娜谊,但內(nèi)涵遠遠不是這樣。
本文提到的三條核心理念斤讥,實際上都是面向過程的方式纱皆,是函數(shù)之間的調(diào)用關(guān)系。雖然我們都認為面向過程弱爆了芭商,但是我們看到了本文提出的三個理念抹剩,其實都是面向過程的核心理念。我自己分析出來這些核心理念之后蓉坎,就發(fā)覺自己曾經(jīng)低估了面向過程澳眷。而面向?qū)ο笕绻麤]有面向過程這個根基,就只能是水中月蛉艾、鏡中花钳踊!
更深入一層,面向?qū)ο蟮拿恳粋€切面都是一個面向過程勿侯,而對象卻是另外一個維度的事情拓瞪,關(guān)于面向?qū)ο笈c面向過程的更深入討論,我會專門寫文章助琐。
【結(jié)束語】
為什么很多人都不喜歡給別人講課祭埂?是因為他給別人講的東西里,根本沒有熠熠發(fā)光的點兵钮,他自己講過之后也沒有任何提高蛆橡,只是為了應付工作而已,當然沒有樂趣可言掘譬。
本文所講的三個理念泰演,可以應用到很多領(lǐng)域:上下級溝通、知識培訓葱轩、用戶手冊睦焕、程序員寫代碼。具體的使用技巧靴拱,以后我會再寫文章專題講解垃喊。
----------結(jié)束----------
作于2017-4-15。
我的相關(guān)文章:
《快人十倍的秘訣:一個初學者和一個資深者的對話:融會貫通續(xù)》