Hum, allow me to disagree strongly.
Maybe the vast majority of those you read, but not overall. My experience is that most research papers look like math, or linguistic, etc, while the annexes show example use cases that relate to actual pragmatic applications.
From my friends that did PhDs and regularly write research papers, here is what it looks like:
- One of them works on detecting or bypassing virus signatures. The papers look like high level linguistic theorems to prove that some grammars respect some constraints. It's mainly algebra and language theory.
- An other works on watermarks that can resist compression. These ones are 100% algebra and analysis. The applications on watermarking are only mentioned as possible use cases, and a proof of concept was done in his thesis.
- One work on transactional memories. I don't think she even know herself how to program, her papers are hardcore math in some intricate vector space. She has no idea what transactional memories are used for, she's just interested in the underlying math problems to be solved.
Programming is just a way to write down a mechanism. A mechanical computer would be "programmed" quite differently than by writing code in a text editor.
It was stated above that 'a function is effectively calculable if its values can be found by some purely mechanical process'. We may take this statement literally, understanding by a purely mechanical process one which could be carried out by a machine. It is possible to give a mathematical description, in a certain normal form, of the structures of these machines. The development of these ideas leads to the author's definition of a computable function, and to an identification of computability with effective calculability. It is not difficult, though somewhat laborious, to prove that these three definitions [the 3rd is the λ-calculus] are equivalent.
— Turing (1939) in The Undecidable, p. 160
Computer science is most definitely the science of programming machines (computers). It seems ridiculous to me to say CS is not the study of programming. Does CS involve other disciplines like math and physics? Yes. Of course. But it uses math and physics towards the end of programming a machine to carry out the programs.
Let’s consult Wikipedia:
Computer science is the study of computation, automation, and information.[1][2][3] Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (including the design and implementation of hardware and software).[4][5][6] Computer science is generally considered an academic discipline and distinct from computer programming which is considered to be a technical field.[7]
It directly contradicts the narrative you’re peddling. Please, listen to people trying to explain the nuance to you and actually engage. Don’t just keep repeating the same misconception ad nauseam.
“A computer is a machine that can be programmed to carry out sequences of arithmetic or logical operations (computation) automatically”
“Computation is any type of arithmetic or non-arithmetic calculation that follows a well-defined model (e.g., an algorithm)” AKA a program.
So computation is executing a program. And computers are machines which execute programs.
Turing and the Church-Turing thesis define computability as whether something can be expressed as a program (an algorithm).
So computer science is about programming. The science of programming, programs, and the machines that run them.
Nobody is arguing that computers don't compute. Why are you stuck on that minutia?
This is patently incorrect. An algorithm is an idea, whereas a program contains a concrete representation (implementation) of one or more algorithms executable on a computer.
"Programming" in industry has a very narrow definition though.
As has been pointed out to me several times by CS academics, I could stand taking a course in type theory. I have a good intuitive sense about it (likely from my math background), but have no idea how to prove something about it.
A CS courseload certainly doesn't (and certainly not in the required selection of courses) cover soundness of a language. Even my theory-focused classload only covered automata up to proofs of regularity etc. This is, sort of, step 0 in soundness-proving methodologies, but it's only step zero.
The whole reason we want to prove a type system sound is so we can prove certain things about the programs that use that type system.
We use type systems to help abstract patterns of data into logical constructs that can be reasoned about. They are logic systems with grammar that describes relationships between axioms and constructs.
Seriously, go read a textbook and then we can pick this discussion up. Wikipedia has a good overview.
We don’t call set theory and category theory “computer science” unless it’s about programming computers.
Much as how people who study computability are computer scientist, even though none of the asymptomatic improvements to matrix multiplication since 1990 are even remotely relevant to any kind of real-life program.
Typed lambda calculus was formalized before the first programmable computers, and it's relation to programming wasn't clarified for another 20+ years (and real type systems don't really start to appear in programming languages for another decade after that afaik).
With a sound type system, you can do things like compose a new type out of other types, and it will work consistently (not produce weird edge behaviors).
For example, C's `void` type introduces anomalous behavior. A function returning `void` is not composable, e.g.:
void foo();
void v = foo();
would work in a sound type system, but does not work in C. You'll see it in the compiler implementation because it's a special case that appears over and over.not sure what you mean by this, because there's no such thing as programming without computers. (actually, the first computers were invented before programmable computers were invented)
1. take two slices of bread,
2. apply peanut butter to one side of one slice,
3. apply jelly to one side of the other slice,
4. place the slices together with the coated sides touching, and
5. enjoy.
run?The answer is: it runs on dad, poorly :)
Or, you really don't think I can design a logical grammar to formally express the creation of a PB&J?
But there is computer science not applied to computers: Operations research for instance is basically a branch of CS: it is not about programming and it has applications in business, logistics, etc.
My computer science degree covered a lot of topics that didn't require a computer, for example relational algebra, discrete mathematics, and introductory formal logic. Of course, the practical usages of these are often best done through a computer and programming, but it's not a requirement.
In reality all computer science degrees I'm familiar with make an attempt to expose students to relevant programming languages, it's simply practical and students demand it, but the details of coding style, how to use git, or similar topics may not be relevant in a computer science degree. That stuff isn't so hard to learn if you have clear guidelines and they have some baseline amount of intelligence which is one thing a degree tries to validate.
A computer is a machine which runs programs (it computes). That's literally the practical and theoretical basis for computing. Instead of running the program in our heads, we have designed machines to do it for us.
We can calculate SHA256 with a paper and pencil. But we created machines (computers) to compute for us, according to the instructions we give them (the program, the algorithm).
Computer Science is the study of how we design algorithms to process data. We do computer science using grammars that allow us to describe abstract operations on data. We categorize the different types of algorithmic solutions to problems. We study the limits of efficiency and prove things about the various classes of algorithmic problems and their solutions. We generally work with discrete structures and type systems (like our beloved lambda calculus, origin of the Y combinator).
You can design algorithms without ever compiling a single piece of code just like you can add numbers without ever using a calculator. In computer science we talk about abstract syntax trees, higher order functions, context free and regular grammars, finite state automata, logic, and numbers. You can even get meta and modify your own algorithm’s data as part of the algorithm itself. All this happens independent of a particular instance of a physical machine.
Programming means “issue instructions to a given instance of a machine so that it behaves a certain way”. We take all our theory and apply it to an electrical device that has a physical processor and fixed memory. We program a microchip by writing chains of instructions to its memory. We measure performance in cycles per second. When programming we talk about machine instructions, loadable images, calling conventions, binary interfaces, program counter, alignment, and words.
TL;DR: just go read the Wikipedia page on Computer Science, it’s quite clear.
Geezer reaction:
https://en.wikipedia.org/wiki/Computer_(occupation)