致研究者的一封信 Duane A. Bailey

时间:2021-11-26 21:48:38

通过一点有条理的组织,研究工作可以变得更令人愉快,更富有成效。不幸的是,对很多计算机科学家而言,研究技巧的获得是通过经验,而不是通过正式训练。本文概述了一些如何组织研究工作的建议。大多数建议对本科生也是有用的。斜体表示是针对研究生,职业研究者和教师的。希望本文能有所帮助。

关于我的建议

成功的计算机科学研究牵涉到很多方面的协调。为了使你花在研究上的时间尽可能的有成效,有趣味,我收集了一些你可能会发现有用的“组织方面的提示”。花一些时间来阅读这些提示。一些提示是极为显然的(另一些则是很困难的!!),但是都有改进你的研究事业的潜力。

阅读是基础

发现并且阅读相关的著作是好的研究的基础。如果在你的研究领域,你是一位新手,可能你只熟悉教科书上的内容。你可以从 ACM Guide to Computing Literature[3] 和 Computing Reviews[2] 这两个重要的发现相关参考书目的资源入手。当你开始研究你的题目时,是从一个较短的基础读物的书目开始的。作为一个研究者,你必须发展这一相关著作的书目,并且不断找到新的阅读材料。你将会发现其他人错过的有用的参考书目。

持续不断的阅读。虽然背景知识的阅读是任何研究工作的最初任务,但是重要的参考文献经常较后才出现,尤其是如果研究的重心改变了的话。你务必识别出那些对你的研究领域有重要作用的资料,并且你阅读期刊的速度能跟上期刊发行的速度。一个月只需花两三个小时就能浏览一遍最新的论文。(虽然对会议录的审阅不象对期刊那样严格,但是会议录在快速发表研究结果方面起着重要的作用。)因为计算机科学研究更新速度很快,所以及时阅读最近的技术文献是至关重要的。

仔细的阅读一些文章。粗略的浏览能识别出与你当前的研究有关的材料。当发现一篇论文对你的研究有所帮助时,更加详细的考虑这篇论文是很重要的。阅读论文时,需要考虑以下三方面:

这一研究对你的工作有什么贡献?

这一贡献和你以前遇到的文献是怎样的关系?

在这篇论文中,作者引用了哪些重要的参考文献?

这些问题看起来似乎是显然的、基本的,但是没有理由不问这些问题。

对每一篇你认为和你的研究工作相关的文章做摘要。摘要有助于向别人快速的介绍工作。如果你将来不得不再阅读这些文章,以前写的摘要就提供了一种“自助”机制。在研究工作中,做摘要(对你的或者他人的文章)是一项通常的任务;言简意赅的写摘要是一门艺术。

阅读完一篇写得很好的文章后,考虑它表达的方式。它可能组织得很好,或者可能用了缜密考虑过的例子来强调重要的概念。

什么使得这篇文章容易阅读?

文章提供了什么样的详细程度?

使用什么例子来论证了重要的概念?

哪些问题未被回答?

结论可以推广吗?

因为我们是通过实例学习的,所以标记那些写得特别好的文章是很重要的。

不幸的是,技术文献经常写得比较晦涩。有时,和你的指导老师或者对此也感兴趣的同事一起阅读一篇文章会是颇有裨益的。这样,进展速度可能会较慢,但最终一篇写得好的文章的潜力会被实现,你对文章的理解也会增进。

在较大的系,非正式的研讨班或“期刊俱乐部”提供了一个理由,让研究者们每周集会,讨论论文。要集中于一个主题(如这学期的内存回收),但是当一个共同的兴趣发展起来时,也允许偏题。在拥挤的日程表中,这些非正式的每周会议为那些否则可能会被扔在一边的研究工作保留了时间

写作是根本

好的写作是科学研究的唯一持久的方法。当口头报告已被人遗忘,程序已被清除,很久以后,写下的文章仍然保留有重要的概念。所以,你应该尽可能早的开始写下你的研究结果。虽然实验是重要的,但如果没有仔细记录下来的话,所有的努力都是白费。

仔细的写作。当你不知如何下笔时,请使用简单的写作风格。如果你是个生手,或者不常写作,那么你关心的是磨砺你的写作技巧。如果你够幸运,你阅读的文章里就会有在你这一领域成功的写作的范例。通常说来,有效的文章只需要一遍的阅读就能传达重要的论点。这些文章还会讨论有趣的例子。当以数学公式或者代码的方式直接给出技术细节时,它们都不能代替英语的说明。以能够既正确又简明的传达信息的文风来写作是比较困难的。当你对你使用的文风不确信的时候,重新阅读一篇你喜欢的文章,同时注意把它的文风特性结合进你的写作。

保持写日志。在日志中,写下参考书目,提出疑问,描述问题和它们的解决方案。保持记录实验和实验结果。就象实验室科学家们所知道的那样,日志是组织你的研究工作的一个简单工具,日志也是你所做的进展的宝贵记录。

坚持对相关文献中的结论做摘要。如果你预计你将会正式报告你的研究(始终对此保持乐观!),那么对你的读者而言,把你的工作和其他人的工作比较、定位是有用处的。重新考虑相关研究也能提醒你那些重要的参考文献,并且把你的目标和你的研究领域内其他人的目标有机的结合起来。因为这一摘要文档需要经常被编辑,它应以电子稿的方式存储。(BIBTEX[10]是一个组织参考书目信息的较好的系统,它还提供了和其他人交换参考书目的方便的机制。)

写下一些小的项目。写下的是一两页关于某一主题的正式提出的构思。当构思不允许被表达出来,在脑子里徘徊时,它们就逐渐变得畸形、混乱。这些记述帮助磨砺你的写作能力,组织那些自发的想法。当学生们希望得到研究项目时,这些能迅速被找到的记下的构思就大有用处了

保留一部分时间来好好写作。花在写作上的一小时是考虑问题的一小时,而不是和计算机格斗的一小时。你必须离开那些令人分心的事,集中你的努力,专心记录工作。象规则的练习那样,你必须做它,并且你会慢慢喜欢它。

和其他人一起工作

对很多人来说,成功来自于和其他人一起工作。和他人分享构思,并且让构思在一个组的环境下发展是很重要的。(在小的系里,这可能是成问题的—尤其如果你是在一个孤立的领域内,但合作仍然是重要的。)不管什么时候,只要可能,和你的指导老师或者研究伙伴讨论你的想法。你可能认为你的想法不值一提,但是不管怎样,你应当尝试一下。让谈话继续!大多数研究者都乐于参加富有成效的讨论。

遵循一个规则的会议时间表。如果看起来似乎“没有什么可以讨论”,这本身就是一个重要的讨论主题。不要轻易略过或者取消会议,因为这会成为一个不可逆转的先例。如果你和你的讨论组失去了联系,你应该主动重新建立联系。不太可能他们会主动来找到你,而且共同的兴趣会随着时间而衰减。

会议提供了集中讨论主题的同步点。会议上会产生重要的见解,所以花一些时间来写下这些想法(带上你的日志!)并且复印分发它们。这些非正式的“会议记录”帮助在各次讨论之间维持前后联系,并且记录下做出的决定。改头换面的重复老的内容通常是在浪费时间。

仔细考虑批评。因为别人的评论是科学研究过程中完整不可分的一个组成部分,所以总是有你的研究被批评的时候。不要被批评意见所触怒,而是应该把它作为指导方针,使得你的论点更有效。同样的,当批评别人的工作时,使得你的意见富有建设性是很重要的;那些没有益助的意见就应该被忽视。

报告并不容易

在任何严肃的研究工作中,你都会需要做报告。好的报告需要相当多的准备,所以尽早开始。幻灯片应该是清晰的,没有任何无关紧要的东西(包括代码)。幻灯片中应该包含有能说明问题的例子,但例子的详细程度应该对你的听众适合。幻灯片应该相互关联,共同证明你的贡献。

对你的报告进行排练并且计时。没有准备的报告是极为显而易见的,并且通常会导致原本愿意接受新思想的听众对你的报告发起攻击。仔细组织并且排练你的报告,这样当你面对没有预料到的提问时,就有更好的准备。

项目

计算机科学的研究经常导致一个需要编程的“项目”。务必记住编程不是计算机科学研究。对于大多数计算机科学家而言,编程纯粹只是做实验的方法。象任何实验一样,编程也需要预先仔细计划:

* 建立目标。 知道你的目标,并且毫不分散注意力的接近它。列出一些表明进展的重大事件,并且努力实现它们。如果你不能简练的阐明目标,那么你就应该停止,重新考虑这个项目的动机。

* 考虑简单。 设计你的项目,使得它们能够在合理的时间内被完成。一位熟练的程序员每个月产生的可靠代码几乎不超过一百行。因此,正确编写一个需要上千行代码的项目将花费掉一个熟练程序员两三个学期或者更长的时间。所以,需要修剪实验的大小,使它易于处理。修剪的时间是花得很值得的。大的项目并不必定产生大的结果。

* 建立原型。 原型的建立对大多数的项目是有益的。一个考虑得很好的原型能验证假设,测试摘要的价值,并且引起对于立不住脚的想法的重新考虑。尽管草草做一个“产品”几乎没有什么研究价值,但是通过实现部分功能的原型系统,很多研究问题能够被满意的回答。

* 使用工具。 通过使用一些简单的工具,程序员的效率得到了极大的提高。今天的程序员应该意识到使用工具,例如anim[6],awk[1,4,5],HyperCard[8]和Mathematica[13]。 在窗口环境下,界面生成器能消除界面设计过程中很多让人心烦意乱的琐碎工作。当然,还有很多其他重要的、有用的工具,工具使用的主旨是清晰的:正确选择工具能够减少项目的整体工作量。找到工具,学习工具,并且使用工具。

* 与人合作。 当资源能够被协调时,群组协作经常比孤立的个人的奋斗更有成效。如果你和他人有共同的研究兴趣,那么和他们联系,与他们合作。毫无疑问,有些他们已经解决的问题你正在考虑,他们的解决方案将会影响到你如何达到你们共有的目标。

合作的一个副作用是增加了纪律性。为了减少花在各方面同步上的精力,纪律是很必要的。对程序员来说,现在有各种各样的资源可以用来管理分布的项目。例如,GNU项目发展了一套合适的代码标准,并且程序可以恰当的强制使用通用的编码风格(例如缩进)。当多人共享对同一项目的存取时,就要考虑使用一个版本控制系统(例如SCCS或RCS)。

* 为项目结果写文档。 应该为完成的项目编写文档。至少,项目的技术概述使得别人能够了解到你的研究动机。文档应该描述问题,你的假设,你的方法,和对你的项目结果的诚实的评价。当为软件编写文档时,文档要包括说明性的例子,指南,和任何从该软件的使用中获得的经验。写得好的文档极大的增加了项目的影响。

总结

最理想的是,你在研究工作中的参与,是整个流水线的一部分。你的工作基于他人的工作之上,并且产生一些有用的东西。作为一个变化迅速的领域的参与者,你有责任保持了解情况,设计并且完成合适的实验来测试你的假设,以所有研究成员都可以存取的方式来给出你的结果。这里给出的建议能够帮助你完成这些责任。