As usual, it’s more complicated than that.
Debunking the bullshit
Do you remember in high school that poor kid that constantly had low grades in math but brush in hand will be able to blow your mind by drawing? And do you remember the kid that has excellent grades in math, but was incredibly awful in drawing anything, even just a straight line? And the other kid that looked all the time annoyed and had overall low grades, but everyone listened amazed at their stories? And that kid that everyone knew, that talked with everyone, all the time? Have you ever seen the difference between the kind of people that follow an Engineering class and an Art class? And between a nerd and a jock?
Do you know Howard Gardner? It was 1983 when he defined his Theory of Multiple Intelligences. He was able to define in a brilliant way that there are different kinds of intelligences, identified by their brain localization, their place in our evolution, the susceptibility to symbolic expression, a distinct developmental progression, the existence of savants and so on. The intelligences he found are:
Then for the last 28 years, we read things like:
A designer who does not write markup and css is not designing for the web, but drawing pictures.
— Andy Rutledge (2011)
My short answer is “Learn code.”
— Frank Chimero (2011)
Honestly, I’m shocked that in 2010 I’m still coming across ‘web designers’ who can’t code their own designs. No excuse.
— Elliot Jay Stocks (2010)
Designers must have a solid working knowledge of at least one modern programming language (C or Pascal) in addition to exposure to a wide variety of languages and tools, including Forth and Lisp.
— Mitchell Kapor (1990)
Do you get what’s wrong here? Coding and Designing tap into two very different kinds of intelligence – it’s even more complicated than this, and Gartner is just a widely understood example, but let’s simplify for a second. We even have different stereotypes and jokes to identify the two categories lifestyles!
So, please stop: this recurring debate is harmful to both professions.
It’s harmful because since it tries to create hybrid professionals, that by themselves are good, but maybe there were just exceptional specialist professionals. Because it forces young designers to learn coding, when they should study for example cognitive psychology and social psychology. Because it slows down designers in becoming excellent in what they are paid for. Because it creates the expectations that “designers should code, so I don’t need a frontend developer” (harming also frontend developer specialization).
So, please: stop this bullshit.
But wonder what? It’s more complicated than that. People that suggest that designers should be able to code are suggesting a solution to a problem they see, before analyzing the problem itself. Once we look at it, we notice that there are two components of the problem:
- Know what code does
- Know how to code
Knowing what is very different by knowing how. This takes us to the usual questions: do architects need to know how to build a skyscraper? Do car designers need to know how to build an engine? Do a movie director need to know how to act? Does a surgeon need to know how to build a pacemaker? Of course not.
But yes, they need to know what these things do. How they perform. What are their limits.
And yes, learning to write code is able to build both these knowledges.
But not both knowledges are required for designers and that’s why the whole “designers should code” is bullshit. The sentence should be: “designers must know the capabilities and limits of their media”.
And wonder what? That’s exactly what happens in other kinds of design! A print designer that has never seen a type foundry will still be able to create wonderful prints. An industrial designer that has never seen a lathe will still be able to create wonderful objects. It happens every day.
And here we’ll reach the second point: teamwork.
Because how should a designer learn the limits of his media? There are two ways: use it and collaborate with people that build it.
The digital team
Let’s see what happens in a near industry. Around 1960, William Bernbach had an interesting idea: instead of having art directors and copywriters in two different departments, with huge difficulties to communicate, let’s create creative teams: one art director and one copywriter together working on the same design at the same time. His company went from $1 million to $40 million thanks to his creativity and these structural changes. Today there are almost no agencies that split art directors and copywriters. They are teams.
In this digital world – no, I’m not just talking about the web – there is another kind of team, and if you have ever met a situation when this team was able to live you know how well it works. The team of the digital era is a designer / developer team — well, not exactly, but let’s stop here for now. Also, the missing copywriter here is a huge problem in my perspective, but I’ll talk about teams and creativity another time.
The reason is simple: in this way they talk and collaborate. They learn the limits of each other’s profession without knowing anything about how actually do it. Because it’s not a requirement for either of them. It’s more efficient, and well… it’s healthier as well to have someone to talk with and get a different perspective.
Is it all wrong then?
If you read so far you should know my answer. Yes: it’s more complicated than that. ;)
There’s still a good point in suggesting that designers should code (“Why, it isn’t possible to do that? I’ve seen it done by Facebook!” – argh it looks simple but it takes ages with this platform here!). Exactly as there’s a good point in suggesting that developers should learn some design basics (“Stop asking me to do it pixel perfect” – argh it’s not pixel perfect what I’m asking!).
The reasons are simple:
- It’s way easier to learn the basics of how to code than learning how to build a skyscraper.
- It’s one of the ways to balance over-specialization and be a better professional.
- In small teams or startups it surely makes the difference if you know both.
And the reverse is valid for developers too.
In any field, if you expand your view to know all the ecosystem around you it’s beneficial. You can’t know everything, because even in a single discipline there is enough knowledge to fill a couple of lifetimes, but knowing a little bit more helps a lot. And I’m not talking just about designers and developers, but all the things that happens in a project. Knowing about budgets, timeframes, clients, market, advertising, SEO, health, food… all things that are able to increase efficiency, satisfaction in the client and quality in the final product… and satisfaction for yourself as well.
So: you don’t have to learn a bit more outside your discipline, but you could.
However, please, please, please: before coding learn some cognitive and social psychology! It’s more important for your profession!
If you want to read more, there’s a great post from 2009 by Lukas Mathias about this same topic: “Designers are not Programmers” (I told you it’s an old and recurring topic), and thanks to Mark, Chris and Mike for the excellent discussions we had on this topic. Thanks also to Sean McCabe for a nice infographic to explain better the concept above about know what/know how.
Once understood the difference between “have to” and “could” the next step could be then a good explanation by Mike Rundle on the values of both generalists and specialist.
Q&A from the comments
- “HTML/CSS is not coding” or “Neither markup nor CSS are exceptionally difficult to learn” 
You might also want to have a read of this article by Jeff Atwood from 2006, describing a research paper about a test to separate programmers from non programmers: “Most people can’t learn to program: between 30% and 60% of every university computer science department’s intake fail the first programming course.”, or event better: “the act of programming seems literally unteachable to a sizable subset of incoming computer science students“. It’s a little superficial because the problem probably lies in the way the subject matter is taught, but it helps contextualize a bit this problem.
- “I think there is a semantic issue here on the definition of ‘designer’.”
Yes. I kept the article vague, because that is a completely different argument, and I thought – but I might be wrong – that would have diluted the argument above. But YES, that’s another good point. There are very different kinds of design, but the overall criticism usually is triggered against any designer that works on the web, and that’s why I called bullshit. Working on the web doesn’t mean that you have to code, just that you could code, and that is valid if you are a “web designer” or “graphic designer” or “ux designer” or “ixd designer” that works on the web.
A few people started arguing about the theory I cited. Yes, there are criticisms, but it’s not the point, it’s just a starting concept to frame a little better the article with the support of a quite widely known theory. As Domenico correctly suggested me, you can have a look at other researches as well, like the CHC Theory, the WAIS, the Hebbian theory or a more widely known author like Daniel Goleman. It surprised me that this was the central problem for a few people. :)
- “to really take art to the next level, you really have to learn to code.”
Yes. To really take to the next level. Exactly like a painter can paint, but then can start creating his own paints, in every profession you can benefit for digging both deeper and wider in nearby fields. I can also argue that to take it really to the next level, you should learn cognitive psychology, social psychology, gestalt theory, marketing, copywriting, information architecture, usability, economy, statistics, science of materials, architecture, and so on. Yes, all these things will benefit a designer. Actually, since we are talking about designers and not developers, I prefer to suggest first some of these other things than coding – some of them are HUGELY missing from design skillsets – but as you can see, there are lots of things that could take you to the next level. It just depends what next level are we talking about. The point of the article, however, isn’t that there are no “next levels”, is that you aren’t less of a designer if you can’t code. You are just choosing something else (hopefully!).
- “some example showing why designers should code”
Most of the people that are using examples are showing problems in teamwork, collaboration and communication. It seems that lots of people think that by knowing better you’ll solve the problem of having “an arrogant designer telling you what to do”. Such a designer is bad, but if he learns coding it just get worse. Such a designer is bad because he doesn’t have the correct teamwork skills to cooperate properly, and the same problem could exists in the developer as well. So, improve teamwork skills before coding skills, and without such an ass in the team, the overall mood and productivity will increase for everyone. ;)
- “So, in the end, they should or shouldnt?”
The summary, is that there’s no answer to this question. As I said repeatedly: it’s more complicated than that. The answer isn’t “yes” and isn’t “no”. The answer is “choose”.