物理系的學生對於編程需要學到怎樣的程度?

本人是物理系學生,下學期學校開始學編程,但是我不是很清楚編程對於物理系來說到底是一個怎樣的地位,需要學多深?以及有什麼學好的方法或習慣么?謝謝!


謝邀,想起來什麼就說什麼,語序也許有些混亂。

首先選擇先學py而沒有選擇Fortran這一點很好。

物理方面對程序的要求可以很雜。從簡單的歐拉格式數值解微分方程,到用機器學習做計算機視覺,從簡單的實驗數據的擬合到大數據的篩選,再到資料庫的管理都是可能會用到的,從數值到解析,幾乎所有的事情都有可能要編程。曾經在等離子那邊的時候我的本科生導師秦宏老師就表示要學會使用本世紀最強大的工具,計算機。

然後編程水平,計算機方面的知識當然知道的越多越好.技多不壓身嘛,要知道物理和計算機的結合上要多深就可以有多深。

最重要的一個方法就是:多寫代碼,多思考,不知道怎麼回事,怎麼寫好,就自己去試一試

然後目前看來似乎實驗黨可以用的少(甚至不怎麼用),理論黨用的多.

然而,用機器學習的實驗物理學家也不是沒有...某些做理論的老師,用py還能分分鐘寫個網站出來...

最基本的 ,一些基本的編程範式需要了解,並能很好的運用。因為你不一定要寫出工業級的代碼,但是你寫的代碼很多時候不僅僅是給自己用的。所以可讀性,可維護性依然很重要。

具體一點,面向對象怎麼也得熟練運用吧。然後最好去看一些工業界的源碼(github上有很多),為什麼要去看工業界的呢,因為物理方向有不少代碼寫的不如人家好,我覺得想要寫出一手好代碼,看看別人怎麼寫是一種特別有效的方式。

寫高性能的代碼 因為py本身是很慢的,所以需要學會使用numpy,scipy等模塊在短時間內寫出速度快,可讀性強(再強調一次可讀性,個人認為最好不要為了性能而丟掉可讀性)的代碼出來。

代碼的安全性,因為注意你的程序往往不是只給自己用的,別人也需要用你的代碼的時候,萬一弄錯了什麼在伺服器上跑了幾個星期然後出bug,跪了,就悲劇了。可以去學習一些有強類型的語言(比如Julia?233不要黑我又安利Julia)好的變數命名可以很好的幫助別人理解你的意圖,而不是每行都寫注釋。

演算法,機器學習py有現成的庫可用,數值求解也有現成的庫可用,甚至布朗運動,分子動力學,量子力學(http://qutip.org),電磁學等等都有現成的可以用。所以可以根據需要選擇要了解具體的演算法,或者直接用已經封裝好的模塊即可。別總想著自己造輪子,你造的路子一般都沒現成的好!(曾經自己在CPP里造blas被這麼批判了一番OTZ)

如果有一天自己要開坑了,那麼最好多會幾種語言,這不僅幫助你理解不同的範式,也能讓你靈活地在不同場景下切換。有時候你會發現可能某個任務光寫py應付不來,或者不夠有效,比如它需要在超算上大規模地計算,那麼可能寫cpp或者c會更好。

這個時候就需要培養自己的自學能力了,怎麼快速掌握一種語言完成你的需求。

然後編程水平不錯的好處就是可以早點進實驗室,因為到處都缺碼農什麼的...

先寫到這裡,想到什麼再補充...

---

如果你感興趣也可以來了解Julia,233

http://julialang.org,歡迎關注中文社區 http://julialang.cn


得看你做什麼。

  • 你要是僅僅用來處理一般實驗數據,Python + 一點演算法足夠。

  • 要是想做凝聚態理論的模擬,還要學 C++ 和並行

  • 要是想做 Lattice QCD 這種 hardcore 計算,還要學一點體系結構知識和各種詭異的數值演算法,懂得如何利用緩存預讀等機制優化程序,能看懂並實踐 Numerical Recipe. 在這個級別你已經不用害怕失業了,因為你已經有能力去申請 FLAG 一般工程師的職位。

  • 要是想做高能實驗的數據處理……………… 上學期我們系來了個 LHCb 的人作報告,他說現在 LHCb 有自己設計的 FPGA 採集數據,然後在超算上做實時的數據處理,而且是 machine learning enhanced. 需要學什麼你自己想吧……………… 對了我以前給某高能實驗教授做 RA 的時候,他讓我算儀器上的溫度分布,所以我還順便玩了玩有限元~~

但是!!!!!你把這些學好了,都擋不住你物理學的好。因為如果你物理學的特別好,就不需要自己寫程序,而可以指揮別人寫……………… (對,我就是那個被指揮的……)

對了,千萬別學 Fortran 和 Matlab。我們物理系作為一個藝術類專業,不要學這些醜陋的東西。


這個要看以後從事的具體的方向的,即使是物理中相同的方向,對編程也有著不同程度的要求。如果以後做一些模擬什麼的,對計算機要求的程度就比較高了。反正現在不知道以後會做什麼,計算機又是這麼方便的工具,有時間就多學學吧。

那種整天算草稿紙,不動計算機的人現在非常難找,要麼是超級大牛,要麼是超級老古董。


對於你要做的夠用就好

像python這種語言學起來很快

我是有了具體project要用了才學的相應編程語言,做中學效率較高,不然學了不用很容易忘


要多有用有多有用,要多沒用有多沒用。問題是你想用什麼以及怎麼用。

要說有什麼好的習慣。。。我只能說年紀輕輕的,吸毒賭博和Fortran不要碰就是了。


c語言二級。。。


我來說一下吧。

我是本科物理學出生的研究生,方向是 計算機模擬 。

我大一接觸編程,完全是興趣,然後報了個C語言培訓班,就把C語言二級過了。由於興趣使然,也自己動手寫一些小程序,在網上搜集一些有趣的小程序,比如:貪食蛇啊、俄羅斯方塊啊、迷宮啊這樣一些小遊戲程序,自己也動手寫過【音樂播放器】這樣簡單的小軟體。就這樣,完全在自學過程中慢慢熟悉了C++編程。就這樣走來,在大二時選修了基於Dreamweaver網站設計(還給自己做了個"個人網頁"),自學了flash動畫製作(記得當時學會了,還給我喜歡的女生做了幾個動畫 ,還做了幾個類似於"先搞笑,然後突然來個恐怖"的動畫,嘿嘿 ,調皮了),到大三上學期,又選修了MATLAB.我學這些之前,沒有像樓主這樣想太多,就是興趣!現在想想,感覺真值!回歸正題,到了研究生階段又開始學習Fortran,我們模擬就是學這語言。

【對於樓主的問題,這些都不重要!】

如果非要說學到什麼程度,我也不清楚!

可以先學一種計算機語言(其他語言都是通的),然後把數學學好(這個很重要)。最後可以看看【數據結構和演算法】這方面的書。

噢,還有個更重要的:

【邊看書、邊敲代碼!一定要自己動手寫代碼】


別說搞計算的,現在很多搞理論的都需要用計算機,不過那是比較牛逼的專家了。技多不壓身,更不要說這是體現你優勢的地方。

編程也是很大一塊領域,基礎的語言和演算法弄紮實點,寫一些簡單的,老師布置的那種。拓展的,最好了解科研的需要再去學習,節約時間成本。

在物理領域比誰編程厲害,在計算機里比比誰懂物理。好玩得很。


請用軟體模擬出有邊界三維熱傳導方程。


樓主,編程這個詞範圍是比較廣的。

學物理的人寫的程序和計算機行業從業者(typically google的程序猿啊等等),完全不是一碼事。

這倆基本就是雷鋒和雷峰塔的關係。你如果要一直搞物理,說實在的就會寫一些計算的東西就行了,真的計算機工程完全和物理人弄的東西是兩碼事。


題主難道是我學弟?

是的話好好聽陳浩爸爸上課,不要多想,感受下Python美。


學到如果物理畢業找不到工作也能靠編程養家糊口的地步?


課程上的內容,哪怕是計算物理或者偏微分方程 numerical method 這類課,對編程本身的要求也都不高,挺容易應付的。但搞研究就簡直了... 真是需要啥用上,python 很好用很好用,一定要好好學。


能問下題主,哪個學校給物理系開python嘛。。。


推薦閱讀:

如何評價SYK model?
現實前沿物理是否出現了《三體》中的情況?
為什麼大學物理仍然無法逃脫對解題能力的訓練?
如何解釋物質的能量越低,越穩定這件事(最好從物理或化學的角度解釋)?

TAG:編程 | 物理學 | 理論物理 | 物理學習 |