 Functional programming has been around for decades, going back to the 1950s. Yet it has recently become an extremely hot topic in the industry. The entire software infrastructure of companies like Twitter is written in functional programming languages. Even languages that were originally fully imperative have adopted ideas from functional programming. Why is this the case? Why this renaissance of functional programming? Well, one of the reasons is the conciseness and elegance that this style of programming allows. In this module, we will look into the origins and basics of functional programming, which is Lambda Calculus. When you first see Lambda Calculus, you might not believe that something so structurally simple can be powerful enough to program in. Let's have a look at the building blocks of Lambda Calculus. And while it might seem a little bit abstract at the first glance, bear with me, because you will see the mechanics soon. First, we have variables. This is your x, this is your y, your z. A placeholder which can be substituted for something else. Next is the abstraction. Now you see where the name is coming from. We write Lambda x dot t. And by that we actually mean an unnamed function of sx with a term t. In regular math or programming, you would possibly write f of x equals t. Just that here we don't have to give the function a name like f. Also note that we have t in this definition, which means that it is recursive. The final element is application. This might seem a little bit odd to you, but by writing one term next to the other, we mean that the first term t on the left is in the shape of a function. And the second term on the right is what we want this function to be applied to. This particular notation requires a bit of practice to get used to, which we will do. But for now, this is it. This is all that is Lambda Calculus. The Lambda notation was invented by this gentleman, Alonso Church. He originally did this as a way to write algorithms in a formal way, concretely for the so-called Entscheidungsproblem, which was brought up by Leibniz and formulated by Hilbert. So as simple as it seems, you might be surprised to hear that it's Turing Complete, which essentially means that we can express and calculate any computable function with it. In other words, this calculus can do everything that your favorite programming language can do, at least from the standpoint of computability.