I think the skill tree would go something like this:
Level 0: Line Numbers and GOTO
Level 1: Iteration and Procedural Abstraction
Level 2: Classes and Encapsulation
Level 3: Virtual functions and Inherit-And-Override
Level 5: Pointer Arithmetic and Bit Twiddling
Once you hit Level 5, you're pretty much done with the starter dungeons and can head off to seek your fortune across the countryside.
It's interesting to note that Pointers are now coming much later in the development cycle. These used to be a Level 2 thing; now that many introductory classes are taught in managed language I think it's something people encounter much later on...sometimes, sadly, not at all...
Anyway, once you hit level 5 you're free to pursue membership in one or more Guild. It's common to maintain some level of membership in more than one, but few people rise to high ranks in all of them. The three biggest guilds are as follows:
The Object Oriented Guild
- Design Patterns
- Separating interface from implementation
- Conditional elimination through polymorphism
The Highly Concurrent Guild
- Asynchronous paths and threading optimizations
- Multithreaded state management
- Lock-free concurrency
The Metaprogramming Guild
- Functional programming
- Closures and Higher-order procedures
- Code is Data, Data is Code
I make the observation that one of these Guilds is full up with Java guys; I know lots of folks around the Big House who are trying to make it easier for Joe User to get into the other two...
