The terms computer program, software program, or just program are the instructions for a computer. A computer requires programs to function, and a computer program does nothing unless its instructions are executed by a central processor. Computer programs refer to either an executable program or the source code from which an executable program is derived (e.g., compiled).
Computer source code is often written by professionals known as computer programmers. Source code is written in a programming language that follows one of two main paradigms: imperative or declarative. Source code may be converted into an executable image by a compiler. Once an executable image is requested to be run, the central processor executes the program, instruction by instruction, until termination. Alternatively, computer programs may be executed immediately with the aid of an interpreter, generated by other computer programs, or may be embedded directly into hardware.
Computer programs may be categorized along functional lines: system software and application software. And many computer programs may run simultaneously on a single computer, a process known as multitasking.
PZ made the comments (in the post and comments of the post):
It's probably (analogies are always dangerous) better to think of gene products as like small autonomous agents that carry out bits of chemistry in the economy of the cell. There is no central authority, no guiding plan. Order emerges in the interactions of these agents, not by an encoded program within the strands of DNA.
Programs do that. It's not a programming paradigm you'd run into often but think of the processing done by a processor is all hard coded? There's actually a program in there telling things how to function how to carryout the little functions. There's no specific bit of code doing anything until requested it just responds to the signals within the processor.
Why else isn't DNA a program?
You can compare the genome as a data set to the data stored by a computer, and that's legit -- we know how much storage space you need to pack away the sequence. It is not in any way comparable to software.
Clearly you can compare it with the data. You can download the human genome here.
Nah, you guys who argue that a genome is a computer program aren't persuading me at all. You're missing the whole point, that the genome is incomplete and does not specify or regulate much of anything without major contributions from its environment. If there is a computation engine in the cell, it's the cytoplasm.
Computer programs are incomplete. They don't regulate much of anything without major contributions from the environment. If there's a computation engine in the computer, it's the processor.
A computer program contains the operators that work on data from the environment. The genome does not. The genome is part of the data that the cytoplasm manipulates.
No programs do not. The program contains a character or two which is interpreted by the compiler and assembled into a some assembly code (which is really just binary code in a bit more user friendly language) which is then loaded (on execution) into memory and understood by the processor (because the processor is programmed to understand such code), without that understanding the compiler and the processor are screwed. The program itself doesn't manipulate any data; it tells the system what data to change.
A genetic circuit is an excellent example of what I'm talking about! They are utterly dependent on cell signaling and signal transduction for their function. In those diagrams, all those little lines connecting the modules are the important parts -- and that connectivity illustrates patterns of interaction between genes.
And what part of "i++" is understood natively by the computer? The underlying understanding of what "++" should denote is very important as far as the execution is concerned. It depends on the datatype the variable. The expression can change a lot.
Perhaps this clarification will help reconcile me to all the computer people who object to my dismissal.
We can talk about the cell as an analog to a computer program; there's an interesting literature treating development as a trajectory followed by a swarm of state machines. I can buy that.
We can talk about the processor like that too, it needs it's own internal firmware to know how to interpret the stuff it needs to interpret.
What I specifically object to here is the strange isolation of DNA as "the program," an excessively reductionist view. It isn't and can't contain a program. The information there is inadequate -- we tend to ignore all the information that is also inherited from the cytoplasm, and the fact that there is epigenetic modification of the genome in the history of a developmental lineage. That's also part of the "program," and it's just as indispensable as the nucleotide sequence.
It is only reductionist if you somehow have a reduced view of what a computer actually does. The information of a program itself is not enough to make it do anything. If we tried to to run something from a different OS or on a non X86 processor it wouldn't do anything (productive). Without the information in the processor, the OS, the BIOS... nothing is going to execute properly.
Computer programs also suffer epigenetic modification in the form of buffer overflows which are often used to hack computer systems. The data is fed into the upper part where variables are stored while executed in memory. If the array is unchecked, it can start spilling over into the other data and eventually into the program lower down. If accidental, it could easily result in a program crash as gobbledygook is being run as computer code. Whereas, if malicious, it could result in executing code with malicious intent. Some computer viruses are programed to exploit such flaws, which is sort of similar to what allows viruses to take over a cell.
Another thing to consider: DNA came last, protein/RNA/metabolic intermediates came first. The predecessors to the progenote did all of the things we characterize as the product of a program, without a genome.
The same is true for programs. Before we had the programing languages we have today we had more limited one. We had to code in assembly to make the first compilers and before that punch the stuff out in binary... and before that make it in hardware!
It's an analogy. It's not suppose to be perfect. However, it doesn't suffer from a disanalogy stark enough to warrant outright rejection. You could explain computers in the language of biology or explain biology in the language of computers.
The real clincher, if you replaced the DNA in an embryo with different DNA so long as the cytoplasm processor could still read and execute the program it would do so. You could replace a rat genome with a mouse genome and put it in a rat womb and have it give birth to a mouse. That's a program!
Sure, it may seem like a dynamically linked list (.dll file) of function calls used by programs in the OS, or a firmware code for the processor storing how to execute certain signals, or even a trigger based interpreted language. Those are still all programs.
A program is basically anything that tells something what to do when it does what it does.