Perhaps it would help to clarify some terms.
Quote:Designer: The game designer is the one who takes a game from an initial concept and flushes out all the components of a game until it is totally complete on paper. The designer usually writes this information into a design document. |
Quote:Developer: This term refers to anyone who is involved in the process of development of games. This could include anyone in a game company, or it could only mean those who are directly involved in creating the game such as the artists, designers, programmers and musicians. |
Quote:(There is no gamedev.net description for coder, so I'll go with Wikipedia's closest definition of "Coder", which is different than "Programmer".) More specifically, it refers to a person only capable of grinding out code, but unable to perform the tasks of software architecture, analysis, and design. In this sense, the term is considered to be mildly insulting, and is often applied to the most junior people on a programming team. "Code monkey" may also refer to a self-deprecating way of denying responsibility for a management decision, or of complaining about having to live with such decisions. |
The OP made this claim that is the heart of the issue: "you can never separate coders from designers. A coder is a designer and a designer must be a coder". Using anything similar to those definitions above, it should be clear that they are false.
Replacing a generic coder with another generic coder is not a big deal. I've hired and fired enough of them to know. They're like hiring and firing a minimum wage burger flipper.
There are many programmers who are
HORRIBLE (additional emphasis required) designers. Some are horrible software designers, others are lousy game designers.
<begin story time>
TRUE STORY OF A BAD SOFTWARE DESIGNER
One specific programmer I know (name withheld) has been stuck in his career at two places before coming to (and eventually leaving) work with me.
He was an excellent coder. In one case, he took the design and literally wrote three distinct implementations that were profiled in game and specifically targeted for each platform, and even had some blocks of code moved around for each compiler's final build. He showed profile results that moving the code around for each compiler under the final build options resulted in various performance patterns.
As a coder, he could outperform anybody on the team. He would spend an evening rewriting the company's streaming libraries, and the next day we would come to work with a shiny new asset system that ran twice as fast as before. He would work late (unpaid, he was salaried) to rewrite sections of the PS2 libraries for the nearly unmeasurable performance improvements.
In short, the guy was a really impressive coder. If you gave him careful constraints and didn't watch the occasionally disturbing processes behind the scenes, he could develop very tight code.
But when it came to design, he couldn't design his way out of a cardboard box.
I spent a few days working with him on part of his tool chain. Together we came up with a simple grammar that was similar to his existing system but much more self-consistant and maintainable. He had never really known how to use a grammar properly, and thought all that fancy stuff in compiler documentation was just there to make normal people feel inferior.
We discussed how to use a grammar for his asset scripts. I walked him through using flex/bison to make a simple version of his extremely complex tools. He loved it. He was convinced he knew everything about how a grammar would help him. He wanted to stay late to explore this new-found knowledge. When he arrived to the office at 11 AM the next morning, we looked at his code. It was a series of jump tables and a lot of x86 assembly(the guy hated letting the copmiler generate them with switch blocks) that nobody could ever maintain. He proudly showed the team examples of how it could cover every possible statement made by the grammar, and how it never even needed to use 'all that fancy grammar crap'.
He was an excellent coder while he worked with me. If I had to outsource code to somebody, I'd ship it to him. But as a software designer, he sucked.
<end story time>
<begin story time>
TRUE STORY OF AN AWFUL GAME DESIGNER
This story isn't as much fun, because we didn't really let him shine at being bad. :-( Another programmer I worked with was good at software engineering, but horrible at game design.
We joked that if he were desiging it, he would turn the "Happy Fun Ball" into "Mildly Amusing Dangerous Substance (MADS)".
Whenever we discussed a game design, he just wouldn't get it. When invited a single time to a play test, he asked questions that were completely inappropriate and left everybody, including the play-testers, looking at him dumbfounded. Left to his own devices, many games would devolve into variations on pong, breakout, pair matching, and completely random chance.
No, teens don't like playing a game where they guess a number from one to five. No, we don't want to see a game where you try to play a cat-and-mouse as the computer AI runs in circles around the environment. No, a teenager doesn't want to play games that a five-year-old would get bored of. No, we will not put it in the game targeting teenage boys.
Great coder. Absolutely no clue about design. He probably still works at the place, but I don't. [grin]
<end story time>
The point of the stories? Hm.
Now I remember.
The skills required to be a designer of games, to be a designer of software, and to be a coder of software, are completely orthogonal to each other. Having skills in one area has no bearing on skills in the other two.
Those with only the "coder" skill set are easily replacable. Those who can write code and design software are much harder to replace, but can be replaced by a few good interns. Those who can design games, in addition to creating solid software, become the Master Chefs.