I think self taught, supplemented with online courses and/or local instruction, is a legitimate way to learn, although like BugRobotics said you will quickly hit a wall if you can't actually run the programs on real machines.
As far as making your skills marketable in job applications, my suggestion would be to make up a portfolio of sample parts programmed. The end goal would be to have a PDF, paper document or even powerpoint slideshow that you can present in interviews. Show several simple but diverse parts, each of which shows your entire process of programming a part, from receiving a model/drawing, planning operations, designing workholding, tool selection, laying out the operations in CAM software, simulating in CAM, generating g-code with a post processor, setting up the actual machine and finally running the part. Learn how to take good screenshots (not cell phone pics of a screen) and decent photos of parts and fixtures in progress and completed. This will require putting some thought into writing and laying out the portfolio document, however communication and documentation are skills that every programmer needs so this can be an additional way to impress a potential employer if executed well.
Finally, I know some people will disagree but my opinion is that it's not so important which specific CAM software package you use, as long as you really understand the principles behind machining and fixturing and how CAM programs in general implement common operations. Your portfolio should reinforce this, demonstrating a good conceptual understanding of the "why" rather than just "I click this button to do this". If you're improving your machining skills alongside your CAM software skills, this will come naturally but it is important to be able to demonstrate this.
Over the course of my relatively short time involved in CAM programming, I've used Mastercam, Fusion360, HSMWorks, Rhinocam, Alphacam as well as very brief demos of NX and Solidworks CAM. While each of these programs have different interfaces and names for certain toolpaths/operations, there are really a finite number of things that a CAM program does and I was able to quickly get to grips with being basically productive in each once I could navigate the interface. The only exception would be NX, but that's mostly because it's incredibly complex and (IMO) usually used within a large company that has an NX "ecosystem" of designers/engineers/machinists. My experience is that learning your first CAM program will take the longest, the second much less, the third and subsequent programs even less. Now that's not to say these programs are all equally good or capable- I certainly have opinions about which ones I am more productive in.
There are a couple caveats to this idea of "learning one CAM program lets you learn them all." One being that certain shops will absolutely demand a "specialist" in their CAM package of choice. Like they will hire someone with 5 years of only Mastercam experience over someone with 3 years MC and 6 years of other CAM software. Sometimes there are good reasons for this, sometimes not. Just some thing to be aware of. Second caveat, is that I have noticed some folks can only learn a software package through what I would call rote memorization. Not sure if there's a better term for it, it's a kind of different learning style. These folks tend to memorize locations of buttons, sequences of keypresses, locations of certain dialogs. They can be really quick and productive in their chosen software but tend to have extreme difficulty if they are forced to use another program or the interface changes (due to updates or reconfiguration, for example). If you are one of these people, your learning experience will probably be quite different than mine and it will pay to specialize and focus your learning on a single popular software package. Final caveat is there are some shops that are doing very complex, specialized tasks that require advanced features of CAM systems. In this case, deep experience of a specific CAM system is crucial. This could be something like automation of programming different part families or some kind of industry/tool/machine-specific programming. Continuous 5 axis, swiss and multi-axis mill-turn machines could also fall into this category. My feeling is that these kinds of situations are less common and most machine shops really only use the "standard" features of CAM packages. It's going to be difficult to gain that experience without being hands-on at a shop like that, so I wouldn't sweat it too much this early on in your learning.