Yes. Yes, they absolutely should.
As designers, we need to understand the medium that we are working with. We are in the business of creating websites and apps that are meant to help real users. Sure, we need to know how to create highly-detailed wireframes, mockups, etc., but those are only a means to an end. They are only steps in the process of creating what is finally delivered to your users: lines of code.
Now, I’m not suggesting you immediately go out and buy a book on how to manage a SQL database or become an expert on how to deploy Ruby on Rails apps. I’m not even saying that you should be able to write production level HTML and CSS. All I’m saying is that you need to be somewhat familiar with the capabilities and limitations of the medium for which you’re designing. Here are a few reasons why:
Reason 1: You know what’s feasible.
You’re not going to throw the Rolls Royce of UI at your developers if they only have a few days to implement and test your design. Keeping the timeline and cost in mind, you’re going to design something that can actually be completed when it needs to be (but keep that perfect Rolls Royce design in mind for future iterations :).
Reason 2: You can prototype.
There are tons of really awesome prototyping tools out there like OmniGraffle, Axure, Balsamiq, and POP, but those can only get you so far. For those design solutions that just can’t be created with one of the above applications, being able to code up a custom prototype yourself can be an extremely valuable skill (even if your code isn’t the prettiest).
Reason 3: It can actually be enjoyable.
It can give you a chance to get out of Photoshop/Illustrator/whatever design software, roll up your sleeves, and make something that real people can actually interact with. Similar to changing your own oil or building your own deck, you get the satisfaction of knowing you did it yourself and may have even had fun in the process (yes, I just suggested that changing your own oil can be fun).
You don’t have to be an expert!
Be familiar, but realize that you don’t need to learn everything there is to know about writing code. Full-time developers exist for a reason. The key is to learn what you can and collaborate with those developers to create (awesome) products.
Have thoughts on the subject? Tweet at me: @zkuzmic