我同事曾經問過我一個問題,問我代碼里寫的getInstance是干什么用的。我同事平常就寫個vb腳本,不會啥正經編程。
我就隨口回答,單例模式。然后他就問我,啥是單例模式啊。
我就說,一個程序里只能存在一個實例。
然后他繼續問,啥是實例啊。
這個問題把我問住了。一想到給他講了實例他會問我啥是對象,然后問我啥是面向對象,接口是什么,C++多繼承和繼承多個接口有什么區別,完備的面向對象為什么應該有反射,.net虛擬機是什么,繼而問我啥是面向過程,什么是堆什么是棧,,C語言和他寫的vb腳本有什么區別,數據在內存中是如何存儲的,匯編語言也是語言為什么不能滿足日常使用,機器碼和匯編語言的關系,什么是線程什么是進程,什么是操作系統操作系統又如何管理線程和進程,計算機組成原理。我的心里突然產生了一絲不可名狀的恐懼,因為這是我大學4年+工作近十年也才想明白一半的問題。他永遠有問題,而我不可能永遠有答案,這些問題你就是把喬布斯,比爾蓋茨,丹尼斯·里奇,馮諾依曼,圖靈湊上一桌給他講,恐怕都沒辦法完全解答。
一想到,如果我把剛才思考中的過程一股腦倒出來告訴他這東西講不明白,他會說你先給我講講,萬一能明白呢?如果我拒絕講他會不會認為這是一種職場霸凌知識壟斷,萬一他以后想起來這個事就要問我我怎么辦?想到這里我的感覺就像被人掐住了脖子一樣窒息,恨不得掰開那雙掐著我的手,然后用我知識的鐵拳干到他臉上,然后對著他的耳朵瘋狂灌輸這些對他來說完全不可名狀的知識最后把他逼瘋。
但是我得理智阻止了我,于是我回答他,剛才那個代碼你放那一會我改吧,這玩意對你來說太早了。
補充一下吧,我上邊說到的這些知識,不需要真的講出來,單單是知道要找這些知識去哪本書找,就需要至少花上一年的時間整理資料。把這些書吃透,絕大多數人一輩子也做不到。
更新一下,評論區總是說,你講啊,你為什么不給他講啊?
這其實是一個哲學上有名的思想實驗,叫黑白瑪麗問題。
假設有這么一個小孩,叫瑪麗,咱們從小就給她瞳孔上覆蓋了特殊的眼鏡,導致瑪麗看不見顏色,只能看見個黑白世界,然后我們交給瑪麗所有關于顏色的知識,包括什么顏色的波長,產生機理,等等等等,瑪麗也是個非常聰明的孩子,聰明到即使她看不見顏色,但是只依靠觀察和觸摸,就能知道材料到底是什么顏色的。
直到后來有一天,我們把瑪麗瞳孔上的眼鏡拿掉,瑪麗一瞬間就看見了世界的顏色。那么你說,瑪麗是驚嘆一聲“臥槽!這顏色好漂亮啊!”呢?還是冷哼一聲:“我早就知道是這樣的了。”呢?
對于人,特別是小孩,體驗遠遠大于知識。當你坐上泥頭車的一瞬間,你就明白了什么是泥頭車的盲區,但是光靠講,很多人一輩子也記不住。
知識代替不了體驗,與其去給他講什么是實例,不如讓他進debug自己看看,他的任務只是調用getInstance把那個對象拿出來,然后一頓讀寫就完事了,根本犯不著問出什么是實例這種已經快要上升到哲學高度的問題。就好像你叫他釘個釘子,他問你釘子釘在墻上受力分析該怎么做這種奇葩問題,問的對不對,對的,問題能不能解答,能的,但是沒有意義,他的根本問題是他沒釘過釘子,對于釘釘子這件事本身沒譜,而不是真的想要知道釘子的受力分析。只不過他沒意識到這一點。但是你是大人,你是前輩,你應該意識到這一點的。