Anyone who is on a team that is responsible for delivering a website whether you're a designer, developer, project manager, business analyst, etc. should understand the medium well enough to avoid silly conversations that take away from progressing the work.
Silly conversations might be somewhat ambiguous, but I think y'all know what I mean. Anyone on a web team, should know the difference between front-end development and back-end development. General knowledge of how development integrates together, the process and workflow they use and how it fits into the process as a whole. I've spent countless hours writing "this is what is happening" emails and in meetings describing how everything works. I don't think those will go away, but if all on the team had at least basic working knowledge of how IA, design, research, and development produce a living breathing application, then we'd all be happier.
- But to answer your question directly, yes, designers should learn to code. But that's just ... like ... my opinion, man.
- Should everyone on a product team have a high level understanding of code? YES!
- Do designers need to know how to code to effectively communicate IA and IxD to developers? Absolutely not.
- If a designer knows how to code, does that necessarily make the process more efficient, or them a better designer? A BIG maybe.
As a designer, knowing code has afforded me more opportunities in my career and at times put me at an advantage compared to designers who didn't know how to write code. Maybe because I knew of certain constraint before hand to avoid designing something that I knew couldn't be implemented. Maybe because as a independent consultant, I am able to double up on the number of work opportunities in front of me at any given time. And maybe because I can contribute on multiple levels and instead of bugging the dev's all the time I can just pull the repository, make the annoyingly miniscule typography tweak, commit and be done with it.
As a developer, knowing design helps me get into some meetings earlier because I can contribute on many levels. But mostly, the benefits are on the "designer knowing code" side.
But I have been riding on both sides of the fence for 12 years. That's 12 years of working with front-end code. Getting myself out of trouble with terrible code. Recognizing clean code when I see it and knowing what makes it clean in the first place. For a designer just learning to code, it is a daunting task, but knowing a little helps more than knowing none.
To another of Fred's points and on the other side of the coin, for someone who's never coded, a new GUI is less anxiety ridden than is an empty HTML file in Sublime text. "I know how to push buttons, and these buttons make my design interactive."
Also, the most unsatisfying, but politically correct answer to any question like this, is it depends on many factors, right? Budget, knowledge and comfort level with code, time, etc. I do love showing interactions rather than explaining them and having my audience interpret what the hell I'm talking about. And I do love doing it with code so that I reuse HTML, CSS, and JS later. But even as a developer, I've chosen to use Keynote or Axure in certain situations due to the factors listed above.
So, for me personally, am I glad I decided to learn to code as a designer? Absolutely.