I’ve always set up a custom keyboard for exactly that! () on their own keys, [] on shift and {} above 0 and 9. It always struck me as the most natural alignment for prose and programming.
Thankfully between Ukelele [0] and MSKLC [1] it’s pleasantly simple to do
And if anyone wants to go really custom, it's worth checking out the QMK firmware supported by many mechanical keyboards. Aside from the level of customisation made possible by QMK, another benefit is that everything lives on the keyboard - no need to install keyboard profiles on each machine you might connect the keyboard to.