The art and science of designing and building, with economy and elegance, applications, objects, frameworks, and other information systems, so that they are correct, reliable, extensible, reusable, secure, efficient, easy to maintain and to use.