Re: [問題] 計算物理和量子電腦/量子計算

看板Physics作者 (如果狗狗飛上天)時間6年前 (2017/08/08 04:52), 6年前編輯推噓46(46089)
留言135則, 45人參與, 最新討論串2/4 (看更多)
趁你才大二,還有救,給你一些不負責任的,一些過來人的建議. 聽聽就好. 我的建議值不值得聽,答案你應該自己花時間去尋找.切莫輕信! 盲信的人 是笨蛋! 如果你是的對電腦跟程式有興趣的物理系學生: 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

08/08 07:58, , 1F
QQ 我就是學Fortran的 QQ
08/08 07:58, 1F

08/08 08:20, , 2F
偶也是QQ 優文欠m
08/08 08:20, 2F

08/08 08:37, , 3F
實用謝謝分享
08/08 08:37, 3F

08/08 10:41, , 4F
08/08 10:41, 4F

08/08 11:08, , 5F
推喔
08/08 11:08, 5F

08/08 11:18, , 6F
pipidog大的用心讓我感動
08/08 11:18, 6F

08/08 11:43, , 7F
感謝你的建議
08/08 11:43, 7F

08/08 11:49, , 8F
08/08 11:49, 8F

08/08 12:31, , 9F
推qq
08/08 12:31, 9F

08/08 12:34, , 10F
如果我當年大二就看到這篇 或許路就不一樣了XD
08/08 12:34, 10F

08/08 12:52, , 11F
08/08 12:52, 11F

08/08 13:16, , 12F
fortran 仍然是絕對速度最快的語言吧?所以在高效計算那一
08/08 13:16, 12F

08/08 13:16, , 13F
塊應該是不會死掉的。
08/08 13:16, 13F

08/08 13:17, , 14F
但我同意它除了速度一無是處。
08/08 13:17, 14F

08/08 13:36, , 15F
w大,這說法我也聽過,但其實我看過很多家的benchmark,其實
08/08 13:36, 15F

08/08 13:37, , 16F
結論不盡相同,只能說各有千秋.但考慮到lapack本身是f寫成
08/08 13:37, 16F

08/08 13:37, , 17F
我估計在數值計算上,f應該還是略勝.畢竟各家的數值庫,無
08/08 13:37, 17F

08/08 13:37, , 18F
一不是blas跟lapack的重包裝.
08/08 13:37, 18F

08/08 14:24, , 19F
曾經的Fortran使用者 只能推了
08/08 14:24, 19F

08/08 15:01, , 20F
P大講的話更犀利了,但很實在
08/08 15:01, 20F

08/08 16:41, , 21F
08/08 16:41, 21F

08/08 18:24, , 22F
推,由其最後一段有很強的既視感
08/08 18:24, 22F

08/08 18:45, , 23F
c可以和fortran一樣快,可見C_and_CPP板相關的討論串
08/08 18:45, 23F

08/08 18:46, , 24F
「為何公認fortran速度略快於C ?」
08/08 18:46, 24F

08/08 19:37, , 25F
Fortran 在科學界像幽靈一樣揮之不去 是可以理解的
08/08 19:37, 25F

08/08 19:38, , 26F
他們專注的是科學問題,他們不是程式設計師。
08/08 19:38, 26F

08/08 19:38, , 27F
他們用他們習慣用的 能hard coding解決科學問題對他
08/08 19:38, 27F

08/08 19:39, , 28F
們來說就夠了 所以也沒那麼不堪。
08/08 19:39, 28F

08/08 19:41, , 29F
想走programming 只會fortran當然只能吃土
08/08 19:41, 29F

08/08 19:47, , 30F
就像我也不懂為甚麼做統計的那麼愛SAS, python 和 R
08/08 19:47, 30F

08/08 19:47, , 31F
不是超好用的嗎 :p
08/08 19:47, 31F

08/08 20:16, , 32F
推推 如果純學術 Fortran很好很棒很夠用 但才大二
08/08 20:16, 32F

08/08 20:16, , 33F
有更多選擇 沒必要限制自己的出路
08/08 20:16, 33F

08/08 20:52, , 34F
現在出社會的高工時麵包,真的很難有時間跟體力讓人持續
08/08 20:52, 34F

08/08 20:54, , 35F
探索,家裡沒有資源的真的要好好思考一下。
08/08 20:54, 35F

08/09 01:51, , 36F
程式這門學問不等於物件導向
08/09 01:51, 36F

08/09 01:52, , 37F
物件導向是最適合軟工的paradigm 所以CS大多時間學它
08/09 01:52, 37F

08/09 01:53, , 38F
但做數值的其實可以多去了解constraint programming,
08/09 01:53, 38F

08/09 01:54, , 39F
functional programming等等其他paradigm 有時候在數
08/09 01:54, 39F
還有 56 則推文
08/12 13:23, , 96F
那是實驗用的東西 如果走純理論是絕對碰不到的
08/12 13:23, 96F

08/12 19:30, , 97F
真的,多數人畢業後就不走物理了...
08/12 19:30, 97F

08/13 22:56, , 98F
好文推,未來絕對不在老教授上
08/13 22:56, 98F

08/15 20:44, , 99F
物理系推
08/15 20:44, 99F

08/16 00:13, , 100F
simulink 表示...
08/16 00:13, 100F

08/18 15:23, , 101F
其實物件導向沒有甚麼困難的理論 就是寫一個類別和下
08/18 15:23, 101F

08/18 15:28, , 102F
的屬性和方法先定義好 再來的就是使用這些類別的物件
08/18 15:28, 102F

08/18 15:30, , 103F
類別其實只是一個架構 但真正在執行的是物件 這其實就
08/18 15:30, 103F

08/18 15:35, , 104F
相當於數字有很多不同的型別 但你還是定義一個參數去
08/18 15:35, 104F

08/18 15:36, , 105F
執行它 類別就相當於型別 物件就相當於參數 不好意思
08/18 15:36, 105F

08/18 15:37, , 106F
我大概就只知道降
08/18 15:37, 106F

08/18 15:42, , 107F
物件導向程式 我真的不太推西加加
08/18 15:42, 107F

08/18 21:10, , 108F
原來我這個寫暴力lattice sum程式會直覺把lattice用物件包
08/18 21:10, 108F

08/18 21:10, , 109F
好的人是異類 XD
08/18 21:10, 109F

08/18 21:14, , 110F
可能是C++太早了,所以語法上有些很笨的設計。
08/18 21:14, 110F

08/18 21:16, , 111F
例如說,我沒記錯的話,如果a是某種object,然後你assign
08/18 21:16, 111F

08/18 21:17, , 112F
b = a,C++的行為竟然是shallow copy
08/18 21:17, 112F

08/18 21:19, , 113F
我很想知道什麼情況下會有人需要做shallow copy?
08/18 21:19, 113F

08/19 07:36, , 114F
物理人不要一天到晚想搶IT人的飯碗
08/19 07:36, 114F

08/19 07:39, , 115F
IT人一路從計算機結構和組語一路學上去 憑甚麼跟人家
08/19 07:39, 115F

08/19 07:40, , 116F
08/19 07:40, 116F

08/19 07:42, , 117F
但原PO是說量子計算 首選當然還是物理系
08/19 07:42, 117F

08/19 08:18, , 118F
目前知道的量子計算有三個主流
08/19 08:18, 118F

08/19 08:21, , 119F
非量子門:D-WAVE量子退火電腦2048
08/19 08:21, 119F

08/19 08:23, , 120F
量子門_約瑟夫元件:IBM_Q,Google < 20
08/19 08:23, 120F

08/19 08:24, , 121F
量子門_冷原子:哈佛51
08/19 08:24, 121F

08/19 11:35, , 122F
如果a是object又沒定義assign運算子,那當然是那樣做..
08/19 11:35, 122F

08/19 15:13, , 123F
更正:銣原子雷射圈禁:哈佛51
08/19 15:13, 123F

08/20 05:43, , 124F
對版主的領域而言,C++比較有前景還是 Python?
08/20 05:43, 124F

08/20 13:42, , 125F
對我的領域來說,fortran最有前途,但前提是你能待一輩子!
08/20 13:42, 125F

08/20 13:46, , 126F
甚至fortran 77都比fortran 90有前途! 真心不騙!
08/20 13:46, 126F

08/20 17:41, , 127F
08/20 17:41, 127F

08/20 22:00, , 128F
Deep Learning 當然是 Python
08/20 22:00, 128F

08/21 22:30, , 129F
不過我正在學的是Verylog(好像只有我在搶別人飯碗)Orz
08/21 22:30, 129F

08/21 22:39, , 130F
我現在做的工作早就跟這無關 純興趣 純補償心理
08/21 22:39, 130F

08/22 23:28, , 131F
08/22 23:28, 131F

08/25 14:28, , 132F
java也是shallow copy呀 除非你用clone()
08/25 14:28, 132F

08/25 14:29, , 133F
啊講錯..java應該只有copy pointer而已
08/25 14:29, 133F

08/31 00:11, , 134F
CFD來朝聖一下,我待的領域也是Fortran居多 HPC也是
08/31 00:11, 134F

08/31 00:12, , 135F
版主推Cpp絕對是正確的 純學術或是和商業整合都有
08/31 00:12, 135F
文章代碼(AID): #1PYDBnJ9 (Physics)
討論串 (同標題文章)
文章代碼(AID): #1PYDBnJ9 (Physics)