I recently arrived in New york, and will soon be attending the next 12 weeks batch of Recurse Center. In this post I am going to describe my learning goals. I’m mainly doing this in order to give more structure to my experience of RC, and also for future reference, during and after the batch. But by chance it might also be of interest for other people :)
Main project
The main project I intend to be working on is to build my own programming language. Namely, I’ll be writing an interpreter (or even a compiler) for a programming language of my creation. Well, this programming language will probably be a flavour of an existing language, and hence not revolutionize the landscape.
By the way, this language will be probably be a flavour of Lisp, since I plan to use this book as my main resource. One thing I’ll need to clarify is: in which language the interpreter will be built ? My main candidate was Haskell, because:
- It seems particularly good at parsing stuff, with some good libraries.
- I have been playing and having a lot of fun (and of course learning a lot) with it as a hobbyist, and I’d love to make a project of this size with it.
However, the book mentioned above uses C, and suprisingly enough, I have found very few resources for building its own language in Haskell (more on this later). One idea could be to translate the concepts expressed in C in Haskell while reading the book. But adding this layer of complexity could make an already complex project too difficult to handle. And taking the time to learn and write C is probably a goal worth pursuing, so what could be done instead is:
- Follow the book and write the language in C.
- If time permits, rewrite the language in Haskell, and make a comparison.
Right now, I am favoring this latter approach.
First order goals
My primary goals related to this project are:
- Have a better understanding of the underpinnings of programming languages, and form a knowledge of programming language theory (and related areas, such as type theory, programming paradigms, etc…).
- Develop a better programming languages culture and history. I expect to be perfectly able to spell Entscheidungsproblem by the end of the batch :).
- Learn new languages. I may be using until 3 languages (2 of whom are close to unknwon to me at this time) in this project.
- Feed this blog with interesting things learned along the way.
- Become a better programmer.
Those goals are of course intertwined.
Speculative goals
- Benchmark Haskell and C for building a language.
- Fix the lack of resources in Haskell: I said above that I found very few resources on how to create a programming language in Haskell, so this project might be a chance to remedy to that. I could write a series of blog posts, or even an book ?
Meta goals
- Join and be inspired by a great community. To get as much as possible from the experience, I intend to spend a fraction of my time collaborating with other Recursers, learning from them and getting inspired by some cool projects!
- Find an equilibrium between action and reflection. I general, when working on projects, I tend to spend too much time thinking and analyzing before taking action. This is one area I hope to improve upon during my time at RC.
- Have fun!
Side project
I also intend to dedicate a small fraction of my time to a side project. The main thing I have in mind is getting as far as possible in the cryptopals challenge set. Indeed, I have been wanting to learn about cryptography for a while. Before that I have been trying to do this with a course on Coursera, and while the instructor and the content are great, I have found that I personally need a more active / “hands on” way of learning, and a problem set will definitely fit that bill. However, since I also like to back my skills with theoretical foundations, I’ll certainly need to be more proactive on this aspect.
Also, there seems to be a tradition on cryptopals which is to do the problem set in a language which we don’t know (and adding yet another language to my RC mix !!). I am currently thinking about Rust.
Final word
I may, as often, be overestimating the quantity of things I ‘ll be able to achieve. It’s also possible that things end up unfolding quite differently than described above. Anyway, writing this post has been interesting and useful (at least for me!) inasmuch as it allowed me to structure my thought process, and it will probably useful to come back to it when in doubt, even if I end up doing things very differently.
As stated above, I’ll probably write some more posts during the batch. Can’t wait to start!