Introduction
Computer Science involves the study of computation,
automation, and information. Computer science spans theoretical disciplines
(such as algorithms, theory of computation, and information theory) to
practical disciplines (including the design and implementation of hardware and
software). Computer science is generally considered an area of academic
research and distinct from computer programming.
Algorithms and data structures are central to computer
science. The theory of computation concerns abstract models of computation and
general classes of problems that can be solved using them. The fields of
cryptography and computer security involve studying the means for secure
communication and for preventing security vulnerabilities. Computer graphics
and computational geometry address the generation of images. Programming
language theory considers approaches to the description of computational
processes, and database theory concerns the management of repositories of data.
Human-computer interaction investigates the interfaces through which humans and
computers interact, and software engineering focuses on the design and
principles behind developing software. Areas such as operating systems, networks,
and embedded systems investigate the principles and design behind complex
systems. Computer architecture describes the construction of computer
components and computer-operated equipment. Artificial intelligence and machine
learning aim to synthesize goal-orientated processes such as problem-solving,
decision-making, environmental adaptation, planning, and learning found in
humans and animals. Within artificial intelligence, computer vision aims to
understand and process image and video data, while natural-language processing
aims to understand and process textual and linguistic data.
The fundamental concern of computer science is determining
what can and cannot be automated. The Turing Award is generally recognized as
the highest distinction in computer science.
As a discipline, computer science spans a range of topics
from theoretical studies of algorithms and the limits of computation to the
practical issues of implementing computing systems in hardware and software.
CSAB, formerly called Computing Sciences Accreditation Board—which is made up
of representatives of the Association for Computing Machinery (ACM), and the
IEEE Computer Society (IEEE CS)—identifies four areas that it considers crucial
to the discipline of computer science: theory of computation, algorithms and
data structures, programming methodology and languages, and computer elements
and architecture. In addition to these four areas, CSAB also identifies fields
such as software engineering, artificial intelligence, computer networking and
communication, database systems, parallel computation, distributed computation,
human-computer interaction, computer graphics, operating systems, and numerical
and symbolic computation as being important areas of computer science.
Theoretical Computer Science
Theoretical Computer Science is mathematical and abstract in
spirit, but it derives its motivation from practical and everyday computation.
Its aim is to understand the nature of computation and, as a consequence of
this understanding, provide more efficient methodologies.
Theory of Computation
According to Peter Denning, the fundamental question
underlying computer science is, "What can be automated?" The theory
of computation is focused on answering fundamental questions about what can be
computed and what amount of resources are required to perform those
computations. In an effort to answer the first question, computability theory
examines which computational problems are solvable on various theoretical
models of computation. The second question is addressed by computational
complexity theory, which studies the time and space costs associated with
different approaches to solving a multitude of computational problems.
The famous P = NP? problem, one of the Millennium Prize
Problems, is an open problem in the theory of computation.
Information and Coding Theory
Information theory, closely related to probability and
statistics, is related to the quantification of information. This was developed
by Claude Shannon to find fundamental limits on signal processing operations
such as compressing data and reliably storing and communicating data. Coding
theory is the study of the properties of codes (systems for converting
information from one form to another) and their fitness for a specific
application. Codes are used for data compression, cryptography, error detection
and correction, and more recently also for network coding. Codes are studied
for the purpose of designing efficient and reliable data transmission methods.
Data Structures and Algorithms
Data structures and algorithms are the studies of commonly
used computational methods and their computational efficiency.
Programming Language Theory and Formal Methods
Programming language theory is a branch of computer science
that deals with the design, implementation, analysis, characterization, and
classification of programming languages and their individual features. It falls
within the discipline of computer science, both depending on and affecting
mathematics, software engineering, and linguistics. It is an active research
area, with numerous dedicated academic journals.
Formal methods are a particular kind of mathematically based
technique for the specification, development, and verification of software and
hardware systems. The use of formal methods for software and hardware design is
motivated by the expectation that, as in other engineering disciplines,
performing the appropriate mathematical analysis can contribute to the
reliability and robustness of a design. They form an important theoretical
underpinning for software engineering, especially where safety or security is
involved. Formal methods are a useful adjunct to software testing since they
help avoid errors and can also give a framework for testing. For industrial
use, tool support is required. However, the high cost of using formal methods
means that they are usually only used in the development of high-integrity and
life-critical systems, where safety or security is of utmost importance. Formal
methods are best described as the application of a fairly broad variety of
theoretical computer science fundamentals, in particular logic calculi, formal
languages, automata theory, and program semantics, but also type systems and
algebraic data types to problems in software and hardware specification and
verification.
Computer Systems and Computational Processes
Artificial Intelligence
Artificial intelligence (AI) aims to or is required to
synthesize goal-orientated processes such as problem-solving, decision-making,
environmental adaptation, learning, and communication found in humans and
animals. From its origins in cybernetics and in the Dartmouth Conference
(1956), artificial intelligence research has been necessarily
cross-disciplinary, drawing on areas of expertise such as applied mathematics,
symbolic logic, semiotics, electrical engineering, philosophy of mind, neurophysiology,
and social intelligence. AI is associated in the popular mind with robotic
development, but the main field of practical application has been as an
embedded component in areas of software development, which require
computational understanding. The starting point in the late 1940s was Alan
Turing's question "Can computers think?", and the question remains
effectively unanswered, although the Turing test is still used to assess
computer output on the scale of human intelligence. But the automation of
evaluative and predictive tasks has been increasingly successful as a
substitute for human monitoring and intervention in domains of computer
application involving complex real-world data.
Computer Architecture and Organization
Computer architecture, or digital computer organization, is
the conceptual design and fundamental operational structure of a computer
system. It focuses largely on the way by which the central processing unit
performs internally and accesses addresses in memory. Computer engineers study
computational logic and design of computer hardware, from individual processor
components, microcontrollers, personal computers to supercomputers and embedded
systems. The term “architecture” in computer literature can be traced to the
work of Lyle R. Johnson and Frederick P. Brooks, Jr., members of the Machine
Organization department in IBM's main research centre in 1959.
Concurrent, Parallel, and Distributed Computing
Concurrency is a property of systems in which several
computations are executing simultaneously, and potentially interacting with
each other. A number of mathematical models have been developed for general
concurrent computation including Petri nets, process calculi and the Parallel
Random Access Machine model. When multiple computers are connected in a network
while using concurrency, this is known as a distributed system. Computers
within that distributed system have their own private memory, and information
can be exchanged to achieve common goals.
Computer Networks
This branch of computer science aims to manage networks
between computers worldwide.
Computer Security and Cryptography
Computer security is a branch of computer technology with
the objective of protecting information from unauthorized access, disruption,
or modification while maintaining the accessibility and usability of the system
for its intended users.
Historical cryptography is the art of writing and
deciphering secret messages. Modern cryptography is the scientific study of
problems relating to distributed computations that can be attacked.
Technologies studied in modern cryptography include symmetric and asymmetric
encryption, digital signatures, cryptographic hash functions, key-agreement
protocols, blockchain, zero-knowledge proofs, and garbled circuits.
Databases and Data Mining
A database is intended to organize, store, and retrieve
large amounts of data easily. Digital databases are managed using database
management systems to store, create, maintain, and search data, through
database models and query languages. Data mining is a process of discovering
patterns in large data sets.
Computer Graphics and Visualization
Computer graphics is the study of digital visual contents
and involves the synthesis and manipulation of image data. The study is
connected to many other fields in computer science, including computer vision,
image processing, and computational geometry, and is heavily applied in the
fields of special effects and video games.
Image and Sound Processing
Information can take the form of images, sound, video, or
other multimedia. Bits of information can be streamed via signals. Its
processing is the central notion of informatics, the European view on
computing, which studies information processing algorithms independently of the
type of information carrier - whether it is electrical, mechanical, or
biological. This field plays important role in information theory,
telecommunications, information engineering and has applications in medical
image computing and speech synthesis, among others. What is the lower bound on
the complexity of fast Fourier transform algorithms? is one of the unsolved
problems in theoretical computer science.
Applied Computer Science
Computational Science, Finance, and Engineering
Scientific computing (or computational science) is the field
of study concerned with constructing mathematical models and quantitative
analysis techniques and using computers to analyze and solve scientific
problems. A major usage of scientific computing is the simulation of various
processes, including computational fluid dynamics, physical, electrical, and
electronic systems, and circuits, as well as societies and social situations
(notably war games) along with their habitats, among many others. Modern
computers enable the optimization of such designs as complete aircraft. Notable
in electrical and electronic circuit design are SPICE, as well as software for the
physical realization of new (or modified) designs. The latter includes
essential design software for integrated circuits.
Social Computing and Human-Computer Interaction
Social computing is an area that is concerned with the
intersection of social behaviour and computational systems. Human-computer
interaction research develops theories, principles, and guidelines for user
interface designers.
Software Engineering
Software engineering is the study of designing,
implementing, and modifying the software in order to ensure it is of high
quality, affordable, maintainable, and fast to build. It is a systematic
approach to software design, involving the application of engineering practices
to software. Software engineering deals with the organizing and analyzing of
software—it doesn't just deal with the creation or manufacture of new software,
but its internal arrangement and maintenance. For example software testing,
systems engineering, technical debt, and software development processes.
Brief History
The earliest foundations of what would become computer
science predate the invention of the modern digital computer. Machines for
calculating fixed numerical tasks such as the abacus have existed since
antiquity, aiding in computations such as multiplication and division.
Algorithms for performing computations have existed since antiquity, even
before the development of sophisticated computing equipment.
Wilhelm Schickard designed and constructed the first working
mechanical calculator in 1623. In 1673, Gottfried Leibniz demonstrated a
digital mechanical calculator, called the Stepped Reckoner. Leibniz may be
considered the first computer scientist and information theorist, for, among
other reasons, documenting the binary number system. In 1820, Thomas de Colmar
launched the mechanical calculator industry when he invented his simplified
arithmometer, the first calculating machine strong enough and reliable enough
to be used daily in an office environment. Charles Babbage started the design
of the first automatic mechanical calculator, his Difference Engine, in 1822,
which eventually gave him the idea of the first programmable mechanical
calculator, his Analytical Engine. He started developing this machine in 1834,
and "in less than two years, he had sketched out many of the salient
features of the modern computer". "A crucial step was the adoption of
a punched card system derived from the Jacquard loom" making it infinitely
programmable. In 1843, during the translation of a French article on the
Analytical Engine, Ada Lovelace wrote, in one of the many notes she included,
an algorithm to compute the Bernoulli numbers, which is considered to be the
first published algorithm ever specifically tailored for implementation on a
computer. Around 1885, Herman Hollerith invented the tabulator, which used
punched cards to process statistical information; eventually, his company
became part of IBM. Following Babbage, although unaware of his earlier work,
Percy Ludgate in 1909 published the 2nd of the only two designs for mechanical
analytical engines in history. In 1937, one hundred years after Babbage's
impossible dream, Howard Aiken convinced IBM, which was making all kinds of
punched card equipment and was also in the calculator business to develop his
giant programmable calculator, the ASCC/Harvard Mark I, based on Babbage's
Analytical Engine, which itself used cards and a central computing unit. When
the machine was finished, some hailed it as "Babbage's dream come
true".
During the 1940s, with the development of new and more
powerful computing machines such as the Atanasoff–Berry computer and ENIAC, the
term computer came to refer to the machines rather than their human
predecessors. As it became clear that computers could be used for more than
just mathematical calculations, the field of computer science broadened to
study computation in general. In 1945, IBM founded the Watson Scientific
Computing Laboratory at Columbia University in New York City. The renovated
fraternity house on Manhattan's West Side was IBM's first laboratory devoted to
pure science. The lab is the forerunner of IBM's Research Division, which today
operates research facilities around the world. Ultimately, the close
relationship between IBM and the university was instrumental in the emergence
of a new scientific discipline, with Columbia offering one of the first
academic-credit courses in computer science in 1946. Computer science began to
be established as a distinct academic discipline in the 1950s and early 1960s.
The world's first computer science degree program, the Cambridge Diploma in
Computer Science, began at the University of Cambridge Computer Laboratory in
1953. The first computer science department in the United States was formed at
Purdue University in 1962. Since practical computers became available, many
applications of computing have become distinct areas of study in their own
rights.
Degrees in Computer Science
Students can earn computer science degrees at the
undergraduate and graduate levels. Different degrees prepare graduates for
specific career paths. For example, software developers need a bachelor's
degree, while most computer and information research scientists hold a master's
degree.
In addition to degree-granting programs, learners can also
earn a certificate in computer science or attend a coding bootcamp. These
shorter programs offer training in programming, web development, and computer
systems without including general education courses. However, many employers
expect a degree for careers in computer science, so bootcamp and certificate
graduates may not have as many career opportunities.
Certificate Program in Computer Science
An online certificate program in computer science offers
focused training in a niche area of computer science. For example, students can
enrol in a computer programming certificate program or a web development
certificate program. These programs train learners in programming languages and
core skills needed for careers in tech.
The length of a computer science certificate varies
depending on the program and school. Many certificates take one year or less. A
certificate can lead to career opportunities as a computer programmer or web
developer, though most other roles require a degree.
Associate Degree in Computer Science
An associate degree in computer science introduces learners
to foundational concepts in programming. Associate programs incorporate courses
in programming languages, computer systems, and databases, as well as classes
in statistics, algebra, web development, and operating systems. An associate
degree meets the requirement for a career as a web developer or computer
support specialist. Graduates can also transfer into a four-year college to
earn a bachelor's degree.
Completing an associate degree generally takes two years.
During that time, learners take general education courses and classes within
their majors. A transfer-ready associate degree often meets the general
education requirements for a bachelor's degree, significantly shortening the
amount of time required to complete a bachelor's program.
Bachelor's Degree in Computer Science
A bachelor's degree in computer science trains
undergraduates in computer programming, database management, and software
development. In addition to courses within the computer science major,
degree-seekers strengthen their problem-solving and critical thinking skills
through general education requirements in the humanities, social sciences, and
natural sciences. A bachelor's degree meets the requirements for many careers,
including network architect, information security analyst, and software
developer.
Earning a bachelor's in computer science typically takes
four years for full-time students. Transfer students or those who choose an
accelerated program may earn their degrees in less time.
What Is the Difference Between a Bachelor of Arts (BA) and a
Bachelor of Science (BS) in Computer Science?
Some universities offer both a BA and a BS in computer
science. The degrees largely overlap in terms of major coursework and
requirements. However, a BA requires different general education courses,
including a foreign language. In a BS program, undergrads take more math and
science courses.
At many schools, a BA allows students to pursue a minor in
addition to their major, while a BS may not. Graduates of both programs qualify
for entry-level computer science jobs.
Master's Degree in Computer Science
A master's degree in computer science provides advanced
training in software engineering, data analytics, and computer systems.
Master's students often complete required courses in algorithms, programming,
and software architecture. Many programs also offer electives in areas like
artificial intelligence, software management, and mobile computing to train
learners for specialized career paths.
Completing a master's in computer science generally takes
two years, depending on the program and the student's enrollment status.
Universities may offer accelerated programs that take as little as one year.
Graduates can work as data scientists, computer and information systems
managers, and software developers.
Joint MBA/MS in Computer Science
A joint MBA/MS in computer science blends business and
computer science training at the graduate level. The dual program shortens the
time commitment needed to earn both degrees while also offering technical and
leadership training.
Professionals considering supervisory, executive, or
management-level roles benefit from the focused coursework of an MBA while
advancing their computer science skills. Earning a joint MBA/MS in computer
science typically takes 2-3 years.
Doctoral Degree in Computer Science
A doctorate in computer science prepares graduates for
advanced research and academic positions. During a doctoral program, computer
science candidates complete core courses and classes in a specialization area,
like artificial intelligence, human-computer interactions, or machine learning.
After meeting coursework requirements, degree-seekers take comprehensive
examinations and complete a dissertation.
Earning a doctoral degree in computer science typically
takes 4-5 years. Some programs admit doctoral applicants with a bachelor's
degree, while other programs require a master's. With a doctorate, graduates
can work as computer science professors, computer scientists, and research
scientists.
Career Outlook
The increasing scope of computer science means you have
plenty of choice in a wide variety of highly specialized areas.
Computer technologies are integral to modern life, so you’re
likely to find your computer science skills in high demand across many
different industries. These include financial organizations, management
consultancy firms, software houses, communications companies, data warehouses,
multinational companies, governmental agencies, universities and hospitals.
As always, it’s extremely beneficial to have completed
relevant work experience. You should also consider compiling a portfolio of
your own independent projects outside of your degree, which could be in the
form of programming, moderating online or even building an app. This will
demonstrate to employers your interest in the subject and your problem-solving
skills, creativity and initiative.
IT Consultant
Working in partnership with clients, an IT consultant
advises clients on the planning, design, installation and usage of information
technology systems to meet their business objectives, overcome problems or
improve the structure and efficiency of their IT systems.
As you represent a broad role in IT, your job will be
similar to that of systems analysts, systems designers and applications
programmers, whose roles are more specialized but nonetheless work on a
consultancy basis.
You may also become involved in sales and business
development, identifying potential clients and maintaining good business
contacts. There is fierce competition in this role, so gaining work experience
in a commercial environment would help increase your prospects.
Cybersecurity Consultant
Depending on what computer science specializations you
studied during your degree, you may wish to specialize as a cybersecurity
consultant or an information security specialist. Maintaining cyber security
has become increasingly important, so in this role you will focus on
understanding the risks to the security of information or data.
You’ll analyze where security breaches may occur or have
occurred, and restore or reinforce systems against such breaches, to ensure
that confidential data is protected. This role could include ‘ethical hacking’,
meaning deliberately attempting to hack into your employer’s network to expose
any weaknesses. Alternatively, you could work as a computer forensics analyst
or investigator to combat the increasing phenomenon of cyber-crime.
Information Systems Manager
A similar role to an IT consultant, an information systems
manager is usually a full-time member of staff, responsible for the secure and
effective operation of computer systems within their company. You’ll be
responsible (perhaps with the help of a team of IT staff) for the entire upkeep
of the ICT infrastructure within your organization, with typical tasks
involving the overseeing of system installation; ensuring systems are backed-up
and that the back-up systems are operating effectively; purchasing hardware and
software; setting up secure access for all users; ensuring security of data
from internal and external attack; and providing IT support and advice for
users.
You’ll need to make sure the ICT facilities meet the needs
of your company and are current, while remaining within a set budget, and
within all relevant software licensing laws. You may also need an understanding
of business and management principles in order to contribute to organizational
policy regarding quality standards and strategic planning in relation to IT.
Database Administrator
database
administrator (DBA) is responsible for accurately and securely using,
developing and maintaining the performance, integrity and security of a
computerized database. The specific role is always determined by the
organization in question but is likely to mean being involved purely in
database maintenance or specialized in database development.
The role is also dependent on the type of database and
processes and capabilities of the database management systems (DBMS) in use in
your particular organization.
Typically, this role includes ensuring data remains
consistent, is clearly defined, easily accessible, is secure and can be
recovered in an emergency. You’ll also be required to troubleshoot should any
problems arise; liaise with programmers, operational staff, IT project managers
and technical staff; provide user training, support and feedback; and write
reports, documentation and operating manuals.
Multimedia Programmer
A multimedia programmer is responsible for designing and
creating multimedia computer products, making sure they’re functional and
maintaining fidelity to a designer’s specification. You’ll use creative as well
as technical skills to develop multimedia features including text, sound,
graphics, digital photography, 2D/3D modelling, animation and video.
You’ll need to work with the designer to understand the
design concept, discuss how it can be technically implemented, identify the
operational rules necessary, write efficient computer code or script to make
the features work, run tests of the product to test for bugs and rewrite or add
new code if necessary.
You’ll also be available for technical support after the
product is completed and need to keep abreast of industry news and developments
in order to suggest and implement improvements.
Systems Analyst
A systems analyst uses computers and associated systems to
design new IT solutions, as well as modifying and improving current systems to
integrate new features or enhancements, all with the aim of improving business
efficiency and productivity.
This role requires a high level of technical proficiency and
clear awareness of current business practices. Clients may be internal, e.g.
departments within the same organization, or external, depending on your
employer.
Games Developer
Games developers produce games for personal computers, games
consoles, social/online games, arcade games, tablets, mobile phones and other
hand-held devices. This role splits into two main parts. First, there’s the
creative side of designing a game and dealing with the art, animation and
storyboarding. Second, there’s the programming side, using programming
languages such as C++.
To increase your chances of entry into games development
careers, it would be helpful to have studied related aspects during your
degree. It is also essential that you create a portfolio (for artistic roles)
or working demo (for programming roles) with examples of work to show
employers.
Technical Writer
Required in many industries, technical writers produce
descriptions or instructions to help people understand how to use a product or
service. The strong technical knowledge that you’ve gained during your computer
science degree will be very useful in this role, particularly your knowledge of
software packages, as you could be writing manuals for high-tech products.
Technical writers work for an extensive assortment of
industries, from finance to nuclear energy. Again, relevant experience is
useful, as are strong writing skills and the ability to convey instructions
clearly in the relevant language/s.
Other Computer Science Careers
If none of the above computer science careers suit you,
other options with a computer science degree include: working in other areas of
development (such as web, games, systems, products, programs and software), as
an analyst (be it business continuity, systems or technical), as an
administrator (of databases or networks), or in an academic or industrial
research capacity, contributing to the ongoing development of computers and
related technologies. You could also pursue computer science careers in
teaching, IT training, journalism, management or entrepreneurship.