The study of computing is the study of the process of abstraction and its power, the practice of design and method of best implementation, and mathematical theory of computation and its limits. The list of knowledge areas at the undergraduate level thus include Discrete Structures, Algorithms and Complexity, Computational Theory, Computer Architecture, Programming Language Theory and Implementation, Database Systems, Operating Systems, Net-centric Computing and Software Engineering. Emphasis is also given to hardware architectural design and software system design.