# Areas of computer science

25 May 2021

## Introduction

Computers are everywhere nowadays. Few technologies have revolutionized our world as computers did. From your coffee machine to supercomputers and Mars rovers, they have helped provide one of the biggest transformations in our way of life.

In this article, I will present to you the various areas of computer science. I won’t be able to provide a comprehensive list of all of them but I hope to provide you with a sense of what it is all about.

## Theoretical frameworks

Before the metal, the bits and the pixels there is the math. I like to think of computer science as applied mathematics because that’s all a computer does; it computes. From the fundamental theories to actually running the computer, math is everywhere.

Boolean algebra is a fundamental framework for computers. Introduced by George Boole in 1847, it defines a mathematical language which now serves as the basis for modelling the behavior of electronics circuits. In boolean, everything is either ON (1)  or OFF (0). A simplified coffee machine might work as follows : pour coffee IF enough water AND coffee type selected AND start button pressed. Your coffee will come out of the machine only if these three conditions are met; if they are ON. In real life, circuits can get pretty complicated with many conditions and interactions between them.

Binary algebra is an extension of the simple boolean algebra where we can perform classical arithmetic using binary numbers. Binary numbers are really simple; they’re just like decimal numbers except that you have only two digits 0 and 1. Thus, when counting in binary you start at 0 then 1, then … 10 because you can’t use 2. Then you can continue 11, 100, 101, 110, 111, … In decimal, numbers are defined with powers of 10 (1,10,100,1000,…) so :

56752 = 5*10000 + 6*1000 + 7*100 + 5*10 + 2*1.

In binary you would use powers of 2 (1,2,4,8,16,32,…) so :

1001001 in binary = 1*64 + 0*32 + 0*16 + 1*8 + 0*4 + 0*2 + 1*1 = 73 in decimal.

Finally, cryptography is another theoretical field of computer science. While cryptographic techniques have existed since the romans, it’s only with the advance of computers that this field really took off. Cryptography is about making it impossible for the wrong person to get access to some information and really easy for the right person. One example is factorization, factoring 52022731 gives us two prime numbers 7789 and 6679. It is really hard to find these numbers but if I give you one you can easily find the other by doing 52022731/6679 = 7789. It is this kind of asymmetry in terms of difficulty that makes cryptography possible; it’s easy to open the lock if you got the key and really hard otherwise.

These theoretical frameworks and many others provide a foundation from which to build computers. It is often mathematicians and philosophers who provide these theories.

## Hardware

Enough math, let’s get down to the metal. Computers are physical machines and as such follow the rules of the universe. Thus, when making computers, physics plays a large role in making sure everything works. Computers are so fast nowadays that the limited speed of light becomes problematic. Indeed when you have a processor running at 5Ghz, one wire too long can actually mean that information can arrive too late to its destination. Moreover, transistors have become so small that they are now made up of a few dozen atoms. It is impossible to understand how small and complex modern processors are.

Added to that engineers also think of the use case. The circuit in your coffee machine and the circuit in the Mars rovers differ greatly in how they were built and for what. For example, the experimental quantum computers from D-wave works in a near absolute zero environment and use niobium instead of copper to wire the system. This is because niobium acts as a superconductor in near 0K° temperatures which means it produces little to no heat from electricity. This kind of extreme engineering will one day lead us to a new revolution in computation.

The internet is in itself one of the greatest inventions of mankind. The complexity that hides behind our screen is almost unfathomable. Thousands of kilometers of cables under the oceans, satellites, routers, god knows how many data centers, etc. The internet is a complex machine that is the size of our planet and with Elon musk’s starlink satellites, there soon won’t be a place on earth without internet access.

Crafting circuits, processors and networks is a complex task requiring a lot of practical knowledge about materials, electricity, thermodynamics, and more. It is the job of engineer to create these tools.

## Software

Once you have the theory and the material, you can start to create programs. Hence, a big part of computer science is about coding. A program is made up of instructions, if you click on this button, open this window, send an email, or turn off the computer. Programs can be big like Operating Systems (windows, IOS, linux), medium like a navigator or word processor, or small like the program in your coffee machine. However they all function according to a set of rules defined by their source code.

Some programs can be quite complex and require advanced knowledge. This includes artificial intelligence systems capable of learning from examples or computer vision systems for facial recognition or image reconstruction. Scientific computing is a special case of programming for supercomputers. This requires advanced coordination between many computing units. Such programs includes simulating the universe or discovering new molecule interactions.

Developing programs and writing code is a complex and abstract task. It is the job of programmers to write code.

## Interface design

Most computers and programs are made for everyday people; hence, a lot of work is put into human-machine interactions. For example, by highlighting buttons when you mouse hover it to show you that you can interact with it, or using images or names of old technology to help users understand these new tools. Some icons of your smartphone probably have the image of an old phone. Designing interfaces and websites that are easy to understand is a difficult job and doing it right can be the difference between a failed app and a successful one.

Creating an interface that is intuitive to use for most users requires an understanding of human psychology and the ability to draw professionally. It is the job of UI designers to design interfaces.

## Conclusion

In this article I presented you four layers of computer science starting with underlying math and finishing on the study of human-machine interactions. Computer science is a vast and complex subject and any two people working in the field often share few common skills. There are many more subjects that we did not discuss like 3D modelling, virtual reality, computer security, data science, and so on!