Comment Fundamentally Wrong (Score 1) 1533
Computers are fundamentally flawed, as with most mathematically modelled systems.
Godel's Incompleteness Theorem (yawn, I know) shows us that no mathematical system can be complete or provable if it has the ability to self-reflect - i.e. can describe aspects of itself or abstractions of other systems within itself.
The fundamental flaw in computer software is that we stupidly assume that our programming languages are complete, provable and are running on an idealised machine capable of reliably repeating instructions ad infinitum.
Computer software is merely a final layer of abstraction on top of a teetering tower of already leaky abstractions. We cannot possibly expect software to run reliably when we do not understand how an abstraction at one level affects an abstraction at another level.
E.g., Silicon designers make decisions that impact on application programmers. A CPU speed stepdown to conserve energy on a mobile PC could cause a time-critical event to be delayed, causing a program to fail. The programmer has no knowledge that this is the root cause, as he/she only thinks at the level of the programming language and assumes (has to assume for sanity's sake) that the language is running on an idealised computer.
How do you check for bugs when you cannot even identify a problem as being within the domain of the abstracted layer with which you are dealing?
This path leads to fudges, fixes and kludges.
That is why our software doesn't do what it says on the label. And the bigger it gets, the harder it falls.
Current finite-state automata based computing is fundamentally doomed. It is time for more radical approaches to how we abstract and map real world problems on to machine hardware.
Q-bits anybody?
Godel's Incompleteness Theorem (yawn, I know) shows us that no mathematical system can be complete or provable if it has the ability to self-reflect - i.e. can describe aspects of itself or abstractions of other systems within itself.
The fundamental flaw in computer software is that we stupidly assume that our programming languages are complete, provable and are running on an idealised machine capable of reliably repeating instructions ad infinitum.
Computer software is merely a final layer of abstraction on top of a teetering tower of already leaky abstractions. We cannot possibly expect software to run reliably when we do not understand how an abstraction at one level affects an abstraction at another level.
E.g., Silicon designers make decisions that impact on application programmers. A CPU speed stepdown to conserve energy on a mobile PC could cause a time-critical event to be delayed, causing a program to fail. The programmer has no knowledge that this is the root cause, as he/she only thinks at the level of the programming language and assumes (has to assume for sanity's sake) that the language is running on an idealised computer.
How do you check for bugs when you cannot even identify a problem as being within the domain of the abstracted layer with which you are dealing?
This path leads to fudges, fixes and kludges.
That is why our software doesn't do what it says on the label. And the bigger it gets, the harder it falls.
Current finite-state automata based computing is fundamentally doomed. It is time for more radical approaches to how we abstract and map real world problems on to machine hardware.
Q-bits anybody?