為什麼寫程序的時候可以堅持很久,但是學習數學就很難保持注意力?

我是本科在校大學生,平時寫程序的時候常常能堅持4、5個小時坐在電腦前面不分心,無論是自己寫還是讀代碼,就算一定有事情必須分心一會(比如重要的消息通知)我也能處理完以後馬上回到狀態。但是做高等數學題目的時候堅持一個小時我就謝天謝地了,經常是沒人理我我就去社交網路上浪費時間了,就算把手機關了都沒忍住打開來問了這麼個問題。


有意思的問題 ^ ^

根據我自身和周圍人的反饋,「寫程序的時候可以堅持很久,但是學習數學就很難保持注意力」 的情況的確存在,而且我認為,這種現象是可以被科學解釋的。經過思考,我發現,可以從四個方面來解釋這個有趣的現象:思考閾值、反饋機制、思路連貫性 和 有效思維長度。


【1】思考閾值

什麼是思考閾值呢?就是啟動或維持一件事情所需要動用的腦細胞數

寫代碼在【大部分時間】是不用動用太多腦細胞的,在確定了整個程序的框架(這需要費點腦細胞)後,大部分時間我們做的事無非是:寫順序語句、寫循環語句、寫條件判斷。這些東西對一個經驗豐富的程序員來說很輕鬆,加上很多代碼本來就比較相似,所以並不需要集中太多的精力——一邊看電影一邊寫代碼都行。

但學高等數學一樣,做一道難題時,我們常常有讓周圍保持絕對安靜的想法。因為它太費神了——每一個關鍵的解答步驟,都需要經過大量的思考來完成。當然了,也有人能做得很熟練,可是,既然都很熟練了,就該進入下一個章節了,有何必要再刷下去呢?

如圖所示。「思考閾值」之上代表的是「有效的思考」,而在閾值之下,則是「無效的思考」。

對於同樣的思考深度曲線,對於寫程序來說,由於思考閾值低,所以在大部分時間,自身的思考是有效果的,對於學數學來說,由於思考閾值高,所以我們很多時間自己毫無進展。

「有收穫」 是前行的鼓勵師。在狀態不好的時候,寫程序尚有一戰之力,而學數學則完全歇菜了。而人不可能總是狀態好,所以學數學也就難以持續了。


【2】反饋機制

代碼編輯器和編譯器是程序員的福音。有了它們,你一邊寫代碼,一邊發現自己哪裡代碼寫錯了,運行一下,就知道代碼的邏輯是否通順——這個反饋是實時的。

但學數學可沒這樣的編輯器。在你出答案前,沒有人會警告你哪一步算錯了。直到解完題目,對標準答案,你才會發現自己的錯誤——這個反饋是延時的。更何況,很多時候我們並沒有答案(比如證明題),反饋都不一定有。學了半天,你都不知道自己掌握了多少。

實踐表明,及時的反饋能激勵我們前行。這是寫代碼比學數學的優勢所在。


【3】思路連貫性

如果有一段代碼大概需要連續寫十個小時才能完成,給你五天,每天兩小時,你能完成嗎?

恐怕不能。因為寫程序需要思路的連貫性。到了第二天,我可能要花上二十分鐘來回顧第一天寫了什麼。到了第三天,我可能又要花上二十分鐘來回顧第二天寫了什麼……把編程任務分割開,需要較高的邊際成本。為什麼程序員寧願加班也不想把事情拖到第二天?因為它們想保持連貫思維的高效。

如果有一系列數學證明大概需要你連續做十個小時才能完成,給你五天,每天兩小時,你能完成嗎?

通常還是可以的。這不是說學數學的沒有連貫性,而是它的連貫性沒有那麼強。而且,在兩小時的高強度思考後,繼續思考效率會明顯降低,適當的休息反而會使大腦保持一個較好的學習狀態中。


【4】有效思維長度

不知道你是否有這樣的體會:

  • 辛辛苦苦寫了一天代碼,回顧一下,哇,居然寫了那麼多,好有成就感!
  • 辛辛苦苦學了一天數學,回顧一下,啊,只學了那麼點東西,我怎麼這麼笨?

為什麼會有這種感覺呢?因為寫程序和學數學的有效思維長度是不一樣的。

如下圖所示:

  • 寫程序的時候,雖然我們會遇到一個個「坑」,但是大部分「坑」都相對較小,不會浪費自己太多的時間。所以一天下來,完成的有效工作還是很多的;
  • 做數學的時候,我們也會遇到一個個「坑」,但很多時候,我們並不知道它們是「坑」,會一條路走到黑,才發現行不通,這就花費了我們較多的時間。所以一天下來,完成的有效工作相對較少。

「有效思維長度」 的長短,直接影響到我們的成就感,寫程序容易積累有效思維長度,所以促使我們前行。而學數學容易長時間沒有進步,所以容易讓我們泄氣。


綜上所述,寫程序思考閾值低、反饋及時、比較需要思維連貫、「小成就」接連而至,所以容易讓我們沉迷其中;學數學起步費勁、反饋較慢、對思維連貫性要求不那麼高、又容易長時間一無所獲,所以對大部分人來說,不容易沉迷進去。

#


寫程序是搭積木,每一行都能看到效果。

做數學是走迷宮,累的一頭汗可能完全沒進展。


和學數學類比的不是寫代碼,而是看別人的代碼「且沒有文檔」


我覺得寫一整天程序而完全不感到累和厭煩的話,是需要稍微反省一下的:我是不是一直在寫一些不用動腦子的代碼?如果我一直按照這個節奏做下去,我會不會廢掉?我是不是應該找一些更有挑戰性的任務?


多用用matlab,多寫寫LaTeX,說不定就好了2333~


寫程序一般不需要燒腦子。


寫程序的時候,反饋更加直接、頻繁——編譯運行一下就能知道你有沒有寫對,然後debug哪裡沒寫對,還能有各種各樣的測試。


學數學→學編程
寫代碼→解題


因為寫程序可以持續給你快感而學數學沒能這樣而已。


寫程序有正回饋,學數學就像你對著一個高傲沉默的陌生人。
你可以通過寫程序來學數學,是完全可行的。


寫程序是創作,是思想的自由流出。學數學,是求知,大腦吸收需要一個過程。

這很正常,認識到這點很重要。學習的過程,如果急於求成,既沒效果,又讓自己痛苦。何必勉強自己持續學一天數學呢?


標準程序猿一隻,敲代碼時是一個好男人的心態,我哪裡錯了,告訴我,我一定改。而學數學的時候,就是地地道道的混混,遇到簡單的題,這特么也用學?遇到難成狗的題,這特么也能學?(掀桌子)←_←對自己也是呵呵噠
——————(☆_☆)分割線
如果你的生活缺少激情,敲代碼吧,它會讓你像吃了炫邁一樣根本停不下來。如果你的生活雜亂無章,敲代碼吧,它會讓你一天工作25個小時,麻麻再也不用擔心你會賴床,順帶看看凌晨四點的家鄉模樣。(☆_☆)(最最重要)如果你沒有對象,也是只嗷嗷待哺的單身汪,不要猶豫,不要懷疑,掄起鍵盤,敲代碼吧!有了C艹,C上艹下艹,爪蛙,後宮佳麗(new出對象)三千萬,任你挑隨你選。


扔了手機的話什麼都能沉迷進去了╮(╯▽╰)╭


寫程序也一樣啊,你沒有遇到過,不代表寫程序總是那麼爽的。

遇到自己不熟悉的領域,開始的那段時間,磨磨唧唧,稀里糊塗,幾個小時都寫不了幾行代碼,不停的在自己熟悉的領域找可以對比的類似的概念,代碼和邏輯,完全是一點效率都沒有的。簡直都不想幹了,有沒有!

比如本人最近遇到的問題就是數學領域相關編程,難度值直接Double。
那酸爽,難以言表。


可以試著用用coq之類的編程語言做形式證明,看看你到底是喜歡編程還是討厭數學 :)


因為寫程序時,你懂得你正在做什麼。
而一些你想要做的事情,通常會花費挺多的時間和力氣。(這種時候即使你知道怎麼做,你也會感到難以專註的做下去,因為人的惰性和疲憊因素,使得你想去干別的)。

學數學,你可能會很快發現你不知道正在做什麼,也就是不懂目前在講什麼,某個地方一旦沒有跟上,後面全都跟不上了。

--
補充下:
寫程序實際上有不同階段,在剛剛開始創建一個程序的時候,處在無中生有的創造期,這時候架構沒有成熟而不穩定,相當於頻繁試錯,程序頻繁的發生結構上的改動,這種時候進展會比較緩慢,也是一個消耗比較大比較累的階段。這個階段工作會不連貫,需要時不時查閱網路上的資料,腦海中的想到的方法會非常活躍的變更,很多想法是根據現有的工作的進行,隨時產生出來的,然後代碼也響應的跟著更改。

然後程序結構基本穩定後,會進入一個比較平穩的階段,例如完善程序,把一些細節打磨的更加完美,在現有結構下,按照現在已有的模式,添加形式相同的東西。這時候才是那種可以很連貫的寫比較長時間的時期,也是程序員可以噼里啪啦的敲鍵盤的時候。


因為寫程序簡單啊


因為你寫的程序太簡單,有demo,或者說跟著教程或書,不會的百度一下或者stackoverflow一下就會。
ps:我做數學的時候可以連續10h左右不分心,和數學有關的一切是我見過最有趣的一些東西。


因為你做的大多數程序都是已有先例,每一步的目標都明確的。
如果是做沒做過的東西,那也是非常痛苦的……
寫 sfdhanautohint 的時候,每次測試都要將近一個小時,調整最頻繁的那個星期幾乎就是神經崩潰的狀態。
以及修 Iosevka 的「s」的時候,從晚上八點一直調到早上八點,中間換了四個構造模型,最後也是精神崩潰的狀態,醒來接著調,這個字母大概調整了 15 小時才到了能看的水平。(你要是翻 Iosevka 就能發現這玩意的玄(lin)學(reg)是最多的,就是為了適應各種 master 做的各種調整)


寫程序是實現自己內心想法的過程,是一種「吐露」,同時編譯器在無條件傾聽理解和及時反饋。學數學是在聽別人說,理解別人想法的過程。大部分人都是希望別人傾聽自己,理解自己,而不喜歡傾聽和理解別人。


推薦閱讀:

為什麼大多數中國高校不直接使用英文原版教材教學?
把代碼寫的太靈活不好嗎?為什麼會被上司批評?
當你學會了什麼之後感覺自己的編程算是入門了?
程序員必須掌握哪些演算法?
為什麼點贊手速過快會出現計贊 2 次?

TAG:學習 | 數學 | 編程 | 心理 | 科技 |