I am not a good programmer.
If I write in the mainstream, imperative, style, the code invariably results in a mire of utterly avoidable complexity, as I try – and naturally fail – to do the computer’s job for it. It is not the computer’s fault: it simply does what I tell it to. However, I am not good at the low-level details; I think at a much higher level of abstraction than the dumb computer is able to comprehend. I cannot reason at the computer’s level. I am not good at massaging that abstract thought into the lower-level (imperative) format that the computer requires.
Imperative languages are optimised for the computer: that is why they have always been fast, and resource-frugal. I am, alas, a human. I do not enjoy nor want to do computer-level thinking, I do not want to have to keep the irrelevant details of the computer in mind – I have my limits, and have been bitten too many times by being forced to pretend those limits do not exist, and try being a computer. Instead, I would like to reserve as much