1. 算法岗现在有点激烈,甚至内卷严重,如果没有比赛、顶会或者大厂实习经历是否要继续坚持下去?
虽然我读研期间从事的是 cv 方面的学习,我入职的岗位却不是算法岗,而是研发岗,偏后台服务端方向,具体细节可见我写的文章。但对我而言其实都大同小异,我觉得算法和开发最重要的都是基本功。不管是编程的功力,还是你对实际问题的理解程度都能表现出你的基础是否扎实。我个人觉得能将算法落地、落实到某项应用中去的能力应该是一位优秀的算法工程师最具竞争力的资本,当然这也建立在扎实的基础之上。换句话说,如果某个公司以所谓的比赛、顶会和实习等因素作为算法岗入职甚至筛选简历的门槛,我认为这个公司不太适合去。
2. 是否在读研期间参加过实习,没有实习会不会影响秋招?
我在读研期间一直留在学校刷题、复习秋招或者忙着进行毕业设计的相关实验,没有参加任何实习。但也建议大家在春招投一些秋招不会去的公司,通过面试了解自己的短板,从而更加有针对性地准备秋招。之所以建议大家投秋招不会去的公司,是因为现在互联网大厂基本都有面试记录,一旦因为准备不充分而表现不好留下了记录,秋招再次申请时,很可能 HR 或者面试官对你的印象不会太好,甚至不会向你发出笔试或面试邀请,这是得不偿失的。
3. cv 方向有没有推荐的书籍或者课程?如何在学业和找工作的双重压力下发小论文?
如果是还没入学的准研究生,可以看看吴恩达的机器学习和深度学习的课程,方便入门,也可以看看自己是否感兴趣。如果是研一的同学,我其实也没有看过很多的书,因为我在研一期间主要是通过了解一些 cv 经典的论文和模型,从 GitHub 上下载对应的代码,配环境,跑通,再复看论文...西瓜书不太推荐看,比较晦涩,主要还是看文献、配环境、跑模型...
因为我是专硕,所以研一入学的时候其实没打算发论文,想着混混日子,找个好工作,能毕业就行了。但随着毕业设计的逐步推进,其实会发现做过的内容都可以写成小论文,只要相关的研究工作落实到位,实验数据充分,将毕设中的一部分甚至全部内容发一篇或几篇都是可行的。至于发顶会或者一区二区的期刊,难度自然是不可同日而语的。
如果不读博,尽早开始刷题,越早越好。我从2018年9月入学开始刷 LeetCode,到19年7月参加秋招的提前批整整一年多的时间,保证每天至少做几个算法题。从刚开始每天两三个到后面越来越熟练,题感也越来越好,顺利帮助我解决了所有的笔试和面试的白板编程。
学会预存任务,不要总秒回信息。导师给你布置了学习任务,完成后不要马上汇报,多做一点,或者做完后过一段时间再汇报,将你完成的工作量预存下来,留一个缓冲的余地去做其它的事情。
与导师沟通的时候一定要把工作落实清楚,避免做无用功。更重要的是,在与导师多次的交流过程中,你会在无形中把工作内容掰扯得很清楚,领会到许多需要注意的细节,以后工作也是如此。
保持危机意识。读研相对大学来说,离走入社会更进一步,可以说是大学和社会的一个过渡。那么大学如果没有学扎实的,读研期间一定要抓紧补。换句话说,你想去哪家公司,弄清楚需要哪些硬实力和软实力,一步一个脚印去达成,给自己列一个计划,自律掌控生活的力量,这种掌控指的是对于生活和学习的掌控感,一种构建好的日常与内心的稳定秩序。
保持良好的身体状态。程序员这一行以后加班少不了,每周拿出两三天时间锻炼,打球、跑步或者做 keep,特别是要增强心肺能力,提高体力的上限,这对学习和工作都有帮助。
关于写论文。因为之前一直在简书写了十万字的随笔和书评,所以写作能力还可以,导师看了我的毕设也说我思路清晰,结构完整。我觉得关于论文写作这一块,一定要先把结构梳理清楚或者把目录写好,一般像会议论文或者期刊都会有相应的模板,我喜欢用LateX 模板,原因是排版很舒服,框架搭起来,然后再往里面填充内容。把所有相关的文献用 excel 表列出来,并将每篇文献研究的问题、方法、应用以及需要改进的地方一一列出来,在综述中除了罗列看过的文献,还需要注意把握好文献之间的逻辑关系。在实验部分,需要阐述为什么会提出文中的方法,由什么问题引出,陈述实验内容和结果,对结果进行分析,论证方法的有效性,形成一个闭环。
和同学搞好关系,合理利用身边的资源。我跟一个去阿里的朋友课余一起打球一起讨论技术互相秀恩爱,秋招准备期间他帮了我不少,没有他我也拿不了很好的 offer。
将自己的学习能力、学习方法论尽快完善定型,比如需要学习某项新技术的时候,大致有一个学习的路线:阅读官方文档及通俗易懂的博客->跑简单 demo->将 demo 扩展为实际情景下的模块->思考需要注意的问题以及边界条件和预判 bug->总结。也就是培养以较短的时间学习新知识的能力。
有意识培养自己的专注力,在某块不被打扰的时间段内,只做计划内的事情,努力将精力集中,如果你感到不舒服,不自主地想一些其它的事情,说明你正在做的事情不属于你的舒适区,需要努力去克服。
科研对我而言是一件比较枯燥的事,特别是刚开始积累的时候,会觉得什么都不懂,模型也跑不通,论文也看不懂。现在回想发现这都是必经之路,偶尔拖慢进度、没什么输出很正常。耐着性子看文献,看不懂就直接谷歌翻译,每篇论文做好总结,以便需要的时候直接引用。把学习和生活分开,不在实验室的时候就不去想科研,好好运动,积极生活,看看电影,不要焦虑。少一点自我感动的勤奋,多一点脚踏实地的充实。
第一,文献很重要;
文献为什么重要呢?
第一点,文献实际上就是教科书,到了研究生阶段所学的都是前沿领域的内容,所以说读文献比之前那些教科书是要更前沿的,然后更贴合你的研究领域。
第二点,文献是做科研的一些灵感源泉,科研的一些思路是从读文献的过程中体会出来的,所以说文献重要。
第三点,只有读了这些文献,最后你的科研文章或者专利才能够得到实现,不然的话科研产出是做不到的。
读哪些文献?
review和research paper,一定要读前沿文献。所学领域中的经典文献是必须要读的,然后另外一些就是贴和本专业的最前沿的。
第二,怎么读文献?
1.一定要记笔记。
2.文件要整理归类。因为你看的文献越来越多,不可能说你看到一个问题,或者说你在写文章的时候不知道一个内容就非常准确的来想到指定的文章,所以说整理是很重要的。
3.阅读顺序,我给大家的建议是这样的:首先读文章的摘要部分,读完了之后,你就可以对这个文章进行一个大致的评定,认为这个文章对你来说有用还是没有用,之后,我建议大家不要直接从introduction开始读,直接去读图,再看研究方法。
我个人觉得读图要配合文章的结果部分,所以说我给大家整理出来的一个阅读文献的思路是这样子的:首先阅读摘要部分,然后是读图,读图的时候看结果,像很多的英文文献就是已经包含了结果部分。最后,读研究方法。
第二部分,好心态很重要,这部分比较沉重
你做的前沿科学可能是无尽的黑暗的状态,你可能会遇见很多的问题,很不知所措。克服困难所需要的是好心态。
第三部分,学会自我调节拥有一个好的心态
1.你要有兴趣爱好,不要沉迷于游戏,电视综艺。因为它只是一个消遣,大家要分清楚爱好和消遣,然后来调节自己的心态。
2.要学会沟通,不要不和导师沟通,要学会慢慢沟通,才能沟通有效。先了解导师的性格,以及他说话的含义。
3.是一些其它方式,除了一些正常沟通,再讲一些有效的放松方式。
2.怎么申请国外读博?
我说一下我的情况,我走的是和我现在硕士导师合作的,类似于联合培养的项目,然后拿的是国外的项目,国外学校有交流合作项目。如果你准备出国留学,我建议你在研二的时候就开始准备语言课,然后你的SCI论文要准备了,研三的时候申请,时间就刚刚好。
1. 学会倒排时间
从研一入学开始,首先要倒排一个时间表。
2021.9入学
2023.1-2月写完论文初稿,6前发表小论文
2024.1之前完成论文初稿
2024.2准备毕业答辩和盲审
2024.6毕业
假设你是2020年9月入学的研究生,那么,2023年6月是你的理论毕业时间,但你的实际毕业时间应该是2023年1月,因为从2023年2月第六学期开始的时候你就要准备毕业论文的答辩和盲审了,因此你的毕业论文初稿应该在2023年1月写完。
为了完成毕业论文,需要有一篇小论文打底,为了完成这篇小论文,需要尽快确认方向,要学会push导师,让导师给你能迅速上手的项目。这篇小论文最好能够在研二期间发表。那么,如果是要求在2022年6月前发表,那么最晚应该在2022年1月~2月投稿(视你的目标期刊而定,投稿时间甚至可能更早到2021年)。
研一研二先把要发的文章发够,不要把过多的精力用在课程的学习上(但这并不代表你就可以不认真对待课程的项目或作业)。如果研一下或研二上就能够有一篇文章,毕业的压力会小很多。
这是我给我们实验室新来的博士生制作的时间表甘特图,谨供参考。当然,要时刻注意计划赶不上变化,要随时根据变化作出调整。
2. 提前一年准备实习(如果不准备读博/转博)
和前面倒排时间一样,为了走上工作岗位,强烈建议在研二的寒假(甚至研一到研二的暑假)准备开始实习。实习的目的不完全是为了留下(当然,如果你的实习单位是大公司那么留下也可以作为一个目标),实习的目标是掌握行业内目前通用的技术,让自己知道如果要走上工作岗位需要什么技能。并且要强化这些技能的训练。
同时,研二的时候可以开始准备联系你已经毕业工作的师兄/师姐,问问他们在公司里干些什么,有什么必备的条件或技能对这个工作有帮助的。如果可能,联系一下内推。
3. 多读文献
这个时候才开始提多读文献,一方面是自己科研的需要,另一方面也是为了了解领域动态。我自己比较后悔的一点就是没能及时跟进新技术的动态,导致做了几年还在用(以现在的视角来看)的陈旧技术。
读文献时记住:多数文章读摘要,少数文章读全文。一般来说读全文的文章包含但不限于:1. 领域内开山之作;2. 综合性的综述;3. 高被引文章;4. 和你的课题直接相关的文章。
在一边读文章的时候一遍做好记录:1. 这篇文章要解决什么问题?2. 采用什么方法解决的?3. 实验怎么做的?效果如何?同时,对相同题材的,但是采用了不同方法的文章加以比较,可以用表格将文章研究的对象、采用的方法和实验结果进行对比整理。
同时开始练习撰写综述。
4. 写作
阅读——思考——写作是任何领域科研的闭环。阅读是输入,思考是消化处理,写作是输出。要多写作。但不一定是上来就按照完整学术论文的逻辑进行写作,可以先从碎片化的思考结果开始写,也就是所谓的“卡片式写作”。可以是某篇文献的阅读体会,可以是某个实验的操作流程,可以是某个思路的灵光一闪。同时,你所积累的卡片不是写过就算数的,要时不时回顾总结,有些时候随着阅读量的提升、工作经历的丰富和其他人的思维碰撞,你会发现你之前写下的一些文字可能是不准确的、需要修正的,甚至是需要彻底推翻的。要把这样的结论,以及引出该结论的理由更新到自己的卡片上。
5. (CS专业限定)精通一门编程语言
这里说的“精通”包含且不限于:
编写程序不出现任何语法错误
熟悉这种语言下基本的数据结构的定义和使用,要做到伸手即来
熟悉这种语言下各种标准库的使用,要非常熟悉什么类有哪些操作,哪些库中包含哪些类/函数,它们的用法是什么,参数是什么,返回是什么
能绕过该语言中各种莫名其妙的坑,在代码中不出现任何未定义行为。
能迅速理解其他人使用该种语言写的代码的运行过程。
……
6. 保持对知识的好奇心
说来惭愧,我自己觉得自己不是科研的料。但是,无论是不是科研的料,都一定要保持对知识的好奇心,要有自我学习的动力,时刻更新自己的知识体系,而不是停留在陈旧的知识体系中固步自封。
7. 学会定量分析手段(2020-11-23更新)
最近科研工作的一些实践让我突然意识到了定量分析手段的重要性。什么叫定量分析手段?就是你的小论文可以且应当最后归结成一个(或一组)数学方程及其解。首先需要将你研究的问题建模,列出其中所有变量的数量关系和约束关系,即方程。然后根据你研究的目标(比如根据约束条件最大化/最小化某个变量)解该方程。你的解就是对这个问题的回答。一个好的研究,定量分析手段必不可少。现在快毕业了,回头看看自己发表的论文,就总感觉研究水平不高,可能就是由于缺乏严谨的定量分析手段,很多结论都是通过定性分析或实验得出的结论,而这实际上经不起推敲和质疑。
还有一些其他的要点比如说锻炼身体、社会实践等等就不提了。科研再忙也别忘了生活。
觉得我说得有道理的就点个赞吧,愿大家都能早日毕业,早日找到自己的努力方向。