Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Possible Duplicate:
How important is Domain knowledge vs. Technical knowledge?

I often hear from my colleagues and sometimes from interviewers that,

"There is nothing so great in having excellent programming knowledge. One must gain the domain knowledge as the 1st priority. If you have a good domain knowledge, then writing code for that is not a big deal."

(Here domain knowledge is something related to area you are working in. For example, I work in telecom domain, someone might be in Finance or Pharma or Web development or Embedded and so on.)

I disagree with above passage and think exactly opposite. In my career till now, I have seldom missed any deadline for bugfix or feature enhancement. I have kept changing the domains (within telecom) but stuck with learning the programming techniques. Though I might be wrong.

Questions:

  • Is my current approach correct ?
  • Given a choice between domain or programming (with limited time) which one should be chosen ?
  • Is there a good future for a person, who is primarily a very good coder but not so great in a domain (of course initially) ?

I ask this because, I feel that every domain ultimately boil down to code sea in which one has to dive!

share|improve this question

marked as duplicate by ChrisF Oct 15 '11 at 11:53

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

2  
gorilla vs shark? blog.stackoverflow.com/2011/08/gorilla-vs-shark –  Christian P Oct 15 '11 at 8:07
1  
Shame to close this because it is not 'gorilla vs shark' - this is a legitimate choice between two distinct career paths. –  Kirk Broadhurst Oct 15 '11 at 15:56

4 Answers 4

up vote 6 down vote accepted

Excellent question.

A programmer does not need domain knowledge. A good, well-rounded programmer should have the ability to interpret domain-specific requirements and obtain domain knowledge to solve problems, but in my opinion should promptly forget that information.

You have a choice - do you want to be a subject matter expert, or a technical expert?

If you want to work at one company, or stick to a specific industry, then gather that domain knowledge and climb the rungs. You'll soon shift from being a programmer to being someone who works with the rest of the business, liasing between management / marketing (who have business requirements) and the technical team (who just know how to translate technical problems into code). You'll be the guy who sees the requirements document and thinks "Hey, they forgot about scenario X when the moon is in the seventh house and Jupiter aligns with Mars". You are a subject matter expert.

If you want to have core technical skills, you avoid domain knowledge and keep growing your technical skills. This doesn't mean you should be belligerent and refuse to learn. It just means that gathering this knowledge is not your core focus. There are enough technical challenges in software engineering without focusing on business knowledge if you choose to pursue them. Become a solution architect; drive your organisations technical capabilities. You are a technical expert.

It's a legitimate choice. I choose technical expert every time. It means I can work anywhere, and never be sidetracked into work I don't want to do.

share|improve this answer
1  
+1 - Great answer! A programmer does not need domain knowledge. [It means I can work anywhere, and never be sidetracked into work I don't want to do.] –  Karthik Sreenivasan Jan 23 '12 at 7:07
1  
+1 - It's important to be able to pick up knowledge required to do the job, but you can't learn everything. In most companies, there will always be people who are supposed to be experts in the domain that you can poll for help with domain-specific requirements. They hired you to build them high quality software, and that's where most of your focus should lie. –  KChaloux Oct 1 '12 at 16:31
    
But, by concentrating on becoming a purely technical expert you are doing two things:- –  mcottle Oct 6 at 4:57
1  
Pressed return early and overshot the 5 minute edit window. But, by concentrating on becoming a purely "technical expert" you are reinforcing a management fallacy that "programmers are a fungible resource" which leads to all sorts of bad outcomes like "outsourcing to the lowest bidder" & "offshoring" both of which leave you looking for a new job. Your imaginary counterpart that became an analyst programmer or SME and took the time to learn the business will outlast you 95% of the time in a crunch and you will be replaced by one or two fresh graduates that the SME will bring up to speed. –  mcottle Oct 6 at 5:03
    
Both domain knowledge and technical knowledge can become obsolete, but domain knowledge in general has a longer useful shelf life (unless it's about a twilight industry). The ability to acquire new knowledge is a prominent marker of a "rising star". Business owners can identify those who acquire domain knowledge quickly (because they are themselves well-versed in it), but will leave the evaluations of technical knowledge to among the technical leaders themselves. Because of this disconnect, business owners can be quite easily glossing over the value of technical knowledge. –  rwong yesterday

One could even define programming as "mapping domain knowledge to code", so obviously mastering both the domain and coding is mandatory. You have to dive in the code sea, yes, but it's not enough. How could you write the program without knowing what the program is supposed to do? Or, if you know what your program should do, how could you write it if you can't code?

In many cases, the programmer has to know the domain even in more detail than some plain "domain specialist", because the specialist can solve all kind of exceptions and corner cases with his common sense and experience as they turn up, but the programmer has to explicitly handle all those details in the code, before they turn up.

Given a choice between domain or programming (with limited time) which one should be chosen?

At any given moment, the best bet is to improve your weakest point. And, there are easier and harder domains. If you're making mobile phone toy games, then the domain is probably not that hard; the harder part is making the program efficient, portable, good-looking, etc. But if you're making nuclear power plant control program, then it may take years of intensive study to actually master the nuclear physics that your program has to deal with.

Is there a good future for a person, who is primarily a very good coder but not so great in a domain?

You can approach total mastery from either direction, but in the end, you have to master both coding and the domain.

share|improve this answer
1  
I agree and I think when it comes to domain knowledge and technical expertise, it's not a matter of whether you must choose one over the other. In order to be a good software developer you must essentially master both the domain side of things and have the technical skill to be able to translate/map it into code. –  Theomax Jun 13 '13 at 17:41

If you wish to remain only a programmer, working for a company, then domain knowledge is not necessary but if you have, it is good. If you are a part of a team and you have a program manager, then he should possess little domain knowledge. In your case, you gain a basic domain knowledge while working on a project. For example, if you are involved in the development of a product in Telecom domain, then after a certain period of time, you do get a basic knowledge of the Telecom Services Provider.

From my experience, if you run a company or is a part of business development process, then definitely you should have a domain knowledge. You should also have a knowledge of your competitors.

Anyhow, you should keep your eyes open because you won't remain a programmer life long. In future you may lead projects.

Edited

And also, highly scalable products are possible only when you have excellent domain knowledge.

share|improve this answer
3  
"because you won't remain a programmer life long" - Why? –  Kirk Broadhurst Oct 15 '11 at 8:03
    
Because seniority brings more responsibilities, only if you are willing to take. You can code but also manage the project. –  RPK Oct 15 '11 at 8:25

Domain knowledge is good but this is not the responsibility of the programmer. It is the responsibility of business analyst, systems analyst, data modeler, software testers, software architects and sometimes the project manager. Each of these categories require different level of domain knowledge.

The programmer is not supposed to gather or formulate requirements. He/she is supposed to understand requirements and implement these requirements, at least that is in the case in large institutions.

The reason for my argument is that business domain knowledge includes business functions, laws, regulations, interface policies with other businesses, business agreement between organizations, and lots of other details never discussed with developers. Also, programming is not a light skill to acquire and maintain. For example, You can't expect someone to know banking compliance rules, regulations, and OOP.

Nevertheless, a programmer who has worked in a bank for 10 years, would indeed know about banking products and banking system architecture more than a programmer who works for a Telco. This knowledge, makes that programmer more appealing to banking jobs, specially if the new environment uses the same software as the the job seeker environment (for example, same CRM or Credit Card Processing application). In oil companies in Canada, specifically, they usually ask for Oil & Gas expertise from developers - I never been able to justify that.

Domain knowledge allow a programmer to move to other careers if he/she so wishes but defining and documenting domain knowledge is not obvious without a certification, courses or a degree.

In my opinion, the core and foremost important qualification of a programmer should be the technical knowledge in his specialty stack.

share|improve this answer
    
+1 - Programming is not a light skill to acquire and maintain. –  Karthik Sreenivasan Jan 23 '12 at 7:08

Not the answer you're looking for? Browse other questions tagged or ask your own question.