First drafts are suck. They are a non living embodiment of suck. Revisions are just attempts to get rid of all of this suck.
Revision can lead to a gratifying result but your drains time and shuts down your brain. You are usually happy in the end but you don’t really feel anything. You are just not anxious or sad anymore. It’s hell writing and it’s hell not writing. The only tolerable state is having just written. Exhausting or not, it still beats working in a cubicle.
Books are not streams of thought that someone writes down. They begin as an idea and the author develops it. The frenzied writer scribbling fast enough to capture the words as they come is imaginary. I am pretty sure that Tolkien worked his ass off.
Software too is not a pile of algorithms that you implement. You must optimize it. The frenzied coder typing fast enough to capture logic as they come is imaginary. I am pretty sure that Linus Torvalds worked his ass off.
You have to accept that you don’t know as much as you think you do, or as much as you would like to. If you explore your subject deeply enough you’ll end up knowing a lot more than when you started. In the finished piece, your narrative voice might be confident, projecting the strength that assures readers that you’re taking them somewhere worthwhile and that you’re a knowledgeable, reliable guide. To get there, you have to stand before your subject and acknowledge your limits. I know that the bulk remains to be discovered. And so I revise.
I cannot read anything without opening a word document and writing my own version of it. I trim sentences, rearrange passages, rephrase. If that seems obsessive, it is. And I would like to keep it that way.
The same goes for my programming life. I cannot look at another coder’s code for a minute and not think of better variable names or better indentation. I change the while loop to a for loop. I split the program into three functions. But when I look at really ugly code, I usually murder the person four times in my head.
You could go on optimizing the code forever. But you have to stop at some point. You have to finish it. What qualifies as “finished” is highly subjective, a matter of taste that varies. You could go on revising forever.