Today I came across a very interesting illusion:
If you see the above person turning clockwise, that means you are left-brain oriented and good at analytical endeavors (math, science, logic, etc)
If you see the above person turning counter-clockwise, that means you are right-brain oriented and good at artistical endeavors (arts, music, poetry, etc)
Thinking about being analytical and artistic, it suddenly becomes clear to me why good programmers are so rare. I think everyone will agree that computer programming is an analytical endeavor. However, in my opinion it also requires a lot of artistic thinking. Instead of using different colors and paints, computer programmers use basic programming expressions to design complex data structures, threading models, object interactions, etc.
A programmer is not much different from an Architect. While architects designs buildings, programmers design programs. Architects uses tools such as different columns, materials, forms, spacial concepts, cultural symbols, etc. Programmers users tools such as different languages, classes, data structures, algorithms, components, plugins, etc. Computer language to a programmer is like ArchiCAD/AutoCAD for an architect. The quality of the final product depends mostly on the design, instead of the tool.
At the end, we are all artists trying to design and create a final masterpiece by brining together different primitive design components.