|
I am an engineer. I have about 35 years of experience programming. I have read thousands of programs, designed, written or maintained hundreds. In all that time, with all that experience, I have come to the conclusion that good software is not a science. It is an art.
You certainly do need a good foundation in math, and you need to be able think in a structured manner. You also need to know the strengths and weaknesses of the languages you are using and the paradigms you will be leveraging (Objects, structures, layers, hierarchy, relational or any other abstraction of reality you will be bringing to bear on your problem). You also need to ability to think in the abstract, and often multiple layers of abstraction. but more than that, you need to be able see the beauty and the balance of the code you have created.
Well written code is a joy to maintain. You can navigate it easily, find your way to bits that need attention, and then do what needs to be done. A consistent programming standard and a naming convention that makes sense makes but easier to find and fix, and new features easier to seamlessly integrate. Just standing back and looking at the code, the shape of the indentations, can often point to potential problem areas where the code is not balanced and the shape isn't quite right. A consistent method allows you to zoom straight into the meat and bypass all the fluff.
It is easy to find programmers who have all the right technical skills. They can show countless examples of software they have written and that is in production somewhere or other. But if you scratch past the surface, you will find that the software has bugs (all software has bugs), and that the systems they have written are scheduled to be replaced within a few years of being introduced. Or that the cost of maintaining these systems rises exponentially with age, as various fixes and patches clutter the code into an unrecognizable mess of spaghetti. With a bit of searching, you can find people who have a love of the art of programming, but their productivity is so low that you can go bankrupt before the benefits of their art can be realized. To be sure, you do need to spend a significant amount of effort designing before programming, and then program with a great deal attention paid to the details, but there is a balance. Part of the art is being able to arrive at a workable solution in a timely manner. Perhaps not the perfect, or ultimate solution, but a solution that will resolve the issue at hand, and still be a work of art.
The truely hard part is finding the programmer that has that dream-like combination of passion for the art, the technical skills and the ability to follow a solution to completion in a timely manner. Is it just me, or does anyone else have the same problem with finding good talent? |