看板 Physics 關於我們 聯絡資訊
趁你才大二,還有救,給你一些不負責任的,一些過來人的建議. 聽聽就好. 我的建議值不值得聽,答案你應該自己花時間去尋找.切莫輕信! 盲信的人 是笨蛋! 如果你是的對電腦跟程式有興趣的物理系學生: 1.請你認真的學"寫程式"! 我做的領域遇過很多人都自稱自己會寫程式,寫的多好多好云云.資料夾一打 開幾百個程式檔案通通自己寫的.但其實你真把他的程式打開來看,簡直慘不 忍睹,你聽過hard coding嗎? 就是那樣. 沒錯,它們確實對某一套語言的語法 很熟悉,但也就只是那樣.它們在做的事情只是很憋腳的把一堆數學公式寫成 程式而已,既沒有效率,也沒有規劃,這頂多只是coding,不能叫做programming. 很多人完全不懂物件導向,又或者他的程式裡面確實用到了很多class,但是這 些class完全就只是把一堆不相關的函數做堆砌,既無法作為基礎類別,也無法 作為被繼承的對象.可是它們也都覺得自己很會寫程式,一講起某某語言就高 談闊論,但其實Leetcode上的題目連easy都解不了.如果你以後遇到這樣的人, 請一定要收起你的誤解,因為它們的無知會害了你! (我以前就是那種半調子 還以為自己懂程式的人,多年後回想才覺得自己是笑話,先為那些被我害過的人 道歉了).對一個大二的學生來說,要你花時間去做一些高深的物理是作不出什 麼的,但是好好的把程式的觀念學好,把一些很基本的演算法弄懂,半年一年很 夠了,這些東西會是你一輩子的寶藏.它的影響不只是你的程式能力比別人強, 更重要的是你擁有了另一種不同於物理的思考邏輯,一種模組化的,物件化,流 程化的思考邏輯.我認為這本質上不同於物理學家圖像化的,故事化,直覺化的 思考方式. 2. 請你學習正確的語言: 其實這是一個很偏頗的建議,因為大多數寫程式的人都會告訴你,程式背後的邏 輯跟觀念才是重要的,語言只是一個實作的平台. 我覺得這基本上沒錯,但一套 語言要學到精不容易,若非有特殊需求,你也實在沒道理去學些用不到的語言! 那什麼語言是用不到的呢? Fortran! 好了,我知道這個答案馬上有一堆人要跳 出來噴我了,請噴吧! 我不在乎. 記住這句話,在你未來的生涯中,如果有人告訴你要去學fortran,請絕對忽視他 ,因為這百分之一百是一個在害你的建議. 我不否認fortran裡面有些特性很好, 但是這絕對是一個過時的,不符合現代化標準的,而且很難用,也不普及的語言, 最重要的是它幾乎不支持現代化的物件導向(我知道03後有支援,但何苦浪費自 己的時間?),他的存在單純只是因為歷史發展的緣故,這個語言若不是因為各種 基於lapack的應用還普遍存在,它早該從地球上消失了(我寫過不少fortran,所 以說這話不是瞎扯). 但不知為何,fortran就像是一個幽靈一樣的,在物理的圈 子裡揮之不去,上至退休教授,下至剛讀研究所的小朋友,幾乎一抓一把fortran 使用者.但我可以很肯定的跟你說,離開這圈子,fortran幾乎不會幫你找到任何 工作. 請謹慎考慮. 你至少該學會的是C++(我不喜歡C/C++這種用法,因為在我看來,C跟C++是兩種 完全不同邏輯的語言,縱然C++兼容C的語法,但你C++很熟的人,遇到C會幾乎不 知道該怎麼寫,反之亦然),C++大概是現在任何電腦領域你都必須要學會的語言, 如果你需要用C++做數值跟矩陣運算,又對Matlab很熟,我建議你,可以用Armadillo 這套函式庫,這裡面定義了一系列的基礎類別,可以讓你用跟matlab非常相似的 語法完成絕大多數的計算,初學者幾天就可上手. 如果你希望在不同的平台,例 如linux,Mac,win上都輕鬆寫程式,不想忍受跨平台的干擾,我建議你用eigen這 套函式庫,這套函式庫連編譯都不用,你下載下來,你只要在C++的程式裡直接引 進標頭檔,就可以輕鬆定義矩陣跟處理絕大多數數值運算的問題了. 我想不到有 任何理由你應該使用fortran. 另外我還建議你至少要再學習一個script language來處理絕大多數的小程式, 當然我首推的就是Python了,原因無他,因為目前除了Python之外,我找不到在數 值計算領域有更方便的script language(不要學Matlab,拜託,它又貴,又缺乏 完善的物件導向,而且Matlab能做的Python都能做,但是Python能做的Matlab很 多都不能做!).當然最重要的是,Python有龐大的開源社群,提供了數以萬計的模 組,學會Python你等於擁有了另一個世界,好東西,不學嗎? 3. 請你試著加入專案,你的實驗室在全世界: 作為一個物理系的大二生,你既沒學過比較高深的物理,也缺乏實作的經驗,把你 這種人丟去一個實驗室做專題,很多時候你就只是打雜的而已,但是其實你能做的 比你想像中多非常多.加入開源社群,讓自己貢獻一個專案就是一件很有價值的事 情,這不僅對你未來推甄研究所有幫助,對你以後找工作也非常有幫助.在Github 上就有數不清的物理開源專案,以我自己的凝態計算領域來說,我自己注意到的就 有好幾個,有些是在開發GUI界面幫助使用者更方便的建立跑DFT的input file, 有些是在開發新的pseudopotential,有些是在開發一些處理特定數值計算的模 組作為DFT code的插件,有些是在開發一些物理教學的互動遊戲,幫助學生看到電 磁波的現象或是熱的現象,另外就我所知天文跟高能領域的開源專案也非常多,你 應該多去網路上的開源社群看看,我自己有在開發的是DFT結果的postprocess跟 一些Wannier tight-binding的東西,不過寫寫停停,進展龜速就是.畢竟本業不在 此,只當興趣.但我要強調的是,透過參加這些開源專案,你不僅有機會跟全世界 的物理學家一起合作,最重要的是,你可以學習到很多物件導向的實際應用.我常跟 別人聊,如果你的code只寫給你自己一個人用,那你寫的多亂都無所謂你爽就好,但 如果你要跟別人合作,那就非用物件導向不可,只有透過大量的繼承,重載,封裝,合 作才變得可能.現在是個網路的時代,你不該把自己侷限在學校所能提供的資源上. 它們能給你的,撐不起你的夢想! 4. 請你多看看最新的進展: 也許講到這你還意猶未竟,難道作為一個程式愛好者,能做的就只有這些? 有沒有 一些真正的物理可以碰? 當然有! 不過不是你的老師所提的量子計算領域 (事實上 我根本搞不懂量子計算領域跟寫程式有啥關係? ok,你當然可以說做這個領域的人 會需要做些數值計算,但是做理論的,哪個不用做數值?). 要我推薦,我會建議你可以研究一下現下最火的machine learning.最近一陣子有個 領域我覺得挺有意思的,你可以google "renormalization group machine learning". 這件事情是這樣的,在凝態物理裡面有個小領域叫做重整化群,它主要是被用來處理 一些物質相變的問題,他的基礎原理就是透過不斷的對一個物理系統進行尺度 變換,來試圖掌握不同尺度的量子漲落,最終得出相變的參數.這是很老的理論了,幾十 年前就已經拿了諾貝爾獎了.最近很多物理學家發現,現下最紅的machine learning, 透過一層一層的mapping來找尋最佳解的過程,本質上就是物理裡面重整化的過程. 所以原本統計跟多體物理的問題,透過這層聯繫,很多有意思的東西就跑出來了. 今年二月份一篇Science就發表了第一個(至少就我所知)應用實例.它們透過machine learing的方式來求解了一系列interacting spin model(1D Ising, 1D Heisenberg, 2D Heisenberg)的問題.結果發現在描述這些模型的物理上,效果奇佳! http://science.sciencemag.org/content/355/6325/602 這當然不是近代電腦科學滲透進物理學的唯一實例,很多其他的東西,你要自己去找. 5. 請你試著找屬於自己的答案: 最後我要說的是,你才大二,人生還大有可為,很多事情還允許你試錯,你的疑惑,你 的徬徨,我老實說,無論是你學校的老師,或是這個板上那些比你資深很多的前輩(例 如我)其實都是回答不了你的.他們給你的答案(包括這篇文章)不是沒有價值.只是 他們給出的答案都充滿了上個世代的影子,盡是撲鼻而來的陳腐味,放在你所處的時 代,早已經不是最佳解了!(就如同上一輩的人看待22K問題,常常會得出草莓族的結 論一樣),比起急就章的想找個老師學東西,我更建議你的是多去看看不同的東西,不 要一股腦的把時間花在遠超過你現在能力的事情上.這個世界上最前端的知識,絕不 是掌握在那些已經在同一個領域做了30年的老教授手上,最有意思的想法也絕不是在 你眼中的那些高高在上的前輩身上.這些東西在哪,你得自己去找.它們可能在google scholar最近發表的一篇文章上,也許在facebook一些社群上,也許在一堆年輕人組 成的論壇上,也許在Github的一個專案上,也許是coursera的一門免費的課程上,也許 在你身邊那些跟你閒聊打屁的朋友身上. 你所處的時代很可悲,一個萬物通膨,一切都不值錢,一切技能都不實用,一個努力跟 收穫常常不成正比的時代.但你所處的時代也很幸運,無數的人敲敲鍵盤就能幹出一 番大事,只有你有好的創意,全世界都會一起來幫你.人與人的協作如此緊密,人與人 的關係又如此疏遠,要在這個時代自處,不容易,過去成功的model不適用,新的model 又未成形.但我想喜歡寫程式是個還不錯的立足點,不過要記住,這種潮出水的熱情千 萬別從那些win 7再戰十年的人身上找答案,你會溺水的! -- ★人生中最溫暖的夏天是在紐約的冬天 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 169.237.42.114 ※ 文章網址: https://www.ptt.cc/bbs/Physics/M.1502139121.A.4C9.html ※ 編輯: pipidog (169.237.42.114), 08/08/2017 07:49:02
skydark: QQ 我就是學Fortran的 QQ 08/08 07:58
power41: 偶也是QQ 優文欠m 08/08 08:20
gn00771771: 實用謝謝分享 08/08 08:37
sunev: 推 08/08 10:41
peter308: 推喔 08/08 11:08
yyc2008: pipidog大的用心讓我感動 08/08 11:18
std92050: 感謝你的建議 08/08 11:43
papple23g: 推 08/08 11:49
leeminsham: 推qq 08/08 12:31
zealeliot: 如果我當年大二就看到這篇 或許路就不一樣了XD 08/08 12:34
laplacian: 推 08/08 12:52
wohtp: fortran 仍然是絕對速度最快的語言吧?所以在高效計算那一 08/08 13:16
wohtp: 塊應該是不會死掉的。 08/08 13:16
wohtp: 但我同意它除了速度一無是處。 08/08 13:17
pipidog: w大,這說法我也聽過,但其實我看過很多家的benchmark,其實 08/08 13:36
pipidog: 結論不盡相同,只能說各有千秋.但考慮到lapack本身是f寫成 08/08 13:37
pipidog: 我估計在數值計算上,f應該還是略勝.畢竟各家的數值庫,無 08/08 13:37
pipidog: 一不是blas跟lapack的重包裝. 08/08 13:37
abac1230: 曾經的Fortran使用者 只能推了 08/08 14:24
jimiras: P大講的話更犀利了,但很實在 08/08 15:01
Philethan: 推 08/08 16:41
furio: 推,由其最後一段有很強的既視感 08/08 18:24
sunev: c可以和fortran一樣快,可見C_and_CPP板相關的討論串 08/08 18:45
sunev: 「為何公認fortran速度略快於C ?」 08/08 18:46
bluecadence: Fortran 在科學界像幽靈一樣揮之不去 是可以理解的 08/08 19:37
bluecadence: 他們專注的是科學問題,他們不是程式設計師。 08/08 19:38
bluecadence: 他們用他們習慣用的 能hard coding解決科學問題對他 08/08 19:38
bluecadence: 們來說就夠了 所以也沒那麼不堪。 08/08 19:39
bluecadence: 想走programming 只會fortran當然只能吃土 08/08 19:41
bluecadence: 就像我也不懂為甚麼做統計的那麼愛SAS, python 和 R 08/08 19:47
bluecadence: 不是超好用的嗎 :p 08/08 19:47
spinbear: 推推 如果純學術 Fortran很好很棒很夠用 但才大二 08/08 20:16
spinbear: 有更多選擇 沒必要限制自己的出路 08/08 20:16
wgst88w: 現在出社會的高工時麵包,真的很難有時間跟體力讓人持續 08/08 20:52
wgst88w: 探索,家裡沒有資源的真的要好好思考一下。 08/08 20:54
recorriendo: 程式這門學問不等於物件導向 08/09 01:51
recorriendo: 物件導向是最適合軟工的paradigm 所以CS大多時間學它 08/09 01:52
recorriendo: 但做數值的其實可以多去了解constraint programming, 08/09 01:53
recorriendo: functional programming等等其他paradigm 有時候在數 08/09 01:54
recorriendo: 值分析中這些可以給出非常漂亮的程式 08/09 01:54
HeterCompute: 推 08/09 01:58
deflife: 推 08/09 05:16
jacob0425: 沒有人推薦Julia嗎 QQ 08/09 07:33
pipidog: 你是想花時間學一個語言橫行天下,還是想學一個語言在你的 08/09 07:36
pipidog: 小圈圈裡悠然自得? 這沒什麼對錯,但我的話會選前者.語言 08/09 07:37
pipidog: 種東西,跟著大家走不會錯.資源多,流通性高,找工作容易 08/09 07:38
pipidog: 當然你想品味一些小眾市場,也沒什麼錯就是 08/09 07:38
linbryan: 推!P大至理名言,不聽終身後悔。聽呢?後悔終身。 08/09 10:43
louis925: 建議是先學會 C 再去學 C++ 或 Python 08/09 16:20
louis925: 至於做理論要做數值分析,Mathematica 超好用的 XD 08/09 16:21
wohtp: Mathematica幫忙做點代數算好用,數值之類還是python唄 08/09 16:33
sputtering: programming我首推C,因為能寫嵌入式就只有C 08/09 22:40
sputtering: javascript一輩子學這個語言就夠了 真正學會的人很少 08/09 22:47
sputtering: 要學物件導向就學JAVA,Hadoop也是用JAVA寫的 08/09 22:50
bluecadence: 其實原發問的大二生要不要直接轉系好了? 08/09 22:53
eldar: 優文推 08/10 01:34
mystage: 推。這輩子我最後悔沒學的科目就是程式語言 08/10 08:39
Fantasyweed: 雖然我是完全不懂物理與程式的文組 但看完了來朝聖推 08/10 10:23
yichenglee: 卡在只會hard coding不知怎麼前進淚推QQ 08/10 12:56
bellas: Mathematica慢 只是像直接寫英文一樣 容易上手 有次老闆出 08/10 14:08
bellas: 個小問題叫我解 他說用小計算機就行了 我才不跟他發神經 08/10 14:08
bellas: 用了一次Mathematica解一下 誰抽菸還要專木取火那麽累現 08/10 14:08
bellas: 代人當然用賴打阿 因為是小問題我才用Mathematica大問題 08/10 14:08
bellas: 我就不用了 其實現會一個 學別的就快了 看需要 我後來是 08/10 14:08
bellas: 用c 08/10 14:08
bellas: 我有個同學唸物理是大器晚成 唸到研二才唸通 但他從大ㄧ就 08/10 14:25
bellas: 喜歡寫程式 當然是fortran沒唸通時他老闆嫌他唸個書一個 08/10 14:25
bellas: 禮拜唸不到幾頁 但有天研究室只剩他們倆他老闆叫叫他說要 08/10 14:25
bellas: 個東西要寫程式算一下 他問老闆甚麽時侯要 老闆說一個禮 08/10 14:25
bellas: 拜好了 他說不用明天早上就好 隔天早上真的就好了嚇到他 08/10 14:25
bellas: 老闆了 他大學那腦袋就是不會轉大三上近物第一次寫作業陜 08/10 14:25
bellas: 義相對論有題就代公式只是不問時間改問週期 他就卡半天和 08/10 14:25
bellas: 我說有題好難 我一看 阿不就代公式 三行結束 沒唸通前他 08/10 14:25
bellas: 老闆就叫他沒事在那寫程式 後來去美國唸完博士 現再在德 08/10 14:25
bellas: 國做博士後 08/10 14:25
bellas: 他老闆反正找他寫最快 08/10 14:27
bellas: 他超有骨氣其時他被英文卡三年才出去 其時他家很有錢可以 08/10 14:37
bellas: 直接出去 他不要 他就是要只靠獎學金唸 08/10 14:37
bellas: 我29歲決定回去唸研究所是決定唸完也要去美國了 我不會像 08/10 14:48
bellas: 他被英文卡住 但我家裏ㄧ直亂七八糟 有次和我老姊講沒 08/10 14:48
bellas: 研究生每個禮拜都回家的 我老姊也講沒有女兒嫁人了 08/10 14:48
bellas: 還每個禮拜會娘家的 有次我老闆問我假日都在幹麻 我無言以 08/10 14:50
bellas: 對 他在美國等我 後來我和他講我真的沒辦法去了 08/10 14:50
ocf001497: = =?????????? 08/10 21:06
awdr4634: 請問樓主對labview有什麼看法呢? 對學物理的人幫助大嗎 08/11 18:48
awdr4634: ? 08/11 18:48
pipidog: 沒用過,無法回答。但如果你是做學術,挑你自己用順手就 08/12 01:15
pipidog: 好,沒人在乎,我所以建議不碰fortran,完全是因為絕大多 08/12 01:15
pipidog: 數的學生畢業後並不是去當教授,但業界沒人用fortran 08/12 01:15
pipidog: 學生花了不少時間學好一個語言,畢業才發現外面用不到很 08/12 01:20
pipidog: 可惜,所以我不鼓勵學生一窩蜂學fortran,一來是因為C++ 08/12 01:20
pipidog: 明明可以做得更好,二來畢業後用不到。 08/12 01:20
pipidog: 所以你問LabVIEW,我建議先找人問畢業後用不用得到,畢竟絕 08/12 01:26
pipidog: 大多數的人畢業就不會再做物理了,誰不希望學以致用? 08/12 01:26
vbqv: LabVIEW 100%和數值模擬扯不上邊 08/12 13:20
vbqv: 那是實驗用的東西 如果走純理論是絕對碰不到的 08/12 13:23
ed78617: 真的,多數人畢業後就不走物理了... 08/12 19:30
duninafan: 好文推,未來絕對不在老教授上 08/13 22:56
Kyouverymuch: 物理系推 08/15 20:44
guteres: simulink 表示... 08/16 00:13
sputtering: 其實物件導向沒有甚麼困難的理論 就是寫一個類別和下 08/18 15:23
sputtering: 的屬性和方法先定義好 再來的就是使用這些類別的物件 08/18 15:28
sputtering: 類別其實只是一個架構 但真正在執行的是物件 這其實就 08/18 15:30
sputtering: 相當於數字有很多不同的型別 但你還是定義一個參數去 08/18 15:35
sputtering: 執行它 類別就相當於型別 物件就相當於參數 不好意思 08/18 15:36
sputtering: 我大概就只知道降 08/18 15:37
sputtering: 物件導向程式 我真的不太推西加加 08/18 15:42
wohtp: 原來我這個寫暴力lattice sum程式會直覺把lattice用物件包 08/18 21:10
wohtp: 好的人是異類 XD 08/18 21:10
wohtp: 可能是C++太早了,所以語法上有些很笨的設計。 08/18 21:14
wohtp: 例如說,我沒記錯的話,如果a是某種object,然後你assign 08/18 21:16
wohtp: b = a,C++的行為竟然是shallow copy 08/18 21:17
wohtp: 我很想知道什麼情況下會有人需要做shallow copy? 08/18 21:19
sputtering: 物理人不要一天到晚想搶IT人的飯碗 08/19 07:36
sputtering: IT人一路從計算機結構和組語一路學上去 憑甚麼跟人家 08/19 07:39
sputtering: 搶 08/19 07:40
sputtering: 但原PO是說量子計算 首選當然還是物理系 08/19 07:42
sputtering: 目前知道的量子計算有三個主流 08/19 08:18
sputtering: 非量子門:D-WAVE量子退火電腦2048 08/19 08:21
sputtering: 量子門_約瑟夫元件:IBM_Q,Google < 20 08/19 08:23
sputtering: 量子門_冷原子:哈佛51 08/19 08:24
caseypie: 如果a是object又沒定義assign運算子,那當然是那樣做.. 08/19 11:35
sputtering: 更正:銣原子雷射圈禁:哈佛51 08/19 15:13
basel: 對版主的領域而言,C++比較有前景還是 Python? 08/20 05:43
pipidog: 對我的領域來說,fortran最有前途,但前提是你能待一輩子! 08/20 13:42
pipidog: 甚至fortran 77都比fortran 90有前途! 真心不騙! 08/20 13:46
zzz989898: 推 08/20 17:41
sputtering: Deep Learning 當然是 Python 08/20 22:00
sputtering: 不過我正在學的是Verylog(好像只有我在搶別人飯碗)Orz 08/21 22:30
sputtering: 我現在做的工作早就跟這無關 純興趣 純補償心理 08/21 22:39
Unawakened: 08/22 23:28
freef1y3: java也是shallow copy呀 除非你用clone() 08/25 14:28
freef1y3: 啊講錯..java應該只有copy pointer而已 08/25 14:29
iHaveAPen: CFD來朝聖一下,我待的領域也是Fortran居多 HPC也是 08/31 00:11
iHaveAPen: 版主推Cpp絕對是正確的 純學術或是和商業整合都有 08/31 00:12