Fear of the Turing quagmire in which everything is possible, but nothing concrete can be done simply .Alan perlisWhat is the
Turing bog ? This is a state in which a program becomes so powerful, so generalized, that efforts to solve a specific task with its help equal or exceed the cost of writing a program from scratch that only solves this task.
I often suffer from the desire to go swimming in this quagmire. It all starts with the need to solve some specific problem. I look at the existing tools and see in each of them my flaws. And now, having forgotten about the original task, I’m already throwing out the architecture of a universal tool that will solve a general class of such problems, will be incredibly flexible, universal and ... This bog is especially dangerous for the creators of programming languages. There is a huge temptation to cut the language down to a super-elegant and general functional that can (in theory) solve any problem.
I think a programming language should be mostly self-defined. The language specification should be divided into 2 parts: a small core of operators (which act as axioms) and the rest of the language, which, as theorems, is defined in terms of axioms.Paul graham')
The danger of a quagmire is that instead of solving a problem, you begin to develop a tool for creating solutions to problems. And the wider the range of tasks in which he tries to be useful, the less useful he will be in each specific task. In my case, the trouble is that in solving certain problems, I always try to invent an ideal programming language in which my current task would be easy and simple to write. When I suddenly find myself working on the specification of a new programming language instead of working on the current task, I realize that I was in a quagmire. It's time to stop and rest.
The attractiveness of the Turing bog is that it seems to be a potential solution to all problems. A tool that solves any problems by common methods - what could be better?
In programming, everything we do is only a special case of a more general problem. And sometimes we realize it too quickly .Alan perlisAttempting to understand the relationship of your particular problem and the general class of such problems can really help to see some of the details previously hidden. Sometimes you may well find a couple of reasons to shout "Eureka!" - and these are wonderful moments. Thus, I believe that, ideally, you should always be ready to walk along the edge of the Turing mire, but at the same time have an iron willpower so as not to fall into it. Personally, I have no such willpower, and, even worse, there is great curiosity. For at least some struggle with all this, I came up with a series of heuristics to determine the edge of a quagmire:
- Remember the thought of Alan Kay : "We try to make simple things simple and complex things possible." When solving a common task makes difficult things possible, this is good. But not at the cost of losing the simplicity of simple things.
- No matter how high you flew in the clouds of theory, from time to time get down on the sinful earth. Personally, I always have a certain number of users' wishes and regularly come back to them with the question “will this delightful widget help me solve this commonplace practical problem?”.
- Do not engage in self-flagellation when you suddenly discover that you are still mired in the quagmire. Even if you started to solve problem A and suddenly found yourself to solve a common class of problems C, which does not even include A, remember Alan Kay again: "Successful technology creates problems that only she can solve." Do not be immediately sure that you have created something unnecessary. If you have a little - finish and see what happened. You will never know whether a useful thing turned out until you start using it.
Are you sure that all these whistles and doodles, all these amazing tools that make up your “powerful programming language”, are in fact part of the solution to the problem, and not part of the problem itself?Edsger DijkstraTranslator comment
Turing bog actually occurs more often than it seems. And it would be fine if only the great academic minds solving the problems of a universal scale were sucked into it. But no - universal tools are trying to create everything! Each DVD recording program for some reason acquires its own audio / video / photo editors, cover creation tools, players and converters. Each messenger is our duty to support all possible communication protocols, including email, social networks, SMS, paper letters and sending messages to extraterrestrial civilizations. All OSes climb on all types of devices, each codec pack includes a ton of junk, documentation for some console
programs has 150 A4 pages and a couple of thousand command line keys. Every second website on the Internet is overgrown with moss from the weather \ horoscopes \ dating \ work \ chat \ forums. Trying to attract an extra user of new features, programs and websites lose a dozen others, who hesitated to look for the rational grain for which this program or site was chosen.
No silver bullets. Personally, the only way I can’t slide from a useful, narrowly focused tool into a separate set of low-functional nonsense seems to be a plugin system. Good examples are modern browsers, some online games, IDE and other modular programs (I am sure you will be able to add to the list), which, while still being very ascetic in their basis, provide nevertheless the opportunity to create a combat harvester of any complexity level.
Before you add a new feature to your program, think, does it need at least a quarter of users? If not, maybe it is worthwhile just to bring out the API and give the opportunity to those who wish to write and connect the plugin?