I have to build stuff for a living. My material is software rather than clay, or glass, or paper, or brick.
As such, I have my “toolbox” of things that I use to build stuff, so I decided to write down what’s in it!
Building very small things
I tend to use shell utilities and small programs for tasks like munging data from a CSV, or JSON, or a web endpoint.
My goal is composing a small pipeline of operations to take a bunch of things and do some stuff with them. Things like
- extracting repositories from Terraform state JSON and querying their repos
- finding process ids matching a criteria and terminating the corresponding process.
- grabbing the logs from a Kubernetes pod id and parsing some data out
My most-used utilities are
yq - often these are chained together with pipes (
|) or wrapped in dedicated shell scripts.
Building small-to-medium things
My go-to tool for things “more complex than shell, but not full applications” is Python.
I would say I know enough Python to be dangerous, and I’m happy contributing to existing large projects. Democracy Club has a few decently-sized Django applications which I’ve made small changes to, but I’ve never built one out myself.
If I want to do something moderately complex with a bit of data then Python’s in-built libraries are pretty darn powerful.
I’m a fan of building small, well-defined libraries (I wrote about this in a prior NaBloPoMo post) and integrating these. In general, I’m in favour of composing libraries rather than doing lots of stuff in situ.
Building medium-to-large things
My strongest language is Java, and I’ll happily whip up an application using modern idioms and libraries.
That’s a bit of a lie - at my core, I’m a very lazy person and the best work is no work at all. If we can deliver user value without building out an application and stack, then that’s one of the best outcomes.
I would call myself fairly well practiced at Test-Driven Development in Java. There’s definitely improvements I can make, and there are days where I just can’t model the problem well in my head.
I’m exploring the value of Test-Commit-Revert in my personal projects but I don’t think it works for “normal” projects unless you spend a significant amount of time writing commit messages.
IntelliJ IDEA is my development environment of choice, which was a switch from Eclipse almost 6 years ago. I chose to spend time learning keyboard shortcuts for my most common refactoring operations and they were worth every penny … uh, minute.
November is National Blog Posting Month, or NaBloPoMo. I’ll be endeavouring to write one blog post per day in the month of November 2019 - some short and sweet, others long and boring.