學物理為什麼會覺得計算機很難?

物理專業課覺得理解得很透徹,也能寫個小小的程序解物理問題,用戶和人機也可以理解,懂一點設計。

但是始終覺得演算法和結構奇難無比,因此對自己智商產生了嚴重的懷疑。

是我腦子這塊沒發育好還是有什麼非常重要的東西沒有學?


2016.01.26 更新一下這個答案

-------------------------------------------

我很想真誠地回答一下這個問題。題主所說的情況,其實對於物理系學生十分常見,個人認為也是國內物理系本科教育相比美帝的一個重大缺憾。

一言以蔽之,很多物理系的同學(也包括曾經的我)對計算機的態度是,帶著鄙視的畏難情緒

從學科特徵,或者說是對學科的學習和應用的特徵來說,物理和計算機是不一樣的。Please get your hands dirty。高中時期所學習的知識有什麼特點?精確可解的模型,漂亮優雅的答案,簡潔優美的數學。這會導致什麼樣的結果?很多物院人在大一初學C/C++時,會覺得其中的數學結構好無聊,自己編程真繁瑣,計算機遠遠不如學「高大上」的理論物理課程有趣。這個現象在我身邊極為普遍,包括很多大神同學也是一樣。很多同學都和我抱怨過,自己不會寫程序好痛苦,但是覺得計算機太無聊又不想去學。這就會產生一個可怕的惡性循環:

覺得計算機trivial所以不去學-&>因為不寫代碼所以對代碼有畏難心理-&>不想接觸計算機所以不去學-&>因為不寫代碼所以對代碼有畏難心理......

就如同學習一門外語,不是說先要把一整本詞典背下來才算入門,正確的學習方法應該是多說多寫多用。但是對於剛進入大學的物院學生,不願意接觸這種dirty work的結果,很可能就是能在書面考試中獲得一個很好的成績,記住了很多詰屈聱牙的概念,但是最後卻什麼代碼都寫不了。但這卻偏偏就是P大物院大一計算機知識的教學方法!

我深深的明白自己在大三之前的計算機水平有多爛。不僅僅是水平爛,對計算機也抱著一種排斥的心態,不知道自己應該如何去學習這個領域的知識。大二大三的數模競賽簡直把隊友坑到死。這也導致我15年為了一個數值問題反覆糾結了半年,耽誤了一篇重要文章的投稿。我身邊很多同學也為編程所困擾,就算到今天也很難寫出一個像樣的程序。在祖傳的代碼上改動了幾十句跑了個結果,是稱不上」會寫程序「的。

其實對於動手做實驗來說,很多物院人也會陷入同樣的窠臼。大家在高中所接觸到的物理實驗,無非就是理想的透鏡、無電阻的電流表。而大一所接觸到的理論課里,也是充滿了光滑的斜面與理想的導線。而真正就接觸到實驗室中的工作之後,大家往往會大吃一驚,處處充滿了不完美。以我現在所做的光子探測器來說:我們需要探測LPA所產生的光子能譜,這一能譜在理論上十分漂亮;而實驗中,單論對探測器-攝像機相對位置的精確定位,我幾乎拆便了世界上所有的calibration toolbox。如果不能克服對dirty work的畏難心理,那麼就永遠體會不到實驗物理的樂趣。

之前的答案可能有些矯枉過正了,我在此道歉。我絕不是說,數學對於計算機知識不重要,也不是說編程就是苦力活。我想說的是,大家應該有做dirty work的耐心,不要一開始就歧視這種工作,認為這就是些苦力活。如果不自己親手寫代碼,那麼我們就永遠入不了計算機的門,也就會與真正的科研工作絕緣。物院人的數學背景對付教科書級別的演算法知識,理應是綽綽有餘的,不要有畏難心理。真正的攔路虎,其實是「記代碼、背演算法、默寫程序」這樣錯誤的學習方法。我還記得譚浩強上有一道題目,是判斷一個複雜的、不帶括弧的表達式的輸出。對此我只想說:

去你大爺的,多打幾個括弧會死啊!

我還是要保留原來的最後一段:

我強烈反對現在諸多高票答案,通過吹噓物理多麼多麼難來嘲諷題主。題主的痛苦是眾多物院學生真實痛苦的體現,絕非嘩眾取寵。反覆說「四大力學」怎麼怎麼難,只會讓人懷疑你們到底有沒有學過物理?「四大力學」也就是設置在大二的中等難度的課程,只是物理方向的基本課程,在此之後的課程還有很多,一味地調侃這些課程怎麼怎麼難,只會讓內行人看笑話。天天談量子力學的哲學,拿費曼那句「Nobody really understood Quantum Mechanics」裝逼,有什麼意思?不會用有效的方式學習計算機,就算在P大T大也是很多物院學生的心病。我到大三上學期基本上修完了P大物院所有的研究生課,但是直到那時我的編程能力幾乎還是0。如果不是本研的課題需要做一個複雜的數值計算,可能到現在我還對寫代碼一籌莫展。經歷了這個痛苦的過程之後,現在寫代碼雖說不上很順,但也是能做一些了。手頭的工作是給實驗室的一個探測器編寫硬體配套的軟體,希望能在年前完工。

最後希望這個答案能幫到那些對寫代碼一籌莫展的人。與君共勉。


見過不少做理論的都說計算機學不懂,還有人表示打死都不搞編程, 我覺得有兩(三)方面:

  1. 譚某某害的
  2. 不同的思維模式, 而很多人習慣了連續的,解析的思維模式之後再轉到計算機就相當於跳出舒適區了。離散數學和圖論, 還有具體數學,雖然都叫數學,對於我們來說完全是另一個世界好不好。

  3. 個人的私貨: 覺得受不了編程裡面各種醜陋的解決方案, 不夠唯美。總想把代碼重用, 封裝, 介面, 性能一次性都搞定, 沒有未使用變數, 無重複代碼,封裝良好又不失靈活性, 還要cache友好........ 最後糾結而死, 連高維數組的維度順序都糾結半天。或者無奈接受了各種妥協的方案之後痛心疾首, 覺得這一坨翔怎麼可能是我寫的。


時間不夠。帶著你的毅力和智商,其他東西都不要帶,從零起步。

越是要跨學科,越要軟磨硬泡。我的經驗就是找到一個領域最基礎的學科的最基礎的基本教材,從緒言開始,一個概念一個概念摳,像學一門新的外語那樣,從最小的元素開始學起,從最簡單的例子學起。這個過程會很吃力,但是只消幾門基礎課磨下來,你就算是入了門了。

直到把所有學科都學到只剩數學的內核,就算你是學明白了。


這個很正常。

因為物理基礎課中用到的數學工具大多都是連續的,而演算法和數據結構中對應的是離散數學。


第一件事是關於「理解得很透」。

物理專業課理解得很透徹。這.. 怎麼說呢。

不知道題主現在是大幾,可能是題主還沒遇到真正考驗內功的專業課。

按我的經驗來講,就算在全國前三的物理系裡,到了四大力學這種「真正的」的專業課時,大約只有很少的人可以稱得上略有小成,「理解清晰」。能稱得上「理解得很透」的人都稱得上是真正的天才了,遠遠不止拿MIT/Caltech/..全獎的程度。

【在本科母校,前者一個班都不一定有一個,後者隨便哪個班都肯定肯定不止一個。難度完全不一樣好嘛。】

我在學基礎物理的時候還能在力學和電磁學上拿滿分,到了四大力學就開始各種屢創新低。

從理論力學開始就無法融會貫通。主幹還算清晰。很多細節卻不甚明了。看了朗道第一卷,還是舉步維艱。

到了量子力學就感覺到了一個新世界,到處又是小世界。博大精深四字就是,無論你把這門課學多久學多深,依然會覺得眼前是深沉的大海。

且不說學術研究,就算只應付考試也相當困難。

量子信息大牛潘建偉教授當年也只能把四大力學裡的量子力學學得「不錯」。

在ustc能在四大力學同時拿滿分的人,我暫時只聽說過一個人。她叫庄小威,美國科學院院士,哈佛大學物理系化學系雙聘教授,第一位獲得麥克阿瑟天才獎的華人女性。

我完全無法想像庄小威這種級數的天才會覺得「演算法和結構奇難無比」。她應該會一遍聽著相聲一遍過一遍演算法/數據結構,考試順便拿個滿分,再發幾篇文章。

第二件事是學計算機的難度。

Computer Science雖然不是science但也不要有學起來應該很輕鬆的錯覺吧。

至於你提到的,很難,到底是理解很難,還是應用很難,還是創造很難呢。

我想真正的有挑戰性的地方是在【創造】上。

第三件事是學物理和學計算機的關係。

其實沒有直接的關係。

學物理會給你腦子裡塞入很多奇妙的東西,但它不會影響你的特質。

一個人不會因為學了物理就適合或者不適合學計算機/金融/數學/化學/生物。

學了物理你也可以選擇成為牛頓那樣終身不娶的偉大科學家,可以像愛因斯坦一樣...

也可以選擇像德國總理默克爾一樣成為政治家,還可以選擇像索尼創始人盛田昭夫一樣成為企業家。

你擁有的特質決定了你怎樣使用物理學中蘊含的能量。物理不僅提供了物理理論,還給每一種理論匹配了極為有效的數學工具,同時還會教你完成從理論是實際的映射。

它為你提供廣闊的世界,卻不影響你的個人特質,也不剝奪你的可能性。

如果你覺得自己學不好計算機,就是你覺得學計算機吃力而已

別把「為什麼」都歸在自己學過物理頭上,更別輕易說自己理解得很透...


剛轉到CS時震撼於計算機的東西竟然都是learnable的!這才是人生。。


學計算機的覺得物理更難


因為編程是一門手藝,物理是一門科學,拿學科學的態度去學一門手藝,只求理解而忽略反覆練習,自然是不可能精熟的。


此部分為回答樓主問題

———————————————————————————————————————————

個人經驗是因為思路還沒有從物理過渡到計算機上。

我也是物理本科生,為了申請研究生簡歷好看/將來有飯吃學了計算機系的一些列課程:演算法和數據結構,軟體開發等等……剛開始的時候感覺不管是演算法理論還是實際應用里給程序建模都特別難理解,無從下手。一個學期過後逐漸順手,現在已經沒感覺了。你既然能學物理那智力也絕對能搞定演算法,只是需要時間。

題主只說了自己覺得演算法難,但是沒有具體說明哪一塊難,是從簡單的線性結構開始就覺得難了還是從稍複雜一點的樹狀結構或者動態結構開始覺得難的?是覺得演算法本身的步驟難以理解,還是不知道如何把演算法轉換成代碼?另外你是用什麼方法學習的,只聽課,或者聽課加上進聯繫小組跟著做題,或者自己捧著編程書學?要是能把問題補充一下,估計計算機專業人士們能更有針對性地給你點建議。

因為我當時學的時候每個結構和演算法都要求在上機的時候自己寫個程序實現,並且對每個不同的實現方法再寫一個對應的可視化程序/計時程序對比,加上還有習題課。這樣抽象的東西自己用上一兩遍就很好理解了。如果題主是看書自學的,那的確比較困難。因為計算機雖然從客觀難度上不如物理,但自己也是一個自成體系的,範圍很廣的學科。你平時乾的模仿別人的程序寫個代碼啦,這類事情,和真正地學習代碼和程序結構相比,就高中競賽物理和大學裡的四大力學相比一樣。一個是玩玩,一個是真正的深入學習。所以我建議樓主一定要從基礎概念開始學,計算機系的人幹什麼你也幹什麼。

多寫代碼,專門寫自己不擅長的問題,寫著寫著就明白了。

物理和計算機的用到的數學不一樣,可以說是完全沒有類似性。或者說程序運行的方式和人腦不一樣,要幹什麼都要別人幫它先定義出來。我建議樓主不要帶著物理那種「把條件推來推去得出結果」的思路學演算法。看看離散數學幫助會很大(不過也沒必要為了學個演算法就專門去學離散數學)。把計算機當作一個全新的東西來接受就好了。

最後再推薦stackoverflow和github這兩個網站,前者多白痴的問題都能找到答案,後者資源豐富,初學者的好幫手。

——————————————————————————————————————————

此部分為無關內容:

——————————————————————————————————————————

樓主果然被聲討了。

一定不能不過腦子說「學的好,學得透徹,長得漂亮」類似的詞。這絕對是知乎一大定律。謙遜啊,要隨時謙遜,謙遜肯定沒壞處。否則……

不知道樓主到底是什麼人

他可能是一流學校的大一新生已經奮發圖強開始考慮未來,結果翻了兩頁演算法書感覺無從下手,提了這個問題;

或者是大二大三的學生,學校已經學過模電數電和基礎的計算機,不過他沒好好聽混過去了,編程應用時無從下手提了這個問題;

或者是二流學校的學生,每次物理考還的不錯,所以認為自己應該不費勁搞定計算機。

三種情況的正確對待方法是不一樣的,所以只能單純地就問題回答。但是我反覆讀題了n遍,也不知道「學得透徹」這幾個字怎麼戳到了這麼多學物理的人的神經,更沒看出來他的有「因為我學了物理,所以計算機不好了」的意思,在我看來他想說的大概就是:我物理看的懂,考的不錯,智商應該夠用,為什麼學不了計算機?

為什麼這麼多人都在聲討「學得透徹」這幾個字,完全忽視了學計算機的問題?在@Summer Clover (雖然他的那個長答案每句話都是正確的,但是更像是一篇抒情文)之後的答案基本都是在聲討,之前的答案雖然很多提到了「學物理和學計算機沒關係,別學死了」或者「計算機實際上比物理簡單」,但也沒揪著「學得透徹」這四個字不放。

反正我心目中的物理是不會因為一個本科生覺得自己「理解透徹」了,就感覺被侮辱了。再者你罵他狂妄自大,他就能學好演算法了嗎?不能啊。還是他就從此羞愧地退出物理界了?我覺得這個可能性倒是有點……

———————————————————————————————————————————


你學過什麼量子物理、有機啥的之後你才會發現——

編程真是太簡單了


試著結合我的經歷推敲一下題主的情況。我從小到大只有數學物理成績看得下去,本科加研究生目前已經學了六年物理,現在也在自學計算機

「理解很透徹」到「可以理解」「懂一點」「奇難無比」 從題主的這些措辭,絕對不像大家所說是習慣性高估自己的人。一個但凡物理本專業且花費了點功夫在學業上的人,有點對自己逐步紮實積累起來的知識「理解透徹」的信心是絲毫沒有過分之處的。本科物理相對於中學物理,學習方式和知識層次並沒有太多提升(只有數學工具的提升)。如果你逐字看完了力光電熱的教材並嘗試推導了大多數公式,之後還覺得一知半解那我只能懷疑你看的是俄文原版教材了。至於往後的量子力學,本科階段真的沒多少東西。就像一團纏繞交錯的麻線,遠遠地望一眼退縮的刷掉了百分之四十的人,剩下的百分之六十只要堅持下去基本搞定初量。考研無論985211量子對於周圍同學都是提分的科。那些拿「理解透徹」大做文章的答主,我只能擅自揣測都是沒進入大門的百分之四十的人了。

至於轉計算機遇到的困惑,我用自己一些心得試著解釋一下吧。學了這麼多年物理,物理教材惜字如金的行文風格讓我們養成了斟字酌句的閱讀習慣。當我們正襟危坐好展開一本演算法或數據結構等計算機教材時,畫風驟變瞬間有種看課外讀物即視感有沒有!繃緊的神經瞬間無處安放了有沒有!瞬間靜不下心了有沒有! "這個點到底需要深入探究么我去?" 「這一坨東西到底用不用在筆記本羅列歸納一下啊我去?」「旁邊一厚沓草稿紙還空白著呢麻蛋!」「這一章都在扯家常受不了我直接跳過好不好啊!」 「這部分這麼難我下決心搞懂的話應聘時考官應該會聞到的恩哼??」「上個知乎提問一下吧?」 。。。對於重要程度的拿捏不準導致我們怯於捨棄次要同時又無法全身心消耗在主要,加之跨專業的時間緊迫感讓我們總想快速的不求甚解的獲得足以應付HR的知識即可,自學的開放性讓沒了考試大綱和興趣推動(不能逃避的一點是我們在由理想轉向金錢)的我們功利心變重,不能再像當初腳踏實地一步步搭建知識大樓,地基不穩,到了高處自然暈頭轉向,覺得難以駕馭了

就像你自己所描述 「是不是有什麼重要的東西沒有學?」, 通篇全看我們覺得浪費時間,捨棄的東西又讓總我們心虛,不像物理一頭扎進去,老老實實做個掃描儀就好。這是物理轉任何一門學科都要遇到的問題吧。


沒有必然的聯繫的感覺,很多物理大神在計算機方面造詣也很高,也有從物理轉到計算機方向的。


1. 目前為止沒見過幾個學物理的人敢說物理理解的透徹的,倒是見過一個學數學的自稱理解很透徹;當然題主增加了集合{認為自己物理理解很透徹}中的元素個數,這種自信我很欣賞

2. 本來就是不一樣的邏輯體系,可能只是你適應的問題

3. 年輕人還是多看書悶聲發大財比較好,遇上問題多考慮問題本身而不要把問題歸結於大腦結構或者智商,這樣或許會好一點


我這等渣渣會。

不過像@蔡家麒這樣的dalao不會


難的是數學的實現,不是計算機,物理你不覺得難是因為你高中和大學已經熟悉了人的思維下的數學實現,你學計算機是要讓機器理解數學並且實現,你覺得難是因為沒有進入機器的思維領域,多寫寫程序,補點計算機基礎課程就好了


沒有受邀,作為曾經一隻腳踏進文科,本科開始學習的是物理,最終選擇了計算機的我來回答這個問題。

先放感受和結論:當你已經習慣了一種學科思維之後,在某種層面的確會影響到你對新學科的學習.計算機很難,對於很多外專業轉計算機的人來說,的確如此.但當你意識到一個學科的本質之後,一切學習(不考慮高層次的創造問題)都僅僅是體力活而已;你覺得難學,僅僅是出力不夠而已.

//***************

我的經歷:

  最開始擅長的是文科,文科平均分九十多,理科七十多;後來由於種種原因,還是選擇了理科;大一在應用物理專業,物理方面的成績是專業第一,計算機不到班級平均分,這種情況下又選擇了計算機;

//**************

計算機難學的原因:

客觀方面:

1)計算機和物理的確是兩個不同的學科,一個重視經驗,一個重視歸納推導。

回想當年學習物理的時候,很少做習題,但規律完全明白了,就能解題;這個習慣帶到計算機學習中,就完全行不通了,對規律和演算法的理解需要藉助大量練習。計算機需要大量實踐來輔助理解,而不是先純粹理論理解然後再去實踐。

2)計算機和與之相關的數學,大部分人都很陌生

這裡面有一個大家都沒有提到的問題:物理規律與情景,包括背後的數學模型,其實你在本科之前已經學習很多年了,對整個情景和體系是比較熟悉的;而計算機方面的內存、函數、指令、指針等概念,也就剛剛接觸。所以你並不是在拿兩個相似的東西做比較,而是覺得熟悉的東西好學,陌生的東西難學。

主觀方面:

可能的原因只有一個:因為你覺得難學,所以沒有建立學習的正反饋,導致投入不夠,從而更強化的你的計算機難學的認識.

感受會欺騙你,但是數據不會.
如果樓主不服,不妨想想,你對一門學科究竟投入了多少努力和完全投入的學習時間?完成了多少習題?

如果你做了200題習題,一門課程投入了200個小時的學習時間,仍然覺得難學的話,才應該去反思是不是智商的問題.


你懷疑自己的基本智商甚至腦子發育,恰恰說明你極度低估了計算機編程這個學科的學習難度,原以為是用智商甚至小腦、腦幹、甚至脊柱神經就能輕易輾壓的對像,而不是像物理學或者英語那樣要循序漸進地、以年為計地學習。否則你應該去懷疑你努力不夠,而不是智商不足。


可能本質是數學不夠好(沒有貶義)...高等數學裡其實已經蘊涵了很多計算和演算法方面的內容了。最簡單比如傅立葉級數,泰勒級數,迭代法,矩陣運算,高級點可能有龍格庫塔法什麼的。(再高級我就不造了,在圖書館看到過圖論,好像再複雜網路計算里用的比較多;離散數學也看到過不過沒翻;差分方程相對好理解一些;有限元我就沒敢看...)

如果了解的稍微細緻一些,比如稍微看了點數學分析,也會對離散和連續的聯繫多一些了解。

至少我在學計算物理的時候覺得很輕鬆,可能大一數學學得比較認真吧。


並沒有覺得計算機「很難」。

畢竟演算法和結構等都是可以理解的,並且在看懂以後就可以直接靈活運用了。

之所以沒有學計算機而是學物理,是因為大學之前沒有接觸過編程。

如果當初有人曾經給我說過還有編程這一回事的話,我可能就直接搞cs咯。

小農村,不興編程這麼高端的東西。


學習方法不對

時間花的不夠多

總結起來就兩點


推薦閱讀:

做理論計算機科學(TCS)研究是一種什麼體驗?
互聯網廣告系統是如何識別用戶的,比如年齡、性別、職業、興趣、購買力等?
如何正確的理解循環不變式?
競技遊戲的匹配系統要做到儘可能使雙方實力接近有多難?

TAG:軟體 | 演算法 | 計算機 | 物理學 |