Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top


I've graduated from college a couple of months ago and now I'm working as a software engineer for a company that builds software products. I consider myself lucky that I don't have to work on one of those line-of-business applications.

The product we're working on is an authentication solution for - I would say - mass market.

I understand that no product could be built without a deep understanding of it's domain. Either it was an industry it's addressing, or a particular set of protocols/use cases/scenarios. In case of a solution like ours, The domain knowledge is a deep understanding of the authentication protocols used by our potential clients, the scale at which it's used, the usage scenarios and other solutions it's going to interact with.

The Question

Now as being a relatively new to the industry, what would be your suggestion towards my education?

Do you think it's more important to dig deeper into the domain I'm currently working on and dedicate my time to read books, blogs, experiment more in my free time about the set of protocols, standards and tools for building authentication solutions?

Or maybe a better idea would be to dedicate my time to get a better understanding of computer science fundamentals that I wasn't taught in detail at the university, like for example:

  • The language (C#/C++/Java/anything's) object model, understanding how really my source code is translated to assembly, what is augmented by the compiler, how can I expect thigs to be really laid out in memory (considering all the optimization, tricks, etc.. done by the compiler and/or run-time).

  • Advanced multi-threading techniques, knowledge beyond the basics like shared r/w locks, task/data decomposition or basic atomicy/lockfreeness.

  • Memory Layouts, Memory models, exact implementations of TEBs.

  • Advanced algorithms for massive datasets, how to deal with enormous amounts of data, failure tolerance, etc..

I believe that the second category will make me a better engineer and will help me with designing any sort of product in the future by equipping me with the awareness of their existence - but again - the domain knowledge in the scope of my product is also very valuable and important.

I would be thankful for sharing your thoughts on this matter

share|improve this question

closed as off-topic by durron597, Snowman, MichaelT, gnat, Bart van Ingen Schenau May 1 '15 at 14:58

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – durron597, Snowman, MichaelT, gnat, Bart van Ingen Schenau
If this question can be reworded to fit the rules in the help center, please edit the question.

up vote 2 down vote accepted

To get you in the door, generic knowledge is enough as you've found. Generic knowledge is also something you need to keep up on. However, the top dollar/big cheese positions in companies almost always are based on deep domain-specific knowledge. You already have or will develop the software skills, the real value is in the ability to help understand and shape requirements, which is what domain knowledge will give you.

For your education: see if your employer will fund specific domain training for the business they are in. Most companies have budget for this, and it won't be on your own time.

It's the same reason you probably were taught the old shapes examples for inheritance in school, everyone knows that domain. Your instructor didn't choose nuclear decay chains for radioactive isotopes for a reason :)

Your intuition is right on breadth though, as you go deeper into a domain you will be committed to it in the eyes of your bosses.

share|improve this answer
I agree with 90% of this. Deeper domain knowledge does not have to become a lock-in, but it can become that if you allow it to be. Where possible, look at the bigger picture and see where your domain knowledge fits in, then try to steer your future projects to those broader areas. The more you do this, the more areas you will be employable in. – Peter Rowell Dec 15 '11 at 4:15

Right now, you should focus on the domain knowledge, particularly so since it is generally useful, and not specific to your current employer. That will be the most rewarding use of your time. When there isn't something you need to know today, then learn whatever interests you.

share|improve this answer
agreed. Domain knowledge is very valuable. Generic skills are common. Domain knowledge isn't. – Rig Dec 15 '11 at 3:32
@Rig: In my experience, no skill is common, unless you mean "using an IDE to copy and paste code". – kevin cline Dec 15 '11 at 4:01
true story. I realize most people suck ass at this profession. I was primarily thinking of those that actually have talent starting in a field that requires domain specific knowledge (something like my start) – Rig Dec 15 '11 at 4:12

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