Sitemap
Abdul Manan

Abdul Manan

Computer science has several main branches; the branches are both theoretical and practical. I’ll start with the theoretical branches, then move from theory to practice. These days, most people think they know what a “computer” is. A computer is the device on which you are reading this answer, DUH!!

3 min readNov 26, 2024

But they don’t understand that there is no theoretical difference between the capabilities of one computer and another, not beyond the big-3 distinctions: how much data it can store, how fast it can process that data and what kinds of inputs and outputs it can produce.

In 1936, Alan Turing formalized the definition of a computer in his Turing machine – TM – building on the groundwork laid by Lady Ada Lovelace and others who helped define the meaning of a computer in the previous century.

All computers are, in theory, equivalent to TMs in their mathematical capacity, with theoretical computer science being the study of what is possible within the limits of a TM. Turing machines can be made out of transistors, neurons or silly putty; they just need certain, mathematical characteristics to be TMs.

We know that some mathematical problems are *IMPOSSIBLE* to solve on a TM. It is impossible to know if an arbitrary procedure will ever terminate (a.k.a. HALT) for all possible procedures on all possible TMs … This is called the Halting problem, and its undecidability is what I call the “core theorem” of computer science.

Everything else in CS flows from it.

Get Abdul Manan’s stories in your inbox

Join Medium for free to get updates from this writer.

So what flows from the Halting problem? The first and most obvious question is what other problems are also undecidable due to the limits of the Halting problem, and these questions are addressed in what is called Computability theory.

Now that we have a good idea what can be done on a TM, we need to ask how to do it efficiently, while acknowledging that TMs ***SUCK*** when it comes to efficiency.

In hardware (the physical machines), we do this with computer engineering. Whereas, in software (the instructions we feed computers), we do it with complexity theory, which given the size of input examines how much time and space is required for an algorithm to complete.

Software is an amazingly complex thing; so, we need to control the intricacy of the resulting “code.” We do this by making high-level programming languages and via a discipline called Software engineering.

Software engineering is the art of combining Algorithms (general recipes) with Data structures that organize input and intermediate storage of data. Software engineers figure out how to bring algorithms to fruition in a complete-and-working, bug-free program on specific, concrete, real-world computers, such as the one on which you’re reading this answer.

Most humans find it difficult to work with the raw machine and, thus, need some sort of User interface to make it friendlier. The study of how to ensure user-friendliness is called Human – computer interaction. But, since computers need to communicate over large distances, there is also Computer networking.

Finally, we come to the fact that computers have a large impact on modern society, so there are a plethora of political, legal and social issues that need to be considered. Infomally, these issues are analyzed in an area called “computers and society.”

Since computers and computer science are now over 180 years old – Ada lived in the 1830s – there is a substantial history that you need to know to make sense out of the vast digital field that drove society to its current state.

--

--