Context
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