Uses

Over the years every developer ends up accruing a plethora of tools and apps that make their life easier. This is a non-exhaustive list of the hardware and software I use on a regular basis.

Hardware

MacBook Pro, M1 Max

I probably should think about upgrading soon, but the M1 Max still feels eminently capable for the type of workloads I use it for. I love the enormous trackpad and display the MacBook Pro offers, and I timed my purchase luckily to avoid the divisive touch bar. I'd really be lost without it (I also regularly use Parallels, mentioned below, which means it doubles/triples as my Windows and Linux box).

Apple Magic Trackpad

For when I'm working using my monitor, the trackpad is invaluable to give you all the gestures and controls you get used to when using the MacBook as a laptop. I occasionally miss having a proper mouse when I'm trying to do some kind of select/drag operation, but for the most part it's great.

Apple Magic Keyboard

I keep meaning to switch to a proper ergonomic keyboard, but I still can't tear myself away from the beautiful Magic Keyboard. I love the short travel time on the keys (not for everyone I know), and having access to Touch ID is also something I worry I now couldn't live without 😅.

Dell P2715Q Monitor

This monitor is now getting on a bit, but it is still one of the nicest displays I've used. The resolution is the best thing about it (equivalent to any MacBook high DPI display) which makes writing/reading text of any kind a pleasure.

Razer Book, Intel Iris

I do most of my development using a MacBook, but for when I need a native Windows machine I fallback on the Razer Book. It's a bit dinkier than the MacBook, but it looks super sleek and packs a punch. It's a little less ostentatious than other Razer laptops too which I now appreciate in my older age.

Software

macOS

For all its flaws, I do enjoy working with macOS. Over the years I've gravitated more and more to the terminal, but there are still some nice features I use fairly regularly (the built-in screen recording offered by QuickTime being one such example). There are three excellent apps that further improve macOS which I highly recommend.

  • Contexts is an incredibly useful tool for switching between running applications. It's like an enhanced ⌘+Tab, with features like being able to switch between different instances of the same application (this is particularly useful when having multiple Visual Studio Code workspaces open for example).
  • Rectangle brings window snapping functionality from Windows to macOS. It's super useful to be able to snap one window to the left of your monitor and another to the right (there are a million more snap options too) without needing to manually resize them. I must use it hundreds of times a day, it's great.
  • Middle adds middle click support to macOS. This can come in very useful when working with cross-platform apps that map behaviours to the middle mouse button.

The following are some awesome macOS specific apps that I use on a regular basis.

  • Deckset is the best way to create presentations. It uses markdown to build your slides which means all your content is in plain text. It's my go-to software for creating presentations these days.
  • Ghostty is a blazingly fast terminal emulator available on macOS and Linux.
  • Parallels provides a way to run Windows easily from macOS. It has a ton of cool features too like being able to share files easily between OSes. It was a game changer for me after fighting with Boot Camp for many years.

Windows 11

I came from Windows, and got my start with computers using it, so it will always have a warm, fuzzy place in my heart. I think Windows 11 is pretty solid these days, though there's a few tools I always install when setting up a new Windows box.

  • Everything is a ridiculously useful and insanely fast file searching tool on Windows. It blows the default search available in Windows out of the water. I'm sad there isn't an equivalent of the same calibre on macOS, but I mostly get by there with command line utilities instead.
  • Cmder is the terminal I wish Windows always had. It makes working in the terminal fun on Windows, and I honestly can't recommend it highly enough (especially the Clink integration). It also integrates really nicely with the new Windows Terminal, so you can get the best of both worlds.

Cross-platform

Below is a list of general cross-platform software I use regularly and rate very highly.

  • Obsidian is an excellent tool for helping organize notes/todos/research and more.
  • Beyond Compare is still my favourite diff tool. Its 3-way merge feature is excellent and BC5 just added dark mode which made my year.
  • Flux gently adjusts the color palette of your display based on the time of day, so it's warm (less blue light) in the evening and normal during the day. It takes a bit of getting used to, but once you adjust you won't believe what a screen looks like without it.
  • massCode is a small snippet manager that's beautifully designed and simple to use. I have more Git commands stored using it than I'd care to admit.
  • Visual Studio Code has the likes of Cursor, Windsurf and Zed to compete with now (and Neovim of course), but I still keep gravitating back to it and continue to use it as my main editor. The C/C++ and CMake extensions are both great, and the sheer number of extensions available to enhance the editor is crazy.

Terminal applications

I was a latecomer to the terminal (having spent most of my early days on Windows) but I now adore it. Below are a suite of tools that I use multiple times a day and think are truly awesome.

  • ripgrep (rg) is a blazingly fast text search tool. It is ridiculously useful when hunting for an occurrence of a string or pattern in your project. It respects your .gitignore file by default and comes with a plethora of helpful features (the --context option that shows surrounding lines can be particular useful).
  • fd is another extremely fast search tool, only this time for files instead of text. I use it all the time when I'm hunting for output files that might have ended up somewhere I don't expect (or remember).
  • bat is a modern alternative to cat and integrates beautifully with fzf mentioned below to show file previews while searching. You get a pager by default and the syntax highlighting is great.
  • fzf is a fuzzy finder which can be used for files as well as any kind of list, such as git commits or command history.
  • sd is a modern alternative to sed (find and replace). It uses standard regex and is a lot easier to work with than sed.
  • Jujutsu (jj) is a new distributed version control system (DVCS) being developed/funded by Google. As of right now it uses Git as the backend, but has a different take on how it tracks changes (called revsets). I've been using it for a while and have been really enjoying it, it's well worth taking a look at to see how it compares to Git.
  • CMake, while not technically only a terminal app, is my go-to build system for C and C++ (it also now supports C# and Swift which is pretty cool). As an aside I also wrote a book about CMake.

Libraries/Frameworks

C/C++ libraries

Below is a list of C/C++ libraries I've found incredibly helpful and have enjoyed using. I'll often pull a good selection of these libraries into any new C++ project I'm starting.

  • SDL (Simple DirectMedia Layer) is a cross-platform development library written in C. It provides windowing support and access to input, audio, and graphics hardware. It's a fantastic library used by a whole host of games, and the recently released SDL 3 has a ton of new features and improvements.
  • Dear ImGui is a ridiculously good immediate mode UI library, perfect for games and tools. The API is a delight to use, and I wound up using it extensively with various hobby projects including the Wood Pasture Tool and in my CMake book.
  • bgfx is a flexible, cross-platform rendering library that works across Windows, macOS and Linux (as well as a number of other platforms, including consoles). I've used it in several projects and have a simple starter project available to help new users get bootstrapped with the library (as well as SDL and Dear ImGui mentioned above).
  • EasyIterator is a small library with a some nice utility functions for improving iteration. My favourite feature is the ability to produce an index using a range based for loop using easy_iterator::enumerate (you can use a namespace alias such as ei to replace easy_iterator for terseness).
  • flatbuffers is an incredibly fast serialization library. It provides direct access to serialized data without needing to parse/unpack it first.
  • JSON for Modern C++ is a really nice JSON parsing library for C++. It has a simple and friendly API and a ton of helpful features.
  • fmt provides a modern alternative to printf or iostream in C++, and formed the basis of C++ 20's std::format. It has a ton of useful features and the type safety is phenomenal. If you can't upgrade to C++ 20 it's well worth using.
  • GSL, the Guidelines Support Library, is a set of useful primitives to use when building C++ applications to make them safer and more robust. It builds on the advice recommended by the C++ Core Guidelines. Types such as span can be incredibly useful to adopt across a code base.
  • enkiTS is a C/C++ task scheduler to help developers handle both data and task level parallelism. It's a small library and makes adding parallelism to your code an awful lot simpler than using raw threads and locks.
  • expected and optional are both great utility types that implement std::optional and std::expected. They contain some improvements to the API to better handle chaining outcomes together (e.g. .and_then(...)).
  • stb is a collection of single file C/C++ libraries that are insanely useful and very popular among game programmers (stb_image.h in particular).
  • sokol is a collection of cross-platform libraries written in C. sokol_gfx.h in particular is very cool for doing 3D rendering.

JavaScript/TypeScript

Relative to C/C++ I'm newer to the JavaScript/TypeScript world, but I've already come across some libraries and frameworks I like and want to use more in future.

  • React, the first (I think) UI library to popularise the concept of the 'virtual DOM'. It's changed massively since its first inception and is still constantly evolving. It's the one JavaScript UI framework I have the most experience with and I'm still learning everything it can do.
  • Astro is a JavaScript web framework for building content-driven sites such as blogs and marketing sites. I used it to build this website and really like it.
  • Wasp is a full-stack web framework in the mold of Ruby on Rails. I haven't played with it much yet, but it looks really promising and I'm hoping to learn more about it soon.
Up arrow