When you think about computer science, what is the first thing that comes to your mind? Complex Algorithms? How computers are built? CPU Processors? Which field are we talking about?

Well, to get started we are not talking about an engineering or software development in itself. Computer Science is a field of study that focuses on complex algorithms and mathematics ( like abstract algebra ) and also on technical aspects you should know. Like the underlying technologies of a computer: Binary Numbers, CPU's, RAM, how do we interact with the CPU? Not everything in this field is about writing software, rather, understanding the underlying technology below what is there to see.

What you learn in this field is about: How does my computer work? or that is one of the main questions you want to answer. Now the dictionary definition is:

The science that deals with the theory and methods of processing information in digital computers, the design of computer hardware and software, and the applications of computers.

https://www.dictionary.com/browse/computer-science

This is a Science, which means that it is closer to Mathematics and Physics rather than to engineering. Another word or a synonym often used in universities to describe it is "Informatics" or dictionary definition:

Informatics is the study of the structure, behaviour, and interactions of natural and engineered computational systems.

https://www.ed.ac.uk/files/atoms/files/what20is20informatics.pdf

Informatics, like it's name describes it is a way of interconnecting Information and Mathematics. One way to do such thing is, for example algorithms. Also, we can connect information and mathematics through data bases, programming and software, etc..

Now when dealing with Computer Science we find these main subfields:

### Mathematics

Mathematics in Computer Science is unlike the one you see on school. When dealing with these Mathematics, we normally speak about Abstract Mathematics or Discrete Structures. Abstract Math's/Algebra deals with "groups".

#### Groups

Mathematicians like to generalize problems. Make tools that work for almost every single case with very little exceptions. This is very useful, for example, to solve a quadratic equation. We have generalized that all equations that fit within a certain range of numbers can be solved through the quadratic equation. Even those that are complex.

The same kind of generalization happens with groups. In abstract algebra, a group is a set of elements defined with an operation that integrates any two of its elements to form a third element satisfying four axioms.[Source] What are some examples of groups? Well, does this make sense?

23 + 1= 0

Yes it does! A group of "clock numbers" is very very useful. A day has 24 hours starting from 0 to 23. So the elements of this group are { 0, 1, 2, 3, ...... , 22, 23 }. This group has special operations and special ways of adding and subtracting. You can not just have 25 hours in a day (at least on earth). So what we do is count and we know that 23 + 1 is 0. Equally 18 + 12 would be 6. In this case, we can also define a day as all integers mod 24.

Groups have a lot of uses in different fields, like RSA Encryption, Music (The octet's), trigonometry and much more. So having a way to generalize operations into groups helps create many logical algorithms that we can use in different fields.

Check more about it on this super helpful video:

#### The normal algebra

There is also the "normal algebra" that you should learn for computer science. Algebra like integration, basic set theory, derivatives and much more. This algebra is required for computer science or informatics because:

- It helps you think on a rational way.
- It also helps you with very specific algorithms that are required!
- Probability approximations
- Lighting, ray training and a lot of graphic usages are based on this!
- Physics!!

### Programming

Computer scientists depend also a lot on programming to create those algorithms. Imagine you have an amazing algorithm that takes years to solve manually! We can solve algorithms in matters of seconds with programs. Because in some cases they can compute up to 4,000,000,000 (4 billion!) operations per second. And we mere mortals can compute 1 operation per second maybe? We are just not computers man!

You can pretty much do anything with programming. You can simulate real life and there are some that think that we live in a simulation. Which is completely possible given enough compute power (Not that I think we live in one, but it is theoretically plausible)

So from games, to complex mathematics to getting computers to work without having to change the hardware every time we run a program. So programming must be in the skill set of any computer scientists. Although computer science is not all about programs, it is a basic skill you need.

### Technical Computer Science / Technical Informatics

Another very important set of skills for any computer scientist is technical informatics. This is basically knowing how computers work: Binary numbers, Memory, RAM, difference between hardware and software. This is very fundamental, as many programs, like java, let you play with the underlying hardware of a computer. You can for example have overflows on purpose ( that is when a number does not fit anymore in a type of number. For example, Integers are defined in Java as the set of numbers between -4 billion to +4 billion aprox). And knowing how you can play with the underlying hardware is very important because it can lead to bugs that can have catastrophic consequences or it can lead to more efficient programming.

And this is also a base in case you want to develop further into hardware development like CPU's that use logic gates, transistors, and all those technical things.

## Conclusion

All in all computer science is a very robust field of study that not only focuses on what most people think, programming. It is also not easy at all, hence they are very well paid. Learning about data structures, thinking about efficiency and using the underlying hardware to your advantage is something that has to be very well thought. As you might know, software bugs can lead to even death. Software is used in our every day life's in fields that are so necessary like medicine, space, manufacture and logistics. If all computers died all of a sudden, truck drivers from huge companies would not know where to deliver food! Ventilators or life support also require robust verified software.

Being a computer scientist can be a very interesting field and having it as a base can help you integrate it with other fields. I personally find that once you are a computer scientists you can logically see how you can program processes and reduce costs.

So yes, you should be a computer scientists 🙂 Only if you like maths though, as this is crucial. You are a Scientist not an engineer (not saying one is better than the other)