A PhD Examined: Technical Aspects
Software Tools, Productivity Workflows and Academic Articles
This article will cover the technical tools and approaches that I gradually discovered worked best for me. A lot of these tools will be more relevant to someone doing a STEM degree but many are probably essential for anyone doing knowledge work.
A couple of disclaimers beforehand:
- I did my PhD before the age of GenAI so you will not find anything about language models and prompt engineering in this article.
- I will name and link to many software applications in this article. I have not been endorsed by any of the companies behind these applications nor am I endorsing that you use any particular one of them. They are there as illustrative examples only.
Software
To begin with, there are several categories of software that I found to be helpful for wrangling the technical complexities of a PhD. For each such category, I’ll mention some of the more famous examples that I have used or seen used or recommended by others.
Revision Control System
If you come from a programming or computer science background, you’ll probably know what a revision control system is and are likely using one already. If you don’t fall into that group, a revision control system is a software that keeps tracks of changes to your files and allows you to revert to past versions of your file’s history.
Such software is used by programmers to keep track of different versions of their software and to help collaboration on large projects while ensuring that everybody’s work gets merged into the final product correctly. Why would an electrical engineer (or generally a non-programmer) need that? The thing is, a revision control system is really good at tracking changes to files, whatever their content. I have used such a system to keep track of changes to my homework assignments, my article drafts, and even things like printed circuit board (PCB) designs. It helped me work on fledgling ideas in a safe environment, knowing that I can always revert my work to a “known-good” state.
My revision control system also served as a nice log of my work history. You see, the system I used didn’t track my work automatically. I had to “commit” my changes for it to save the current state of my work and create a point in time I can return to. I eventually got into the habit of creating such a restore point at the end of every day. So I was able to see which files I worked on each day and look back on the state of my work that day to retrieve an old idea I was working on at the time.
So what apps are out there in this category? Most cloud storage solutions (Dropbox, One Drive, Google Drive, etc…) already implement such a system. Here’s an example from my own Google Drive:
There are also dedicated revision control systems used by programming professionals examples include (the one I used, and the basis for the famous software-hosting platform), (a.k.a svn), and . These programs track files on your local machine rather than on a cloud service.
Each type of system (cloud storage vs. local) has its pros and cons. Cloud storage systems commit changes to your file far more frequently than the manual commits you create on a local system (although is a project to mimic that in git). On the flip side, they tend to keep a history of your files for only a set number of days. Local solutions will keep indefinite history of all your committed changes but will need you to manually commit the changes and they typically grow in size quickly (the more history you want to save, the bigger the folder sizes get).
A nice side effect of using a local revision management system was that it allowed me to make backups much more easily. Since these systems are built with collaboration in mind, they allow you to “sync” two different versions of your folder (think 2 software engineers trying to merge their work on the same project). This meant that I was able to keep 2 different copies of my PhD work on two separate machines and keep the copies in sync every day without worrying about which files needed copying where. Near the end of my PhD program, I had 3 redundant copies of my work files: one on my personal laptop, one on my workstation at the university and an encrypted copy uploaded to my Google Drive. This may sound like overkill but it meant I didn’t have to worry about a stolen laptop or a fried hard drive setting my work back.
Reference Manager
It will probably not come as a surprise to you that doing academic research means reading a lot of articles and books. The mistake I made was thinking I could keep track of the content of these articles in my head so I can refer to what I needed weeks, months or years later. In retrospect, it seems pretty obvious that this approach was doomed to fail.
Reference management software is there to serve that need. It stores all reference material in a database along with metadata (think article author, year of publication, etc…) as well as any personal notes on the article. Not only can you leverage the database to search for articles quickly, but you can also use the reference manager to insert properly-formatted citations to any of these references when you’re writing your own article.
This is a tool that I didn’t make use of until very late in my program but it’s one of those things that, once you start using it, you wonder how you were able to work without it. It really came in handy when I was writing a review paper and had to read a very large number of papers and keep track of the ideas in them.
Example reference managers are (not free but your university may already be paying for you to use it), , and (both free). As for myself, I used embedded in the Emacs text editor that I was using to write my article.
Personal Knowledge Manager
This is a tool I knew right from the start that I needed. It just took me a lot of trial and error with many different solutions until I built a system I was comfortable with.
Like any kind of knowledge work, grad school requires you to keep track of a lot of information, not all of it technical. Relying on your memory for this task is inefficient and unfair to you and your brain. Personal knowledge management (PKM) systems act as repositories of the knowledge that you accumulate over the years. In my case, for example, I still use the system I built during my PhD to this day. I have also built a similar system at work to keep track of work-related facts.
I have stored a very diverse set of facts in my PKM over the years for easy access and retrieval when needed. Some examples:
- Notes about projects I worked on in my PhD (lab notebook)
- Information about routine paperwork needed for travel or purchasing equipment through the university.
- Useful code snippets I have come across
- Fixes to weird recurring Linux bugs I encountered (helpful when installing a new system)
- Personal information (e.g. my shirt size, the instruction manuals for kitchen appliances, care and maintenance routines for parts of my home,…)
- Notes on things I’m learning
As you can see, the idea is to store a big bulk (ideally all) of your
knowledge in a trusted system for easy retrieval. It took me a while
to find a comfortable system and I have used various apps over the
years (all free):
- (complicated to set up but full of nice features)
- (really easy to use and full of great features with an elegant interface)
- (wiki plugin for the vim text editor)
- (an Emacs implementation of , what I currently use)
There are also a lot of commercial apps in this space. The ones I have come across are , , and (this one is free). The only piece of wisdom my experience with these apps has given me is that you shouldn’t try too many apps over time. It’s better to try a few of the ones you’re interested in upfront and then pick one and stick with it. It’s not very easy to migrate a ton of your notes to a new system, especially after you’ve created a lot of notes over time.
Publishing and Typesetting
When writing this article, I planned on not recommending specific software apps but rather showing many different examples it each category. For publishing and typesetting, I can’t avoid discussing a specific software. When it comes to writing publication-quality STEM articles, is the de facto standard. This is something I knew even before starting grad school. I was fortunate to start my PhD program with considerable LaTeX experience behind me but there’s a vast supply of guides out there if you’re planning to learn it.
There’s also a great online platform (paid, but likely already paid for by your university) for collaborative LaTeX writing called . Overleaf comes with its own set of beginner tutorials and helpful articles on using LaTeX.
Another very useful piece of free software for publishing (yes, I love free and open-source software!) is . It can convert between so many text formats (including Markdown, LaTeX and Microsoft Word). You can use this tool to write your documents in Markdown (a much friendlier format than LaTeX) and have the tool convert it to LaTeX for you. This tool is not a replacement for LaTeX. I have made heavy use of it since I found it but if you need to write a highly customized document, writing in pure LaTex is still a must.
Scripting Language
My first brush with programming languages was in my second year of college. Even though I loved the concepts I was taught, I found the language we used (C/C++) to be difficult and unwieldy. I saw programming as this activity you planned for big projects and had to spend months on.
A few years later, on a summer internship, I first came into contact with scripting languages. These are much lighter and easier to program in and can be used to build working programs much more quickly. Ever since then I’ve been steadily using one scripting language or another to automate various tedious, repetitive tasks. Programming turned from this big structured thing to an almost daily activity I reveled in and used to improve my productivity.
I contend that regardless of one’s major, learning an easy scripting language is a must for automating tasks and managing the complex responsibilities of grad school. There are a lot of scripting languages that can be used for such purposes. Most famously, there’s but also , , and . I have used each of these languages in the past for different purposes and eventually settled on Python. Python has helped me automate all kinds of tasks in my personal and professional lives and is quite user-friendly. Moreover, because Python is so popular, a lot of online services and platforms have Python libraries that allow you to interact with them from within your program.
Note-Taking Software
One of the habits that I developed later in my program is to take notes on everything. I kept a log of my daily research work, a log of any experiments I tried in the lab, notes on articles I read,etc… I can’t overstate how helpful this has been and will expand on it in a later article. For now, my focus is on software. The useful note-taking apps in this category are basically the same as the PKM software I mentioned above, and I use the same app for taking notes that I use for PKM.
The other, more obvious form of note taking in grad school was taking notes on lectures. I quickly arrived at a nice setup that I used throughout my grad program. I was fortunate enough to own an Android tablet with a nice stylus and I used a stylus-compatible app called LectureNotes (now defunct). This app allowed me to import lecture slides into my notes and take notes with the stylus directly on the slides. This was a much better setup than paper notes because it meant that my notes were backed up to the cloud and I still got the cognitive of writing instead of typing.
Email Client
Back in my master’s program, somebody sent me a referral link to Google+ (Google’s abandoned attempt at a social network) that I clicked out of curiosity. When it asked me for age verification, I decided I wasn’t curious enough to put in the work required for signing up for it. This was the beginning of a nightmare. Google had decided that, since I backed out of verifying my age, that I was not of legal age to be using their services and refused to grant me access to my e-mail account until I could prove my age to them.
This was a disaster. All of my correspondence with professors, other students, and universities I was applying to was on there. Losing access to that account would have set my work back, perhaps irreversibly. I had to fax Google a copy of my passport before I could regain access to that account. Ever since then, I decided that I needed to keep a local copy of my email in the future. I needed an e-mail client for that.
The most obvious example of such an app is Microsoft Outlook, but it is not free. There are also free e-mail clients. Back in my PhD program, I used Mozilla’s for a long time and it was great (and looks even slicker now than when I used it). Nowadays, I prefer a more low-tech solution. I use to download my e-mail, to tag and index it (for searching) and the Emacs client of notmuch for viewing my e-mail. is a nice alternative client for those who don’t use Emacs. I also use to send e-mail. This setup, albeit complicated, has the advantage of syncing my e-mail locally, letting me typeset beautiful HTML emails (with code syntax coloring) easily, and allowing me to capture e-mails into my task management software.
Task Manager
It should be obvious by now that you’ll have a lot of different tasks in different areas of your life in grad school. Effectively keeping track of all your tasks and responsibilities is a necessity. I know that different people approach this problem differently and some might even be averse to keeping a full list of tasks in one place, but use a combination of sticky notes and calendar alarms. In my case, I found that keeping all my tasks in one place helps me focus and realize how much I have left to do.
If this speaks to you, you’ll need some kind of way of keeping a list of your tasks. You can use a paper notebook for that. I started out listing tasks in my notebook. My early approach to task management was quite chaotic: I would write down a list of my most pressing tasks amid other notes in my notebook and had to remember to return to the page where I had noted down my tasks. I eventually abandoned pen-and-paper task management for this reason and also because I was too worried about losing my notebook. If you’re still a fan of the low-tech solution, all I can say is make sure to use a dedicated notebook for keeping a list of your tasks.
If you decide to use software, there’s a seemingly endless supply of apps in this category. Many are paid but offer a free version with reduced functionality and there are many free apps as well. Notion (mentioned above in the PKM and note-taking categories) also has a lot of task management features. I have a friend who uses for this purpose. I have a couple of friends who use to maintain simple task lists; I myself use it to capture voice notes from my phone and later on save them to my task manager. I use the free version of to keep shared lists with my wife. For all my other tasks, I manage them in the wonderful .
Workflows
As I started adding more and more structure to the way I managed the technical aspects of my work, I realized that there were many recurring tasks I needed to do. A very frequent task I encountered was producing figures and/or plots for homeworks, presentations, and articles. Other recurring tasks included taking a note in my PKM system, logging my day’s research work, backing up my data, submitting a homework,…
I started noticing that these recurring tasks required me to make and remake the same kinds of decisions every time. What format should I submit the homework in? What’s the best way to create a figure? How do I create multiple log-scale plots?
This is when I realized the value of creating workflows. Since these tasks required making the same decisions over and over, I would make all the decisions up-front and have a clearly-defined procedure for each type of task. The procedure would be either documented in my PKM system or saved as a template.
For example, many courses in my university required us to submit homework assignments with a cover page on which we had written and signed a statement of our school’s academic code of conduct. I created a template for this and added my digitized signature as an image to the template. Every time I wanted to start a new homework assignment, I would just fill in the template with the date and the subject name.
I produce all my figures and plots using LaTeX, which involves writing a lot of boilerplate code to set up the styling of the plots and the figures. I gathered up all such common code and made it into my own personalized LaTeX style. I even wrote some Python code that would take my input data and parameters then write the needed LaTeX code to generate plots based on the data. I no longer needed to worry about the mechanics of it: I just needed to provide a file of data, and input some parameters on what range to plot, and the type of plot to generate and my code would do the rest. The result was plots in a consistent, visually-pleasing style every time without me having to fret the esthetic details all over again.
I found that factoring out the recurring decisions and documenting them solidly in templates and Python scripts helped free up my mental capacity to focus on big-picture research issues. When I was no longer worried about the routine details, I was free to focus on more important things.
Reading Articles
Reading academic articles well is one of the skills that take a long time to develop. It’s an essential skill for research though. It’s also important for people who aren’t even in academia. Anyone who is naturally curious and wants to stay informed on a certain topic should learn to read academic articles critically and recognize potential flaws and red flags in the writing.
When I started out in grad school, I remember being given an article to read by my advisor and feeling completely overwhelmed because I understood very little of it. My solution was to reread it several times and look at some of the articles it cited and search the Internet for help with some topics it covered. Gradually, parts of the article that made no sense to me started becoming clearer. I could see connections and a common narrative thread tying the paper together and explaining the authors’ work. When I started reading my second article on the same topic, I was in a much better place and understood much more of it on the first go.
Over the years, I found the same pattern in all the topics for which I read articles. Each area of research develops its own vernacular and conventions, its own categories of relevant data and expected structure to the article. The more articles I read on a given topic, the better I was able to make sense of subsequent articles. More importantly, the more I read and worked on a given topic, the better equipped I was to read critically. I could zero in on limitations of the work that the authors may have been trying to gloss over or sugarcoat. I was aware of relevant research that authors may have failed to cite and this led me to question whether they were unaware of it or ignoring it because it didn’t fit their narrative.
By taking this patient approach, I was able to go from a starting point where it took me several days to decipher one article to critically reading and taking notes on about 80 papers in less than 3 months when I was writing a literature review article.
Writing Articles
Writing academic articles is one of the most significant activities a grad student (especially a PhD student) can do. Arguably, published research articles form the most important measurable output that is used to evaluate academic success. Whether or not that is fair is a discussion for another article but the point is, writing articles well is very important.
Much like reading articles, it took me a while to improve my technique for writing articles. The first step was to learn to read articles well. I started seeing patterns for how authors motivate their work and present it in a compelling way. I saw how the best articles didn’t shy away from discussing the limitations of their work but justified them and explained what can be done in the future to improve on what they had built.
Through talking to my more senior colleagues and my advisor (who had to read a lot of articles), I found out that a lot of people take a similar approach to reading a new article: they read the introduction, the conclusion, and the figures. Based on that quick look, they decide whether reading the article in detail was worth their time. This told me that the introductory section of the article had to sell the reader on it. It is the hardest and most important part to write of any article. The approach I took then was to write a quick outline of the article and what I wanted to cover, then I wrote out all the different sections I had outlined. Once I had the article written, I took considerable time to write and edit the introduction. I made sure my introduction told a compelling story about my work.
Another helpful approach that my advisor had come up with for our group was internal review. Once someone wrote a draft for an article that they were planning to submit for publication, they would send it to other students in the group who were knowledgeable on the topic of the article. The students would provide a critique of the article and suggest improvements to the writing and/or the work. This was very helpful to me and let me take advantage of the accumulated knowledge and experience of my more senior colleagues. Even if you end up working in a lab where this is not the custom, I highly encourage you to approach some of your trusted colleagues and friends and ask them for feedback on your writing.
Concluding Thoughts
Academic and knowledge work create a lot of complexity that needs to be managed efficiently. Having the right software tools and structured approach in place was definitely one of the keys to my success. The structure and tools I outlined here were not created overnight. There are even some parts of my workflow that I created during the last year of my program. I could have been more productive if I started out with all these things in place, but realizing I needed them and putting them was part of my education.
I invite you to consider creating such tools and structures for yourself as soon as possible and build on them continuously so you can improve the quality of your work and free your mind to focus on its actual content rather than on the mechanics of producing it.
Articles in This Series
- A PhD Examined: Introduction
- A PhD Examined: Social Aspects
- A PhD Examined: Technical Aspects
- A PhD Examined: Logistical Aspects
- A PhD Examined: Beyond Grad School
- A PhD Examined: Mental Health
- A PhD Examined: Being Intentional
- A PhD Examined: The Research Lab
- A PhD Examined: Advisor and Mentor Relationships
- A PhD Examined: Academia vs. Industry
- A PhD Examined: Changing Countries
- A PhD Examined: Social Life
- A PhD Examined: Digital Hygiene
- A PhD Examined: Reference Management Software
- A PhD Examined: Keeping a Personal Wiki
- A PhD Examined: LaTeX
- A PhD Examined: Scripting
- A PhD Examined: Time Tracking
- A PhD Examined: Workflows
- A PhD Examined: Class Projects
- A PhD Examined: Academic Articles
- A PhD Examined: Task Management
- A PhD Examined: Internships
- A PhD Examined: The Job Hunt
- A PhD Examined: Taking Good Habits to Work
- A PhD Examined: Conclusion