warning: This post does get into the weeds a bit...
It's been awhile since my theory of computation class so I'd appreciate help/corrections :)
A Turing Machine can implement any computable/decidable problem (ugh, problem that can be solved with a Turing machine. Many equivalent or weaker models have been introduced, but none stronger. See Halting Problem for an undecidable problem) that any programming language can, but the inverse isn't true. A programming language need not be Turing Complete, like
Bloop. A Turing machine is a theoretical mathematical model usually expressed in set notation that basically has a read/write head and an infinite tape.
When comparing computing capabilities, you get into languages that the machines can accept. Here's what comes up in order of flexibility:
1. DFA (deterministic finite automata) are state machines that accept only accept
regular languages.
2. NFA (non-deterministic finite automata) add various languages to the mix.
2a. PDA (pushdown automata) have an infinite stack and accept
context-free languages.....
Turing machine.
You can knock yourself out with the details on Wikipedia. Computer scientists and mathematicians go crazy proving that seemingly different models are really equivalent.
I'd venture a guess that any language that can represent those modeled by an NFA and "above" is probably a "programming language". It's also easy to tell based on typical qualities. Does it have: syntax, compiler or interpreter, usually has at least loose data types, functions/operators, can take input, process data, and output something.
The most direct is to go by wikipedias basic
definition.
To answer your question - CNC is a de-facto programming language. Paul's right that by another definition (Turing complete programming language) it may or may not be - my guess is yes - if it has goto's or infinite looping it probably is.
The way that I usually look at this question informally is what can you do with it. I'd say C, Java, .NET, and assembly are "more of a programming language" than scripting languages like LISP, perl, JavaScript, which are more than macros, which are more than expressions. The latter may be argued either way - I have no idea. The point is, the more it's like tinker toys the less likely it will be regarded as a "programming language", although, by definition, if you're asking if it's a programming language - it probably is.