tags:

views:

274

answers:

9

Hi,

What, in your opinion (although I would highly appreciate articles / books on related issues), should be the the level of the programmers knowledge of the domain?

(This related question didn't quite answer my question / had a reference to something I can use)

+3  A: 

As a consultant I am constantly (every 6 to 12 months) changing domains. Though I can never proclaim to be a true expert by the time I finish a project, the more domain knowledge I acquire, the more value I can add the project.

Kyle Boon
Well, I agree that the more domain knowledge you have the more value you can add to the project. And you MUST acquire a level of expertise in the domain. Yet, as a programmer, I don't yet know what is the right balance - Learning the domain might cost / 'wast' a lot of time in witch you can do something else...
Kaiser Soze
+1  A: 

That depends on how related to the domain the specific job they're doing is. In team context, I can imagine that the lead programmer and some others benefit from a bit of domain knowledge while others in the team don't need it.

Bart van Heukelom
A: 
  • Banking/financial applications
  • Networking/wireless/telecom
  • Mobile Applications
  • Web/storage/enterprise/Numerous others..

If by "domain" you mean your area of work, yes you should strive to understand everything related to your area of work. How far into other areas that extends is another question.

Josh K
+4  A: 

If programmers were domain experts, they would not be programmers. :-)

For example, I do a lot of software development for archaeologists. If I knew as much about archaeology as the users I work for, I would be digging and surveying in the field rather than programming. Which makes no sense.

Having said this, I think that programmers need to ne knowledgeable about the domain, and much as possible, but without losing track of priorities.

If you need domain expertise, bring a domain expert into the team.

CesarGon
-1: This is a nice sound-bite, but is too broad a generalisation. In the sciences, many programmers are also domain experts. You can't write a useful smoothed particle hydrodynamics simulation code, or a useful telescope control system without being a domain expert.
ire_and_curses
I am sure. But those scientists are rarly professional programmers working for third parties. They usually program for themselves or their own team. I wouldn't think of them as professional programmers (and I am not saying they don't do a good job!).
CesarGon
I'm a University trained physicist, and graduated near the Computational Physics dept. Trust me, the domain _experts_ on hydrodynamic modelling are not the same as the coders. But for an outsider, even the coder appears to be a domain expert. That's because the field is hard, and therefore it's hard for outsiders to distinguish true expertise.
MSalters
@MSalters: Absolutely. I am a trained archaeologist and fundamental biologist, and my experience on both fields is similar to yours in physics.
CesarGon
You can be whatever you want to be! I also have a background in both archaeology and computer science. I've been on digs collecting samples, and I've written compilers. Assuming that I would not be a programmer simply because I also have other knowledge seems paramount to claiming that programming can't ever be as much fun as other domains!
Ken
@Ken: "Being what you want to be" is great. But in order to be something seriously and professionally, I think that you need to devote such a large amount of time to it that it is very hard to be multiple things at once, at least for most of us.
CesarGon
CesarGon: In order to program "seriously and professionally", you need to be a domain expert. I don't see anyone advocating *not* knowing version control, unit testing, speaking English, regular exercise, etc., on the basis that there isn't enough time to do them and also write computer programs.
Ken
Sure, you need to be a domain expert. But being a domain expert does not mean knowing as much, and having as much experience, as those who work full-time in whatever domain area you develop software for. It is logically impossible: all the time that you spend developing software is spent by them in doing whatever their thing is.
CesarGon
A: 

programmer is like people who can interface "other people" with computer by creating software, and better understanding of the domain where you're working for would help the communication between the problem and the "other people" thus would make you a better programmer.

but the problem domain is often very wide and deep, you can expect everyone to be expert at programming and expert at another field, for example you can expect great scientist or physicians to be expert at programming to solve his problem when creating space-ship because programming is not his main concern, so with programmer, but programmer or scientist who can talk to each other is the best fit

uray
+2  A: 

Yes and no.

As Kyle pointed out, programmers are often changing domains on every project and this pretty much precludes you becoming an "expert" in any given domain. On the other hand, you need to understand the problem well enough to a) craft a solution, and b) test that it actually solves the problem at hand.

One reason for not claiming domain knowledge is so that your customers are forced to take ownership of this part of the project. The best way I have fouond of forcing them is to require a clear overall description of the project (no more than a couple pages long) plus a ton of User Stories ... written by the users. You can lead them through the process of how to write US's, but they will not truly own the end solution unless they were intimately involved in creating it.

Having US's and using them both for design and testing puts project ownership where it ultimately belongs -- in the hands of the users of the system.

Peter Rowell
+1 for "your customers are forced to take ownership of this part of the project." alone :)
RobS
+1  A: 

If you don't understand the problem domain, you shouldn't be coding a solution.

You don't have to be an expert, but you cannot be ignorant of the key ideas. As a FORTRAN expert, you won't make any progress coding an FFT unless you have some background in signal processing, and understand why an FFT is necessary, and know a variety of implementations.

Ira Baxter
A: 

Even if you change projects and with them domains frequently, domain specific know how and experience in one sector (or branch of trade) will be always a plus.

stacker
A: 

I look at this as "WHAT" versus "WHY". As in What is the business requirement versus Why is the requirement such as it is. A junior programmer only needs to understand the WHATs of a project. An analyst needs to understand both. In my opinion and my professional status, to stop being a developer and to become a software engineer, you need to add analyst to your skill set.

Jay