从advise的style上分,有 hands off 和 hands on。 hands off 的导师给你在科研海洋中探索的自由,往往鼓励你自己想idea,而不是给你idea让你做,当然有些hands off的导师是因为太忙活学生太多。 hands on的导师会一步步引导你做project,至少在phd的初期。我发现 hands off 类型导师的学生的成就方差很大,有可能成为大牛,也有可能发展的不好。hands on类型的导师学生方差会小,结果就是总是能发一些paper毕业的。我个人倾向于 hands on 的导师,尤其对于idea不是很多的phd学生来说。
绝大部分导师分布于我以上分析的各种分类的组合空间。最好的组合我想是:不push 并且 hands on 的大牛。如果一定要取舍,我觉得可以接受push的导师。
当然很多时候导师是无法选择的,所以这个东西不要去纠结了,我们只是希望在给定的条件下做到最好。
2. 研究课题的宽与窄。
我以为这个问题没有固定的答案。如果课题宽,一般你就能涉及多个问题,接触的面广,但同时也意味着你很难有精力在某些方向上深入。如果课题窄,你可能会做的很深入,但局限性比较大。我觉得如果准备去工业界,课题应该做的宽些。原因是 exact match 几乎没有,你如果做的太窄了,公司不需要那个东西的话就没太大机会了(纯research部门除外)。如果你做的比较宽,适用范围广,公司可能会因为你在多个方面都有发展前景而雇佣你。毕竟公司的project也会一直变的。如果想去学术界,就真的不好说。从我观察系里的faculty search的情况看,研究面太窄是个劣势。毕竟学校也有match的情况,比如学校希望找一个老师同时他可以教某一门课。Candidate A 在一个小方向上很牛但没有表现出教那门课的能力, Candidate B 虽然略差于A 但他似乎方向广,可以教那门课,那么B就有很大优势了。Department里面的有些事情Candidate是不知道的。如果PhD方向过窄了,postdoc应该有意识的把自己方向放宽些。
-baidu 1point3acres
3. 选课
作为PhD,应该在初期选跟自己研究方向有关的课,这点没有争议。有争议的是 是否应该选 跟自己方向关系不大 而又是CS的核心方向并且很重的课。比如做 vision 的人选不选 algorithm 或 os 呢? 个人觉得要看自己的背景。如果本科这些课的功底很扎实,比如算法自认为没有问题,这种情况可以不选。如果转专业过来或者自己当时这些课混过去的,那一定要选。这些是基本的,到时候Phd毕业了 二叉树,深度优先搜索 或者 动态规划 都不知道的话 确实是比较丢人。还有也要给自己留个退路,万一以后就决定找 SDE 了呢。 同理,不管你什么方向,coding能力还是要加强加强再加强。尤其theory的同学,平时coding机会 不是太多。
4 编程语言
你会发现你的research code基本都是用一种语言写的。如果这种语言不是常见popular语言怎么办。很多情况下你所使用的语言和你的领域有很大的相关性。比如 system,network的人用 C 的很多, 数据库 的人用 java 比较主流, vision和machine learning 用Matlab, graphics用c++甚至GPU, theory的人用笔写 等等。 语言本身是相通的,但是一直用一种语言必然会导致另一种语言的生疏。我觉得底线是不管你用哪种语言,你一定要熟练掌握 c++ 或 java 中的一个。比如做vision的人 你必须 熟练 c++ 尽管你不用 c++ 写research code。 基本要求就是 你能够拿一道面试题 用 c++ 编出来。当然一般公司雇佣phd并不是看重你这个能力,但是这是基础,是属于你是phd但是不会这个是很丢人的。
-baidu 1point3acres
5 industry vs academia