如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?
转自《知乎》如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?
问题:
作为一个博士生,一直为写论文头疼,读过很多高质量论文,觉得写的真好,但是轮到自己写总是力不从心。 最讨厌的是活生生的把一个A级别的idea写成C质量的论文…..
在这里的高质量限于IEEE/ACM Transaction级别,或者同等级别的Conference, 例如SIGKDD,CVPR,STOC,CCS之类
看过很多如何写论文的文章或者视频, 但都面向的是如何写论文, 而不是如何写Transaction级别的论文, 希望得到一些指点
回答:
作者:Terafer
链接:https://www.zhihu.com/question/22790506/answer/81787300
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
恭喜你已经有了一个A类别的idea和相应的实现以及数据,那么接下来就是写文章的问题了。计算机论文写作还是有一定的规律可以遵循的。
首先,你需要判断自己的文章是投往哪个A类期刊或者会议,是IEEE的还是ACM的。通常IEEE会议的格式和ACM会议的文章格式要求有所不同,我建议你在投论文之前先把该会议的Call For Papers好好研读一番,弄清楚文章长度,需要使用的Latex或者Word模板以及匿名方式等一系列非技术性问题,然后再开始写作。
在写作之前,先问问自己如果这篇文章写好以后给整个领域(community)的贡献是什么,这实际上是整个文章的灵魂,也就是你解决某个问题(problem)的方案(idea)。想清楚以后把它(们)按照重要性顺序写下来,这些就是你在Introduction里面告诉读者包括审稿人的contributions。贡献可能是新算法,新架构,新实现或者是前人没有的insights。你在写contributions的时候面向的读者很有可能是自己,所以可能忽略了problem背景和定义,这些就可以慢慢在Introduction里面填充。
这样Introduction就写好了,比如说:某某问题是实际中存在的一个问题,这个问题重要性是blah,blah,blah。之前发表的论文针对这个问题提出了三个有代表性的解决方案(此处引用可能至少三篇论文)。第一个解决方案甲大概做了一二三,但是没做四;第二个解决方案乙做了一四,但是没做二三;第三个解决方案丙做了一二三四,但是性能比较差。在这篇文章中,我们提出一个性能比较好并且同时做一二三四的解决方案。接下来写我们这个解决方案是如何实现同时支持一二三四的情况下提升性能的。比如说用了新算法,新架构或者新的实现,都可以。讲完基本技术创新点以后就是contributions,把之前想好的贴上去就可以了。最后在Intro里面加上后续内容组织,比如说第二章是相关工作,第三章是综述,。。。
一般来说Intro写完以后会写一章相关工作(Related Work)。从最Related的论文开始写起,比如说以上提到的三篇。这里需要着重讲的是,Related Work不是记流水账(e.g.,甲用了idea A,乙用了idea B,丙用了idea C),而是要比较这些论文,阐述她们各自的优缺点。
Related Work写完后,你需要写一个Overview来总括你的问题和解决方案。我的经验是最好想一个最最简单的例子(Running Example),然后使用这个例子引出你要解决的问题。接着再把之前在Intro中提到的现有解决方案挨个说一遍,并且用那个案例表明三个解决方案的不足(这里最好用实际数据)。最后把你的解决方案介绍一下,重点是与前人做的相比较。如果你用了一种新的算法,你可以大概提一下这个算法的思路以及实验数据;如果是新架构,最好放一张架构图上去,然后阐述一下新架构的优势(以及劣势)。在这一章介绍自己的idea的时候,你只需要概略描述即可,凡是涉及到技术细节的东西均可以引用后面的章节来节省页面空间。
后面这一章就完全是技术细节了。如果是自己做的的话,这一章是最好写的,因为你只需要把code/算法/架构在纸上还原出来即可。注意由于页面限制,一般来说这一章不可能包括所有细节,按重要性取舍吧。注意有些corner cases,如果很重要的话,千万别省略。
技术细节讲完了,如果页面允许,你还可以大致讲一讲你的实现情况。比如说新的系统是在Linux上实现的,新加了20000行C代码,1500行Python以及300行Bash script。C代码主要干什么,Python主要干什么以及Bash script干什么,最好能与技术细节里面所讲的呼应。
自然地,技术细节和实现讲完了就该讲你是如何用实验验证你的解决方案支持你的contributions啦。根据上面的例子,你需要写的是如何从实验数据中展示你的解决方案支持一二三四并且性能不错。支持一二三四这种是或否的问题比较容易说,但是性能不错就需要和前人作品做大量比较了。柱状图,折线图,表格等等数据展示手段,只要能说明问题都可以采用。这里需要注意的是,只要你写在论文里面的文字或者是图表,你都要想清楚背后的原因,最好能在论文里做充分的解释。比方说,你采用了新的算法,性能见表1,原因是复杂度降低了;你采用了新架构,性能提升见图3,原因是新架构节省了内存拷贝。通常来说,新算法或者架构会总体上提升性能,但也可能会有异常情况,即新方案比不过老方案的地方。这时需要格外注意,因为这是你的weaknesses,你需要用令人信服的说法向读者展示这些异常情况存在的可能性较低,或者可以通过某种简单方式避免。
如果写到这里你还有充足页面可用,你可以试图写一个discussion章节来讨论你的方案的缺点,以及未来有可能的改进情况。不要怕展示缺点,你越诚恳审稿人对你印象越好。如果你是故意遗漏新方法的一个很显然的缺点,这会给审稿人非常不好的印象。你也可以提一些你的方案的其他应用等等。
最后就是结论啦,用一两个段落概括一下解决的问题,解决思路以及贡献就可以了,比较好写。
如果你需要写一些附录,比如说文章里有几个定理没有给出证明,那可以在后面的Appendix章节中加入。通常Appendix审稿人不太会读。
我还有一些小建议,希望能对你有所帮助:
找到会议程序委员会(Program Committee,也就是审稿人)的页面,然后看看哪些审稿人做得和你做的相关。如果有的话你应该在Related Work中引用他们的作品,因为大家都希望自己的论文被别人引用。不要怕有礼貌得指出他们的论文缺点,如果你说得对,审稿人看到会很高兴的。
论文提交前用你能找到的任何有效的书写检查软件检查一下拼写错误或者简单的语法错误,我知道有些审稿人会对这种小问题过敏,如果一篇论文中此类错误过多可能会导致直接悲剧。有条件的话,找一个英语为母语的人帮你最后把把关。这里我推荐你如果可能的话找一个美国教授合作写论文,可以节省很多时间。
如果你之前没中过2-tier或者3-tier的期刊或者会议,那么可以先从这些着手,慢慢锻炼。
祝你好运!
利益相关:计算机博士刚毕业,期间3篇CCS一作,1篇PLDI一作。
如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?的更多相关文章
- 如何写好一篇高质量的paper
http://blog.csdn.net/tiandijun/article/details/41775223 这篇文章来源于中科院Zhouchen Lin 教授的report,有幸读到,和大家分享一 ...
- 关于Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇高质量的博文)
Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇质量高的博文) 前言:在学习多线程时,遇到了一些问题,这里我将这些问题都分享出来,同时也分享了几篇其他博客主的博客,并且将我个人的理解也分享 ...
- 写博客没高质量配图?python爬虫教你绕过限制一键搜索下载图虫创意图片!
目录 前言 分析 理想状态 爬虫实现 其他注意 效果与总结 @(文章目录) 前言 在我们写文章(博客.公众号.自媒体)的时候,常常觉得自己的文章有些老土,这很大程度是因为配图没有选好. 笔者也是遇到相 ...
- 留学生如何完成一篇高质量的Essay?
本文将以典型的essay写作结构作为框架, 分别介绍如何审题.构思.立意, 如何高效地收集有效的资料, 如何撰写, 如何规范参考文献格式等. 审题&构思&立意定题 审题 一年之计在于春 ...
- 从单幅图像高质量去除运动模糊——读JiaYaJia同名英文论文总结
原始论文在这里 http://www.cse.cuhk.edu.hk/leojia/projects/motion_deblurring/ 一.概述 论文根据以下的基本模糊图像模型建立 其中I是我们观 ...
- 如何写出高质量的技术博客 这边文章出自http://www.jianshu.com/p/ae9ab21a5730 觉得不错直接拿过来了 好东西要大家分享嘛
如何写出高质量的技术博客?答案是:如果你想,就一定能写出高质量的技术博客.看起来很唯心,但这就是事实.有足够愿力去做一件目标明确,有良好反馈系统的事情往往很简单.就是不停地训练,慢慢地,你自己 ...
- 读书--编写高质量代码 改善C#程序的157个建议
最近读了陆敏技写的一本书<<编写高质量代码 改善C#程序的157个建议>>书写的很好.我还看了他的博客http://www.cnblogs.com/luminji . 前面部 ...
- C# 《编写高质量代码改善建议》整理&笔记 --(一)基本语言篇
题记:这是自己的观后感,工作两年了,本来打算好好学习设计模式,或者作为客户端深入了解GPU编程的,但是突然发现还有这么一本书. <编写高质量代码改善建议>,感觉这正是自己需要的. 我是做 ...
- 如何写出高质量的JavaScript代码
优秀的Stoyan Stefanov在他的新书中(<Javascript Patterns>)介绍了很多编写高质量代码的技巧,比如避免使用全局变量,使用单一的var关键字,循环式预存长度等 ...
随机推荐
- Chrome_浏览器开发人员工具
Google Chrome 浏览器开发人员工具,让网页开发变得更轻松 无论是 IE 6/7 的 Internet Explorer Developer Toolbar 或者是 IE 8 自带的 Dev ...
- BOM 清除
[root@test3 11]# gcc 11.2.c11.2.c:1: 错误:程序中有游离的 ‘\357’ 8进制,相当于16进制 ef11.2.c:1: 错误:程序中有游离的 ‘\273’11.2 ...
- Linux 查看本机串口方法
最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1.查看串口是否可用 可以对串口发送数据比如对com1口,echo /dev/ttyS02.查看串口名称使用 ls -l /de ...
- C++中int型与string型互相转换(转)
http://greatverve.cnblogs.com/archive/2012/10/24/cpp-int-string.html 本以为这么多年C#经验,学个C++没多难,现在发现错了.C++ ...
- VM虚拟机打不开,没有反应,解决方法。
最近的项目开发,需要用到虚拟机,但是打开虚拟机VM8却发现,以前创建的虚拟机都用不了,点击左侧[我的计算机]中的虚拟机列表,没有任何反应,也没有任何错误提示,服务中所有的虚拟机服务都开启了,网上百度没 ...
- MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根
MATLAB用二分法.不动点迭代法及Newton迭代(切线)法求非线性方程的根 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 一.实验原理 二.实验步骤 ...
- Python3 环境搭建
Window 平台安装 Python: 以下为在 Window 平台上安装 Python 的简单步骤. 打开 WEB 浏览器访问 https://www.python.org/downloads/wi ...
- c++ 启动exe(启动别的exe程序)
http://blog.csdn.net/sdcxyz/article/details/13631613 1例程 1.1面向过程例程如下: #include <iostream> #inc ...
- gulp学习-metamask前端使用
https://www.gulpjs.com.cn/docs/getting-started/ ,这个是3.9.0版本 后面发现安装的版本是4.0.0,看下面这个: https://github.co ...
- 【spring-boot神器】第一篇:拦截器,过滤器,监听器,控制器,消息转换器,AOP执行顺序
整理一下这几天学习的资料和代码 第一部分.上代码 1.spring各种器的实现,idea搭建spring-boot的教程在这里http://www.jianshu.com/p/9082a533fa3c ...