Why Do Computer Scientists Need To Understand Software Developers?
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.
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)






Comments
Frank Silbermann replied on Fri, 2012/03/16 - 11:23am
Computer scientists only have to understand developers if their research is relevant to developers. Not all research topics in computer science are relevant.
Software engineers do not need to understand computer science, but it is in their interest to understand it. To develop software you need to know how to use the operating systems on which you develop and deploy. Understanding the theory of operating systems, in contrast, will help you to adapt when you need to shift to a new platform and cannot afford to start over at an entry-level.
To develop software you need to know the programming language you will use, but understanding the theory of programming languages will help you adapt when new projects start coming up for newer languages you need to master quickly because you cannot afford to start over at an entry-level.
To develop software, you need to know a bit about the cost of different individual operations. Understanding the analysis of algorithms and models of computation, however, may save you some day from investing huge amounts of labor in an approach to solving a problem that is doomed to failure.
Of course, some topics are relevant only to certain specialties (e.g. writing operating systems and compilers, AI, scientific programming), but you won't know whether you want to do that unless you first get a taste of it.
On the other hand, if you learn computer science without developing skill at programming, that's like having the combination to the safe but not being able to get into the building.
Lund Wolfe replied on Mon, 2012/03/19 - 2:25am