I hadn't picked up a soldering iron since high school (which was a few decades plus ago) when I got the pi, but like you I have a software background.
Attaching devices that use the I2C or SPI bus isn't that complicated and usually explained step 1, step 2, step 3, because that's really all there is to it. You don't have to understand what the individual lines are for in the same sense that you don't need to understand the wires inside a USB cable to attach and use such devices. In fact, you don't even need to understand that to write USB device drivers -- you do need to learn about the USB protocol, however.
If you are none-the-less interested in understanding them, it is probably much easier if you understand the protocol and make some use of it a bit first anyway. If you don't understand the USB protocol, an explanation of the wires inside the cable is going to be gibberish.
If you want an explanation of the meaning behind how a particular device is attached, feel free to ask about that.
Because of interfaces offered by the kernel and various (pi specific) third party libraries (such as wiringPi, pigpio, etc.), you can write userspace drivers/applications for I2C, SPI, and other devices. As with USB, this requires you understand something about the bus protocol, starting with whatever API you're using.
I found far and away the most complicated part was translating the information in IC manufacturer data sheets into code. Very useful here is if you can find an example/reference implementation in a language you can read.
If you want to do things with individual electrical components (lights, buttons, resistors, etc) via the GPIOs, just jump in, but cautiously since you can damage or destroy the pi by doing the wrong thing. Find a tutorial explaining something simple, work through it, and try to understand the role of each component. Electricity can be confusing, but it is not magic. I was very perplexed by the role of the resistor in a pull-up circuit (which is about as simple as you can get), mostly because of the way the terminology is.
What bare minimum knowledge should I know, before working with hardware on the Raspberry Pi?
Just being reasonably sane, literate, and having an adult level of patience should be fine.