Take test-driven development technique  for example, why people do not understand that it is a design technique and not a testing technique?
In order to understand something like this practice in particular, and iterative development in general, one must put it into practice. That is the only way to know software related concepts, because ‘software’ is pure logic, must be processed by brains not just by the ears (what other people say) or eyes (by reading something).
The following article explains quite well some misunderstandings in software development:
Iterative vs. waterfall software development: Why don't companies get it?