This page contains a list of the tools I’m using for research or at home. Most of what I use regularly is free and open source software (FOSS), not because I’m ideological (you’ll see some paid apps too), but because FOSS often produces tools that are effective and convenient. As I work in the public sector, the software and hardware I use for policy work tends to be quite different and—frankly—far less productive for me personally as it involves locked-down, expensive enterprise IT that’s a long way behind the technological frontier. One of my missions is to unlock the productivity benefits of frontier tech (including FOSS) for the public sector!
Reading and writing
Document writing. I never got into Microsoft Word. I’ve had to use it for work a lot and I would struggle to find much good to say about it apart from live editing for multiple people—though the security function in one organisation I worked in asked everyone not to use this feature. I do the majority of my writing in pandoc-flavored Markdown (including this website and my blog). Some of the benefits of writing in markdown are that it’s intuitive, readable, flexible, future proof, interoperable with many other programmes, and it allows you to focus on content. If I need to get a Word document out of the end, I use pandoc to do it, with a line like
pandoc briefing.md -V geometry:margin=0.2in --standalone \ --bibliography references.bib --citeproc --csl=harvard.csl -o briefing.docx
applied to a file called “briefing.md”, a bibtex file of references (“references.bib”), and a citation style (here “harvard.csl”). Alternatively I’ll use markdown files and Quarto to generate a Word document—but note that this is using pandoc under the hood anyway. For more elaborate documents, like a book manuscript, I’ve created a couple of helper tools like this quarto template.
Text editor. I mostly use Microsoft’s Visual Studio Code (with the markdown all in one and markdown preview enhanced extensions) for writing markdown, but I’m aware that there are other options out there such as Ulysses, Marked, and Typora.
Note taking. I store general notes in Microsoft OneNote but for single projects that are bigger and more complex (perhaps with many interlocking themes) I now use the truly excellent Obsidian. Obsidian is a clean text markdown-based note-taking system that separates the data (markdown files) from the viewer/editor in a way that means you always stay in control of your own data. The downside Obsidian is that you do have to pay if you want a seamless experience across phone, tablet, and computer.
Writing papers. For papers, I tend to still use LaTeX. Although Visual Studio Code has a LaTeX editor that’s very good, I still use TeXshop. Co-authors sometimes want to use Overleaf, which I’m not a huge fan of, but does have some useful features and is more accessible.
Reading papers. I store all of my papers in Zotero, which is an open source endeavour. You can support them by paying for their storage. They have a good iPad app too.
Coding and analysis
- Version control. I use git (of course!) and GitHub. Occasionally co-authors ask to use Dropbox.
- Development environment. I use Visual Studio Code for almost all code, including Python and R. (I wrote a post about how to set it up for R here.) Some of the extensions I use are autoDocstring, colorize, Excel Viewer, git blame, git graph, git history, gitlens, indent-rainbow, and Jupyter. I also use Docker for development, including the excellent Visual Studio Code docker extensions.
- Cloud compute. When I need cloud capabilities, it depends. For anything light-ish that I just want to try in an isolated environment, I might just spin up a ready-built cloud environment using Github Codespaces but for more serious projects I usually go for Google Cloud, connecting via Visual Studio Code remote (instructions in this post.) I’m excited about how Google Cloud Workstations might make this all a bit easier for the wider analytical community.
- Package manager. To install things sensibly on a Mac, I use Homebrew. To make the terminal experience a bit nicer, I use ohmyzsh along with command line utilities exa as a replacement for
ls
and wget for downloads. - Programming language. My default is Python, for a whole host of reasons, with, of course, some SQL. I use the Anaconda distribution of Python and sometimes use Miniconda (or its faster extension Mamba) as a package manager1. I’m excited to see where uv goes.
- Hardware. I use a 2021 MacBook Pro with the M1 Max chip, which is inexplicably powerful.
1 I only use the ‘conda-forge’ channel.
Communication
- Email and Calendar. I use Spark (Mac) for emails, but don’t have a fancy calendar app and tend to use Apple’s default offering, Calendar. Fantastical looks interesting but because my schedule is mostly bound to a locked-down version of Outlook, a fancy calendar app isn’t all that helpful.
- Meetings. For calls, I tend to use Zoom if given a choice but gather.town is more fun for virtual social events.
- Communicating about analysis. Recently, I’ve ended up communicating about papers via WhatsApp, but this is unsatisfactory on multiple levels and if something more serious and sensible were needed I’d probably opt for slack or discord. Email tends to be the most common still though.
- Slide shows. My preference is to use written notes over slide decks whenever possible (you can read a bit more about why here), following the Amazon model. But you need a slide show now and again! If it’s leaning toward a general audience and it covers a wide range of topics, I’ll typically use Keynote. I know it isn’t cross-platform, but you can create something that looks good in it quickly and easily—and you can export every stage of builds to PDF too. For giving talks on research papers, I used to reach for beamer and LaTeX because I can automate the updating of the slides. But that had some limitations, eg not being able to programmatically update values that appear in text (only figures and tables). So I now use Quarto for slides, for which figures, tables, and even the text can be programmatically generated. It is a bit fussy but the ability to include executed code or even potentially have live execution of code (via quarto pyodide) is invaluable.
- Website. I use Quarto and Github pages, a powerful combination. For the website code, I’m indebted to Andrew Heiss for making the code for his website available.
Misc
- For graphics, I normally go for matplotlib, which is so much more powerful than most people realise. All of the graphics in my book The Star Builders were created using matplotlib. If I need a manual programme for graphics, I normally use Inkscape, which is much better on Mac than it once was.
- I keep track of tasks with the excellent Things (Mac).
- For timing how long I spend on different tasks or projects, I use a combination of Timery on top of Toggl.