Hi, welcome to the section on high-level languages and compilation of the "Programming" part. What is a compilation? For writing a program, first, there is an idea, what do you want to calculate, what do you want to do? Then, think about the main aspects, like creating sequences, just like we saw in the algorithmic section. Then we choose the algorithm, we find it, and we decide on the data structure. After that, the program will be written in a language of your choosing, we'll talk about that in the next section. Then, we are going to need the machine code. That's what compilation is about the part that goes from the program to the machine code, so from the programming language, understandable by a human, towards machine code, which is understandable by the machine, but not necessarily by humans. What is a compiler? The compiler is a program like any other. What does it do? As a first approximation,it will take a text in a specific language, for example, C or OCaml and that text needs to be in exact correlation with what is expected of a program, a certain number of rules for program writing. What does it do with the text? It transforms it into another text, an assembler or an executable, which is understandable for the processor. That's for compiled languages, but there are also interpreted languages, and in that case, the interpreter talks directly to the machine and it is able to consider a text and have the machine execute it. What more does the compiler do? It actually verifies a number of things. That's the first automatic checking to make sure your program is OK. So it verifies there are no syntax errors, that you did place the right of the semi, that the brackets are closed, that kind of thing. And depending on the language, it is going to verify that there are no type errors, that you did not add a list and an integer, and that kinds of errors which are easy to find for a compiler are found automatically. It can also verify some simple syntactic criteria, like verifying that a variable is indeed used, that sort of thing. So it can issue a certain amount of warnings like: "I don't know if you made a mistake, but that here is rather weird because you stated that variable here, but you are not using it". Simply put, it verifies your program can be transformed into an executable, and that it's not nonsense. On the other hand, it does not make sure it performs what you want it to perform. Because yes, you write a program, it is described very precisely, but you are not sure that it is going to do exactly what you want, and that will be the subject of our next section about bugs.