Programming is not merely an engineering discipline. It is about writing for machines. It is about writing for humans too.
A software engineer should put the human first, then the machine.
Human first, meaning, with the stakeholders in mind. It doesn’t matter how well engineered a program is if it is unreadable, or worse, worthless.
A good program is like a good blog: modular, atomic, and simple. Like in any good writing the key is simplicity. If you need fancy words to sound impressive, your writings are probably lacking. Similarly, using cryptic lines of code won’t impress anyone. Readability is way more important. Great code is self-explanatory.
When I read great software documentation, I feel more eager to learn and use the given technology. Software without documentation is bound to be maintained by one or by none.
Programs are like pieces of art as well: they are fundamentally useless. It doesn’t mean they have to be worthless. There are few worthless apps. A programmer has a duty to solve a problem, to make the users feel emotions. Positive ones preferably.
To get good at writing you need constant practice and iterate over what you produce. Programming is comparable.
Finally, what is a programming language? It is a static bag of words, a vocabulary of its own. We can view programming as a writing genre.