An artistic painter enjoys painting. That is a trait of artful making even when there is no fulfillment other than the act of painting in itself. The same could be said about problem-solving. Financial gratification could be part of the after-the-fact effects of painting or problem-solving but is not related at all with the act of painting or solving complex problems, nor as cause, reason or driver.
As time goes by, as observations and corroborations expand, computer programming —as a material object of philosophical study— looks more and more like a mix of artistic making and problem-solving activities, and less and less like an industrializable or automatable activity; there is a continuum of better tooling but that doesn’t take out a bit of the essence of programming.
But, once again, what is computer programming? Adopting and keeping a reflexive skepticism over what we do as computer programmers and searching for better answers to that question will allow us to enhance our fulfillment and also to evolve the groundwork for the next scientific revolution related to how humans make use of digital computation.
Programming entails communication, between humans and also between humans and digital computers (hence its relation with cybernetics, which is the theory or study of communication and control in living organisms or machines). For communication, we human beings make use of linguistic signs —the association of a concept with an acoustic image, as signified and signifier respectively— which are codified in a language, natural or artificial, as a medium of expression. For digital computing to take place we must, ultimately, articulate and codify our concepts in an artificial language, whether this is a programming language or the language of mathematics.
A frame for effective and precise communication of concepts as justified true beliefs has been the scientific idea of theory, which represents the best effort to explain and to predict something, and yet, it has a provisional character, and never an absolutist position. For computing purposes, a theory and its formulation are the outcome and the process of programming, respectively.
Programming as theory formulation occurs even if the mainstream programmer is not aware of that, perhaps this unawareness is part of the reason of crappy and brittle software. An artistic programmer, on the other hand, enjoys the act of programming, of solving problems, and frames her mind and his expression as a coherent system of general, constant and necessary relationships between concepts.
Happy thinking and programming