Architecture (e.g., pipelining, cache memory), Microprocessors, Memory technology and systems, Interfacing. Algorithms, Data structures, Software design methods (structured, object-oriented), Software implementation (e.g., procedural, scripting languages), Software testing.