Tim Murphy is a Solutions Architect at PSC Group, LLC (www.psclistens.com). He has been an IT Consultant since 1999 specializing in Microsoft technologies and Software Architecture. Tim is a co-founder of the Chicago Information Technology Architects Group as well as a contributing author of the book The Definitive Guide to the Microsoft Enterprise Library and part of the Influceners program on the geekswithblogs.net site. He has also spoken at the nPlus1 ArcSummit in Chicago, the Chicago Code Camp and has appeared on the Thirsty Developer podcast. Tim is a DZone MVB and is not an employee of DZone and has posted 55 posts at DZone. You can read more from them at their website. View Full User Profile

Why Do Computer Scientists Need To Understand Software Developers?

03.15.2012
| 9703 views |
  • submit to reddit

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.

Published at DZone with permission of Tim Murphy, author and DZone MVB. (source)

(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

This sounds like a designer and code monkey situation in a throw it over the wall process.  You can easily be very good at one and terrible at the other.  It's much less risky to find developers who can do both moderately well and avoid the communication/skill barrier.

Jason Sparks replied on Thu, 2014/02/20 - 12:44pm

It comes hand in hand. It's like a chain of information that connects everything, that how I understand the basics of computers. 

www.spectra.com 

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.