"Computer Science" is a very vague term. But a word with at least some definition removes the aura of mystery. This article is my attempt to define what Computer science is.
I define computer science as a field of knowledge that incorporates:
- Programming craftsmanship. Code writing and knowing your tools to facilitate the programming activity and deployment of the result.
- A few sections of mathematics which help to stay rigorous:
- Proof by induction and by contradiction. It helps to convince yourself and others of the correctness of your thought process;
- Discrete math: graph theory. It provides multiple beautiful graph-like and tree-like high-utility structures and algorithms on top of them;
- Number theory. Prime numbers as building blocks specifically. It helps with the understanding of the basics of information security.
- Algorithms and data structures. Asymptotic analysis of their time and space complexity. It answers why one algorithm is faster or better and why one data structure works better for a given task than the other.
- Theory of computation. It answers, on a fundamental level, what is computable—for example, a halting problem.
- Computer architecture. It is helpful to know some basics of the architecture of the computer: Random-Access Memory vs. hard drives, memory registers, CPU cache, etc.
These are the generic parts one will find helpful during their Computer Scientific or Computer Engineering career. I think these are useful for any skilled programmer. However, the discussion about the deepness of each part can last forever.
Top comments (0)