You should have maturity in both
the mathematics of computer science and in the engineering of computer systems. This means that you should:
have a good understanding of data structures and algorithms;
be comfortable writing programs from scratch in C and Java;
be comfortable writing and debugging assembly code; and
be comfortable in a command-line Unix development environment (gdb, gcc, etc).
You should also have
a good understanding of computer architecture, operating systems, and computer networks.
Most importantly, you should be eager to challenge yourself and learn more!