It would be more productive to simply assign attributes to people, and allow all combinations of those attributes.
For example, there are people who have a formal CS education, and those that don't. There are those that have a good grasp of data structures and their applications and those that don't. Those groups have overlap, but not 100%.
If you want to argue that people should have some particular fundamental skill, say that particular skill instead of an abstraction (A CS degree, or 'fundamentals'). We have all met people with CS degrees that couldn't solve a simple CS problem, and we have all met the inverse.
From a practical perspective, you need both the fundamental skills that a task requires as well as the skills to use the tools.