For example, Moor observes:. It is important to remember that computer programs can be understood on the physical level as well as the symbolic level. The programming of early digital computers was commonly done by plugging in wires and throwing switches. Some analogue computers are still programmed in this way. The resulting programs are clearly as physical and as much a part of the computer system as any other part.
Today digital machines usually store a program internally to speed up the execution of the program. A program in such a form is certainly physical and part of the computer system.
Moor The following is of more recent origin, and more explicitly articulates the duality thesis in its claim that software has both abstract and physical guises. Many philosophers and computer scientists share the intuition that software has a dual nature Moor ; Colburn It appears that software is both an algorithm, a set of instructions, and a concrete object or a physical causal process. Irmak 3. Anyone persuaded by the abstract-physical duality for programs is under an obligation to say something about the relationship between these two forms of existence.
This is the major philosophical concern and parallels the question for technical artifacts in general. One immediate suggestion is that programs, as textual objects, cause mechanical processes. The idea seems to be that somehow the textual object physically causes the mechanical process. Colburn , denies that the symbolic text itself has any causal effect; it is its physical manifestation, the thing on the disk, which has such an effect.
For him, software is a concrete abstraction that has a medium of description the text, the abstraction and a medium of execution e. The duality is unpacked in a way that is parallel to that found in the philosophy of mind see the entry on dualism , where the physical device is taken as a semantic interpretation of the abstract one. This is close to the perspective of Rapaport A slightly different account can be found in Fetzer He suggests that abstract programs are something like scientific theories: A program is to be seen as a theory of its physical implementation— programs as causal models.
In particular, the simple assignment statement and its semantics is a theory about a physical store and how it behaves. If this is right, and a program turns out not to be an accurate description of the physical device that is its implementation, the program must be changed: If the theory that is enshrined in the program does not fit the physical device, it should be changed.
But this does not seem to be what happens in practice.
Homework Gnome: Science
While the program may have to be changed, this is not instigated by any lack of accord with its physical realization, but by an independent abstract semantics for assignment. If this is correct, the abstract semantics appears not to be a theory of its concrete implementation. The alternative picture has it that the abstract program determined by its semantics provides the function of the artifact, and the physical artifact, or rather its description, provides its structure.
It is the function of the program, expressed in its semantics, that fixes the physical implementation and provides the criteria of correctness and malfunction. Programs as computational artifacts have both an abstract aspect that somehow fixes what they do and a physical aspect that enables them to cause physical things to happen.
What is the difference between programming and specification? One suggestion is that a specification tells us what it is to do without actually saying how to do it.
Science Vectors, Photos & PSD
For instance, the following is a specification written in VDM Jones . This is a specification of a square root function with the precondition that the input is positive. It is a functional description in that it says what it must do without saying how it is to be achieved. One way to unpack this what - how difference is in terms of the descriptive-imperative distinction. Certainly, in the imperative programming paradigm, this seems to capture a substantive difference. But it is not appropriate for all. For example, logic and functional programming languages Thompson are not obviously governed by it.
The problem is that programming languages have evolved to a point where this way of describing the distinction is not marked by the style or paradigm of the programming language. Indeed, in practice, a program written in Haskell Thompson could act as a specification for a program written in C Huss , Other Internet Resources.
A more fundamental difference concerns the direction of governance, i. In the case of the specification of the square root function, the artifact is the linguistic program. When the program is taken as the specification, the artifact is the next level of code, and so on down to a concrete implementation. This is in accord with Rapaport and his notion of the asymmetry of implementation.
One of the crucial parts of the software development process is verification: After computational artifacts have been specified, instantiated into some high-level programming language, and implemented in hardware, developers are involved in the activities of evaluating whether those artifacts are correct with respect to the provided program specifications.
Correctness evaluation methods can be roughly sorted into two main groups: formal verification and testing. In many practical cases, formal methods and testing are used together for verification purposes see for instance Callahan et al.
Formal verification methods include the construction of representations of the piece of software to be verified against some set of program specifications. Axiomatic systems and state transition systems used to evaluate whether the executions of the represented computational artifacts conform or do not conform with the behaviors prescribed by their specifications can be understood as theories of the represented systems in that they are used to predict and explain the future behaviors of those systems.
Kripke Structures and other state transition systems utilized in formal verification methods are often called system specifications. They are distinguished from common specifications, also called property specifications. The latter specify some required behavioral properties the artifact to be encoded must instantiate, while the former specify in principle all potential executions of an already encoded program, thus allowing for algorithmic checks on its traces Clarke et al.
Indeed, once some temporal logic formula has been checked to hold or not to hold of the modeled Kripke Structure, the represented program is empirically tested against the behavioral property corresponding to the checked formula to evaluate whether the model-hypothesis is an adequate representation of the target artifact.
The descriptive and abductive character of state transition systems in model checking is an additional and essential feature putting state transition systems on a par with scientific models. Philosophers and philosophically-minded computer scientists analyzed the software testing techniques under the light of traditional methodological approaches in scientific discovery Snelting ; Gagliardi ; Northover et al. Testing a program against an advanced property specification for a given interval of time, may exhibit some failures but if no failure is executed while observing the running program, one cannot conclude that the program is correct.
A program is falsifiable in that tests can reveal them Northover et al. However, one should be careful to note that other methodological and epistemological traits characterizing scientific experiments are not shared by software tests. A first methodological distinction can be recognized in that a falsifying test leads to the revision of the artifact, not of the hypothesis, as in the case of testing scientific hypotheses.
Science Vectors, Photos and PSD files | Free Download
This is due to the difference in the intentional stance of specifications and empirical hypotheses in science Turner Specifications are requirements whose violation demands for program revisions until the program becomes a correct instantiation of the specifications. Theory-driven experiments, characterizing most of experimental sciences, find no counterpart in actual computer science practice. Indeed, if one excludes the cases wherein testing is combined with formal methods, most experiments performed by software engineers are rather explorative.
Schiaffonati Software testers often do not have theoretical control on the experiments they perform; exploration on the behaviors of the artifacts interacting with users and environments rather provides testers with theoretical generalizations on the observed behaviors. Explorative experiments in computer science are also characterized by the fact that programs are often tested in a real-like environment wherein testers play the role of users. However, it is an essential feature of theory-driven experiments that experimenters do not take part in the experiment to be carried out.
As a result, some software testing activities are closer to the experimental activities one finds in empirical sciences, some others rather define a new typology of experiment that turns out to belong to the software development process. Five typologies of experiments can be distinguished in the process of specifying, implementing, and evaluating computing artifacts Tedre Feasibility experiments are performed to evaluate whether an artifact of interest performs the functions specified by users and stakeholders; trial experiments are more specific experiments carried out to evaluate isolated capabilities of the system given some set of initial conditions; field experiment are performed in real environments and not in simulated ones; comparison experiments test similar artifacts, instantiating in different ways the same function, to evaluate which instantiation better performs the desired function both in real-like and real environments; finally, controlled experiments are used to appraise advanced hypotheses on the behaviors of the testing artifact.
Only controlled experiments are on a par with scientific theory-driven experiments in that they are carried out on the basis of some theoretical hypotheses under evaluation. In other words, an explanation of the observed miscomputation is to be advanced. In particular, computational explanations can be understood as a specific kind of mechanist explanations Glennan ; Machamer et al.
And a mechanistic explanation of such a phenomenon turns out to be the description of the mechanism that brings about that phenomenon, that is, the description of the involved components and functional organization. A computing mechanism is defined as a mechanism whose functional organization brings about computational processes.
Report download problem
A computational process is to be understood here, in general terms, as a manipulation of strings, leading from input strings to output strings by means of operations on intermediate strings. Consider a processor executing an instruction. The involved process can be understood as a mechanism whose components are state and combinatory elements in the processor instantiating the functions prescribed by the relevant hardware specifications specifications for registers, for the Arithmetic Logic Unit etc.
- The Benjamite 1: The Tie That Binds.
- New Research In.
- Top 8 Book 2: Whats Your Status?.
- Streams of Thought!
- Computer Science Experiments (Facts on File Science Experiments)!
- Help with primary-school science homework;
Accordingly, providing the description of such a mechanism or, in other words, describing the functional organization of hardware components, counts as advancing a mechanist explanation of the observed computation, such as the explanation of an operational malfunction. The computing machine is unable to correctly implement the functional requirements provided by the program specifications.
However, for explanatory purposes, it would be redundant to provide an explanation of the occurred slip at the hardware level of abstraction, by advancing the detailed description of the hardware components and their functional organization. One of the earliest philosophical disputes in computer science centers upon the nature of program correctness.
The overall dispute was set in motion by two papers De Millo et al. The pivotal issue derives from the duality of programs, and what exactly is being claimed to be correct relative to what. Presumably, if a program is taken to be a mathematical thing, then it has only mathematical properties. But seen as a technical artifact it has physical ones. On the face of it, Hoare seems to be committed to what we shall call the mathematical perspective , i. Computer programming is an exact science in that all the properties of a program and all the consequences of executing it in any given environment can, in principle, be found out from the text of the program itself by means of purely deductive reasoning.
Hoare Consider our specification of a square root function. The correctness condition insists that this relation satisfies the above specification, i. This demands that the abstract program, determined by the semantic interpretation of its language, satisfies the specification. The statement C is a mathematical assertion between two abstract objects and so, in principle, the correctness maybe established mathematically. A mathematical relationship of this kind is surely what Hoare has in mind, and in terms of the abstract guise of the program, there is little to disagree with.
However, there are several concerns here. One has to do with the complexity of modern software the complexity challenge , and the other the nature of physical correctness the empirical challenge. Programmers are always surrounded by complexity; we cannot avoid it. Our applications are complex because we are ambitious to use our computers in ever more sophisticated ways.
Programming is complex because of the large number of conflicting objectives for each of our programming projects. If our basic tool, the language in which we design and code our programs, is also complicated, the language itself becomes part of the problem rather than part of its solution.