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 than using version control.
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 Anaconda (or its faster extension Mamba) as a package manager1, but increasingly use Poetry instead, especially for building packages. I’m excited to see where Rye goes. I will happily dip into R too from time to time. I’m interested in learning some Rust.
- 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. Microsoft Teams is anathema to productivity. Have you noticed how the message notifications appear over the text box that you’re supposed to write in? They’re not even trying. 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.
- 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 or wide-audience talk, 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’ll use beamer and LaTeX because I can automate the updating of the slides. I’ve flirted with Quarto for slides, but found it a bit fussy—however the ability to include executed code or even have live execution of code (via quarto pyodide) is invaluable in some situations.
- 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.