https://segmentfault.com/a/1190000015434013
最近公司有小夥伴向我反饋,說自己好像跟不上,感覺拖後腿了。希望我能夠幫忙指點下迷津。他的問題是主管交給他的任務,他都能理解。但是就是自己動手寫程序的時候,發現很多問題解決不了,很慢。
針對他這種情況,我指出了他的可能存在的一些問題。其中比較主要的一點,是思維能力還比較欠缺。當然思維能力是一個寬泛的概念,具體到某個行業,它的要求會不一樣。但是,基本的規律還是有些通用的地方。
不管如何,工作中涉及到的基本知識,是思維能力不可缺少的遠程來。基礎掌握的紮實程度,會影響到你的思考能力。這個基礎知識包括基本的技術知識,一些開發經驗。如果是項目,也包括對於項目需求的理解程度。
這些沒有捷徑,隻能靠自己多學習。學習學習在學習。 不要幻想自己有天賦,不用學,不存在的。
所謂學而不思則罔,思而不學則殆。平時在工作中,需要養成多思考的習慣。而且要多多深入的思考,在工作、編程的過程中,對於需求、代碼的簡單架構、相關的技術做更多的思考。思考很多時候,是讓人感覺沒有成就的事情,相比之下寫幾行代碼,更讓人覺得有成效。但是,養成多思考的習慣,對於解決問題的能力有長足的推進作用。
另外在學習知識技能的時候,也需要多思考。不要知其然不知其所以然。最好的方式是多問幾個為什麽,並主動踐行。慵懶的淺層麵的學習沒有任何價值。
圍棋大師們,都有複盤的習慣。就是在和人對弈的之後,不管輸贏,都會把對弈的過程重新複演一遍,並思考總結哪些地方做的好,哪些地方做的不好,應該如何改進。複盤是一個很好的鍛煉思維能力的方式。對於程序員來說,你可以把自己成功完成的代碼進行複盤,思考哪些地方做的好哪些地方可以改進,都是一個很好的鍛煉方式。而另外一種複盤,就是讀別人代碼,思考別人的思路。 特別重要的是,一個問題,如果你不知道如何解決;而你的主管或者其他同事解決了,這是你一個極好的鍛煉思維的機會。你應該好好的複盤一下他人的解決方案,為什麽用這種解決方案,技術支撐是啥。不僅僅要學習解決方案的本身,還要思考為什麽自己沒有思考到,而人家思考到了,自己需要如何改進自己的思考方式才能思考到,人家用了什麽樣的思考方式和思考方法,是我沒有的,這些都值得好好總結下。
複盤的過程,其實就是反思的過程,沒有反思就沒有進步。
比如,有時候給小夥伴指導一些問題的時候,我會自己親自上去在小夥伴的工位上寫代碼。在這個過程中,我就會把解決問題的思路,以及我是如何思考,如何調試、如何查找資料的思路告訴對方,並最終寫出解決方案的代碼。但是,最終我都會刪除我自己寫的代碼。其實這個時候,我就是給小夥伴一個複盤的機會,好好思考下。
在遇到實際的問題的時候,可以先思考。而不是先動手。比如可以用思維導圖(或者你喜歡的工具,文檔也可以,用筆在紙上畫也可以)先把思路整理出來。 庖丁解牛,把一個問題分解成很多個問題。這個過程,本身也會幫助你思考。同時,在你把思路整理清晰之後,做的東西也就比較清晰了。 比如我寫代碼的習慣,就是先把相關的類寫好,然後把類裏麵的相關函數寫好。然後就是開始一個一個的填寫了。其實類和函數的整理,也是一種思路的整理。當你有了這種好的思路之後,你也方便和其他人交流和請教問題。這種情況下,你也很明白自己什麽地方不懂,也方便別人了解你哪些地方不懂。
在網上會有一些思維訓練的問題。可以自己多嚐試練習。其中發散思維、邏輯思維和想象力是需要重點訓練的。發散思維可以培養你的思維的開闊度,在遇到問題的時候,可以想到更多的方法。而邏輯思維可以增加你的判斷力。
多讀書刻意開闊自己的視野,並間接影響自己的思維能力。
所謂 好記性不如爛筆頭。我一直強調,要自己多總結,多寫點筆記,記錄下自己的一些訓練,思考的東西。 這個記錄的過程,也是整理你自己思路的過程。多寫寫,不會有壞處。
同時,還可以把自己寫的筆記分享出來,可以找人多討論交流,碰撞思路。吸收更多人的想法和思維。
說說我學數學的經曆。我小學,初中,高中,數學都是我的最好的一門學科。為什麽特別好,就是自己對此很有興趣。前麵說到的一些方麵:
當然我當時的性格屬於比較封閉,這些東西並沒有發表。 不然我想怎麽著也可以上一個中學生數理化的雜誌吧。
說這個,不是顯得自己多厲害。其實主要是自己有興趣去做這樣的事情,自然就能夠達到不錯的效果。我不是有什麽天賦,也算不上特別聰明。隻是喜歡鍛煉自己的思維能力。而在這個數學的學習過程中,我鍛煉了自己的歸納,抽象,發散等等各方麵的思維能力。
而且也形成了一套自己的方法體係:
比如數學歸納法,邊界判斷法,排除法,見微知著法,枚舉法,差異法等等。
這些方法都是自己在不斷學習 錘煉數學思維過程中總結出來的。可能現在想想那個時候學的數學,好像沒有多少用。但是這種思維能力其實一直到現在對我都還有幫助。當然,當時數學學習鍛煉的思維能力和總結的方法體係,對於我學習其他課程,也起到了積極作用。
解決問題的方法體係,其實是很有作用的。比如歸納法。我記得中學的時候一個同學有了一個諾基亞的手機,當時手機裏麵有一個遊戲(現在知道:其實就是漢諾塔,但是當時是不知道的,具體細節不解釋了,不知道的自己去搜索吧)。很多同學都玩不出來,我看了一下,幾分鍾完成了。其實並不是我多聰明,而正是運用了數學歸納法。另外一道題,我在大學剛畢業的時候,在武漢找工作,看到了一份醫院雜誌,全部都是 X科 和Y科的廣告(你懂的)。最後一頁,有一些智力題,其中一道題是這樣的,我當時也是運用歸納法秒解出來。
有個島上住著一群人,有一天來了個遊客,定了一條奇怪的規矩:所有藍眼睛的人都必須盡快離開這個島。每晚8點會有一個航班離島。每個人都看得見別人眼睛的顏色,但不知道自己的(別人也不可以告知)。此外,他們不知道島上到底有多少人是藍眼睛的,隻知道至少有一個人的眼睛是藍色的。所有藍眼睛的人要花幾天才能離開這個島?假定所有人都很聰明,並且每個人都知道別人很聰明。
噓,到公司麵試過的人都知道,這是一道麵試題。
所以,在工作過程中,如果你發現自己的思維能力不夠,就需要運用各種方法來錘煉自己的思維,並總結自己的解決問題的方法體係,不斷積累豐富自己解決問題的方法體係,當然有的人並沒有刻意的總結,但是他們其實在不自覺間總結了,自己不知道而已。
提高思維能力這種事情,需要刻意練習,也是一個長期的過程。 但凡需要刻意練習的事情,一般都比較枯燥。就像跑步健身一樣,誰都知道跑步有益身心健康,能堅持下來的沒幾個。由於是一個長期的過程,所以也並不能再短期獲得好的成效,所以往往難堅持下去。
這其實和人腦喜歡及時回饋有關係。人腦喜歡讓自己快樂的東西,不喜歡讓自己痛苦的東西。而付出腦力和體力都不是人腦的喜歡。但是如果一定要付出,那麽人腦喜歡及時回饋的東西。