Written: 2025-06-06
Updated: 2024-06-13

Duncan's Elements of Style

This page is an evolving collection of feedback, advice, and guidelines for writing academic papers in computer science and engineering. When I started mentoring students through writing their own research papers, I found that I could not find a place to point them for a specific, actionable lists of what to do and things not to do. There is lots of good general advice out there, but I find that having concrete examples and specific guidelines is much more helpful. It's a lot easier to imitate examples than it is to try to figure out through trial and error.

I have also found that many first papers share similar issues and I wanted to provide a resource that collects all of these issues in one place so that students can read through them upfront and avoid them in their own writing.

This list is largely inspired by the feedback and style guidelines I have received from my PhD advisor, Mykel Kochenderfer. He taught me how to write a good paper and drilled much of this advice into me over many iterations (and lots of patience). Now, when I write papers, I have a little Mykel sitting on my shoulder, saying "don't put punctionation between sentences and equations". This is my effort to write down all of this knowledge in one place so that others can have a little Mykel sitting on their shoulder too.

This style guide is opinionated. It is the style I prefer and try to apply in my own writing. It's certainly not the only way to write a good paper, but I do think it is a good way to write a good paper.

General Guidelines

It takes time to review a paper and that can't be done at the last minute. Be sure to notify your reviewer/editor/mentor when the deadline is and when you expect to get the draft to them. This helps them plan their time and ensures that you get the feedback in time to make the necessary changes.

Providing good, detailed, helpful review feedback is not easy. It takes time to read the paper, understand it, and provide useful feedback that helps the writer learn not just what to change, but why to change it. Especially for your first paper, should should expect to go through multiple rounds of reviews and revisions and plan accordingly to get the draft in with time for iteration. For first-papers, I recommend two weeks before submission to start the review. For subsequent papers one week is usually sufficient.

Be sure to present a full and complete draft of the paper for review. This means that all sections should be written, no placeholder figures used, and all references present. This allows the reviewer to provide feedback on the entire paper and helps them understand the context of the paper as a whole. Having partial sections, missing figures, tables, and data makes it difficult for the reviewer to provide meaningful feedback and can lead to confusion about what is incorrect versus what is incomplete. This wastes your reviewer's time and can lead to frustration on both sides. If you have to provide a partial draft, provide complete sections and clearly state what the incomplete sections are and where you expect the review to stop. Any partial sections should be fully complete.

Finally, while the review process might feel painful (it certainly was for me), it is something everyone goes through and if you're working with a good mentor their goal is to use it as a teaching process to help you improve your writing and how you communicate as a researcher. Good review feedback should be helping you through the process and figure out how to be an effective, independent writer. Good feedback describes what the problem is, what change to make, and provides examples of what improvement looks like. Bad feedback is like being told to "fetch a rock"—asking for changes without being told what, why, and what to look for. This ends up wasting a lot of time as you try to figure out better. If you're not getting good feedback chances are you're not working with a good mentor, but that's a different problem.

Writing Style

General Tips

  • Know the proper use of that and which

  • Don't have single subsections or subsubsections. If you have only one just make it part of the main section. If you have two or more, then you can break them out into subsections or subsubsections.

  • Section and subsection heading capitalization should be consistent. My preference is to capitalize the entire heading, e.g., "Introduction" or "Further Work".

  • Run a spell checker on the text. It should pass without any errors.

  • No open to dos, unfinished sections, or missing figures.

  • LaTeX source code is committed to a github repo.

    • It is good practice tag the submitted paper version with a git tag that matches the paper version number, e.g., v1.0, v1.1, etc. This allows you to easily find what version of the paper was submitted.

  • Avoid contractions in the text. Use "do not" instead of "don't", "cannot" instead of "can't", etc. This makes the text more formal and easier to read.

  • Avoid jargon and technical terms unless they are absolutely necessary. If you do need to use technical terms, be sure to define them clearly so that the reader can understand them. Even if they are common in your field, they may not be familiar to all readers.

Improving Writing Clarity

The biggest thing to improve the quality of a paper is to write clearly. This means using simple, direct language that is easy to understand. Often in academic writing, we want to sound smart and show off our knowledge. We've gone to a lot of work to understand something and we want to share everything we know. However, it's important to fight this desire as it leads to convoluted sentences and complex language that make it harder for the reader to understand the important ideas. Instead, focus on simple, clear, and precise language that conveys your ideas effectively.

A paper should tell a clear story, it doesn't need to tell everything you did or learned in your research journey. Take time before starting writing to think about the main message you want to convey and what the key points are that support that message. If you have evidence, knowledge, findings that are cool but don't support the main message, leave them out of the paper. You can always write a follow-up paper that explores those ideas in more detail. This will help you focus your writing and make it easier for the reader to follow your argument.

When I write papers, I usually write stories of "I did a thing"—telling a story about what the problem was, what you did to solve it, and what you found out. That's it. You don't need to use complex language or jargon to try to make your work seem more impactful or impressive. A paper either is or is not impactful, but that impact doesn't come from the language you use and using complex language can actually make it harder for the reader to understand your work, limiting its adoption and impact.

Specific Writing Guidelines

The following sections provide specific guidelines for improving the clarity and quality of your writing. These are not hard and fast rules, but rather suggestions that I find improve clarity.

Most of the time, when editing my own work, I will look for sentences that exhibit these issues then try to rewrite them them to address it.

Write Big to Small

When structuring a narrative, one mental model I like to use is "go big to small". This means over any span of text, you should start with the big picture and then drill down into the details. This provides your reader the context to understand the details and helps them follow your argument. This trick can be applied recursively—it applies to the entire paper, to each section, and even to each paragraph.

For example, in the abstract, you should start with the big picture of the problem area you are addressing, then drill down into the general challenge you are addressing, and finally describe the specific problem you are solving in the paper. The paper itself starts with and introduction that describes the big picture of the problem and provides relevant background information, then drills down into the specific problem you are solving, and finally describes your solution and results. Each section should follow this same pattern, starting with the big picture and then drilling down into the details.

Be Specific

Precision in academic writing requires eliminating vague language and replacing it with concrete, measurable terms. Avoid qualitative descriptors when quantitative data is available.

Replace vague quantifiers with specific numbers:

Instead of:

Many optimization algorithms converge slowly on this problem.

Write:

Gradient descent requires 847 iterations to achieve convergence, while the Adam optimizer converges in 23 iterations.

Eliminate imprecise adjectives and adverbs:

Instead of:

The algorithm performs significantly better than existing methods.

Write:

The algorithm reduces computation time by 34% compared to the current state-of-the-art method.

Replace demonstrative pronouns with specific nouns:

Instead of:

This shows that the approach is effective.

Write:

The 15% improvement in accuracy demonstrates that regularization is effective.

Use concrete examples rather than abstract concepts:

Instead of:

The framework can handle various types of data structures.

Write:

The framework processes sparse matrices, dense tensors, and graph adjacency lists with equal efficiency.

Use The Active Voice (Kill the Passive)

Active voice creates stronger, clearer sentences by making the subject perform the action directly. It eliminates ambiguity about who or what is responsible for the action and reduces word count.

Identify passive voice: Look for forms of "to be" (is, was, were) followed by a past participle, often with "by" phrases.

Passive voice examples to fix:

Instead of:

The algorithm was implemented by our team to solve the optimization problem.

Write:

We implemented the algorithm to solve the optimization problem.

Instead of:

Accuracy improvements were observed when regularization was applied.

Write:

Regularization improved accuracy by 12%.

Instead of:

The dataset was preprocessed using standard normalization techniques.

Write:

We preprocessed the dataset using z-score normalization.

Avoid Modals

Modal verbs (could, would, might, may, should, can) introduce uncertainty and weaken your claims. Academic writing should present findings with confidence while acknowledging limitations explicitly rather than through hedging language.

Modals often appear when authors are unsure about the strength of their claims or when they want to suggest possibilities without committing to them. However, this can undermine the authority of your writing and make it less persuasive. If you can't make a claim with confidence, think about whether should you be making the claim at all. Another technique is to refine the scope of your claim to something you can confidently assert.

Common modals to eliminate:

"Could" suggests uncertainty:

Instead of:

This approach could improve performance in distributed systems.

Write:

This approach improves performance in distributed systems by reducing network latency.

"Would" implies hypothetical scenarios:

Instead of:

The algorithm would benefit space mission operators.

Write:

The algorithm benefits latency-sensitive applications by reducing data transmission time.

"Might" and "may" express doubt:

Instead of:

The results might indicate a correlation between input size and execution time.

Write:

The results demonstrate a linear correlation (R² = 0.94) between input size and execution time.

"Should" makes recommendations without evidence:

Instead of:

Users should consider memory constraints when selecting batch sizes.

Write:

The batch size should be limited to a multiple of 2 that fits withing the available memory, leaving 10% headroom for other processes.

Acceptable modal usage: When discussing future work or acknowledging genuine uncertainty about outcomes:

Acceptable:

Future work could explore the algorithm's performance on quantum computing architectures.

Rework Fronted Adverbial Phrases

Fronted adverbial phrases (sentence-initial modifiers) create weak openings by delaying the main clause and putting it far away from the start. This can confuse readers and dilute the impact of your main point.

Instead of:

To evaluate the performance of the free selection case using our proposed algorithm, we compare the results against several baselines of selecting ground stations with MILP solvers from a set of fixed selection of sites.

Write:

We evaluate the performance of the free selection case using our proposed algorithm by comparing the results against several baselines that select ground stations with MILP solvers from a set of fixed sites.

Avoid Platitudes, Clichés, and Hyperbole

Academic writing should eliminate formulaic expressions and exaggerated claims that add no informational value. These phrases waste word count and make writing sound generic.

Common academic clichés to eliminate:

"State-of-the-art":

Instead of:

We achieve state-of-the-art performance on the benchmark dataset.

Write:

Our method achieves 96.3% accuracy, exceeding the previous best result of 94.1%.

"Novel" and "new":

Instead of:

We propose a novel algorithm for graph traversal.

Write:

We propose a depth-first search variant that reduces memory usage by 40%.

NOTE: Novel is acceptable when it is specifically used to highlight a new contribution that has not been previously published, but it should be used sparingly, generally only in the abstract or introduction, and the novelty should be confirmed.

"Comprehensive" and "extensive":

Instead of:

We conduct extensive experiments to validate our approach.

Write:

We evaluate our approach on 12 benchmark datasets with 10,000-100,000 samples each.

"Significant" without quantification:

Instead of:

The method shows significant improvements over existing approaches.

Write:

The method reduces error rates from 15.3% to 8.7%.

"Cutting-edge" and "groundbreaking":

Instead of:

This cutting-edge technique revolutionizes computer vision.

Write:

This technique reduces object detection latency from 45ms to 12ms on mobile devices.

Temporal platitudes:

Instead of:

In recent years, machine learning has become increasingly important.

Write:

Machine learning model deployment increased 67% between 2020 and 2024 across Fortune 500 companies.

Replace with concrete claims: Instead of making subjective evaluations, present objective measurements, comparisons, and specific evidence that allow readers to form their own conclusions about the significance of your work.

Paper Elements

Equations and Variables

No Punctuation Between Sentences and Equations:

No punctuation between the end of a sentence and an equation. This is because the equation is part of the sentence, and punctuation would break the flow. For example, instead of writing:

The algorithm is defined as follows:
\begin{equation}
    E = mc^2.
\end{equation}
This is a fundamental equation in physics.

You should write:

The energy-mass equivalence
\begin{equation}
    E = mc^2
\end{equation}
is a fundamental equation in physics.

No commas separating variables in inline equations:

When introducing variables or referring to them in the text don't use commas to instead make them a continuous part of the sentence. For example, instead of writing:

To express the ground station optimization problem as an IP, we consider a set of ground station providers, P\mathcal{P}. A provider is denoted by denoted by the variable pp. We consider the locations, ll , of the ground stations.

Write:

To express the ground station optimization problem as an IP, we consider a set of ground station providers P\mathcal{P}. We consider individual providers pp and locations ll of the ground stations.

Figures

Use consistent fonts

The font for all figures should match the font of the paper. This includes axes labels, legends, and any text within the figure itself.

If you're plotting in matplotlib you can use the following code to set the font family and size for all text in your figures:

import matplotlib.pyplot as plt
plt.rcParams.update({
    'font.family': 'serif',  # or 'sans-serif' depending on your paper font
    'font.size': 10,         # match the font size of your paper
})

Also consider using the SciencePlots package for matplotlib, which provides a set of pre-defined styles that match common academic journal styles. You can use it like this:

import matplotlib.pyplot as plt
import SciencePlots
plt.style.use('science')  # or 'ieee', 'nature', etc. depending on your paper style

No titles in figures Don't have titles in figures. The caption should be sufficient to label and describe the figure. Titles can be redundant and take up space that could be used for more important information.

Use proper figure environments

When writing figures, use the graphicx package to include images and the subcaption package for subfigures. This allows you to create figures with multiple subfigures that are properly labeled and referenced.

\usepackage{graphicx}
\usepackage{subcaption}

When including figures, ensure that they labeled so that they can be referenced in the text by including a \label command before the end of the figure environment. As a trick, I like to start the label with fig: to indicate that it is a figure label. Many text editors (Texifier, Overleaf, etc.) will automatically detect this and provide a dropdown to quickly reference the figure in the text.

\begin{figure}
    \centering
    \includegraphics[width=0.5\textwidth]{my-figure.png}
    \caption{This is my figure.}
    \label{fig:my-figure}
\end{figure}

Or for three subfigures:

\begin{figure}
    \centering
    \begin{subfigure}{0.3\textwidth}
        \includegraphics[width=\textwidth]{subfigure1.png}
        \caption{Subfigure 1}
        \label{fig:subfigure1}
    \end{subfigure}
    \begin{subfigure}{0.3\textwidth}
        \includegraphics[width=\textwidth]{subfigure2.png}
        \caption{Subfigure 2}
        \label{fig:subfigure2}
    \end{subfigure}
    \begin{subfigure}{0.3\textwidth}
        \includegraphics[width=\textwidth]{subfigure3.png}
        \caption{Subfigure 3}
        \label{fig:subfigure3}
    \end{subfigure}
    \caption{This is my figure with subfigures.}
    \label{fig:my-figure-with-subfigures}
\end{figure}

Use colorblind-friendly palettes and styles

When possible ensure that the figures are made accessible to colorblind readers. This can be done by using color palettes that are colorblind-friendly, such as the Color Universal Design (CUD). Also consider using other visual cues such as different line styles or markers in addition to color to convey differences in the data.

(Optional) Remove top and right borders of figures

Consider removing the top and right borders of figures. This can help the figure blend in with the text and make it look more professional. You can do this in matplotlib by setting the spines:

import matplotlib.pyplot as plt
ax = plt.gca()  # Get current axes
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

This isn't appropriate for all figures, but it can help make some figures look cleaner and more professional. Use your judgement to decide if it is appropriate for your figures.


All figures should be referenced in the text**

All figures that are present in the paper should be mentioned and referenced at least once in the text. This ensures that the figures are relevant to the content of the paper and helps the reader understand their significance.

Tables

Use the booktabs package for tables

When writing tables, use the booktabs package. This allows you to create professional-looking tables with proper spacing and alignment. Use \toprule, \midrule, and \bottomrule for horizontal lines in tables.

\usepackage{booktabs}

References

Ensure space before references

Ensure there is always a space before any references. That is don't do something like "... is awesome[3]". You want to use "... is awesome~\cite{paper}" in order to both add a space and prevent citations from falling on the next line.

REVIEW ALL REFERENCES

Google Scholar or zotero bibtex entries can give you a place to start but they are often not formatted correctly. ALWAYS check the formatting of your references against the style guide of the conference or journal you are submitting to. This is especially important for the capitalization of titles, which can vary between styles.

My preference is to have all titles capitalized, e.g., "A New Algorithm for Solving the Problem" instead of "A new algorithm for solving the problem". However, this is a matter of personal preference and you should follow the style guide of the conference or journal you are submitting to. Most importantly, pick one then be consistent in your formatting across all references.

No reference should contain the conference year or proceedings in the title. This is because the year and proceedings are already included in the citation, and having them in the title is redundant and takes up space. For example instead of writing:

"Proceedings of the 29th IEEE Aerospace Conference, 2013"

You should write:

"IEEE Aerospace Conference, 2013"

Use consistent reference formatting

Ensure that the formatting of all references is consistent. This includes the use of italics, capitalization, and punctuation. For example, if you are including volume and page numbers in your references, ensure that they are formatted consistently across all references or don't include them at all.

Generally you should simply follow the conference or journal style guide for formatting references.

Algorithms

Use line numbering in algorithms

All algorithms should use line numbering. This makes it easier to refer to specific lines in the algorithm and helps the reader follow the flow of the algorithm.

Avoid natural language in algorithms

Algorithms should be written in a formal way that does not use natural language. This means using a structured format with clear operations and functions.

Use correct symbols for assignment and equality

Know the difference between == and \gets. The == symbol is used to denote equality, while the \gets symbol is used to denote assignment. For example if you are setting the value of a variable, you should use \gets:

\begin{algorithm}
    \caption{My Algorithm}
    \begin{algorithmic}[1]
        \State $x \gets 0$ \Comment{Initialize x to 0}
        \For{$i = 1$ to $n$}
            \State $x \gets x + i$ \Comment{Add i to x}
        \EndFor
        \State \Return $x$ \Comment{Return the final value of x}
    \end{algorithmic}
\end{algorithm}

LaTeX Things

When referring to figures, tables, equations, algorithms, or sections. use the cleveref package. This allows you to refer to them in a more natural way, e.g., "as shown in \Cref{fig:my-figure}" instead of "as shown in Figure 1". This makes the paper more robust to changes in the ordering or placement of these elements, as cleveref will automatically update the references to match the current numbering.

References should be made with \Cref not \cref. The \Cref command capitalizes the first letter of the reference, which is how specific references should be formatted in the text.

To implement this use the following in your LaTeX preamble:

\usepackage{cleveref}

Then when implementing a section, figure, table, equation, or algorithm, use the \label command to label it. For example for labeling a section, you can do

\section{My Section}\label{sec:my-section}

or figures

\begin{figure}
    \centering
    \includegraphics[width=0.5\textwidth]{my-figure.png}
    \caption{This is my figure.}
    \label{fig:my-figure}
\end{figure}

or tables

\begin{table}
    \centering
    \begin{tabular}{ccc}
        \toprule
        Column 1 & Column 2 & Column 3 \\
        \midrule
        Data 1 & Data 2 & Data 3 \\
        Data 4 & Data 5 & Data 6 \\
        \bottomrule
    \end{tabular}
    \caption{This is my table.}
    \label{tab:my-table}
\end{table}

Then you can refer to it in the text using \Cref{sec:my-section}. This will automatically format the reference correctly based on the type of element (e.g., "Section 1", "Figure 1", etc.).

Other Resources

Here are some other resources that I have found helpful in developing my own academic writing style: