Another issue is the more you code in the commercial space the less choice you get on the language, the development environment and the process.
The bigger the app or design the more likely you don't have a choice about language, tools and methods. This may be the hardest to accept for the newest of programmers.
What this means is that you have to be flexible and learn on the go to be able to contribute to the project.