You can NOT have a single domain of expertise as a programmer, and be a great programmer.
You have to at LEAST have a good base knowledge of both programming, how to solve/codify problems and solutions, AND the domain knowledge of the problem you are trying to solve. Almost no programming is providing programming solutions for programming alone... the vast majority come from real world business needs.
Yes, there are some domains that are programming tools.. languages, platforms and frameworks... and many programmers focus on that, which is why there are plenty of options. However, that alone will not make you a great programmer.
I've spent most of my career doing contract work, because I absorb domain knowledge like a sponge, and enjoy it... I think my most productive time was in aerospace e-learning. It meant becoming a domain expert in e-learning, as well as the subject matter for the content of the e-learning. Now, I'm not a jet engine mechanic, and have no inclination to be, but being able to create a simulated interface for some of those systems was really enlightening, and I learned a lot about sheer engineering from that experience.
I've also had the chance to learn about systems security, and business processes in other positions... Not to mention providing a clear user interface and experience for interaction along the way. I love to learn, and have never enjoyed traditional education. Programming has given me the opportunity to learn in more depth about more subjects than a typical person does in several lifetimes.
If you aren't learning in this industry, and are only focused on programming, then you will be continuously behind... then again, there is plenty of work out there for mediocre code monkeys.
> You can NOT have a single domain of expertise as a
> programmer, and be a great programmer
Nobody said anything about great programmer.
edit: And you're defining great only one way: Someone with multi-domain expertise. Certainly someone who is expert at databases can be a great programmer too.
edit 2: great is measured relative to the problem at hand... If you have a deep technical problem, then multi-domain expertise doesn't really give you any edge. If you have a business problem that needs a technical solution, then having expertise in both the business side and technical side is an advantage.
Personally, I have no problem consulting the domain experts before coming up with a solution. Personally, that's all a great programmer really needs to be able to do in my opinion.
You really think you're a domain expert because someone discussed their business requirments with you in order that you complete a job? Ah maybe you are, but's it's not the impression I feel you're giving off right now.
No offense though, it's probably just a cultural thing. I have a hard time calling myself an expert in anything, yet many with much less skill sell themselves quite a bit harder.
No... I only said I became an eLearning domain expert... What I said was you need to know more than just programming, and insight into the problem domain is critical to delivering the best product (in terms of time, and budget constraints)... knowing what is really needed is important.
I don't really consider myself as much of an expert on anything... I know I'm better than most at JavaScript, and that I (used to) know a lot of current technology surrounding e-learning specifically (haven't followed the tincan project much, which is replacing SCORM).
I never meant to imply that one had to be an expert in the problem domain, only that you had to learn the domain to deliver an exceptional product.
You have to at LEAST have a good base knowledge of both programming, how to solve/codify problems and solutions, AND the domain knowledge of the problem you are trying to solve. Almost no programming is providing programming solutions for programming alone... the vast majority come from real world business needs.
Yes, there are some domains that are programming tools.. languages, platforms and frameworks... and many programmers focus on that, which is why there are plenty of options. However, that alone will not make you a great programmer.
I've spent most of my career doing contract work, because I absorb domain knowledge like a sponge, and enjoy it... I think my most productive time was in aerospace e-learning. It meant becoming a domain expert in e-learning, as well as the subject matter for the content of the e-learning. Now, I'm not a jet engine mechanic, and have no inclination to be, but being able to create a simulated interface for some of those systems was really enlightening, and I learned a lot about sheer engineering from that experience.
I've also had the chance to learn about systems security, and business processes in other positions... Not to mention providing a clear user interface and experience for interaction along the way. I love to learn, and have never enjoyed traditional education. Programming has given me the opportunity to learn in more depth about more subjects than a typical person does in several lifetimes.
If you aren't learning in this industry, and are only focused on programming, then you will be continuously behind... then again, there is plenty of work out there for mediocre code monkeys.