Because even non-degree programmers aren't stupid, and this kind of general knowledge about their profession is acquired as they go.
Is it? I've worked for plenty of employers who said they offered things like on-the-job training, but in practice that often meant they had a book shelf and sometimes a senior developer would give a 45 minute talk. Compared to attending multiple lectures every day for a few years... well, it's hardly a comparison at all, it's a completely different depth of study.
As I wrote elsewhere, I firmly believe that studying for a degree is not the only way to acquire this level of theoretical knowledge, but I find the idea that any developer would just pick up the same material as a normal result of day-to-day work in a typical programming job implausible. It's not about being stupid, it's about being ignorant (in the literal sense, not the derogatory one), and it takes a lot more than reading a few chapters in a book from the office library and a couple of blog posts to meet the standard.
The number of times you are dealing with stuff that was learned in a CS degree is minimal.
Perhaps, if all you do is join-the-dots programming for CRUD front-ends. Personally, my clients pay me to create new data structures and algorithms that solve problems no-one ever solved before. I can't just write result=solve_my_problem(), because I'm the guy they hire to create that API.
Remember all that theory about space and time complexity, and which guarantees you can and can't achieve in distributed systems, and formally proving algorithms correct, and how compilers and virtual machines and run-time environments work? I use this stuff all the time.
Every programmer has a bunch of stuff that they already know and a bunch of stuff that is new to them and they need to research before doing a task. The proportion is mostly dictated by amount of experience, not whether they have CS degrees or not.
Yes it is, but the quality of that experience -- what you know and how you think as a result -- matters. As has been noted many times in this industry, there is a difference between someone who has had ten years of experience and someone who has had the same year of experience ten times.
A good CS degree course is one way to gain a lot of useful experience in a relatively short time. There are others, but a job where you spend all day writing glue code that joins up someone else's library and framework APIs isn't one of them.