Computer science is the theory, experimentation, and engineering that form the basis for the design and use of computers. It involves the study of algorithms that process, store, and communicate digital information. A computer scientist specializes in the theory of computation and the design of computational systems. An essential aspect of what differentiates computer science from coding, programming, and the fields it encompasses is captured in a definition utilized by Owen Astrachan: it is the study of automating algorithmic processes that scale. Its fields can be divided into a variety of theoretical and practical disciplines. Some fields, such as computational complexity theory (which explores the fundamental properties of computational and intractable problems), are highly abstract, while fields such as computer graphics emphasize real-world visual applications. Other fields focus on challenges in implementing computation. For example, programming language theory considers various approaches to the description of computation, while the study of computer programming itself investigates various aspects of the use of programming languages and complex systems. Human–computer interaction considers the challenges in making computers and computations useful, usable, and universally accessible to humans.