I taught programming
and have seen quite some horror's produced by various "bedroom coders". They do get things to work, but the code is often not an "oil painting". There are certainly those who can teach themselves, but there are those who do benefit from learning a more disciplined approach.
The lack of discipline can be really astounding in some. There was one guy who insisted he wanted to hand code in in C# rather than Java. I told him of course he could hand his assignment in in C#, so long as he did not mind failing the course. He found this unreasonable. I suggested my attitude reflected that of a potential employer or customer, who more often than not have some requirements on programming languages, coding style, comments. If you hand in your work in a different language, you would be in breach of contract, or get fired.
He still thought I was being very unreasonable.
Another story I like is the guy who handed in an iterative solution where the assignment explicitly stated: "implement a recursive method to compute ....." He argued this was more efficient, we said that was true, but that the assignment was to learn recursion. He said but my implementation is more efficient, we said that was true, but that the assignment was to learn recursion. He said but my implementation is more efficient, we said that was true, but that the assignment was to learn recursion. ..............................
This went on a while until we terminated this infinite loop (not by kill -9, but more humane methods)
This is not to say the tuition fees aren't outrageous. You can get a much more favourable deal in the Netherlands, and the university I work at (Groningen) is drawing more and more students from the UK. Our MSc courses are English language anyway, and our BSc courses are headed that way as well.