User:Msiddalingaiah/Deterministic vs. non-deterministic
Thought processes are generally non-deterministic, or at least difficult to describe as a deterministic process. Many great ideas are a consequence of non-deterministic thinking. It's like a maze, you know the starting point and the ending point, but there is no straightforward algorithm to get you to the end. Even the simplest of machines can follow a deterministic algorithm, so it is often valuable to convert a non-deterministic problem into a deterministic one.
Examples of non-determinstic problems:
- You need to work harder
- Build a better website
- Write a three page essay for English composition
- Take exit 18, then turn on Main st, the house is on the left
One standard technique is powerset construction. This basically requires exhaustively trying all possible options until a solution is found. It's like going through every path in a maze until you get to the end. This will work, but it becomes highly inefficient as the problem becomes larger.
Creativity is a form of non-deterministic thought. If you were to ask a great musician, artist, or scientist how they achieved something extraordinary, they often don't have a simple answer. Probably because they themselves aren't completely sure how the got there. My guess is that there are many factors at play. This might include:
- Trial and error, a weak form of powerset construction
- Heuristics, e.g. trying something that worked somewhere else in a similar field
- Applying ideas from a totally disparate discipline
- Serendipity, luck, or a wild guess, e.g. true randomness
The truly gifted probably have a highly refined sense of what might work. It's often the case that highly creative people are prolific, they are not just one hit wonders. This might be due to some inspiration working at a level that is not easily quantified.
Deterministic thinking is not as natural and generally requires formal education and greater discipline. Deterministic processes are more efficient, consequently, efficient processes are generally deterministic.
Development (particulary software) can be characterized as an effort to translate a non-deterministic specification (requirements document) into a deterministic system (code). In general, this is a hard problem to solve. In certain bounded cases, it is possible to automatically perform this translation.
Additional challenges are introduced when the source specification is incomplete or depends on assumptions. This might include "common sense" assumptions. In my opinion, common sense is far from common. At the very least, it's ill defined and takes years to learn.
Consider the simple of case of explaining driving directions. A robust specification includes very detailed instructions. It might include redundancy and error correction to avoid getting lost. In general, deterministic driving directions are more reliable than non-deterministic directions.