锤子和钉子
編者按:各行各業(yè)都有自己的工具,這些“工具”不僅僅是機(jī)械實(shí)物,更是處理問(wèn)題的方式和思維的方法。也許是因?yàn)樘煜ぷ约旱摹肮ぞ摺?#xff0c;我們總會(huì)用這把“黃金大錘”去敲擊生活中遇到的一切“釘子”。以至于很多時(shí)候,明明有簡(jiǎn)單有效的解決方法,我們卻視而不見(jiàn),非要用自己的“錘子”將問(wèn)題復(fù)雜化。
?
作者:劉未鵬
?
(一)
有這么一句古老的箴言:
如果你手里有一把錘子,所有東西看上去都像釘子。
?
其實(shí)這句話已經(jīng)是老調(diào)中的老調(diào)重彈了,我們程序員有很多錘子:OO、設(shè)計(jì)模式、語(yǔ)言(C,C++,Java,Python,Ruby,etc.)、各種各樣的架構(gòu)tricks&workarounds,以及一堆軟件過(guò)程方法論(Agile,XP,Scrum,etc.)等等。
?
幾則故事:
?
1. 阿朱的(《走出軟件作坊》):
?
我過(guò)去領(lǐng)導(dǎo)過(guò)架構(gòu)組。架構(gòu)組的人在2002年的時(shí)候,瘋狂迷上了UML和設(shè)計(jì)模式,人手一本《COM本質(zhì)論》和《設(shè)計(jì)模式》。我手下有一個(gè)新手,就處處是類,處處是抽象,處處是封裝,處處是分離,盡量使代碼高內(nèi)聚低耦合。但是這樣的的代碼太麻煩,他花費(fèi)了大量的時(shí)間,他看自己的代碼賞心悅目,別人看他的代碼云里霧里,不閱讀懂《設(shè)計(jì)模式》就按照常規(guī)理解業(yè)務(wù)的思路去閱讀他的代碼根本閱讀不懂,不知道他為什么這樣寫(xiě)代碼,怪異的很。本來(lái),這位想達(dá)到可維護(hù)性,可閱讀性,卻真正的失去了可維護(hù)性、可閱讀性。這和我前幾天看我的朋友周愛(ài)民寫(xiě)的《大道至簡(jiǎn)》中寫(xiě)到:有人希望拿UML去統(tǒng)一用戶和軟件設(shè)計(jì)者。殊不知UML有多難理解,而UML設(shè)計(jì)者卻認(rèn)為UML可以描述一切。就這個(gè)道理,要理解你的代碼還要去讀懂《設(shè)計(jì)模式》,這要求太高了吧。
?
所幸這位新手自己都每次寫(xiě)的累,慢慢的也就懶了,覺(jué)得確實(shí)需要分離的時(shí)候就分離,覺(jué)得沒(méi)什么必要的就懶得做了。用他自嘲的話說(shuō)就是:被磨平了。其實(shí),依我看,他現(xiàn)在這個(gè)代碼狀態(tài)才是剛剛好,即照顧了設(shè)計(jì)擴(kuò)展,又照顧了實(shí)用。真正的純OO,純?cè)O(shè)計(jì)模式,可能只存在于教學(xué)和科學(xué),而不在于我們的商業(yè)軟件開(kāi)發(fā)。我們作為商業(yè)開(kāi)發(fā),強(qiáng)調(diào)的是叫座的基礎(chǔ)上叫好,所以折中方案是必須的,客戶和我們自己兩相宜就OK,是否符合正宗,就不在我們的商業(yè)開(kāi)發(fā)管理范疇了。
?
這位新手還寫(xiě)了大量的注釋。在每個(gè)源代碼文件頭都寫(xiě)上幾月幾號(hào),XX創(chuàng)建的,這個(gè)原代碼文件主要是干什么的,還畫(huà)蛇添足的寫(xiě)上版權(quán)所有,公司名稱。好像這個(gè)代碼要開(kāi)源,或者可能會(huì)被其他公司竊取了好表明公司版權(quán)。甚至每個(gè)函數(shù)都寫(xiě)了注釋,每個(gè)參數(shù)是什么意思,每個(gè)參數(shù)可能出現(xiàn)的值代表什么意思,都寫(xiě)的一清二楚。久而久之,也懶的維護(hù)了。代碼改動(dòng)了,參數(shù)擴(kuò)展了,參數(shù)狀態(tài)值有了變化,注釋說(shuō)明卻沒(méi)有跟著改動(dòng),讓后來(lái)看代碼的人老誤解,還不如不寫(xiě)這些注釋。
?
我告訴他:做事不能走極端。要么全寫(xiě)注釋,要么不寫(xiě)注釋,都是不對(duì)的。我只在我認(rèn)為要小心的地方,或者我自己都覺(jué)得很難理解懂的地方我才寫(xiě)注釋。否則,我自己都可能會(huì)過(guò)段時(shí)間理解錯(cuò)了。如果某段代碼我看看就能看懂,我就不寫(xiě)注釋了。咱們做企業(yè)管理軟件,深入技術(shù)又沒(méi)有,只要代碼能把復(fù)雜的業(yè)務(wù)處理描述的邏輯思路清晰就OK。雖然說(shuō)理解能力不同,我能快速理解了的未必有新手能夠理解,但是你看看我的代碼你就明白了。(摘自 《走出軟件作坊:代碼那些事兒》)
?
再來(lái)一段:
?
有一部分所謂的架構(gòu)師,技術(shù)超深厚,框架堪比Spring之類,但自己一個(gè)人悶頭寫(xiě)框架不斷優(yōu)化,力竭使用最先進(jìn)的技術(shù)思想,希望把最豪華的設(shè)計(jì)模式融進(jìn)去,希望把OSGi融進(jìn)去,希望把AOP融進(jìn)去,全無(wú)視那些想利用框架減輕自己工作量提高自己工作效率的應(yīng)用功能開(kāi)發(fā)同事。這是在用公司工資玩技術(shù)呢,還是在滿足個(gè)人技術(shù)幻想呢,還是在實(shí)驗(yàn)?zāi)?#xff1f;到底在干嗎?價(jià)值在哪里?
?
還有的人不會(huì)推廣自己的框架。不善言辭,就幻想著技術(shù)總監(jiān)能夠通過(guò)行政命令讓大家必須用框架,能不自己寫(xiě)代碼就不自己寫(xiě)代碼,能交給框架做的就交給框架做。但技術(shù)總監(jiān)號(hào)召完了,大家仍然我行我素,各自開(kāi)發(fā)為政,讓框架開(kāi)發(fā)者很孤單。
?
還有的人也不會(huì)推廣自己的框架,沉迷在自己的理想世界。好不容易技術(shù)總監(jiān)召集大家讓大家來(lái)聽(tīng)聽(tīng)框架如何應(yīng)用,但自說(shuō)自話,滿口自己最得意的詞匯,聽(tīng)得業(yè)務(wù)功能開(kāi)發(fā)人云山霧罩。大家問(wèn)些問(wèn)題,如這樣的業(yè)務(wù)開(kāi)發(fā)難題,框架怎么解決?于是,框架開(kāi)發(fā)員就和業(yè)務(wù)開(kāi)發(fā)員爭(zhēng)論了起來(lái)。框架開(kāi)發(fā)員覺(jué)得這根本就不能答應(yīng)客戶這種變態(tài)的需求,而業(yè)務(wù)開(kāi)發(fā)員說(shuō)這就是現(xiàn)狀。框架開(kāi)發(fā)員說(shuō)你可以這樣這樣,業(yè)務(wù)開(kāi)發(fā)員說(shuō)這樣太麻煩,框架開(kāi)發(fā)員立刻還口這還麻煩?于是雙方各執(zhí)一詞,框架也沒(méi)推廣成功。
?
我手底下有個(gè)框架開(kāi)發(fā)員。他的技術(shù)渴望很強(qiáng)烈,為了技術(shù)難題攻克,可以不吃不睡。并且技術(shù)敏感度很強(qiáng),學(xué)習(xí)也快。所以當(dāng)時(shí)我感覺(jué)他是個(gè)程序員的料,就把他拉到我的手下。
?
但是有個(gè)問(wèn)題,他寫(xiě)出的框架代碼,在平時(shí)開(kāi)發(fā)業(yè)務(wù)功能的時(shí)候挺麻煩。大家可能需要的是一把鐵鍬,但是他卻給大家N根不同長(zhǎng)度不同粗細(xì)不同材質(zhì)的木棍,N個(gè)不同形狀不同用途的鐵鍬頭。大家會(huì)有N種組合。不僅導(dǎo)致他寫(xiě)代碼老超任務(wù)期,而且也讓使用人感覺(jué)沒(méi)多大幫助。使用起來(lái)復(fù)雜,而且還得配置這個(gè)配置哪個(gè),需要注意的地方太多。業(yè)務(wù)開(kāi)發(fā)組的同事就不愿意用,還不如把代碼自己直接寫(xiě)死了得了。超期還會(huì)影響業(yè)務(wù)功能開(kāi)發(fā)組的使用。本來(lái)人家是為了想加快自己的工作效率。你答應(yīng)好這個(gè)星期給業(yè)務(wù)開(kāi)發(fā)組提供一個(gè)功能,但你沒(méi)有拿出來(lái)。就耽誤人家進(jìn)度。你多次拿不出來(lái),人家業(yè)務(wù)開(kāi)發(fā)組還不如自己開(kāi)發(fā)一個(gè)呢,求人不如求己。
?
我最后警告他:如果你認(rèn)為自己技術(shù)夠牛,那么你必須證明你能很快做出來(lái)。如果你認(rèn)為自己技術(shù)夠牛,最好能牛到,只提供一個(gè)函數(shù)就解決了他們的問(wèn)題。別這個(gè)代理類,那個(gè)聚合類,這個(gè)唯一實(shí)例類。最好連參數(shù)也沒(méi)有,大家調(diào)用一下寫(xiě)一句代碼就OK。甚至你做的好,大家都不用調(diào)用你的代碼,你可以包含在基礎(chǔ)框架中,你自己去判斷什么時(shí)候什么應(yīng)用需要執(zhí)行這個(gè)動(dòng)作。如果你認(rèn)為自己技術(shù)夠牛,那么在業(yè)務(wù)功能需求發(fā)生變化的時(shí)候,你能夠保證接口不變的情況下還能適合變化,這才你夠牛。別讓業(yè)務(wù)開(kāi)發(fā)組的人跟著你也得改他們自己的代碼,那樣的設(shè)計(jì)就很爛了。
?
小伙聽(tīng)了我的話。進(jìn)度保證,代碼接口簡(jiǎn)潔。(摘自《走出軟件作坊:走鋼索的人》)
?
2. 坊間流傳的大家耳熟能詳?shù)男」适?#xff1a;
?
話說(shuō)聯(lián)合利華新?lián)Q了一批自動(dòng)香皂包裝機(jī)以后,經(jīng)常出現(xiàn)香皂盒子是空的沒(méi)有香皂的情況,而在裝配線一頭用人工檢查因?yàn)樾蕟?wèn)題不太可能而且不保險(xiǎn)。這不,一個(gè)由自動(dòng)化,機(jī)械,機(jī)電一體化等專業(yè)的博士組成的Solution隊(duì)伍來(lái)解決這個(gè)問(wèn)題,沒(méi)多久他們?cè)谘b配線的頭上開(kāi)發(fā)了全自動(dòng)的X光透射檢查線,透射檢查所有的裝配線盡頭等待裝箱的香皂盒,如果有空的就用機(jī)械臂取走。
?
不巧,中國(guó)一鄉(xiāng)鎮(zhèn)企業(yè)生產(chǎn)香皂也遇到類似問(wèn)題,老板吩咐線上小工務(wù)必想出對(duì)策解決之,小工拿了一個(gè)電風(fēng)扇放在裝配線的頭上,對(duì)著最后的成品吹之,空盒子被吹走,問(wèn)題解決之。(摘自TopLanguage上的討論)
?
因此,
?
心中有錘,就容易為其奴役:在遇到問(wèn)題的時(shí)候不是具體問(wèn)題具體分析,而是屁股決定腦袋,不管三七二十一先上黃金大錘再說(shuō),而且往往還頗有成就感,卻將自己真正原本要解決的問(wèn)題拋在腦后了。始終莫要忘記提醒自己,“問(wèn)題是什么?”
?
但毫無(wú)疑問(wèn),沒(méi)有錘子是萬(wàn)萬(wàn)不行的,沒(méi)有誰(shuí)會(huì)傻到徒手釘釘。重點(diǎn)是選擇合適你的工具。這又要求在學(xué)習(xí)工具的時(shí)候始終別忘記它的適用范圍。
?
正確的態(tài)度應(yīng)該是:
?
手中有錘,心中無(wú)錘。
?
容我具體解釋一下這句話:任何工具都有其適用范疇和前提。然而,我們?cè)趯W(xué)習(xí)工具的時(shí)候由于投入很多的時(shí)間,往往在情緒上面對(duì)工具產(chǎn)生了太強(qiáng)的感情,我們既投入了時(shí)間,當(dāng)然內(nèi)心希望能夠用上這些工具,所以就容易忘掉其適用前提,欣欣然地不管三七二十一就把黃金大錘亮出來(lái),以顯示自己的厲害。但如果我們換一個(gè)態(tài)度,僅僅將它看作我們工具箱中的又一件工具,就可以客觀地評(píng)估它,視具體情況而使用了——始終別忘記自己要解決的問(wèn)題是什么。Why永遠(yuǎn)在How之前。
?
(二)
?
與上面對(duì)應(yīng)的還有另一句話(實(shí)際上這是我杜撰的):
?
如果你想釘一個(gè)釘子,所有東西看上去都像是錘子。
?
用大白話來(lái)說(shuō)就是:如果你心中專注于你想要解決的問(wèn)題,那么你所看到的東西就會(huì)呈現(xiàn)出以往你沒(méi)有看到的一面。
?
例子:
?
1. 阿基米德洗了一輩子的澡,然而,只有那一次,當(dāng)他想要解決皇冠密度問(wèn)題的時(shí)候,想到可以利用排水體積來(lái)測(cè)量不規(guī)則物體體積。
?
2. 如果你也喜歡看《Monk》,就會(huì)體會(huì)到把問(wèn)題裝在心中,甚至把自己變成問(wèn)題,問(wèn)題即自己的作用——當(dāng) Monk的潛意識(shí)里面始終在尋思How,Why,Who did it這幾個(gè)問(wèn)題時(shí),周遭環(huán)境中的一切信息都會(huì)顯出另一番面目,一個(gè)平常情況下根本不會(huì)注意到的細(xì)節(jié)也能成為破案的關(guān)鍵,看似不相干的信息也能帶來(lái)出乎意料的啟發(fā)
3. BentObjects
?
如果你也像我一樣,習(xí)慣于經(jīng)常把疑問(wèn)裝在大腦中醞釀好幾天,你肯定會(huì)有eureka的體驗(yàn)。
或者,如果你喜歡在一段時(shí)間之內(nèi)關(guān)注某個(gè)主題,你在閱讀書(shū)籍資料的時(shí)候就會(huì)帶著問(wèn)題的眼鏡,看到平常看不到的東西,作出與平常不一樣的思考。
?
把自己變成釘子,這就是eureka的奧秘。
?
作者:劉未鵬
?
(一)
有這么一句古老的箴言:
如果你手里有一把錘子,所有東西看上去都像釘子。
?
其實(shí)這句話已經(jīng)是老調(diào)中的老調(diào)重彈了,我們程序員有很多錘子:OO、設(shè)計(jì)模式、語(yǔ)言(C,C++,Java,Python,Ruby,etc.)、各種各樣的架構(gòu)tricks&workarounds,以及一堆軟件過(guò)程方法論(Agile,XP,Scrum,etc.)等等。
?
幾則故事:
?
1. 阿朱的(《走出軟件作坊》):
?
我過(guò)去領(lǐng)導(dǎo)過(guò)架構(gòu)組。架構(gòu)組的人在2002年的時(shí)候,瘋狂迷上了UML和設(shè)計(jì)模式,人手一本《COM本質(zhì)論》和《設(shè)計(jì)模式》。我手下有一個(gè)新手,就處處是類,處處是抽象,處處是封裝,處處是分離,盡量使代碼高內(nèi)聚低耦合。但是這樣的的代碼太麻煩,他花費(fèi)了大量的時(shí)間,他看自己的代碼賞心悅目,別人看他的代碼云里霧里,不閱讀懂《設(shè)計(jì)模式》就按照常規(guī)理解業(yè)務(wù)的思路去閱讀他的代碼根本閱讀不懂,不知道他為什么這樣寫(xiě)代碼,怪異的很。本來(lái),這位想達(dá)到可維護(hù)性,可閱讀性,卻真正的失去了可維護(hù)性、可閱讀性。這和我前幾天看我的朋友周愛(ài)民寫(xiě)的《大道至簡(jiǎn)》中寫(xiě)到:有人希望拿UML去統(tǒng)一用戶和軟件設(shè)計(jì)者。殊不知UML有多難理解,而UML設(shè)計(jì)者卻認(rèn)為UML可以描述一切。就這個(gè)道理,要理解你的代碼還要去讀懂《設(shè)計(jì)模式》,這要求太高了吧。
?
所幸這位新手自己都每次寫(xiě)的累,慢慢的也就懶了,覺(jué)得確實(shí)需要分離的時(shí)候就分離,覺(jué)得沒(méi)什么必要的就懶得做了。用他自嘲的話說(shuō)就是:被磨平了。其實(shí),依我看,他現(xiàn)在這個(gè)代碼狀態(tài)才是剛剛好,即照顧了設(shè)計(jì)擴(kuò)展,又照顧了實(shí)用。真正的純OO,純?cè)O(shè)計(jì)模式,可能只存在于教學(xué)和科學(xué),而不在于我們的商業(yè)軟件開(kāi)發(fā)。我們作為商業(yè)開(kāi)發(fā),強(qiáng)調(diào)的是叫座的基礎(chǔ)上叫好,所以折中方案是必須的,客戶和我們自己兩相宜就OK,是否符合正宗,就不在我們的商業(yè)開(kāi)發(fā)管理范疇了。
?
這位新手還寫(xiě)了大量的注釋。在每個(gè)源代碼文件頭都寫(xiě)上幾月幾號(hào),XX創(chuàng)建的,這個(gè)原代碼文件主要是干什么的,還畫(huà)蛇添足的寫(xiě)上版權(quán)所有,公司名稱。好像這個(gè)代碼要開(kāi)源,或者可能會(huì)被其他公司竊取了好表明公司版權(quán)。甚至每個(gè)函數(shù)都寫(xiě)了注釋,每個(gè)參數(shù)是什么意思,每個(gè)參數(shù)可能出現(xiàn)的值代表什么意思,都寫(xiě)的一清二楚。久而久之,也懶的維護(hù)了。代碼改動(dòng)了,參數(shù)擴(kuò)展了,參數(shù)狀態(tài)值有了變化,注釋說(shuō)明卻沒(méi)有跟著改動(dòng),讓后來(lái)看代碼的人老誤解,還不如不寫(xiě)這些注釋。
?
我告訴他:做事不能走極端。要么全寫(xiě)注釋,要么不寫(xiě)注釋,都是不對(duì)的。我只在我認(rèn)為要小心的地方,或者我自己都覺(jué)得很難理解懂的地方我才寫(xiě)注釋。否則,我自己都可能會(huì)過(guò)段時(shí)間理解錯(cuò)了。如果某段代碼我看看就能看懂,我就不寫(xiě)注釋了。咱們做企業(yè)管理軟件,深入技術(shù)又沒(méi)有,只要代碼能把復(fù)雜的業(yè)務(wù)處理描述的邏輯思路清晰就OK。雖然說(shuō)理解能力不同,我能快速理解了的未必有新手能夠理解,但是你看看我的代碼你就明白了。(摘自 《走出軟件作坊:代碼那些事兒》)
?
再來(lái)一段:
?
有一部分所謂的架構(gòu)師,技術(shù)超深厚,框架堪比Spring之類,但自己一個(gè)人悶頭寫(xiě)框架不斷優(yōu)化,力竭使用最先進(jìn)的技術(shù)思想,希望把最豪華的設(shè)計(jì)模式融進(jìn)去,希望把OSGi融進(jìn)去,希望把AOP融進(jìn)去,全無(wú)視那些想利用框架減輕自己工作量提高自己工作效率的應(yīng)用功能開(kāi)發(fā)同事。這是在用公司工資玩技術(shù)呢,還是在滿足個(gè)人技術(shù)幻想呢,還是在實(shí)驗(yàn)?zāi)?#xff1f;到底在干嗎?價(jià)值在哪里?
?
還有的人不會(huì)推廣自己的框架。不善言辭,就幻想著技術(shù)總監(jiān)能夠通過(guò)行政命令讓大家必須用框架,能不自己寫(xiě)代碼就不自己寫(xiě)代碼,能交給框架做的就交給框架做。但技術(shù)總監(jiān)號(hào)召完了,大家仍然我行我素,各自開(kāi)發(fā)為政,讓框架開(kāi)發(fā)者很孤單。
?
還有的人也不會(huì)推廣自己的框架,沉迷在自己的理想世界。好不容易技術(shù)總監(jiān)召集大家讓大家來(lái)聽(tīng)聽(tīng)框架如何應(yīng)用,但自說(shuō)自話,滿口自己最得意的詞匯,聽(tīng)得業(yè)務(wù)功能開(kāi)發(fā)人云山霧罩。大家問(wèn)些問(wèn)題,如這樣的業(yè)務(wù)開(kāi)發(fā)難題,框架怎么解決?于是,框架開(kāi)發(fā)員就和業(yè)務(wù)開(kāi)發(fā)員爭(zhēng)論了起來(lái)。框架開(kāi)發(fā)員覺(jué)得這根本就不能答應(yīng)客戶這種變態(tài)的需求,而業(yè)務(wù)開(kāi)發(fā)員說(shuō)這就是現(xiàn)狀。框架開(kāi)發(fā)員說(shuō)你可以這樣這樣,業(yè)務(wù)開(kāi)發(fā)員說(shuō)這樣太麻煩,框架開(kāi)發(fā)員立刻還口這還麻煩?于是雙方各執(zhí)一詞,框架也沒(méi)推廣成功。
?
我手底下有個(gè)框架開(kāi)發(fā)員。他的技術(shù)渴望很強(qiáng)烈,為了技術(shù)難題攻克,可以不吃不睡。并且技術(shù)敏感度很強(qiáng),學(xué)習(xí)也快。所以當(dāng)時(shí)我感覺(jué)他是個(gè)程序員的料,就把他拉到我的手下。
?
但是有個(gè)問(wèn)題,他寫(xiě)出的框架代碼,在平時(shí)開(kāi)發(fā)業(yè)務(wù)功能的時(shí)候挺麻煩。大家可能需要的是一把鐵鍬,但是他卻給大家N根不同長(zhǎng)度不同粗細(xì)不同材質(zhì)的木棍,N個(gè)不同形狀不同用途的鐵鍬頭。大家會(huì)有N種組合。不僅導(dǎo)致他寫(xiě)代碼老超任務(wù)期,而且也讓使用人感覺(jué)沒(méi)多大幫助。使用起來(lái)復(fù)雜,而且還得配置這個(gè)配置哪個(gè),需要注意的地方太多。業(yè)務(wù)開(kāi)發(fā)組的同事就不愿意用,還不如把代碼自己直接寫(xiě)死了得了。超期還會(huì)影響業(yè)務(wù)功能開(kāi)發(fā)組的使用。本來(lái)人家是為了想加快自己的工作效率。你答應(yīng)好這個(gè)星期給業(yè)務(wù)開(kāi)發(fā)組提供一個(gè)功能,但你沒(méi)有拿出來(lái)。就耽誤人家進(jìn)度。你多次拿不出來(lái),人家業(yè)務(wù)開(kāi)發(fā)組還不如自己開(kāi)發(fā)一個(gè)呢,求人不如求己。
?
我最后警告他:如果你認(rèn)為自己技術(shù)夠牛,那么你必須證明你能很快做出來(lái)。如果你認(rèn)為自己技術(shù)夠牛,最好能牛到,只提供一個(gè)函數(shù)就解決了他們的問(wèn)題。別這個(gè)代理類,那個(gè)聚合類,這個(gè)唯一實(shí)例類。最好連參數(shù)也沒(méi)有,大家調(diào)用一下寫(xiě)一句代碼就OK。甚至你做的好,大家都不用調(diào)用你的代碼,你可以包含在基礎(chǔ)框架中,你自己去判斷什么時(shí)候什么應(yīng)用需要執(zhí)行這個(gè)動(dòng)作。如果你認(rèn)為自己技術(shù)夠牛,那么在業(yè)務(wù)功能需求發(fā)生變化的時(shí)候,你能夠保證接口不變的情況下還能適合變化,這才你夠牛。別讓業(yè)務(wù)開(kāi)發(fā)組的人跟著你也得改他們自己的代碼,那樣的設(shè)計(jì)就很爛了。
?
小伙聽(tīng)了我的話。進(jìn)度保證,代碼接口簡(jiǎn)潔。(摘自《走出軟件作坊:走鋼索的人》)
?
2. 坊間流傳的大家耳熟能詳?shù)男」适?#xff1a;
?
話說(shuō)聯(lián)合利華新?lián)Q了一批自動(dòng)香皂包裝機(jī)以后,經(jīng)常出現(xiàn)香皂盒子是空的沒(méi)有香皂的情況,而在裝配線一頭用人工檢查因?yàn)樾蕟?wèn)題不太可能而且不保險(xiǎn)。這不,一個(gè)由自動(dòng)化,機(jī)械,機(jī)電一體化等專業(yè)的博士組成的Solution隊(duì)伍來(lái)解決這個(gè)問(wèn)題,沒(méi)多久他們?cè)谘b配線的頭上開(kāi)發(fā)了全自動(dòng)的X光透射檢查線,透射檢查所有的裝配線盡頭等待裝箱的香皂盒,如果有空的就用機(jī)械臂取走。
?
不巧,中國(guó)一鄉(xiāng)鎮(zhèn)企業(yè)生產(chǎn)香皂也遇到類似問(wèn)題,老板吩咐線上小工務(wù)必想出對(duì)策解決之,小工拿了一個(gè)電風(fēng)扇放在裝配線的頭上,對(duì)著最后的成品吹之,空盒子被吹走,問(wèn)題解決之。(摘自TopLanguage上的討論)
?
因此,
?
心中有錘,就容易為其奴役:在遇到問(wèn)題的時(shí)候不是具體問(wèn)題具體分析,而是屁股決定腦袋,不管三七二十一先上黃金大錘再說(shuō),而且往往還頗有成就感,卻將自己真正原本要解決的問(wèn)題拋在腦后了。始終莫要忘記提醒自己,“問(wèn)題是什么?”
?
但毫無(wú)疑問(wèn),沒(méi)有錘子是萬(wàn)萬(wàn)不行的,沒(méi)有誰(shuí)會(huì)傻到徒手釘釘。重點(diǎn)是選擇合適你的工具。這又要求在學(xué)習(xí)工具的時(shí)候始終別忘記它的適用范圍。
?
正確的態(tài)度應(yīng)該是:
?
手中有錘,心中無(wú)錘。
?
容我具體解釋一下這句話:任何工具都有其適用范疇和前提。然而,我們?cè)趯W(xué)習(xí)工具的時(shí)候由于投入很多的時(shí)間,往往在情緒上面對(duì)工具產(chǎn)生了太強(qiáng)的感情,我們既投入了時(shí)間,當(dāng)然內(nèi)心希望能夠用上這些工具,所以就容易忘掉其適用前提,欣欣然地不管三七二十一就把黃金大錘亮出來(lái),以顯示自己的厲害。但如果我們換一個(gè)態(tài)度,僅僅將它看作我們工具箱中的又一件工具,就可以客觀地評(píng)估它,視具體情況而使用了——始終別忘記自己要解決的問(wèn)題是什么。Why永遠(yuǎn)在How之前。
?
(二)
?
與上面對(duì)應(yīng)的還有另一句話(實(shí)際上這是我杜撰的):
?
如果你想釘一個(gè)釘子,所有東西看上去都像是錘子。
?
用大白話來(lái)說(shuō)就是:如果你心中專注于你想要解決的問(wèn)題,那么你所看到的東西就會(huì)呈現(xiàn)出以往你沒(méi)有看到的一面。
?
例子:
?
1. 阿基米德洗了一輩子的澡,然而,只有那一次,當(dāng)他想要解決皇冠密度問(wèn)題的時(shí)候,想到可以利用排水體積來(lái)測(cè)量不規(guī)則物體體積。
?
2. 如果你也喜歡看《Monk》,就會(huì)體會(huì)到把問(wèn)題裝在心中,甚至把自己變成問(wèn)題,問(wèn)題即自己的作用——當(dāng) Monk的潛意識(shí)里面始終在尋思How,Why,Who did it這幾個(gè)問(wèn)題時(shí),周遭環(huán)境中的一切信息都會(huì)顯出另一番面目,一個(gè)平常情況下根本不會(huì)注意到的細(xì)節(jié)也能成為破案的關(guān)鍵,看似不相干的信息也能帶來(lái)出乎意料的啟發(fā)
3. BentObjects
?
如果你也像我一樣,習(xí)慣于經(jīng)常把疑問(wèn)裝在大腦中醞釀好幾天,你肯定會(huì)有eureka的體驗(yàn)。
或者,如果你喜歡在一段時(shí)間之內(nèi)關(guān)注某個(gè)主題,你在閱讀書(shū)籍資料的時(shí)候就會(huì)帶著問(wèn)題的眼鏡,看到平常看不到的東西,作出與平常不一樣的思考。
?
把自己變成釘子,這就是eureka的奧秘。
總結(jié)
- 上一篇: 翼灵物联工作室第一次考试总结
- 下一篇: fork炸弹c语言能否运行,Fork炸弹