Why CS is different is due to less of a need of verification of skill. Many don't mind giving an informally taught programmer a job because his/her work can be verified by reading or executing code. That isn't possible in civil engineering, for example.
I'd love to believe that someone could do this, but I haven't seen it happen. Most of the course-like learning I've been able to do "online" has been because some professor was nice enough to put a pdf of their textbook on their university page.
That said, I've created a subreddit specifically for people who want to read long articles that teach them something important. http://www.reddit.com/r/learnit/
The math and physics articles are generally pretty good, include derivations, background on the subject, and you can then click to learn about the personalities who discovered the idea. There are no problem sets, however.
This is one problem, the other problem is that there isn't a good way to sort the articles by prerequisites. There's also no easy way find out what you don't know you don't know about a subject.
I think at the undergraduate level a lot of what they teach won't get you hired if you know it but will get you fired if it turns out you don't.
Programming is easier to commoditize than painting. Painting ceased being a professional skill in relatively high demand upon the advent of the camera. The individuality of the painter became even more important during impressionism.