I sincerely hope every practical developer knows the complexity and costs of their algorithms, can write a simple parser, and reason about finite state machines (ie, the non-trivial systems people build). I do get what you mean: CS is different than practical skills. Pure theory is interesting and less practical but all the things you mentioned have lots of uses in practice. You don't write a formal proof for every little thing but you use the conceptual tools.