I'll argue that good programmers need to have a working understanding of algorithms, databases, compilers and all that. Sure, it's not something you will use day-to-day in a software engineering job but it's important to know how all the low level pieces of your stack fit together in order to write good code.
There's nothing worse than a programmer that fits together code snippets from Stackoverflow and similar sites without understanding what it is actually doing.