I think this is an interesting analogy because of all of the automated techniques that have been developed for building electrical circuits.
- Current, or Electricity has definite physical properties which allow its behavior to be predicted.
- What are the properties of information? Can information be considered a basic component of software?
- Can (or has) a mathematical notation for expressing information manipulation be (or been) developed?
There's been a great deal of work on the mathematical quantification of information, which we call InformationScience
's work is considered a genesis in the field. You can read his original 1948 article that founded InformationTheory
I am currently reading the article by ClaudeShannon
mentioned above, but I think that its subject is somewhere in the periphery of what I'm looking for. It seems to describe a notation for describing the transfer of data. What I'm looking for is a more generalized notation for a program in general.
I've taken AnalysisOfAlgorithms
, which is the study of how to prove that an algorithm is sufficient for certain time constraints based on a specified amount of data. This capability is very limited in scope. It does not allow for the description in absolute terms the behavior of every aspect of a program. Admittedly, this is done every day by people writing in specific languages, who then use compilers to translate them into machine code, etc.
I would like to be able define the absolute properties of a program. The situation is analogous to PlatosHorse?
(the idea of a horse as compared to an actual horse). The basic question is: is there a basic set of laws that can be used to show that some idea is a program or not?
Oh.. Your original question is far off from Shannon's theory, then. BTW, IMHO, to answer the basic question, we have got to decide what definition we carry for the word, "program." Otherwise, it could be a never-ending arguing in the clouds. After fixing of the definition, we could go on to tell the reference and the sense of the word, and the laws as well; or, if we or a sort of machine had the right feeling to decide which is a program, we could observe our or their decisions and deduce the laws "empirically."
Yes, I was just thinking about that (the DefinitionOfAProgram). What is the best way to define a program? Listing a set of components that all programs have? My mind keeps returning to UML (UnifiedModelingLanguage
), but somehow that is not what I'm looking for either. It assumes an object oriented architecture, and only provides a structural definition of a program (it uses method names to say what the program will do, but it has no mathematical or real-world meaning).
How about this: a program is an ordered set of operations on a bounded set of data.
But ... there's something more to it. The above is no different than what I learned in AnalysisOfAlgorithms
Okay, how about this more literal definition: a program is an ordered set of symbols.
I like that one. A program is a set of symbols, but so are a lot of other things. So now we can start to define patterns of symbols that are typical in programs and not in other sets of symbols. Given any set of symbols, we should be able to recognize it as a program or not.
Now I turn to LudwigWittgenstein
's thoughts on words and their meanings: they are the usage - how we use them. The definition of program is not intrinsic but extrinsic, and it's determined by the way we use the word. Nowadays our usage of the word is heavily confined to TuringMachine
and so are programs of this age. There does not exist any eternal definition for a "program", and to know the current definition we carry for a "program" we need to examine Turing's ideas. Your general definition of program, an ordered set of symbols, is a nice one, but as we narrow it down, I think we'll end up with something quite close to Turing's idea at the end (as long as we are the people of this age who can communicate with other people what is a program or not).
Well, I think you are right. It was fun to think about anyways, though. Are you aware of any recently published work on this subject?
- If a mechanic asks another mechanic "What is a car?", then the answer may be a little more than a non-mechanic asking another non-mechanic the same question. The mechanic's answer may mean "A car is a collection of symbiotic components which collectively achieve the function of transporting a to b" though the wording would probably be different. The non-mechanic answer may mean "A car is a convenient and pleasant means of transport". For most people, since most are not mechanics, the latter answer is sufficient. For that small group of mechanics, the former answer is more appropriate. Well you know what I mean anyway, I hope. I would say that a similar situation exists for the description of program. I prefer the layperson's slant, which would state something like this - "A program is a machine-readable specification of the steps required to realize any desired process within a computer system." -- PeterLynch
CategoryInformationEngineering CategoryInformation CategoryComparisons