- Proficient in both object-oriented and procedural based programming
- Understand how to set up and maintain a normalized database
- Understand when to implement recursive solutions and how to implement them
- Possess a knowledge of common programming practices such as encapsulation, inheritance, and polymorphism
- Have been trained to write clean, well documented code
- Familiar with system programming ideas and constructs such as locks, POSIX, semaphores, mutual exclusion, etc.
- Have a general understanding of how software interacts with the hardware and can optimize code based on caches, pipelining, etc.