20 个回答
谢
@薛金泽邀,对题主的问题可能不是很切题,但是希望能对
@薛金泽同学有所帮助。
我水平不高,只能讲讲我个人从零开始的经历,不是唯一路径,更不是最优路径,仅供参考。
和任何学习一样,开始都是极为缓慢的。现在想起来进入理论化学最早的端倪是大一入学时和某物院招生老师的一次谈话。他告诉我的最重要的信息之一就是: 化院开的高数C和选修的线性代数太简单了,微积分熟练程度起码应该达到物院的水平 。所以大一时我是拿物院的高数课本上的化院的课,做的也是高数B的习题。然后根据该老师的建议,大二大三又选修了数院开的统计学双学位,由此学了一些缩水版的数学分析和高等代数,还去蹭了应用数学双学位里常微分方程的课。 感觉这些早期的数学训练并非是完全必要的,但是对于养成良好的理论素养是比较重要的 。多数没有经历这些训练的化院学生就感觉比较缺乏进行严密逻辑推理的能力,在后面做具体科研工作的时候就会体现出来。另外,后来会发现统双里学过的概率论,数理统计,时间序列和高维统计分析等课程对于学习后来学习蒙特卡罗等方法还是有很大的帮助。当然题外话, 这些概率统计知识对于你日后做不下去的时候转行其实更有帮助...
学这些基础数学课的时候还比较盲目。第一次真正对理论化学感兴趣是在学结构化学的时候。我现在依然认为把结构化学放在大二的位置上有点过早了。总之当时尽管考试考得不错,但是其实有一半的内容根本没有透彻理解,而且积累了大量的疑问。这些问题的解答大概要等到大三学习过一门叫中级物理化学的课才得到解答。而其实中级物理化学就是化院缩水版的量子力学+统计力学。 而这两门课(量子和统计力学)就是本科阶段理论化学的核心课程 。个人感觉结构化学的讲授方式实用主义倾向太强且很不严谨,有志于理论化学的学生不应该满足于这种一知半解的课程,而应该进一步学习真正的物理,学会怎么从几个基本的假设出发构建整个理论体系,也要学会理解其中蕴含的真正的physics,学会理解物理学是如何根据physics做近似的。我当时比较懒没跟同学去蹭物院的量子力学,但是去蹭了电动力学和平衡态统计物理,同样是加深对基本物理的理解。此外大概在大三升大四那个暑假自己啃了一下数理方法,基础很不扎实,不过好歹该见过的特殊函数和特殊方程都算见过。有了这些数理基础之后,在大四的时候开始和低年级研究生合上量子化学,这个时候基础其实比大多数研一学生要好了,只要老师稍微靠谱一点听懂量子化学应该不是太大的问题。
本科阶段的学习还有一条线是编程线,这条线我基本放弃治疗...当时计算概论教C语言的某老师极度扯淡,所以编程语言基本靠自学。大一下算法与数据结构讲的还不错,不过到大三大四进实验室的时候也都基本忘了,所以大四在组里像绣花一样写代码,天天被师兄虐。 不过那时候在组里被师兄强迫学python,后来证明是非常有意义的。
以上是我的本科阶段,现在看起来很充实,也走了不少弯路。总体上看统双的学习占用了太多时间,数理方法学的不很扎实,所以现在对复变积分都有点恐惧感。此外四大力学中没有真正系统学过理论力学,也没学过光学,有点遗憾。总之本科阶段应该注意以下核心课程:
高数/数分
线代/高代
概率论/数理统计
计算概论/算法与数据结构
量子力学
统计力学
数理方法
量子化学
其他的数理课程根据自己的能力和兴趣做适当深入。应当强调不管是数学还是物理都有大量更深刻更有意思的东西,不要贪多,量力而行...(我上的课是我某些同学上的课的真子集,不要跟那些学霸比...)
然后是博士阶段,这个阶段才算是真正进入理论化学了。首先是研究生级别的量子力学,统计力学和电动力学(你会发现这些课程在本科时囫囵吞枣上一遍是不够的,还要学第二遍...),然后又学了一遍量子化学,因为要做材料,所以学了固体物理。同时在导师要求下啃了一下Frenkel&Smit,学了一下怎么做MC和MD。这阶段很多时候就是边学边用了。今天这边课上讲完布里渊区,明天做research就要调k-point sampling。博士阶段主要是学习实用技术的爆发期,你会看到很多学过的理论是怎么具体应用到实际科研中来的,这些具体的例子反过来使得那些抽象的理论的图像更加清晰,理解更加深刻。科研要求以非常快的速度学习大量的新技术,你会学到无数听上去十分高大上的术语。但其实归根结底这些技术其实是早就学过的基础理论的具体应用。前期理论基础打的好的话学这些东西其实很快。
我个人在博士阶段另一个比较大的提高是计算机能力。 编程能力这东西就是大量的具体工作磨练出来的 。在计算机上去具体实现几个想法比单独看书有效率的多。其他什么写脚本啦,什么debug啦都是熟能生巧。只要平时留心积累,就能越变越好。此外必须掌握的一个技能是阅读别人的代码并根据自己的需要篡改他人代码,这其实是我大多数时候在干的事。
最后强调一下博士阶段提高水平最重要的方法: 看文献,看文献,看文献 (因为重要所以说三次)。看文献不要贪多,不要就记个结论(比如哪个泛函更适合算哪个体系什么的,这种结论记下来没什么意义)看一篇就搞懂一篇。看完之后问自己这些问题:这篇文章提出现在的某个领域有哪些问题,原因是什么?这篇工作是如何解决这些问题的?为什么这样能解决这些问题?为什么前人的方法解决不了这些问题,区别在哪?我真的理解作者的思路了吗?如果是我这个问题应该怎么做,有没有其他更简单的路子?你觉得作者真的解决问题了吗,还是在忽悠?当然很多时候会发现很多地方看不懂,这时候不要死磕,也要学会跳过一些琐碎的或者是难以理解的推导先抓住大局,然后回过头来慢慢消化。花时间看文献是增长B格最有效的方法。
就这样,B格过高,先匿了。
-----------------------------------------------------
2016-08-17 取消匿名
好吧,回答前我们先来段励志小故事。这几年有个软件叫“ORCA: An ab initio, DFT and semiempirical SCF-MO package”,这是个免费闭源量子化学计算软件,据说特长是生物无机里面经常涉及到的多组态计算。这种计算对其他常用软件,比如Gaussian等,还算是比较苦恼的。这个软件的主要作者 Frank Neese就是做无机出身,现在已经是业内大牛了。
http://www. thch.uni-bonn.de/tc/orc a/
http://www. mpibac.mpg.de/bac/mitar beiter/neese/neese_en.php
言归正传。
计算化学的内容一般包含量子化学计算和分子动力学模拟。或许前者占更大比重,但从目前的趋势来看,后者将会变得同样重要。分子动力学模拟传统上指用经验参数(力场 etc.)+牛顿力学来处理具有大量粒子的体系的平衡、演化过程。但现在基于量子力学的动力学也可以算一些小体系了。
然后就是您想学到什么程度了。如果只是想能用某些软件算某些自己感兴趣的性质的话,这个要求还是很容易达到的。先找类似的文献,看人家怎么做,然后重复一遍,把关键的数据自己从头到尾做一遍出来,这样就可以认为是会算某个东西了。据我所知很多人都是这么号称的。
如果想深入一点,想知道软件是怎么算的,为啥这么算,或者软件是怎么写的,需要补的课对于化学口出身(这里指国内本科)的同志们来讲可能多了一点。再次结束吐槽,假设题主问的就是这一块。
一般来说理工科的本科生都至少有两个学期的微积分、两个学期的普通物理以及一个学期的程序设计(或者计算XX之类的课程),这些基础假设是具备的,也就是题主说的“零”。
首先需要量子化学的知识,往回是量子力学以及一点点多体理论。学量子力学最好学过一点点分析力学,至少知道Hamiltonian是怎么来的。这里需要的数学基础包括一点点矩阵的知识,行列式要知道,熟悉线性变换。知道一点复变函数的东西,包括积分和留数。会解简单的微分方程,比如谐振子的薛定谔方程很重要。熟悉傅里叶变换对某些问题会很有帮助。有点群论的知识对某些定性分析也有帮助。
如果对计算本身感兴趣的话,C、C++、Fortran至少熟悉一个,另两个能读懂。能熟练使用一门脚本语言,主要是Perl或Python。知道怎么调用某些数学库,比如BLAS,LAPACK,fftw等。
想来想去貌似必需的东西真不多,而上面这些也不需要一下都准备好,用到的时候再学就是了。