-
A thing, such as a computer program, is described as working if an ultimate goal for that thing can be stated and that thing meets that goal.
-
A thing, such as a computer program, is described as approximately working, if an ultimate goal for that thing can be stated and that thing meets a significant set of goals that comprise the ultimate goal.
-
A thing, such as a computer program, is described as not working, if an ultimate goal for that thing can be stated and that thing does not meet the ultimate goal, or meets a trivially insignificant set of goals that compromise the ultimate goal.
-
The method by which a goal is broken into sub-goals is formally prescribed, by an epistemological effort and by drawing on fundamental concepts of computing. The method is summarised below.
-
A definition is useful if it can be used to construct inferences that coincide with observations.
-
There does not exist another useful definition of a working thing, such as a computer program, except for the one described here.
-
All (decidable) working programs are reduce to a set of decision problems.
-
A program is a function problem and therefore, may give complex answers (not necessarily a decision).
-
An undecidable program may or may not be working. Since this question is undecidable, it is discarded, because it does not give rise to a useful inferences (and therefore, a goal).
-
A goal is composed of two or more sub-goals, if those sub-goals exist independently of each other as goals themselves (potentially disparate from the result of their composition) and subsequently, give rise to a (decidable or undecidable) working program by a process of reverse engineering.
A non-working program by the above definition could still be 'useful' and provide value in real terms. I think this is where the usual arguments diverge - one being about the definition of 'working' and the counter side being about what is 'useful'.