The professional programmer brings his or her full brain, experience and creativity to the job. When asked to develop a feature, the professional thinks about it: Are there gaps in what was asked for? Are there alternative and better solutions? Will it lead to later problems? And then the professional has conversations with the product owner based on the answers to these questions to determine exactly what the feature will look like when implemented.
In contrast, the amateur says, “OK, I’ll give you exactly what you asked for.” That’s easier. The amateur programmer doesn’t have to think about the work beyond the specification. Just code what was asked for.
On a related note, this brilliant image: