in all other engineering since the dawn of time, the engineer was presented a set of requirements, they then drafted a design they felt described the fulfillment of those requirements and presented it to the interested parties. Those parties agreed to it, then the engineer set to work completing the design documentation. Then junior engineers and workers would fulfill that design documentation. Then someone would make sure that the finished product still met the original requirements. Then everyone would go home.
Nowadays, CS grads are told that code writers are the only people who need to know anything about the product - they can start their own products, imagine new requirements along the way, document little to nothing, and never actually release something - just have snapshots of the code base they at a whim bequeath to the mere mortals scrambling at their feet.
Whenever I'm in the hiring seat, I give *substantial* preference to those who have done real things in their lives - things where communicating and meeting expectations were key, and where your efforts would be judged and evaluated. Anything from bar-tending to construction, really. Or maybe organized team sports, acting, music...? But a person that has done nothing other than flit around SF after a CS degree? No way in hell. So an EE over a CS? Heck yeah. Easier to teach a couple languages to a person who understands how to design things, than it is to un-teach stuff.