# Do you agree with the statement "Programming is the heart of Computer Science"? Since everybody disagrees, let's play Devil's advocate. If we want Computer Science to mean something, we must explain how it is different to Math. Everybody has different notions of what CS is. Here is how an old teacher of mine who taught both sciences saw the difference. At the heart of Math is the notion of proof. Doing Math is stating true facts and explaining why they are true. Until recently most mathematicians believed (yes, even mathematicians have beliefs...) that every true fact could be proved. Then Gödel came and shattered their dreams, but that is another story. So Math is about saying that something can be done. The simplest way to show something can be done is to do it, and many proofs work that way; they are called constructivist proofs. Sometimes, however, it is easier to prove something can be done than to provide the recipe. It may even be impossibly hard to provide that recipe. But most mathematicians don't care: they are fine with nonconstructive proofs. By the way, we call recipes for proofs "algorithms". (Please pardon me for making an intentional confusion between constructive proofs and algorithms here, I don't want to fall in [the rabbit hole](http://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence).) Computer Science, on the other hand, is concerned with those algorithms and their properties. Of course, algorithms have existed as part of Math way before CS was a thing, but this is not incompatible: algorithms are Math when you care about their result and CS when you study *how* they work. I said CS was concerned about the properties of algorithms. Those include: - What operations does the algorithm use? (Theory of Computation) - How many operations does the algorithm use? (Complexity Theory) - How can the algorithm be described in a way that is understandable by a human and executable by a machine? (Programming Languages Theory) ... and a lot of other things. Disgression: something that this definition does *not* include is Information Theory. I know it is often considered CS, but since it ist mostly about stating true properties about the world I would say it is Math (or maybe Physics...). Shannon's limit theorem was originally proved non-constructively... Back on topic. We have an idea of what CS means, now what is programming? Programming is about writing code, algorithms expressed in programming languages. So, is programming at the heart of CS? I wouldn't say that in those terms. But programming is the main way we express computation, and computation is at the heart of CS.