理科的訣竅是妄想
假設你要實現(xiàn)一個功能A,功能A需要用到功能B的結(jié)果,以及功能C。
那么對于我來說,我會首先實現(xiàn)C跟B,然后再去實現(xiàn)A,這樣可以保證C跟B足夠泛用,這一次給A用,下一次還可以給D用。
但是我注意到很多大佬跟我的做法是相反的:
大佬會首先假定B跟C已經(jīng)實現(xiàn)了,在這個基礎上去實現(xiàn)A,并不關(guān)心B跟C是否真的實現(xiàn)了。
這其實非常反直覺,是跟日常生活相悖的,比如你做蛋包飯,你想要進行步驟D,把雞蛋鋪在炒飯上,你首先得有炒飯跟雞蛋,你不能說我先實現(xiàn)這個步驟,再去做炒飯。
所以理科好的人,普遍妄想十分嚴重,離現(xiàn)實越遠越好。
而我認為:
我會步驟D,但是不會炒飯,也不會做雞蛋,我沒法假裝自己會做。
這是編程,但是這一點可以推廣到所有理科,這些人總是會去假設一些條件,假設已經(jīng)得到了某些結(jié)果,在這個基礎上繼續(xù)往后推進,而我就總是喜歡揪著假設部分的實現(xiàn)不放。
這就是我數(shù)學差的最底層原因,我過于關(guān)注細節(jié)了,總是認為缺乏細節(jié)就意味著不夠穩(wěn)固,因此不敢去妄想。實際上這種做法是把問題拆分了,當前問題需要那個結(jié)果,就把那個結(jié)果作為一個新的問題,后面再解決,而我只用關(guān)心怎么用這個結(jié)果解決當前問題。
體現(xiàn)在算法上,就是:
我會希望直接用題目給出的所有信息,得到一個答案,而不是首先明確一個問題,再問自己解決這個問題以前,需要解決哪些問題,需要得到什么結(jié)果。
體現(xiàn)在軟件開發(fā)上,也有很多問題:
我是先開發(fā)一套通用的庫,再讓上層去依賴這個庫,完成所有的功能以后,再去實現(xiàn)界面。
結(jié)果就是,很多時候我的設計是沒有頭緒的,因為不知道調(diào)用方的需求,不知道那些可能出現(xiàn)的情況,只能根據(jù)經(jīng)驗來設計,很多時候沒有經(jīng)驗,就停滯了。
但是反過來,先設計好界面,再去實現(xiàn)每一個按鈕的功能,一步步往下,就可以解決這個問題。最終完成以后,再重構(gòu)一次,把重復的部分提取出來就好了。
更抽象一點,我的習慣是自底向上的思考,我并不喜歡空中樓閣的假設。但是這樣局限性很大,特別是面對復雜問題時,通過這個地基能夠搭建出無數(shù)種結(jié)果,沒辦法保證運氣好到得到想要的結(jié)果。
但是從頂往下思考的話,一切就都是固定而明確的,并且一定可以到達地基。