作者pipidog (如果狗狗飞上天)
看板Physics
标题Re: [问题] 计算物理和量子电脑/量子计算
时间Tue Aug 8 04:51:56 2017
趁你才大二,还有救,给你一些不负责任的,一些过来人的建议. 听听就好.
我的建议值不值得听,答案你应该自己花时间去寻找.切莫轻信! 盲信的人
是笨蛋!
如果你是的对电脑跟程式有兴趣的物理系学生:
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://webptt.com/cn.aspx?n=bbs/Physics/M.1502139121.A.4C9.html
※ 编辑: pipidog (169.237.42.114), 08/08/2017 07:49:02
1F:推 skydark: QQ 我就是学Fortran的 QQ 08/08 07:58
2F:推 power41: 偶也是QQ 优文欠m 08/08 08:20
3F:推 gn00771771: 实用谢谢分享 08/08 08:37
4F:推 sunev: 推 08/08 10:41
5F:推 peter308: 推喔 08/08 11:08
6F:推 yyc2008: pipidog大的用心让我感动 08/08 11:18
7F:推 std92050: 感谢你的建议 08/08 11:43
8F:推 papple23g: 推 08/08 11:49
9F:推 leeminsham: 推qq 08/08 12:31
10F:推 zealeliot: 如果我当年大二就看到这篇 或许路就不一样了XD 08/08 12:34
11F:推 laplacian: 推 08/08 12:52
12F:推 wohtp: fortran 仍然是绝对速度最快的语言吧?所以在高效计算那一 08/08 13:16
13F:→ wohtp: 块应该是不会死掉的。 08/08 13:16
14F:→ wohtp: 但我同意它除了速度一无是处。 08/08 13:17
15F:→ pipidog: w大,这说法我也听过,但其实我看过很多家的benchmark,其实 08/08 13:36
16F:→ pipidog: 结论不尽相同,只能说各有千秋.但考虑到lapack本身是f写成 08/08 13:37
17F:→ pipidog: 我估计在数值计算上,f应该还是略胜.毕竟各家的数值库,无 08/08 13:37
18F:→ pipidog: 一不是blas跟lapack的重包装. 08/08 13:37
19F:推 abac1230: 曾经的Fortran使用者 只能推了 08/08 14:24
20F:推 jimiras: P大讲的话更犀利了,但很实在 08/08 15:01
21F:推 Philethan: 推 08/08 16:41
22F:推 furio: 推,由其最後一段有很强的既视感 08/08 18:24
23F:推 sunev: c可以和fortran一样快,可见C_and_CPP板相关的讨论串 08/08 18:45
24F:→ sunev: 「为何公认fortran速度略快於C ?」 08/08 18:46
25F:推 bluecadence: Fortran 在科学界像幽灵一样挥之不去 是可以理解的 08/08 19:37
26F:→ bluecadence: 他们专注的是科学问题,他们不是程式设计师。 08/08 19:38
27F:→ bluecadence: 他们用他们习惯用的 能hard coding解决科学问题对他 08/08 19:38
28F:→ bluecadence: 们来说就够了 所以也没那麽不堪。 08/08 19:39
29F:推 bluecadence: 想走programming 只会fortran当然只能吃土 08/08 19:41
30F:→ bluecadence: 就像我也不懂为甚麽做统计的那麽爱SAS, python 和 R 08/08 19:47
31F:→ bluecadence: 不是超好用的吗 :p 08/08 19:47
32F:推 spinbear: 推推 如果纯学术 Fortran很好很棒很够用 但才大二 08/08 20:16
33F:→ spinbear: 有更多选择 没必要限制自己的出路 08/08 20:16
34F:推 wgst88w: 现在出社会的高工时面包,真的很难有时间跟体力让人持续 08/08 20:52
35F:→ wgst88w: 探索,家里没有资源的真的要好好思考一下。 08/08 20:54
36F:推 recorriendo: 程式这门学问不等於物件导向 08/09 01:51
37F:→ recorriendo: 物件导向是最适合软工的paradigm 所以CS大多时间学它 08/09 01:52
38F:→ recorriendo: 但做数值的其实可以多去了解constraint programming, 08/09 01:53
39F:→ recorriendo: functional programming等等其他paradigm 有时候在数 08/09 01:54
40F:→ recorriendo: 值分析中这些可以给出非常漂亮的程式 08/09 01:54
41F:推 HeterCompute: 推 08/09 01:58
42F:推 deflife: 推 08/09 05:16
43F:推 jacob0425: 没有人推荐Julia吗 QQ 08/09 07:33
44F:→ pipidog: 你是想花时间学一个语言横行天下,还是想学一个语言在你的 08/09 07:36
45F:→ pipidog: 小圈圈里悠然自得? 这没什麽对错,但我的话会选前者.语言 08/09 07:37
46F:→ pipidog: 种东西,跟着大家走不会错.资源多,流通性高,找工作容易 08/09 07:38
47F:→ pipidog: 当然你想品味一些小众市场,也没什麽错就是 08/09 07:38
48F:→ linbryan: 推!P大至理名言,不听终身後悔。听呢?後悔终身。 08/09 10:43
49F:→ louis925: 建议是先学会 C 再去学 C++ 或 Python 08/09 16:20
50F:→ louis925: 至於做理论要做数值分析,Mathematica 超好用的 XD 08/09 16:21
51F:→ wohtp: Mathematica帮忙做点代数算好用,数值之类还是python呗 08/09 16:33
52F:→ sputtering: programming我首推C,因为能写嵌入式就只有C 08/09 22:40
53F:→ sputtering: javascript一辈子学这个语言就够了 真正学会的人很少 08/09 22:47
54F:→ sputtering: 要学物件导向就学JAVA,Hadoop也是用JAVA写的 08/09 22:50
55F:→ bluecadence: 其实原发问的大二生要不要直接转系好了? 08/09 22:53
56F:推 eldar: 优文推 08/10 01:34
57F:推 mystage: 推。这辈子我最後悔没学的科目就是程式语言 08/10 08:39
58F:推 Fantasyweed: 虽然我是完全不懂物理与程式的文组 但看完了来朝圣推 08/10 10:23
59F:推 yichenglee: 卡在只会hard coding不知怎麽前进泪推QQ 08/10 12:56
60F:推 bellas: Mathematica慢 只是像直接写英文一样 容易上手 有次老板出 08/10 14:08
61F:→ bellas: 个小问题叫我解 他说用小计算机就行了 我才不跟他发神经 08/10 14:08
62F:→ bellas: 用了一次Mathematica解一下 谁抽菸还要专木取火那麽累现 08/10 14:08
63F:→ bellas: 代人当然用赖打阿 因为是小问题我才用Mathematica大问题 08/10 14:08
64F:→ bellas: 我就不用了 其实现会一个 学别的就快了 看需要 我後来是 08/10 14:08
65F:→ bellas: 用c 08/10 14:08
66F:→ bellas: 我有个同学念物理是大器晚成 念到研二才念通 但他从大ㄧ就 08/10 14:25
67F:→ bellas: 喜欢写程式 当然是fortran没念通时他老板嫌他念个书一个 08/10 14:25
68F:→ bellas: 礼拜念不到几页 但有天研究室只剩他们俩他老板叫叫他说要 08/10 14:25
69F:→ bellas: 个东西要写程式算一下 他问老板甚麽时侯要 老板说一个礼 08/10 14:25
70F:→ bellas: 拜好了 他说不用明天早上就好 隔天早上真的就好了吓到他 08/10 14:25
71F:→ bellas: 老板了 他大学那脑袋就是不会转大三上近物第一次写作业陕 08/10 14:25
72F:→ bellas: 义相对论有题就代公式只是不问时间改问周期 他就卡半天和 08/10 14:25
73F:→ bellas: 我说有题好难 我一看 阿不就代公式 三行结束 没念通前他 08/10 14:25
74F:→ bellas: 老板就叫他没事在那写程式 後来去美国念完博士 现再在德 08/10 14:25
75F:→ bellas: 国做博士後 08/10 14:25
76F:→ bellas: 他老板反正找他写最快 08/10 14:27
77F:→ bellas: 他超有骨气其时他被英文卡三年才出去 其时他家很有钱可以 08/10 14:37
78F:→ bellas: 直接出去 他不要 他就是要只靠奖学金念 08/10 14:37
79F:→ bellas: 我29岁决定回去念研究所是决定念完也要去美国了 我不会像 08/10 14:48
80F:→ bellas: 他被英文卡住 但我家里ㄧ直乱七八糟 有次和我老姊讲没 08/10 14:48
81F:→ bellas: 研究生每个礼拜都回家的 我老姊也讲没有女儿嫁人了 08/10 14:48
82F:→ bellas: 还每个礼拜会娘家的 有次我老板问我假日都在干麻 我无言以 08/10 14:50
83F:→ bellas: 对 他在美国等我 後来我和他讲我真的没办法去了 08/10 14:50
84F:推 ocf001497: = =?????????? 08/10 21:06
85F:推 awdr4634: 请问楼主对labview有什麽看法呢? 对学物理的人帮助大吗 08/11 18:48
86F:→ awdr4634: ? 08/11 18:48
87F:→ pipidog: 没用过,无法回答。但如果你是做学术,挑你自己用顺手就 08/12 01:15
88F:→ pipidog: 好,没人在乎,我所以建议不碰fortran,完全是因为绝大多 08/12 01:15
89F:→ pipidog: 数的学生毕业後并不是去当教授,但业界没人用fortran 08/12 01:15
90F:→ pipidog: 学生花了不少时间学好一个语言,毕业才发现外面用不到很 08/12 01:20
91F:→ pipidog: 可惜,所以我不鼓励学生一窝蜂学fortran,一来是因为C++ 08/12 01:20
92F:→ pipidog: 明明可以做得更好,二来毕业後用不到。 08/12 01:20
93F:→ pipidog: 所以你问LabVIEW,我建议先找人问毕业後用不用得到,毕竟绝 08/12 01:26
94F:→ pipidog: 大多数的人毕业就不会再做物理了,谁不希望学以致用? 08/12 01:26
95F:推 vbqv: LabVIEW 100%和数值模拟扯不上边 08/12 13:20
96F:→ vbqv: 那是实验用的东西 如果走纯理论是绝对碰不到的 08/12 13:23
97F:推 ed78617: 真的,多数人毕业後就不走物理了... 08/12 19:30
98F:推 duninafan: 好文推,未来绝对不在老教授上 08/13 22:56
99F:推 Kyouverymuch: 物理系推 08/15 20:44
100F:→ guteres: simulink 表示... 08/16 00:13
101F:推 sputtering: 其实物件导向没有甚麽困难的理论 就是写一个类别和下 08/18 15:23
102F:→ sputtering: 的属性和方法先定义好 再来的就是使用这些类别的物件 08/18 15:28
103F:→ sputtering: 类别其实只是一个架构 但真正在执行的是物件 这其实就 08/18 15:30
104F:→ sputtering: 相当於数字有很多不同的型别 但你还是定义一个参数去 08/18 15:35
105F:→ sputtering: 执行它 类别就相当於型别 物件就相当於参数 不好意思 08/18 15:36
106F:→ sputtering: 我大概就只知道降 08/18 15:37
107F:推 sputtering: 物件导向程式 我真的不太推西加加 08/18 15:42
108F:推 wohtp: 原来我这个写暴力lattice sum程式会直觉把lattice用物件包 08/18 21:10
109F:→ wohtp: 好的人是异类 XD 08/18 21:10
110F:→ wohtp: 可能是C++太早了,所以语法上有些很笨的设计。 08/18 21:14
111F:→ wohtp: 例如说,我没记错的话,如果a是某种object,然後你assign 08/18 21:16
112F:→ wohtp: b = a,C++的行为竟然是shallow copy 08/18 21:17
113F:→ wohtp: 我很想知道什麽情况下会有人需要做shallow copy? 08/18 21:19
114F:推 sputtering: 物理人不要一天到晚想抢IT人的饭碗 08/19 07:36
115F:→ sputtering: IT人一路从计算机结构和组语一路学上去 凭甚麽跟人家 08/19 07:39
116F:→ sputtering: 抢 08/19 07:40
117F:→ sputtering: 但原PO是说量子计算 首选当然还是物理系 08/19 07:42
118F:推 sputtering: 目前知道的量子计算有三个主流 08/19 08:18
119F:→ sputtering: 非量子门:D-WAVE量子退火电脑2048 08/19 08:21
120F:→ sputtering: 量子门_约瑟夫元件:IBM_Q,Google < 20 08/19 08:23
121F:→ sputtering: 量子门_冷原子:哈佛51 08/19 08:24
122F:→ caseypie: 如果a是object又没定义assign运算子,那当然是那样做.. 08/19 11:35
123F:→ sputtering: 更正:铷原子雷射圈禁:哈佛51 08/19 15:13
124F:推 basel: 对版主的领域而言,C++比较有前景还是 Python? 08/20 05:43
125F:→ pipidog: 对我的领域来说,fortran最有前途,但前提是你能待一辈子! 08/20 13:42
126F:→ pipidog: 甚至fortran 77都比fortran 90有前途! 真心不骗! 08/20 13:46
127F:推 zzz989898: 推 08/20 17:41
128F:推 sputtering: Deep Learning 当然是 Python 08/20 22:00
129F:→ sputtering: 不过我正在学的是Verylog(好像只有我在抢别人饭碗)Orz 08/21 22:30
130F:→ sputtering: 我现在做的工作早就跟这无关 纯兴趣 纯补偿心理 08/21 22:39
131F:推 Unawakened: 08/22 23:28
132F:→ freef1y3: java也是shallow copy呀 除非你用clone() 08/25 14:28
133F:→ freef1y3: 啊讲错..java应该只有copy pointer而已 08/25 14:29
134F:推 iHaveAPen: CFD来朝圣一下,我待的领域也是Fortran居多 HPC也是 08/31 00:11
135F:→ iHaveAPen: 版主推Cpp绝对是正确的 纯学术或是和商业整合都有 08/31 00:12