Biggest issue I continuously encounter with new engineers is reinventing the mistakes of the past due not understanding the history of engineering and in turn what criteria we measure the quality of a decision on. Does this design take us closer to an over arching engineering ideal or farther a way?
The only course I've found is this one that starts from square one and gives new engineers this context is this: https://www.udacity.com/course/software-development-process-...
It would be great if there was more material online and we systematically teach new engineers history and context in addition to the nuts and bolts of making a program.