The college curriculum is focused on how to get software to work - at all. You do project that are supposed to do things. And you get your program to work, you submit it, and if it passes the tests, it "works"
However in the real world we are no longer concerned with getting software to work. We assume that it will be developed and will eventually be working, through some majority effort of feature-adding and a minor part maintenance, it will be accomplished. But what makes that assumption possible is that good code is written from the start. New developers will write terrible code - but it will work in the average case. To write "good" code, requires an insight into how software fails. Young developers only know how their software fails in the few ways they've been able to encounter because that's all they've seen.
So my proposal is to treat software development like a trade:
Apprentice - Write tests for code for journeyman or master developers. See all the ways that software can work AND FAIL. Minor feature additions, scripting, DevOpsy-stuff. Can write code for limited internal apps, and production systems but only under supervision. Will develop proficiencies with technologies. (AKA Jr Dev)
Journeyman - Armed all the ways the software can fail even by more experienced developers, the engineer is now able to write code for production systems. Unit tests are written by an apprentice. Demerits for when an an apprentice finds a bug. (AKA Sr. Engineer)
Master - this isn't really a thing because Journeymen are expected to move into engineering management -- if they want to.