Artist vs. Painter - my analogy
I got to thinking about something today while working on some code. I consider myself to be a pretty good programmer. My skills vary depending on the programming language, but I definitely know how to write solid code that does what it needs to do. I admit, however, that I’m not someone that knows all of the intricacies of the programmer language. Take C#, for example, I can write a program that works great using C# and find the language powerful and easy to use. Even so, I probably only know about 50% of the syntax and features of the language. Things like "generics" and "delegates" are only known to be at the most basic level. If I had to create or use one I’d need to pull out a reference manual for some help.
So what does this have to do with an Artist and a Painter? Allow me to explain. Imagine you want to get your house painted so you went out and asked people for bids. One of the bids you got was from a person who considered himself an "artist" as opposed to just a painter. His bid to paint your house was rather high but guaranteed you would have the more perfectly painted house in the city. He would make sure all of the brush strokes were in the same direction, he’d use the right paint brush (he as 50 in total) for each part of the house, and so on. In addition to the artist’s bid you get a bid from a local painter that paints houses in his spare time during the summer. His bid is much lower than the artist’s bid. He tells you he’ll get the house painted quickly and with the color you want. His paint will protect your house just as well as the artist’s. From the street you’ll never be able to tell the difference between his paint job and the artist’s. If you look real close, however, you’ll see the brush strokes and maybe an occasional drip, but nothing bad that hinders the performance of the paint.
The question is, which bid do you take and why? If it was my house I’d go with the lower bid of the painter. I don’t need the paint to be perfect, but I do want it to look good and serve the purpose of protecting my house from the elements.
I think this can be applied so software development. Some programmer’s consider themselves to be "artists" and work very hard to create "perfect code". The will iterate on the design and develop until they can achieve the desired function in the least amount of code or the most elegant/sophisticated manner. Is it really worth it though? How much time and energy do they put into it for little extra value? Also, will anyone else be able to decipher the code later when it needs to be supported or changed? Sometimes I think programmer’s lose sight of what is important. I’m not advocating writing spaghetti code or coding without standards; but I do think a programmer should focus on meeting the design goal as quickly as possible instead of wasting time trying to refactor the design and code over and over again.
