I have programmed professionally but that was a long time ago. In my limited experience I believe one advantage programming has over mathematics in terms of self learning is that in programming one is more likely to know that a program works/doesn't work versus knowing whether your conception of an abstract definition or theorem is correct. It seems overall easier to believe a false notion in math than in programming. I might be wrong in this perception. I think your last sentence is absolutely correct.
This is the problem I had learning math in school, and why I believe I'm doing okay as a self-taught programmer. I always thought I was doing okay until I got my graded test back.
Did I mix up greater-than, less-than again at work? Well, I'm getting opposite behavior. The errors make themselves apparent. I can play around with it, try things, and get basically real-time feedback as to whether I'm doing it right. What the hell is a monad? Well, here's a problem that is basically crying out for a monad solution.
In my limited experience I believe one advantage programming has over mathematics in terms of self learning is that in programming one is more likely to know that a program works/doesn't work versus knowing whether your conception of an abstract definition or theorem is correct.
I've often wondered if automated theorem provers (Coq and the like) could be useful for this. Sure, it requires learning Coq (or Agda or ACL2 or whatever), but it seems that it might be worthwhile just as a way to sanity check one's work - somewhat akin to the way a compiler "checks your work" when programming.