Each year we host around half-a-dozen interns (stagiaires), for periods of two to six months. These young men and women are usually studying or have just finished studying for undergraduate or Master’s degrees, and are eager to gain experience in the blockchain industry. Each has a unique story to tell about their individual interest in this technology.
In this blogpost, we will ask three questions of one of our current interns: Valentin Chaboche (and a couple of questions of his mentors at Nomadic Labs).
Valentin — so happy to have you with us! We hope you’re having a wonderful and educational period with Nomadic Labs. We’d love to hear a bit about you and your activities chez nous …
My name is Valentin Chaboche, I am 23 years old and a student at the Université de Paris.
In 2019 I graduated from the Université Paris Diderot 7 with a bachelor’s degree in Computer Science, then I stayed for a master’s degree in Language et Programmation, graduating in 2021. The course content includes algorithms and programming, distributed systems, and formal verification.
2. Tell us more about your internship: main subject, who is your mentor, what you have learned and especially, what surprised you the most within these months?
I am doing an internship at Nomadic Labs with the verification team under the supervision of Arvid Jakobsson and Zaynah Dargaye, from March to September 2021.
Nomadic labs is always working to improve the quality of the Tezos codebase and assure its correct behaviour — in particular through mass testing of the codebase and reduction of boilerplate code. My internship aims to contribute as follows:
- Develop an annotation-based system for specifying invariants of OCaml functions.
- Implement a preprocessor that transforms the annotations to property-based tests.
- Explore heuristics for automatically constructing data-generators for types of particular relevance to the Octez codebase (the OCaml Tezos implementation).
My internship has exposed me to many new ideas, including formal verification of programs, blockchains and distributed systems, and metaprogramming. This is also my first experience in a collaborative open-source project. During my internship I have had the opportunity to develop and release libraries, create and review merge requests in Tezos, and participate in open-source projects used in Tezos. I had to learn to communicate and transfer knowledge about my work at Nomadic Labs within development teams, through meetings in small groups, documents, and team presentations.
During the three months of my internship so far, I have been surprised and delighted by the kindness and goodwill of people at Nomadic Labs and in the OCaml ecosystem. They have always taken the time to help me with technical and theoretical questions. I’ve found it to be a welcoming environment for a newcomer like me and I am grateful to have had an opportunity to be part of such a great community.
3. Why did you choose to become a part of the blockchain ecosystem and Nomadic labs? What are your plans after completing this internship?
I strongly believe in distributed and decentralized systems, so participating in such a complex and rich project was a great opportunity for me! Nomadic Labs hosts very smart engineers — and I have discovered that a lot of theoretical insight goes into designing Tezos.
This internship has been an opportunity to work with and learn from talented software engineers and researchers. It’s the perfect opportunity for an OCaml enthusiast such as myself to participate in the development of a complex OCaml codebase, with sophisticated programming features, all while working on one of the leading projects of the OCaml ecosystem.
Valentin already had good familiarity with algorithms and programming, and with the development and versioning tools which we use at Nomadic Labs. Our role was to teach him how industrial research and development is carried out: study the available state of the art, consider and select a solution that seems likely to work, and develop it incrementally as directed by relevant use cases.
At Nomadic Labs, we are constantly looking to assure the high quality of our code.
Property-based testing is a lightweight formal methods-based style of testing that lies between formal methods and unit tests. It relies on asserting correctness properties of code, and then using the computer’s own computational power to generate huge numbers of unit tests from test script heuristics which, in practice, are highly effective at finding corner cases — often more effective than humans.
Our experience with property-based testing has revealed some practical bottlenecks to its more widespread application. In particular, we have found that writing input-set generators and test-scripts can be time-consuming, requires expertise in the tooling, and can become a source of bugs.
Valentin’s internship is exploring techniques to automate such steps, and so permit a more widespread practice of property-based testing in the validation phase of developments in Nomadic labs, and more generally for developments in the OCaml language. This would assure a higher-quality codebase while still making relatively light demands on our developers to provide information for generating property-based tests.
Valentin’s first results are promising. He has been able to validate his approach on concrete use cases in our team’s developments, and we expect other software components could soon benefit from it too.