... Programming has often been described as a craft, something that is learned informally through self-guided study, extensive practice, absorbed from working with others and examining finished works, and taught through mentorship. Which is held out as being somewhat opposed to it being an engineering discipline, which is roughly considered to be a combination of empirical science referring to the materials and a body of knowledge about practices. Engineering disciplines are characterized by extensive standardized formal study, conformance to best practices, and regulation.
The distinction appears applicable to many other professional practices as well.