How to write a great research paper [pdf]
research.microsoft.com
research.microsoft.com
Also, for who are not in the know, Simon Peyton Jones is a well respected computer scientist, mostly known for his work on developing the functional programming language Haskell (together with others ofcourse), Haskell research is funded for a large part by Microsoft I think.
Also, to add what others have said, he is one of the best speakers I've ever been lucky enough to see in person: SPJ, Philip Wadler, Guy Steele... good company.
(I probably shouldn't be making any handwriting/typography comments.)
This is a very funny question, why I use Comic Sans. So. All my talks use
Comic Sans, and I frequently see little remarks, “Simon Peyton Jones, great
talk about Haskell, but why did he use Comic Sans?” But nobody’s ever been
able to tell me what’s wrong with it. I think it’s a nice, legible font, I
like it. So until someone explains to me — I understand that it’s meant to be
naff, but I don't care about naff stuff, it’s meant to be able to read it. So
if you’ve got some rational reasons why I should not, then I’ll listen to them.
But just being unfashionable, I don’t care.Sometimes, finding a slide deck the author of the paper used is more useful than the paper itself just because they have more room for examples! I've found this particularly true for very dense theory papers where I only half-understand the relevant mathematics.
Highly recommended. Simon is a very good speaker.
However, I have to issue a statement of warning that when an idea doesn't pan out like written out, people will go to great lengths to fulfill their agenda (e.g., put undue pressure on their students to come up with the "correct" result). For computer science and mathematics, it may be more difficult to fudge results. But in experimental work or data analysis, I've seen students suddenly come up with a solution that fits their advisor's expectation.
There has to be some mechanism to guard against this; the most common answer is the moral character and integrity of the scientist, but psychologists and economists will quickly point out that there are gray areas where people are willing to cheat just enough to get their reward while preserving their conscience.
I have, mid-sentence, come to understand truths about my subject that had evaded detection for months prior. My talks thrive, but now I need to transition to papers. I'm going to try to put this method into practice for myself.
A few months ago I found a way to reduce a particular AI algorithm's memory usage from O(n) to O(1), but I've been bogged-down in irrelevant details when trying to implement this improved version.
I think I'll take SPJ's advice and write up a theoretical/motivational paper describing the improvement, and leave the actual implementation for afterwards.
I've been holding off writing up since I'm an amateur, and AI has a reputation for attracting cranks with hand-wavey conjectures :S
A purely theoretical paper can still be useful. It's even more useful if it's followed up by an experimental paper demonstrating or refuting the idea.
For example, it's silly to write a manual "How to use Google", then make Google. It's very sensible to write a paper "A proposal for improving Web search with mutual-popularity measures", then try to make Google. If Google succeeds, we can write "Mutual-popularity measures and Web search: large-scale experimental results". If it fails, we can write "Scaling issues on the Web: impacts on mutual-popularity algorithms".
Google’s search engine, however, is, and it would be perfectly sensible to first write a manual for a search engine before implementing it.
Skilled programmers use different techniques to this end: some write a first version and throw it away, some write extensive manual pages or design documents, others fill out a code template where every requirement is identified and assigned to a specific function or comment. For example, in Berkeley DB, we created a complete set of Unix-style manual pages for the access methods and underlying components before writing any code.
Breaking with this sort of practice is exactly why agile development and it's ilk were born.
While writing a formal specification can be useful, it is rarely as useful as defining the problem and placing your solution in the context of other possible solutions.
Essentially, what he is suggesting is actually "agile academic research", compared to the "waterfall academic research" (do stuff, then write-up a paper with what you've got...)
I've always had a moderate fear of public speaking--I've heard that many do--but in the last six months, I've put myself "out there" because I had interesting ideas that I wanted to share. I went from having given one talk ever in my career to doing six in the last six months. It was scary at first, but I'm getting better... and my ideas have been well received.
The most important point I'd like to underscore here (the same one that the PDF mentions) is that your idea doesn't need to be perfect and infallible to be worthwhile. It just needs to be interesting enough (to you, or to others) to spark a conversation. Always remember that journals and conferences won't accept your material if they don't think it's any good!
http://worrydream.com/#!/ScientificCommunicationAsSequential...
When I'm faced with a design problem I write a "white paper" setting out the problem, framing the desired properties of any solution then as systematically as possible setting out the alternatives and justifying why a particular solution has been chosen.
I usually find that in going through this process I am forced to change my initial design decisions, often ones that seemed obviously, even trivially, correct to begin with.
This practice drives me crazy, because it's essentially just an outline, which is useless. It's a computer science research paper, I already know the outline! His advice to not have that paragraph, but instead put in forward references to the relevant sections in the introduction is spot-on.
Now if you'll excuse me, I have to get back to reviewing papers which did not take this advice...
Idea --> Write Paper --> Do Research
It gives me something I can do when I can't work on the research itself (e.g., during meetings, in between interruptions, at home, etc.). And it helps me anticipate obvious questions that might detract from my result. A slide that looks like it doesn't contribute to the impact of the talk might indicate work that doesn't really contribute to the result.
* Abstract: This is why you should read this paper.
* Introduction: What the problem is that we're trying to solve and a claim to having solved it better.
* Related work: How other people have solved the same problem (and why we don't like their solutions).
* One or more sections go here here describing how we solved the problem.
* Experimental results: Look at the awesome results our solution provides. (Not always applicable depending on the paper.)
* Future work: Here's some ideas we haven't worked out fully -- they may appear in future papers but we're putting them here so we can claim to have published them first if someone else writes a paper about them before we do.
* Conclusions: Everything in the Introduction, except written in the past tense.
* References: Everything your potential referees have written which might conceivably be relevant.
Note that you should still "cite relevant work in passing".
Basically, if you put a huge discussion of related work at the beginning you'll either make your reader feel tired or stupid or both.
I believe the updated link would be http://http://www.cs.cmu.edu/~mleone/how-to.html
On the other hand, a paper that is 80% typewriter font (or 80% mathematics) is a paper for putting down and leaving alone.
o_O