I began my Ethereum smart contract engineering journey some years back. My main motivation was to increase my technical proficiency in the Web3 space. The first question I asked was, “Which language do I need to learn?” Everyone I reached out to recommended Solidity. After over a year of writing Solidity, I got to know that there is another popular language in the Ethereum ecosystem called Vyper. When I heard the word “Vyper,” my mind mapped it with Python, a popular Web2 language. I became interested in this new language, and took about a month to enter its rabbit hole. I really enjoyed writing Vyper because it was a simple and easily readable language. I must also admit that my knowledge of Solidity and Python helped me grasp it faster. Months after I took interest in Vyper, the Curve Finance hack happened. In this hack, the attackers exploited a compiler bug in Vyper and siphoned funds from various projects. This was the time Vyper got the attention of a greater number of developers in the space. Enough with the backstory, the main reason I am writing this is to explain that the Web3 ecosystem needs more Vyper developers. Then, I will teach you the basics of writing a smart contract with Vyper to make you comfortable with the language. I will split this article into two parts: the first one for explaining conceptual underpinnings and the second part for code. In a way, this is a short handbook for developers who want to understand and become good at writing Vyper contracts. Let’s have some fun. What Vyper is all about? Vyper is a high-level programming language for building smart contracts on the Ethereum blockchain, and any other blockchain that supports the Ethereum Virtual Machine. I have noticed that the language was created to enhance accessibility into the Ethereum smart contract development scene. This is why I said that: A greater percentage of Web2 developers can build projects with Python, or at least they have a good idea of the language’s syntax and how it works. Vyper has a similar syntax to Python. Therefore, Python developers can easily build Ethereum smart contracts with it. The main engineering philosophies behind the language are: How Vyper is Different From Solidity? The difference between both languages goes beyond the individual names. To be clear, I will point out some operations and possibilities that Solidity supports but Vyper does not: Yul or Assembly We can optimize the storage of a Solidity contract in the EVM slot stack with Yul, which some other developers call Julia. Yul is simply the possible integration of the Assembly language into smart contracts. It is often written inline. I have written in-line assembly to optimize my Solidity contracts in the past. However, Vyper does not support the concept of using inline assembly for smart contracts. The reasoning behind it, according to the documentation, is that in-line assembly can be quite hard to search and trace for variable names. Function Overloading If you are a JavaScript developer, you should be familiar with the concept of function overloading, which is also applicable in Solidity. This is what function overloading means: Using the same name for two or more functions. Vyper does not support it for two basic reasons. First, it makes code easier to read; anyone might mix up the particular function being called at a given instance. Secondly, it can even be used to write manipulative or misleading code. Operator Overloading The concept behind operator overloading is giving an operator, such as a + or -, more than one responsibility in an operation. The Vyper creators believe operator overloading will lead to more complexities, which is against the ethos of simplicity. Binary-fixed Points Vyper is a language that loves things to be exact. However, binary-fixed points do not always give exact results. Instead, you will get some approximations. In contrast, Vyper supports decimal-fixed points as they give greater precision. Modifiers The concept of function modifiers is popularly understood among Solidity developers. We often use modifiers to introduce security checks or business logic to functions in a contract. Vyper does not support modifiers due to auditability and execution reasons. Personally, I do not really admire this engineering decision, and I disagree with the Vyper creators on this. Will Vyper replace Solidity? No, the intention behind Vyper is not to replace Solidity. Instead, it was designed to be an alternative. This is not really a new thing in engineering. For instance, Android development developers can use either Kotlin or Java to build their applications. Back to Vyper and Solidity, I must emphasize that each language has its trade-offs. As a result, engineers can pick the particular language that suits their needs per time. The presence of language choice is fun as it gives engineers the possibility of preference. After all, variety is the spice of life. I strongly believe that Vyper will not replace Solidity, and both languages will thrive in the ecosystem. Why should you learn Vyper? Solidity is the most popular language in the Ethereum ecosystem, and only a tiny fraction uses Vyper in production. So you might wonder why you should learn Vyper. This is why you should consider learning it: The Best Entry Point for Python Developers As I mentioned earlier, Vyper has good syntactical similarities with Python. So, if you are a Web2 dev coming to Web3, Vyper will be the easier language for you to pick. Become more EVM-native I am quite proficient with Solidity as well. But I wanted to be comfortable with more EVM languages, and Vyper was the best option. Knowing Vyper will help you to become a more proficient developer in the ecosystem as you have more languages under your belt. Become a Better Auditor As an auditor, you have to be familiar with many languages in the space to review contracts written in such languages. If you only know Solidity, you might find it quite hard to review the security of