The way we teach people in the open source development feels wrong to me. We mostly show them how they can assemble toy projects out of ready libraries and frameworks, how to submit bug fixes, and maybe how to package a new library.
But nobody ever teaches how to choose the libraries, how to review the code of all dependencies, and decide to reimplement them yourself, how to switch from one framework to another in the same project without breaking it, etc.