I saw a tweet asking why do we educate computer scientists to get developers and compared this to structural engineers and stone masons. I believe this is a good question with a flawed premise. The flaw is in thinking that a developer’s job is as simple and limited in variations as that of a mason. Almost every problem attacked by a developer requires that they bend their tools and materials in a new way. This requires that everyone on a team communicate and at least on some level understand each other’s hurdles. This is not an environment what you create a spec and throw it over the wall. Even then, I would believe that a structural engineer needs to understand materials and how they are connected in order create new designs.
There is also the question of what do each of these titles mean? What is the job that each really does? Both titles have a wide range of meanings. Computer scientists to my way of thinking are defined as theory and design driven. How can you really understand a theory unless you understand its practical application? Likewise I think developers create better solutions if they understand the theories that govern the environment that they leverage.
Of course all of this brings us back to traditional argument of users needing to understand software development. It isn’t the details of each job that you need to be familiar with. You should know enough of how different team members work in order to appreciate when you are told its difficulty or relay requirements at the proper detail level.
In the end I think we all benefit from knowing how our work affects those that we work with. Living in a bubble only leads to disaster.