I'm trying to be Devil's Advocate here: In a way programming languages are constructed languages, but they are usually very specific and narrow in focus: one could view them as sublanguages aimed at expressing algorithms or annotating other information. An example for a human sublanguage would be the language of recipes. Words that have multiple meanings in English generally have only one specific meaning in a sublanguage. The syntactic structures are simplified, and often different from general English. Certain aspects of the range of human expressions are left out or limited (you might talk about emotions or feelings, but they would only relate to the food mentioned).
You could design a programming language that is suited to expressing recipes, and it could be used to drive a cooking robot. That programming language could also be read by humans, who would understand the meaning of it, and could translate it into other languages. In this sense 'programming language' is a bit of a red herring: it's just a formal representation of meaning. And (propositional) meaning can easily be expressed in predicate calculus or related formalisms. Is CD representation a conlang, or just an abstract representation of actions/states? It can certainly be transformed into any number of other languages (natural or constructed), and it can express a reasonable range of human activity.
Where do you draw the line? At what point does a constructed language cross the boundary between being simply a mark-up or programming language to being suitable for human communication? What is the essence that, say, HTML, is missing, but that toki pona, Klingon, or Esperanto have? Note: I'm not suggesting that HTML is a conlang, but it can be used to encode a specific kind of meaning, and XML can even encode semantic relationships. But they might not be very suitable for inter-human communication.
You could, though, envisage two people with no common language between them who use a programming language to work together on solving a problem. It would be tough, but should be possible.
In my view there is a continuum between 'fully formed' languages on the one hand, and restricted or sublanguages on the other. While it is difficult to formally represent the more complex languages (because they are so complex), the simpler end of the spectrum can be encoded in such a representation. Predicate calculus is one representation, and any programming language is another one. There is no hard boundary between the two, so in a way (even though nobody would really 'speak' in a programming language) the answer is: yes, programming languages can be categorised as conlangs.