&gt; I believe that something like TDD should be something that&#x27;s taught to us from the beginning. In my mind it should essentially be a foundation skill that becomes a platform from which you can grow from.<p>You see, it&#x27;s a common misconception. You believe tests are one of the most
important things, while they are mostly for ensuring regressions don&#x27;t occur
(or for basic checking if a very complicated component has some chance to
work). What is really important is to have good architecture so the components
are composable, and operations of different abstraction levels not mixed up.
Tests are far, far after those.<p>This is why TDD <i>should not</i> be taught as a universal basic block: TDD induces
only bunch of supplementary code (called tests), which is not even a remote
proxy for good software, while good architecture is one of the few properties
that are exactly what makes good software.