Logical Versus Creative
In Betty Edwards' classic book Drawing on the Right Side of the Brain, she presents the idea that the human brain is able to operate in two different modes: logical or creative. While the title of the book suggests that the left and right hemispheres are logical and creative respectively, she does mention that this probably isn't the case and that both sides of the brain share equal responsibility in this regard.
What's important is not where these functions lie in the brain, but that the brain can shift focus to a dominant mode of operation for a specific task. The logical mode will focus on tasks of analysis, language, and linear thinking while the creative mode focuses on intuition, visuals, and spatial relation.
When explaining programming to someone, it often comes across as a very technical, logic-oriented, and analytical skill. In other words, much more logical than creative. I believe the opposite to be true. The programming language itself is the tool that is very logic-based, but how the programmer uses the tool to reach the end goal is a very creative process.
To understand how programming can be a creative skill, consider comparing to another creative skill. My favorite analogy is to that of a painter.
A painter's tools consist of brushes, easels, watercolors, and oils. A programmer's tools consist of the language, the development environment, and even the keyboard. You can give these same tools to anyone, but the seasoned veterans will create a better product.
Both the painter and the programmer have the goal of a finished product. They have ways to plan and visualize the end result. Even when the product looks finished, some small tweaking here and there fixes up any little mistakes. Seldom does the finished work look exactly as imagined, since these are iterative processes that bring a concept into reality. Some things just need to be adjusted as the goal comes into focus.
Both the painter and the programmer will find times of struggle. Creative solutions become needed. Perhaps the painter is limited in color and they want certain areas to stand out. Perhaps the programmer needs to develop a unique memory model for an embedded device. Whatever the case, there is often some deep thought involved on how to continue. Creative thought is unavoidable.
Logical thought still plays a role, but it's minor in comparison. The painter and programmer understand that they must use the right tool for the desired outcome and take steps in a linear order. It's an analytical process that soon fades away once a decision is made.
Making a Masterpiece
Years of experience and acquired knowledge will yield better results in a shorter amount of time. This is a natural result of growing through practice.
An artist's mastery of their tool set will create unbelievable works. They have become knowledgeable in composition, color, line, and creating thought-provoking pieces that draw the eye. They become capable of brilliant masterpieces.
The programmer's mastery is not much different. Writing code to be fast, free of errors, reusable, and easily maintainable takes a tremendous amount of knowledge and skill. Their masterpieces are programs that run smoothly and work in harmony with the platform of choice. They do exactly what the end user wants and more.
You can easily identify a novice painter and programmer by the products they produce. The greatest tools in the world cannot replace the skill earned from years of applied creative effort.
Programming is just like any other artistic skill. It isn't the tools or the language that makes a good program, it's how the tools are used. If you're a programmer, don't believe the label of being an obsessively logical thinker. This clearly isn't the case. Every line of code you write requires thought of how to accomplish a goal, you're just using tools to reach that goal. This requires substantial creative thinking.