Question: I understand that there are three types of programming languages:

* Machine languages
* Assembly languages
* high-level languages

And that:

* Machine languages have no abstraction
* Assembly language have little abstraction
* High-level languages have much abstraction (data types being the difference maker?)

---

Is there a standard or model or taxonomy of programming languages different than machine-assembly-highlevel?

In other words, is this taxonomy necessary or are there more "sophisticated" or "complex" categorizations?

Answer: 
Yes, it is pointless and absurd to implement an algorithm to "guess the number" using [the most common kind of Turing machine](https://en.wikipedia.org/wiki/Turing_machine#Formal_definition), whose head can read any cell on the tape, since, as you pointed out, there is no way to enforce the condition that the algorithm/the machine should not read "the number", which must be a part of the input.

Of course, that does not mean an algorithm that can "guess the number" (efficiently) without reading the number is not useful. For example, the binary search algorithm is used in many places in real life such as [git-bisect](https://git-scm.com/docs/git-bisect) or binary-search routines in the built-in libraries of many programming languages.

Rather, that just means that kind of Turing machine is not the right [model of computation](https://en.wikipedia.org/wiki/Model_of_computation) for that particular problem.

### What is a model of computation?

> 
> In computer science ... a model of computation is a model which describes how an output of a mathematical function is computed given an input. A model describes how units of computations, memories, and communications are organized.
> 
> 
> 

### Which model of computation is for "guess the number"?

One suitable choice for "guess the number" is [an oracle machine](https://en.wikipedia.org/wiki/Oracle_machine).

> 
> An oracle machine ... can be visualized as a Turing machine with a black box, called an oracle, which is able to solve certain problems in a single operation.
> 
> 
> 

A version of the problem of "guess the number" can be stated as the following.

A number has been chosen between integer $low$ and integer $high$. There is an oracle which, given integer $k$, answers the question "is the chosen number smaller than $k$?". How can we design an oracle-machine with that oracle that will find the chosen number given input $low$ and $high$? The less number of times the oracle is used, the better the oracle-machine is.

Beside enabling a solution, the oracle above is used to, in your words, ensure 'the 'privacy' of tokens".

### There are [many models of computation](https://en.wikipedia.org/wiki/Model_of_computation#Models)

There are many different kinds of computational problems. There are also many models of computation. A problem/proposition/argument makes sense only in some models of computation.

Among all models of computation, (that common kind of) Turing machine is the simplest that "can" compute anything that is "effectively computable", basically. That is why you are directed to learn it. However, that does not imply we should/may express and solve every algorithmic problem with it. For another example, it does not make much sense to implement quantum computation on a conventional Turing machine.

### Exercise. What is the most popular model of computation?

By "the most popular model of computation", I mean the one that is used, implicitly or explicitly, when big $O$-notations representing time-complexity or space-complexity are mentioned on almost all millions of web pages on programming. It is certainly not Turing machine.
> 
> Is there any concept of "privacy" of tokens in the world of Turing Machines or some structure that can be used to implement "privacy" in some specific tokens written on a Turing Machine?
> 
> 
> 

There is a concept of [obfuscation](https://en.wikipedia.org/wiki/Obfuscation_(software)). A software code is obfuscated to make it difficult to analyze the behavior of the program, even if the source code of the program is given. This concept is mostly applied to practical programming languages or machine codes but can be applied to more computation models, including Turing machines.

A theoretical concept of obfuscation is [black-box obfuscation](https://en.wikipedia.org/wiki/Black-box_obfuscation). Informally speaking, with such obfuscation, no one with a "debugger" can inspect the program to get more information than just running the program. It is proven no such scheme exists.