Welcome dear friend to my black-box-learning project. The goal of this project is to create a black-box learning environment for you - the player. What does it mean? The player can perform actions, which interact with the environment and the environment responds. The player aims to achieve some goal, e.g. minimize the number of steps to reach the objective. However, the player has no idea about how the environment works or even what exactly the goal is. The player has to learn by experimenting.
This sort of learning takes a lot of inspiration from a baby child interacting with the physical world. The child does not know what will happen on most of the actions it will perform. What will happen, if I throw this glass against the floor? What will happen, if I put this sock on my head? What will happen if I press the power button on a computer? The child has many interactions to learn about and the learning process is very similar to a computer game. The weird thing is that once we grow up, there are not that many playful interactions we can experiment with. We already know most of the rules of the physical world and there is not so much interactive learning around to play with.
The main goal of this project is to create such an environment for a grown-up person. The problems proposed can be only solved by experimenting, using pattern recognition, and reasoning. The project provides all of this also as a programmatic endpoint, so that one can even write programs to experiment faster. Therefore this project can be also used as a way to learn coding in a fun and interactive way. For some of the problems, it will be very difficult to come up with a solution without using any computing power, so coding along the way is highly recommended.
While the main goal is already very daring and potentially complex, there are two more factors which I want to tackle:
- I plan to write the whole project in Rust. I have learned a lot about programming by starting to learn Rust and I am continuously being pleasantly surprised by it. We have already started migrating to Rust in my work. This is currently my go-to project to get more experienced in Rust. If you want some reasons on why to pickup Rust, start for example here here. A list of great learning resources might be found here, and as everyone I recommend to start with the official Rust Book.
- There are currently some serious issues with my coding habits. The main one (I currently know of) is that I tend to work on projects as a soloist. The biggest issue is that I do a lot of reworks with 10,000+ changes in a single PR. This is not very scalable in a team of people and also leads to a lot of possible errors. Based on a lot of discussions and also this, I have decided to properly learn to work in an iterative fashion. Therefore this whole project will be developed in a whole bunch of small commits, which will serve as my personal "blog" of learning to be a better developer.
In the spirit of the two points above, it is highly likely that the main aim of this project will be never fulfilled to actually "run in production". But for myself, the road is more important than the destination. And also for you my dear friend, the same might apply. You might never see the full end result of this project, but I encourage you to go through all the commits one-by-one and learn Rust and iterative development with me.