I would have brought up the distinction between "professional" and "competent" but someone beat me to it.
However, neither of these labels have a specific meaning. How do you know if a programmer is "competent"? It is easier to tell if a programmer is incompetent, but the line between the two states is fuzzy, particularly since the competency criteria depend on context such as specific languages, specific hardware, and purpose of the software. An assembly language programmer may be perfectly competent or even excellent in a robotics factory, yet be totally incapable of applying the requisite skills for accounting software where the development language is Java or C++.
And "professional" implies a common set of standards. This type of standardization is totally missing in programming field, which has retained its "craft industry" cachet for multiple generations.
If I were responsible for bringing up a new generation of programmers, I would spend a LOT of time identifying specific criteria, and then prioritizing those criteria before I even addressed the content and skills necessary.