- Writing in Haskell
- Training Talented Haskell Engineers
- Working with Cardano
- Working with Plutus Pioneer Program
The Cardano blockchain uses its own functional language for writing Plutus Core smart contracts, based on Haskell. Haskell developers are rare birds on the market, and those familiar with the Plutus add-on are like a manul cat: they are talked about a lot, but few have seen. Planning to develop the direction of blockchain development, we decided to teach the Plutus language to every backender in the company, including interns who are just getting ready to become part of the Metalamp team. Here we share our experience.
Writing in Haskell
Scripts for Cardano smart contracts are actually written in Haskell and then automatically compiled into their own blockchain language, Plutus Core. However, our love for Haskell began with Haskell itself and before getting to know the blockchain, so first we will pay tribute to it and tell you how and why we chose this language.
Quality, practicality, speed. And also the ultimate expressiveness of the language and its flexibility (for example, operators can be used both in infix and prefix notation, and you can also define your own);
Easy refactoring. Any long-term project involves refactoring; writing new functionality is only 10-15% of the development process, the rest is either adding existing parts or refactoring design errors;
Flexibility and combinatoriality. Haskell offers formal abstractions (functors and monads) that are easily combined and allow you to describe all sorts of relationships between parts of the program, the correctness of which is checked by the compiler;
Haskell has a set of parallel programming tools that almost all popular code editors support;
A powerful high-quality library and the use of Haskell packages allows you to create commercial software, clearly separate pure parts of the program from parts with side effects, and at the same time not rewrite what has already been written before us: the contents of the library modules are automatically imported into all modules of our project.
We understand that Haskell is not a wonderful unicorn, but we are ready to accept its shortcomings, such as a high entry threshold and the lack of a single instruction with best practices and satisfactory IDEs. Haskell allows you to write pure functional code - that is, to do what every developer aspires to. Many of our colleagues agree that Haskell has completely changed their vision of programming and approach to using other languages, and also allowed them to develop their skills in writing code.
Training Talented Haskell Engineers
The program for backenders is dedicated to learning Haskell. Training involves 80% of the beginner's independent work (we do not pretend that the interns don't exist, we answer all their questions and conduct an expert assessment, but we do not motivate or initiate their passage of the program to the bitter end, because we expect them to be enthusiastic), and only 20% of the program is a team training part (pumping soft skills for better adaptation) and review of student projects. The interns devote the first two stages to studying theory, the next two to completing practical tasks, and in the final part they go through a three-stage refactoring of the finished project, receiving feedback from full-time developers. We give fundamental knowledge of the language and appreciate an engineering, high-quality approach to business - therefore, although the interns are still in fact in the "sandbox", the rules of the game are as close as possible to adulthood: the final student project is accompanied by realistic requirements for volume, flexible variables of terms of reference and hard deadline. For the same reason, refactoring takes place in three stages - this is how we achieve the most satisfactory quality of the result of the trainee's work.
The first review is always conducted by a recent graduate of the training program who has just become part of our team - this helps both sides of the process to fill in the gaps left in knowledge after the end of the program, to systematize the information in their heads and better apply it in practice.
At the second stage, comments are made by reviewers who have been working with us for at least six months and have commercial experience; at the last stage, it's time for the middle specialists to check. Middle developer evaluates the overall architecture of the project by making conceptual remarks. The whole refactoring process can be compared to checking an essay by a Russian language teacher, with the difference that we have three different people doing it: the first stage is checking for spelling errors (in our case, for compliance with best practices), the second is checking for syntax , and at the third stage the concept of the project is checked directly. After correcting the mistakes according to the comments of the reviewers, the trainee is interviewed. In practice, the strongest and most motivated usually get to this stage - 1 out of 500 applicants for training. So we are 100% sure that we will hire those who own the theory, have practical experience and know enough to immediately get on the project.
Working with Cardano
The first project we did in Haskell was our own startup Ptichka.moscow (urgent courier deliveries in Moscow). Having launched it, we began to look for customers willing to outsource Haskell projects, and faced a curious reality: most requests for Haskell come from the blockchain market. According to a MarketsandMarkets report, the global blockchain market size was estimated at $4.9 billion in 2021 and is expected to reach $67.4 billion by 2026, at a compound annual growth rate of 68.4% over the forecast period. The growth rate of the blockchain market is associated not only with the increasing popularity of cryptocurrencies, but also with the growing number of government initiatives, as well as the development and use of decentralized applications for payments, smart contracts, supply chain tracking, digital identities, etc. Assessing the prospects of blockchainization, we realized that we did not want to stand aside.
Haskell, as already mentioned, serves as the basis for Plutus Core, Cardano's smart contract language. Haskell has an academic or research approach to programming and mathematical code verification in the development of any product in common with Cardano. The Cardano Foundation says they chose Haskell because it guarantees correct data operations, forces you to write clean code that cannot be misunderstood, and helps secure the open source blockchain on internet platforms.
Due to having Haskell in our service records, we were invited by IOG to participate in testing Cardano smart contracts, and we studied Plutus already in the process of working on this task. This was not an ergonomic solution, because we did not know for sure how long it would take for a particular team member to master the language and when he would be ready to start working. Then we decided to include teaching the Plutus language in our educational program for backenders, so that when they get a job in our company, the juniors well-trained in Haskell immediately join blockchain projects.
Working with Plutus Pioneer Program
Our Plutus training program consists of two parts:
A course of lectures developed by IOG themselves as part of the Plutus Pioneer program, an official project to teach developers the language of the Cardano ecosystem from the creators. Students watch videos (also available in text format), learn code, complete practice tasks, and participate in Q&A sessions, taking advantage of the opportunity to connect with the founders and language experts. Due to the high barrier to entry into Plutus, the creators recommend students to have prior experience programming in a functional style or prior knowledge of Haskell, as well as a developed logical and mathematical thinking.
The student is supposed to devote 10 hours of their time to the Plutus Pioneer course. The program includes learning such basics of Haskell and Plutus as functions and data types, monads, state machines, using Plutus Playground, working with Plutus on-chain and off-chain, EUTxO, PAF and PAB.
Practical exercises prepared by our team. We decided to complement the ready-made cases from IOG with tasks for which our developers will themselves look for and write solutions from scratch - for example, implement an NFT marketplace, create a Faucet application, etc. The purpose of this practice is to solidify the theory and make sure that the developer really understands the material studied.
All tasks must be done; and if someone has difficulties, they can turn to a mentor for help (mentors are recent graduates of our program themselves, who are now working on projects on Cardano). Also, traditionally, for each stage of the training program, we have our own chat; Plutus is no exception. The Plutus Study chat has developed its own community, where the difficulties associated with studying theory or solving practical problems, for example, with launching a project on a test network are discussed. Chats are a great way to keep in touch with team members scattered across different geographic latitudes, share experiences with colleagues, and make it easier to merge into a new area of knowledge.
Blockchain is slowly but surely entering our lives; The popularity of DeFi and smart contracts is on the rise, and the platforms that provide these solutions are rapidly evolving. Cardano is a blockchain implementation in Haskell, a language that has long been our favorite due to its purity and functionality. Using the Haskell library, you can run smart contracts and create secure dApps in a completely predictable environment on the Plutus platform. We teach the Plutus Core language to all our developers, including those who are just preparing to become a member of the team, because we are close to the blockchain philosophy and we want to develop cooperation with the Cardano ecosystem in the long term.
We hope that our best practices will be interesting and useful for those who are not indifferent to Cardano, and also work with promising juniors and interns.