物理專業自學計算機應該學些什麼? | 知乎問答精選

 

A-A+

物理專業自學計算機應該學些什麼?

2018年06月08日 知乎問答精選 暫無評論 閱讀 12 ℃ 次

【MiloYip的回答(19票)】:

其實在計算機圖形學裡有很多與物理相關的課題,例如物理模擬(剛體、柔體、流體等)、基於物理的渲染(光源、材質、媒介等),還有一些涉及物理的跨學科課題,例如生物力學、基於物理的聲音渲染、光場攝影等等。簡單介紹幾本書

  • Physically Based Rendering, Second Edition (豆瓣)

  • Fluid Simulation for Computer Graphics (豆瓣)

  • Game Physics (豆瓣)
  • Physics Based Animation (Graphics Series) (豆瓣)

有空可以看看最前沿的圖形學發展,特別是當中涉及物理部分的

  • SIGGRAPH 2013 Papers

看看那些文獻的作者網站,可能會發現不少研究者都有物理背景。

我覺得能做理論物理研究的人,其智商做哪種科學問題也不大吧。而計算機科學之本就是算法,無論是哪一個應用方向都是必須的,建議深入學習。個人不建議浪費時間在API、OS、UI編程上面,不竟這些東西許多人都能做,有研究能力的人可以探索新世界。因為遊戲、動畫、電影這些娛樂工業,計算機圖形學的職位在行業上也有需求。

【陳然的回答(21票)】:

每個人站的角度不同,現在的答案基本都是從圖形學的角度建議,我換個角度。

從研究生計算機科學做研究的角度來講,我認為本科最適合的專業首先是物理,其次是數學,再次才是計算機。數學學的太抽像,抽像層次太高,研究現實問題的人往往處在鄙視鏈的底端。計算機學的太底層,對於概率論、隨機過程、線性代數等學科學的太少,不瞭解建模分析的那套方法論。而物理學一方面的數學知識足夠多,另外一方面主要研究的方法也是對這個世界建模,然後進行觀測,這與前沿的機器學習領域做的事情幾乎是一樣的。至於會不會寫代碼,其實科研裡面要寫的代碼不多,主要都是在推公式,研究如何設計模型使得其擁有很多良好的性質。代碼很多時候寫寫matlab就可以了。

所以恭喜你,如果你想轉行做CS的科研,你有很大的優勢。事實上,很多CS領域的大神都是學物理的,比如華人圖靈獎得主姚期智,CMU Machine Learning領域大神Alex Smola。

如果你真的勵志做CS相關的研究的話,PhD的選擇最好到CS極好的學校,比如UCB, CMU, MIT, Stanford,一般這些學校都可以輔修Machine Learning的Master, 多修CS相關的課程,都是很好的選擇。Coursera上的Machine Learning課程都很入門,如果想進階,你可以看看CMU 10701(Machine Learning), 10702(Statistical Machine Learning), 10708(Probabilitic Graphic Model) 課程的課件、視頻、相關閱讀和作業,基本都不需要寫代碼,主要是數學證明、建模和分析。

當然,如果你想做應用而不是做理論什麼的,當我以上沒說。

【崔飄揚的回答(6票)】:

爪機主動答。我覺得考慮職業發展要向前看,囿於「要把原來學過的domain knowledge用上」沒有必要,基本上都是在限制你的思路,constrain太多最後得到的local optimal很有可能就不是你真正適合去做的了。具體來說,圖形學的大多數東西依舊是程序和數學,跟物理學關係大的只有Physically-based Computer Animation/Simulation,就這個領域用到的物理知識也絕對沒有超出普物,反而跟數學關係更大,而且做的好的人大多數也不是物理出身的(比如stanford的Rom Fedkiw讀的數學)充分說明很懂物理不是必要條件。而且如果你要真的想以這個為工作並且要求做的理論背景比較深的話就會發現job market異常的小…總之,這個領域跟物理學之間的match很小(雖然確實很有趣ww)。

其實我覺得你才本科的話基本上沒有什麼沉沒成本可說的,程序員大把不是CS本科出身的,不用把自己想得太特別,就把自己當成一個數學和物理基礎比較好的新手,然後使勁學你感興趣的就好。祝你成功。

【白如冰的回答(10票)】:

這個得看你的boss push你狠不狠了

可以找找計算機系的培養方案,再去亞馬遜豆瓣上看看書評,就可以確定下一個書單

可以選擇按照科班路線來,也可以自己先搗鼓項目然後再帶著問題看書

至於庫或者APi這種東西會查文檔就好

總之,你要花大量的時間,前提是你以後的boss會給你寬裕的時間

祝好運

看了一下別的答案我覺得得多寫幾句

一個沒有系統學習過物理學,但是編程很叼的人,能做計算物理麼?

反過來,如果對計算機這個學科缺少整體瞭解,但是物理很強,就真的能勝任計算機中和物理緊密相關的分支麼?

顯然,兩者都不可能。前者只能成為實現別人思想的工具,後者只能空談。

每個人總覺得自己已經掌握的東西是理所當然的,而往往特別憧憬自己不熟悉不瞭解的東西。

別的人給題主的建議當然是好的,卻未必能解答題主的困惑。

打個比方,你們已經在代碼的千軍萬馬之中殺了幾進幾出,發現一個難以攻克的據點需要物理學的知識才能拿下。你們說,快來啊題主,這裡是需要你的地方。而題主此時還在戰場之外看的雲裡霧裡,雖有心但是卻還沒有融入戰場的環境。

所以題主還是現需要融入戰場的環境,該學的還是得學,該搞明白的還是得搞明白。

【知乎用戶的回答(5票)】:

我個人覺得上邊的答案,都不符合一個非計算機的對於學習計算機的真正渴求。

以我對於國內計算機專業的瞭解,國內的大多數計算機學院,倒不如稱之為WEB學院,我不是有意看低做WEB的同胞們,我也是你們中的一員。現在工科專業中大部分都要求編程,但是卻不給講計算機基礎架構的知識,即使是計算機專業的人,對於計算機的學習和理解都是半吊子水平。所以就出現了非計算機專業對於計算機的好奇,因為他們發現,解決問題的絕大部分時間都耗費在跟計算機糾結去了。

當我還是一個無知少年的時候,最讓我興奮的事情莫過於解決了一個物理或者數學問題。高中畢業時,最吸引我的莫過於核物理專業、應用數學專業、化學專業了。那個年代我對於技術的瞭解還是最多停留在19世紀。當時的我曾經狂言,世界上的有關科技的東西我都瞭解的差不多了,只是還有一個東西我沒法看懂它是怎麼運作的,就是一個小小的計算器,算是當時我理論水平一小片烏雲。當時完全沒把它當回事,現在想來,教育讓我有知識的同時,也讓我變得愚蠢。我大學學的是計算機專業,是因為這一小片烏雲。

幾年前,我也是個門外漢,我曾經想花一天的時間搞懂計算機是怎樣工作的,為什麼計算機就算不錯,編程到底是個什麼東西。在實驗室困頓了這麼多年,終於有了一點自己的理解,但是這也只是冰山一角。

現在回答問題

可以肯定的是:必須要學CPU架構、操作系統、編譯原理、Linux程序設計相關課程,但是是以一種理解的方式。當你理解了我說的這些個東西,你說的那些個問題都不是個問題,只是細節的問題,你也會發現學計算機是有通法的。希望題主將目光放遠。我覺得每個人都應該懂計算機如何工作,就像理解發動機的四沖程、發電機電動機的電磁感應。這是個信息社會,計算機是個工具,必須理解這個工具,因為這個工具正在讓我們的各行各業都在發生一個爛大街的變化:智能化。

不要讓自己的時間過多的浪費在怎麼使用工具上,計算機就是一個就在我們手中,但鮮有人能說我就是理解它的一個工具。如果你能像理解物理定律一樣去理解計算機,你就有睥睨天下的資本。這是一個信息化的時代,可是有好大一部分人都好像還沒有適應,工科基本被信息化、計算機化了,這是一個時代的趨勢。

編程是一個基本能力,就像你出國就必須會說英語一樣。

看我的這篇回答:程序員向底層探索是不是到計算機體系結構就差不多了?

這篇文章大概講了一個計算機人或者說程序員大概需要的知識結構。

你試著在想一想,你到底想瞭解那些東西,給我發郵件吧,我會整理大家的問題,然後寫一個開源的、非計算機專業怎樣理解、用好計算機的教程,算是對自我探索的一種總結,我們可以合作編寫,這就是開源的力量!我會放在github上。

最近我想寫一個開源的教程,幫助非計算機專業的,特別是工科專業的學生來理解計算機的結構及編程。我的郵箱是:patiencezhao@gmail.com歡迎大家給我提問,或者想讓書中涵蓋那些內容,各路工科人馬向我開炮吧!

【黃巖的回答(1票)】:

建議,找工作之前,參與一些實際項目。不建議: 再去啃書本,做練習了。你掌握的知識已經夠多了。

【知乎用戶的回答(0票)】:

話說藝術和數學的融合不得不提分形幾何(雖然我覺得圖是很炫但也談不上什麼藝術和數學的融合)。分形是個很年輕的領域,值得發掘,在物理裡面也應該有前景的。計算機作分形圖像你可以做做看。

【XiYang的回答(0票)】:

推薦你一本書:《game physics engine development》,講剛體物理引擎的。國內似乎還沒引進,只能看盜版。

【朱子青的回答(0票)】:

話說我想問些相反的,本人是本科是電子專業出身。研究生轉讀了計算機,一是有興趣。二是就業規劃。但是,我個人對理論物理確實也十分感興趣。如果想自學瞭解一下,相關。該從哪裡入手呢?應該是主要去補欠缺的數學知識吧。在這裡也問問各位知乎的大牛們。

【知乎用戶的回答(0票)】:

要是抽像點,可以去common lisp或者 erlang 這種很函數化的,要是像具體點,寫JavaScript 好了。當然,這些都是編程語言。個人認為還是碼程序開始吧,寫大了就知道OOP, design pattern, architect 甚至是哲學問題了;寫難了,就會弄弄動態規劃,看看數據結構,甚至嘗試和學科交叉的部分,如機器學習。

Code to learn, learn to code....

<del>命你寫個生成服從正態分佈的隨機數吧,語言自選 (erlang 最佳),祝好運。</del>

【DeflowerForever的回答(0票)】:

如果想學習計算機科學,而不是玩玩而已淺嘗輒止的話,建議先看離散數學(主要涵蓋數理邏輯,素樸集合論,圖論,抽像代數,組合數學,數論。非數學或計算機專業基本不會接觸,非常重要,屬於理論基礎。基礎不牢後面所有的研究都是空中樓閣),再看具體數學(難度很高,要有非常好的數學分析與離散數學基礎),隨後算法導論(大篇幅的理論證明,可以開闊算法設計的思路,且非常有助於提高算法分析能力)。

同時,可以看計算機組成原理與系統結構(關注程序的執行過程,深入理解程序設計語言。需要有電路分析和數字電路的基礎),編譯原理(高級語言如何轉化為機器語言),操作系統原理等。但這些不是最主幹的部分。

【PengDU的回答(0票)】:

en.wikipedia.org/wiki/C

en.wikipedia.org/wiki/C

【SimonCai的回答(0票)】:

作為物理系的計算機圖形學自學者,我恰好可以說一下。

計算機圖形學裡所謂的基於物理動畫,其實倒不如說是基於「力學」動畫。固體力學、流體力學現在基本都不在物理學的範疇內了。這些內容都在力學系的範疇,而且現在的「力學」都差不多是獨立的一個分支了,這也是很多不是物理系的(包括我剛開始的時候)不清楚的地方,雖說「力學」實質上更靠近數學(因為涉及物理圖像的東西不多),基本上都是各種複雜的偏微分方程,但過了理論物理一關就算從頭學也不至於遇上很大的困難。

如果說基於物理渲染,基本上也在光度學打轉,用到波動光學的機會都不多,至於理解螢光、磷光要用到的量子理論,還是老老實實用經驗公式吧。當然,會更高層次的光學理論,會有不一樣的看問題方式。

總的還是來說,你學的物理對圖形學有一定幫助,但幫助其實不大,但理論物理都搞的定,還怕圖形學這點問題,我覺得只要有耐心,沉得住氣就行了。

【YuanTing的回答(0票)】:

如果做理論物理的連計算機都不能自己學好,這物理基本也是白念了

【左小兵的回答(0票)】:

先鄙視,後學習

標籤:-軟件 -編程 -計算機 -計算機圖形學 -機器學習


相關資源:





給我留言