The best performance improvement is the transition from the nonworking state to the working state. (John Ousterhout)
Writing down an argument formally can be a daunting task, especially if the argument is lengthy and is not modeled on an existing one in the literature. While every individual detail of the argument may be clear to the author, the overall structure of the argument may not be immediately obvious. In particular, it is often difficult to make the (important) decisions about the organisation of the argument, and selection of good notation, until a large part of the paper is already written, at which point any changes in the organisation or in the notation often become painful to implement. (Many times in the past, I have started to write a paper without devoting enough thought to the overall structure, and spent a lot of time establishing some lemmas which I thought were important, only to realise later that one did not actually need the lemma, thus wasting quite a lot of time.)
I found that the technique of rapid prototyping from software engineering is useful in ameliorating these difficulties. According to this technique, one does not write the paper in linear order, and one also refrains from the temptation of writing the easiest or most straightforward portions first. Instead, one writes the paper in the following order.
- First, one writes a bare-bones “skeleton” or “prototype” of the paper as quickly as possible; this prototype has the (approximate) statements of all the key lemmas, propositions, and theorems, as well as all key definitions, but all the proofs are omitted, or sketched in very informal “notes to self”. At this primary stage of the writing process, the priority is to get the “big picture” right – the logical organisation of the paper, and some semi-precise descriptions of each important proposition or piece of notation. The fuzzy nature of these descriptions will allow one to easily move parts of the argument around to improve this big picture.
- After the organisation is completed to one’s satisfaction, the second objective is to write down just enough of the proof so that one can make the statements of all the lemmas, propositions, theorems and definitions precise.
- Once this is done, the third objective is to carefully write the key portions of the argument, for instance deducing one key proposition from two previous key lemmas, to make sure that the structure actually works as expected.
- Finally, one fills in all the “routine” aspects of the paper, such as proofs of standard lemmas, or a quick application of the main theorem. Usually, by this stage, the remaining gaps in the paper are so disconnected that they can be filled out in basically whatever order one pleases. This is also a good time to write the introduction and similar motivational sections.
Any decisions which do not impact the big picture should be deferred until late in this process. For instance, if you have a small quantity which is probably going to equal or maybe
, but do not know exactly which it is yet, you could write “let
” for now, and use
as a placeholder for this quantity until you get to the point in the proof where you figure it out exactly what ??? should be, and which point you can edit a single line to complete the proof. (Contrast this with writing
in two dozen places in the proof, then discovering much later in the writing process that you have to go back and change
to
(and
to
, etc.) in those two dozen places. Even with modern search-and-replace tools, this can be an irritatingly time-consuming task.)
One nice feature of this approach is that it can be divided with a coauthor. For instance one author may write an informal sketch of the proof, with many details omitted, then the other coauthor may tweak the organisation and notation, and then fill in the details, and then the first author might then review the paper and add in some remarks and write the introduction. Many other permutations are possible; it depends very much on the nature of the collaboration.
While one is writing one part of the paper, one often gets some good ideas regarding what to do for another part of the paper; e.g. when writing down a lemma, one may have an idea for an example or remark which will illuminate that lemma. When that happens, I do not recommend ignoring that idea, nor do I recommend dropping what you are currently doing to fully flesh out that idea; instead, devote a minute to write down a “stub” for that idea in the relevant location of your paper (just enough to jog your memory when you return to that location), and then return to what you were doing before, so as not to break your concentration or momentum. That idea can then be safely forgotten about for the moment, and revisited at one’s leisure, at a more appropriate stage of the writing process.
The rapid prototyping strategy is often hard to adhere to perfectly, and I must admit that sometimes (especially for shorter papers) I take a very different approach, writing the “easy” and “fun” parts of the paper first (e.g. the introduction, or some simple lemmas), and try to use the momentum generated to then write the rest of the paper quickly. This tends to work well if one is very confident as to how the large-scale structure of the paper will be arranged, but I have regretted using this hastier approach when I found, halfway through the writing process, that a radically different organisation would have been much better.

7 comments
Comments feed for this article
17 July, 2008 at 6:29 pm
Rapid Prototype
Hey,
I am across your site looking for Rapid Prototyping info. I got some great writing tips instead.
Thanks
Ivan
7 August, 2008 at 10:38 am
On time management « What’s new
[...] 7 August, 2008 in non-technical, opinion by Terence Tao Prodded by several comments, I have finally decided to write up some my thoughts on time management here. I actually have been drafting something about this subject for a while, but I soon realised that my own experience with time management is still very much a work in progress (you should see my backlog of papers that need writing up) and I don’t yet have a coherent or definitive philosophy on this topic (other than my advice on writing papers, for instance my page on rapid prototyping). [...]
8 August, 2008 at 4:32 am
我如何安排时间(译自陶哲轩博客) « Liuxiaochuan’s Weblog
[...] 受到一些评论的鼓励,我最终决定在这里写一些关于如何安排时间的想法。其实,我怀有这个想法已经有一段时间了,可是就我自己的经验而言,这方面也还在做着探索(读者应该看看我等着写的论文排了多少!)而且很多想法未必成熟。(除了有一些经验写在advice on writing papers,比如page on rapid prototyping)而且,我的一些个人经验恐怕也不能对所有人通通适用,因为每个人都有不同的性格类型以及工作状态。欢迎大家把自己的想法啊,经验啊,或者建议在评论中写出来。(其实,即使我自己的经验,我有时候也不能严格的遵照,挺遗憾的。) [...]
11 August, 2008 at 12:09 pm
xinweiyu
A great post indeed! I would like to add some of my thoughts.
I recently found that a good way of “rapid prototyping” is to give a talk on the result before writing the paper. The talk slides then can serve as the “skeleton” of the paper. One good thing I feel about this strategy is that I was forced to focus on the “skeleton” since there is simply no place for details.
14 August, 2008 at 7:56 pm
On Time Management « What’s New
[...] or definitive philosophy on this topic (other than my advice on writing papers, for instance my page on rapid prototyping). Also, I can only talk about my own personal experiences, which probably do not generalise to all [...]
27 December, 2008 at 12:22 am
Tricks Wiki: Use basic examples to calibrate exponents « What’s new
[...] worked out already, but without precise details; in particular, I find it particularly useful when writing up a rapid prototype. When the time comes to write out the paper in full detail, then of course one should instead [...]
24 May, 2009 at 8:24 am
Ano
Dear Professor Tao,
I have finished my undergraduate thesis and as there was no originality in it, my way of working was: read/learn the thesis problem first and then write it all up. When I had finished the first stage of learning, I knew what to put in the thesis and thus could start with a sketch (everything pretty much taken on the top of my head) and then when this was done I would go on and fill in the details, where I would have to look in the books as one can not remember everything.
However, when it comes to PhD studies, there should be originality in it and I do not see how one would be able to build up the skeleton as one does not know where the path is leading, which theorems that will be included etc. So say the graduate studies last for four years. When should one start writing? Say that out of these 4 years, there is a part including reading graduate courses worth 1 year. So should I spend the first year completely reading courses (assuming one has the possibility to distribute the coursework during the 4 years as one wishes (I am not from the USA, so things here, I guess, does not work as they do there)) and the second year is spent on reading papers and stuff related to your PhD project etc? I guess I am asking for some advice on how one should spend the 4 years. I know there is no universal way that suits everyone but any ideas and suggestions are welcomed.
Thanks