* Write a compiler of any kind (native code, bytecode, HLL-to-HLL, whatever).
* Write an ACID storage engine.
* Write a trivial OS, including the bootloader.
* Write any non-trivial component of a real OS kernel.
* Design a CPU or a microcontroller.
* Write a rendering loop for a 3D game.
* Design a secure cryptosystem out of existing cryptographic primitives.
I give you an A- if you can do one of these, and an A+ if you can do two or more.
Nonetheless, which half do you mean? In my OS class we just worked with a toy MINIX derivative and never got down to anything nearly as nitty-gritty as a bootloader, and the people who didn't drop my compilers class were A-list hackers. I never did any of the others as an undergrad, though I could have and didn't take the class where you build a CPU.
Greater Hacker: Richard Stallman.
Lesser Hacker: Paul Graham.
Where do you fit in between those two?The younger ones often lack perspective and breadth and depth, the older ones often stop learning or dramatically slow down.
If you continually study timeless fundamentals, current technology, as well as industry trends, then over time you will naturally lead tend to lead the pack.
When it comes to programming, I believe some of the most capable programmers outsource the programming to the junior programmers who are still all about the latest technology/acronym and haven't grokked the underlying fundamental patterns/architectures/commonalities/integration. By the time programmers gain enough experience to see that it's all the same, they might be starting to look at starting their true legacy, a family (not code that lives on)
Those are a few good questions.
For fun you can look at http://projecteuler.net/. Project Euler poses a series of problems for you to solve using a language of your choice. Of course you'll need to get your peers to do it as well but the different approaches to each problem can be very revealing. You can learn a lot about your abilities by reading the comments in the forums which are unlocked when you complete a task.
As a side note remember that the power of most programmers is unlocked within a team. Some 'lesser' programmers shine within a team and fail on their own. The reverse is true also. I know many excellent programmers that are near useless inside teams of non-programmers and a few that can't work with anyone.
If that's not apparent to you, then perhaps you need to find some better peers. :)
Just remember, the CS field is broad and not every has the same knowledge.