If the programmer doesn't communicate with the designer and let him know what can and can't be done then it's his own fault.
It's both of their faults. Communication is a two way thing. The designer has a responsibility to make sure the programmer understands, and is able to implement the design. You do not just fire off a design and wait for it to be completed, expecting the programmer to raise issues. (I'll admit this can depend on the people involved, but it pays never to assume).
Technically, a designer isn't required to know squat about programming. I think sometimes being the designer and programmer can be a bad thing. Unless you're a control freak, then it's ok. :p
All projects need clearly defined roles, and in general it's best to separate them. Projects need a "visionary", a project manager and "do-ers", and in general, these need to be separate people. Too many project managers think they can be both the visionary and manage the project (and some insist on do-ing too). It rarely works because very few people can do both.
Obviously it's different with small teams, but if you can make those distinctions, it helps bigtime.