First, let me agree with Robin: your career is only somewhat related to your education. One of the best programmers I've ever met was a Linguistics major... A CS degree (even an advanced one) doesn't guarantee that you can program, and an EE degree doesn't guarantee that you can design computers (nor does it guarantee that you can solder wires.) And in general, new graduates are poorly prepared for real-world jobs. Working with dozens of other people on a project that requires dozens of people is just a lot different than even a complex senior project.
Let me say that my info on school is about 40 years old, now, and I'm 6 years retired, so I don't know how up-to-date some of the following information is...
- It's quite normal from EE to switch to CS but is it permissible the other way around?
I have an EE degree. Even then I knew that I was very interested in programming, so I took a lot of classes from the CS department as "electives.' At the time when I went to school, getting the EE degree required a lot of ... "physics" ... and hard science classes that I think would be particularly difficult for a CS major to fit into their course load. Circuit analisys, solid state physics, E&M classes (in addition to the year of actual physics and at least a semester of chemistry.) Whereas I felt like I took most of the "import" CS classes (assembler, data structures, compilers, microprocessors, etc.) I dunno - the EE program was 5 classes per semester (plus labs) for all 4 years... I don't recall if the CS degree was the same - some majors got away with 4 classes/semester.
- Would you say a CS major is definitely better in programming?
What do you consider "programming"? CS today has a broad swath of possible employment, from Web Design to Research. One of the big things to get used to in the real world is that the sharp "code monkeys" are not necessarily the great system designers (and vis versa), and you don't want either one as your sysadmin or DBA, and you need a specialist to work on security.
- If a company wants to design a microcontroller, how many CS vs how many EE is needed?
Mostly EEs. For the most part, CS majors don't learn that, and most companies would be foolish not to pick a standard architecture (perhaps with modifications.) There's lots of peripherals and ASIC design and testing that falls into the EE category, though. (this assumes that you're talking about a chip-level design. If you're talking about taking some existing chip and designing an arduino or mBed-like devices out of it, then the burden shifts toward CS. OTOH, a lot of CS people and programmers will tell you that too many chip vendors don't have enough CS/programmer people involved,a nd come up with clunky and hard-to-use designs.) (On the third hand, there have been some spectactular failures that seem to have had too much CS influence, and not enough EE/"Real Programmer" input. Look up the iAPX432 sometime, and/or I don't think that the AVR32 gets much respect...)
- How frequent would EE refer to CS for advice or vice versa in a company?
Not as frequently as they should. For a while, cisco (where I worked) had a policy of interleaving HW and SW engineers in their cubical layout. Those were "the good old days." (cisco had, I think, one CS major among the first twenty employees and founders. Physics majors, EEs...) A lot of "real world problems" don't really involve "CS", which is to say that you don't really end up using "science" to solve them; they don't need someone to develop a better sorting algorithm; they just need someone who can recognize when the sorting algorithm they're using isn't good enough, and who can go about finding one that's better.
The computer industry USED to divide up their workers into classes; you have your scientists or engineers who would specify designs and algorithms, your "coders" who would translate that into actual working code, a keypunch operator who would actualy type up the cards, a systems programmer who would surround it with the magic commands to get the incomprehensible OS to compile and run the program, the computer operator who would feed in the cards and fetch the results, and maintenance crew to make sure that nothing broke. A lot of those positions were relatively low-glory and had low educational requirements...
- If you own a company specializing in making end product using RPi, Arduino or any other boards, who would you choose as the hardware designer and programmer?
I'd try to get people who understood the end product and it's use. If you're going to build, say, an IoT gateway that understands all the usual wireless protocols and ships them over the internet to similar systems plus provisioning service plus ..., you want people who understand networking and IoT and all that stuff, and it doesn't really matter if they started from an EE or CS degree.