Computer science is a rapidly expanding area of study that intersects with disciplines such as engineering, mathematics, economics, medicine, and others. As a consequence, research activities vary depending on the field in question. In general, however, computer science research involves identifying a problem related to computation, and developing a novel proposed solution in the form of a software, an algorithm, or a proof.
Publications in computer science primarily occurs in the form of paper submissions at conferences that typically occur annually. In contrast, many other areas of academic work focus on publication in journals.
Below is a non-exhaustive list of fields in computer science and their research interests.
Algorithms research involves developing, optimizing and analyzing automated problem solving techniques (algorithms). Effective algorithms are especially important for making non-trivial tasks efficient, and can be the difference between a program taking seconds to run, or days to run. Work in this area is generally theoretical, although implementation is often used to test the practicality of theoretical findings.
Artificial intelligence asks how computers may "think" and problem-solve by applying techniques such as statistical inference and logical deduction. As computers are significantly far faster than humans, they are better suited to performing analysis and reasoning over large problem spaces when equipped with sufficient data and appropriate analysis techniques. The field is often grouped together with topics like machine learning and data mining.
Computer architecture consists of low-level implementation and design of how fundamental components of a computer, such as the central processing unit and memory, interact with each other. Efficient organization, storage, and access of data in a computer system is necessary for basic functionality and practicality for end users. Although computer architecture generally does not directly deal with physical implementations of computer hardware, the field is nevertheless related to computer engineering and electrical engineering.
Distributed systems research investigates how multiple computer systems interact with each other. Examples of work involve developing algorithms and frameworks that demonstrate how mutual trust, message passing, and consensus agreement may be established in networks where malicious or malfunctioning components are functioning alongside properly working ones.
Formal methods is a broad field that seeks to apply mathematical formalism to software engineering in order to offer stronger guarantees of software systems than manual testing can achieve. For instance, sub-fields such as software verification seek to demonstrate how certain properties of computer software may be expressed as logical statements that can be proven to be correct or not with the aid of automated reasoning tools. Techniques are often drawn from those used in formal language theory, automated theorem proving, and programming language design.
Computer networking is concerned with how you can use a computer to see this web page while procrastinating your homework. Some areas of work include the design of techniques and software that allows for fast, reliable, and secure connection of multiple computers. Others may involve low-level design for physical components of a network, such as routers and switches. This field is related to distributed systems, computer security, and electrical engineering.
Programming language research deals with the design, implementation, and analysis of programming languages. Although every practical language is Turing-complete, different methods of programming that introduce new abstractions and concepts are nevertheless explored, and sometimes embed themselves into mainstream technology. Work in this field spans from abstract proofs in type theory to low-level implementations in compiler optimization.
Theory of Computation
Theory of computation is concerned with what type of problems different types of computers can, and cannot solve. A "computer" in this sense need not be restricted to the popular Turing Machine model proposed by Alan Turing. Other topics of interests involve classification of problems into different classes of "hardness" and proving equivalences or strengths of different computational models. The field is closely tied with logic, mathematics, and algorithms.