On A Professional Programmer by Philip Greenspun (mostly written in 2004 but still true today)
A professional programmer ought to be able to pick worthwhile problems to attack. Engineering is the art of building cost-effective solutions to problems that society regards as significant. A person who blindly does what he or she is told, without independently figuring out the context and significance of the problem, is not doing engineering. A professional programmer needs to be able to sit at a meeting with decision makers, prepared with substantial domain knowledge, and make significant contributions to the discussion. A professional programmer needs to be skilled at clean-sheet-of-paper designs.