UP | HOME

Software Development

I’ve been having fun this past year or so going deeper into software development tooling.

Here are the tools I’ve been spending the most time with, and the opinions I’ve developed.

Tools I love:

Emacs

I have a a whole page about emacs, but it deserves a bullet here.

I love being able to shape my editor into a glove that fits me and my idiosyncrasies. It’s so much better than shaping myself to fit an awkward tool. Getting good at emacs has made development a million times more fun, and this leads to more flow, and to more creativity.

Org-mode

Although I’m a professional data scientist, I don’t use jupyter notebooks, I use org babel in Emacs org mode!

This is great because it:

  • Enables reproducible science via version controlled text based notebooks
    • This also applies to devopsy work, not just research.
  • Enables literate programming that is integrated with org modes project management system.
  • Is part of the vast emacs ecosystem.
  • Is really aesthetic and fun, and just as extensible as the rest of emacs.

Nix

I do most of my personal development through a nixos vm running with UTM on my mac. I love being able to version my system configuration, and steal bits of config from friends.

I also use nix as my package manager for python environments at home. Sometimes requires terrible overlays but at least it’s hermetic, reproducible and aesthetic. ^^ It also integrates smoothly with eglot and pyright, which can be a headache, see my python project defaults.

Configuring nix also meshes well with LLMs, because you can tell it about the status of your configurations with text. :3

I like having these linux shenanigans live inside of a computer that’s stable, and that just works and interfaces as a first class citizen with the rest of the world.

Git

I love git so much.

I didn’t always love git, I used to be afraid of messing things up, but now I understand that it’s a tool that enables safe experimentation. It’s quite the opposite from my original feeling!

I changed by asking for help from more senior developers and getting a lot of it, and using git constantly because of Emac’s built in git-wrapper Magit. Magit was great since it meant I didn’t have to remember lots of commands, and the menu of options made my option space concrete in a way that is hard with command lines, but at the same time it didn’t hide git, like a lot of other UIs.

Did I mention emacs is great?

The book pro-git was also a great reference. Like a lot of people I was walking around with a the incorrect and confused model of commits as differences, and learning about how the key-value database stores snapshots (that are later compressed) clarified a lot.

LLMs

I wouldn’t have been able to make such rapid progress on stuff without LLMs to get me unstuck. They can be great tutors for learning new pieces of technology; I think they’re especially useful for learning new languages. I’ve also benefit from using them as style pointers.

I think they’re especially nice in the stage of mastery where you know that concepts can fit together in a certain way, but you don’t know the syntax; digging around for the syntax is purely wasted time vs just outlining the code and getting LLMs to fill it in.

I like this post by Nicholas Carlini for inspiration on ways to use LLMs. I think “body-doubling” with LLMs can an effective way to have more fun coding, and of course emacs makes it easy to have a smooth and extensible LLM companion.

Tests!

This is less of a tool, but I love test driven development – it makes for a fun feedback loop, and it’s comforting to be able to refactor with confidence.

Recently I’ve been experimenting with using org babel files as literate expect tests – I like that you get documentation and tests at the same time!

Text

The universal interface. :3

Opinions:

Safe to fail

A thing that tools I like have in common is that they’re safe to fail in, or they make it safe to fail.
I like to learn by experimenting with things.

  • Broke your nixos config? Just boot an earlier one. Plus it’s version controlled with git.
  • Unclear if something works? That’s what tests are for.

Fun

It’s good when tools are fun and create flow. When you’re engaged you’re at your best, so you should optimize for fun!

Recently I’ve been applying this to my mathematical studies as well!

Design or modify tools to fit yourself, don’t bend yourself to fit tools.

Being able to iterate towards a tool that fits you like a glove is one of the beauties of a system like emacs.

You can just get good at things!

Useful subskills:

  • Being able to humble yourself and learn from people who have more knowledge or better heuristics
  • Agency - you can just do things!
  • Willingness to practice; comfort failing repeatedly.

Author: Elle Najt

Email: LNAJT4@gmail.com

Created: 2024-10-06 Sun 13:58

Emacs 29.4 (Org mode 9.6.15)