"Which is exactly what you don’t want your programmers learning."
Is "learning" gerund or present participle in the above sentence?
It is a participle predicatively adjected to programmers. If it were a gerund, it would have to be capable of being interpreted as a noun substantive, which it is not.
It may help to expand the sentence into
Which is exactly what you don't want your programmers to be learning.
What you don't want is a situation where
Your programmers are learning ...
Here, learning is clearly a predicative adjective. The fact that what is the object of learning qua verb does not prevent the latter from also having the function of an adjective.
Note that, as far as the distinction between participle and gerund is concerned, one needs only consider that participles are adjectives while gerunds are substantives. If the progressive aspect associated with present participles is here absent, this does not mean that learning is not a present participle, but rather that the progressive aspect does not always follow present participles.
The OP's sentence is unnecessarily complicated in that it involves a fuse relative construction. So I'll use a simplified example, (1a):
(1a) You don't want them [learning it].
This is a raising construction in that them is the object of the verb want, syntactically but not semantically. That is, in (1a) it is not them that you don't want but the accusative case them shows that them somehow is the syntactic object of the verb want. This is because syntactically them raises to the matrix clause as object even though semantically it is subject of the subordinate clause learning it. Hence, the raising construction.
The same raising construction is found in (1b):
(1b) You don't want them [to learn it].
Note that (1a) is virtually equivalent in meaning to (1b) but not to (1c):
(1c) You don't want them [to be learning it].
(1a)'s learning doesn't have a progressive meaning whereas (1c)'s learning does.
This can be proved by the fact that, while (2a) is grammatical, (2c) is ungrammatical because the verb know cannot be used in the progressive aspect.
(2a) You don't want them [knowing it].
(2b) You don't want them [to know it].
(2c) *You don't want them [to be knowing it].
Therefore, knowing in (2a) doesn't have a progressive meaning.
When a V-ing form functioning as a verb doesn't have a progressive meaning, it is labeled as a gerund in traditional grammar unless the verb phrase containing the V-ing form post-modifies a noun, as in:
(3) People [knowing him] tend to like him.
Here, knowing functions as a verb and doesn't have a progressive meaning. But in traditional grammar, it is not a gerund but a present participle because the VP [knowing him] post-modifies the noun People.
Except for this post-modifying case, a non-progressive V-ing form functioning as a verb is labeled as a gerund in traditional grammar.
But labeling (1a)'s learning as a gerund is also problematic. If it were a gerund, (1d) would have to be grammatical, which it isn't:
(1d) *You don't want their learning it.
All in all, the OP's example is one of those cases where the traditional dichotomy of a gerund and a present participle doesn't work.
In a comment, John Lawler wrote:
Both. 'Present participle' is the name of the verb form ending in -ing. 'Gerund' is the name of a particular complement construction that uses the present participle form of the verb. And learning in the example sentence is a gerund, the direct object of want. Since want can also take infinitive complements, what you don’t want your programmers to learn would also be grammatical, though it wouldn't use either gerund or participle form.