Sorry for a long rant, but maybe I discovered Julia for all the wrong reasons.
For short problem solving, solving problems with short (something like 100 LOCS), my self-assessment is that I am pretty much a genius. I’ve attended several classes where I casually aced exams that my classmates, themselves some of the top students in my country, struggled with.
However, my glaring weakness is that when I need to manage a large system or solution, I struggle a lot. Go above 500 LOCS (And it already took me years of programming to reach this 500 LOCs capacity), and I already struggle immensely. Maybe it’s organization, but maybe it’s also a problem of motivation, or maybe it’s a mixed combination, like maybe that I like to think through everything in my mind, and when the code has reached the point where you can’t plan in your mind and need to prototype it out in code, I struggle with it.
Now, what did I do? I stacked tricks after tricks, gimmicks after gimmicks, picking the most efficient tool possible, using the most expressive and easy language (Julia). However, this has a limitation. If you’re limited to 10 LOCs, for example, then you’re limited in what you can do regardless of the expressiveness of your language. It’s a similar story at 500 LOCs. Moreover, a lot of language expressiveness isn’t just about how one can write a bunch of gimmicks, in which case you could argue no-code things are very powerful, but how the projects you can do scale with the LOCs you make. This means that some of the more powerful capabilities of the language (like in Julia’s case, the ability to make a powerful ecosystem at a fraction of the cost and at excellent quality) would remain far away.
This is what I wanted, and even if I moved to some other goals, this weakness would come back to haunt me.
What I wanted to do with Julia (digression):
Now, what I wanted to do? Have an excellent game that would make even some of the best games out there look like a joke. I was granted a vision on how to do so. First, you need to understand what fun is.
Fun is a mechanism evolved for learning. Fun and play are mechanisms by which we learn and explore the world. Games use this mechanism, and they have players learn.
Now, let’s take a look at the other side of the world: game design. Games nowadays have advanced physics simulation and so on, but they’re mostly cosmetic. Why? Because the developers cannot control or balance the player experience and so on, if the game becomes more complex, it would not be fun.
But, well, what if you have a game complex enough that whatever strategy you come up with, there is an even more powerful strategy? That game would not need to be tightly balanced, right? That is because there would be no dominating meta that would be so powerful as to make the game not so fun. That would be a piece of the puzzle. I would come back later.
So, now, games that are of low complexity are fun. Games that are at the medium-complexity regime devolve into unbalanced nightmares. Finally, games that are of the high-complexity regime can be fun again.
But is there a deeper explanation? I think I found one.
Human brains are learning machines, right? And fun stems from learning, right? Now, look at what the complexity does to learning. At low complexity, there might be only a few parameters you consider. For example, go at the green light, pause at the red light. When the game becomes more complicated, you develop a more complex model of the game with more parameters.
Now, one surprising phenomenon that applies in machine learning is that as long as reasonable architectures are used, several phenomena hold true regardless of the exact architecture. That means it is also reasonable to assume human brains, biological neural networks, would follow a phenomenon too, if it works for something as simple as polynomial regression or a 2-layer neural network to complex ones like Transformers, it probably works for biological models too.
And with that, the final piece of the puzzle is the double descent. At low complexity, there are few parameters, so learning works. At medium complexity, it overfits, so learning here is pretty useless. At higher complexity, however, you have so many parameters that you reach the double descent curve, and the learning happens again, and this time generalizes and is robust. This causes the game to become fun again. This is also the place where learning can generalize well, meaning that learning is robust regardless of the exact game numbers because your learned strategies generalize instead of overfitting to the very specific nature of the game. That means the developers don’t need tight control over the player experience and can let the players explore.
So, overpowered strategies are simply strategies that are overfitting the learned game models!
And what I wanted to do is to reach the point where the game becomes fun again.
End of the digression.
This is where my vision has gone too far.
But how does this relate to all of these? Well, I mentioned making a game complex enough to reach the point where it becomes fun again, right? However, from the first principle, which requires a lot of unorthodox design decisions as well as potentially hard things like physics simulation and so on, you could organically grow player experience.
And to do so would require me going so far (to make such a complex game) as to make things like making a game engine (and arguably the best one at achieving such a goal), like just a warmup. (So, regardless of whether or not it’s strictly needed, I think it’s a good idea.) (And it should be relatively easy, because no other game engine was ever designed to make such a game.) Moreover, Julia already makes starting a new ecosystem (such as making a game engine) as easy as possible.
But “relatively easy” and “as easy as possible” are still hard, and as someone who relies on tricks and gimmicks to make things easy and then solve easy things, when things are genuinely hard, I struggle immensely, yet why am I given such insight?
And well, right now, while I can do (and already did) some smaller tasks like contributing to the Stockfish chess engine, my future looks pretty bleak, like it’s all going to hell.
And while I won’t be attempting to make such a game anytime soon, such a fun game is what I’ve always wanted, so I would probably be stuck trying to make it happen one way or another, but as weak as I am, I can’t make any meaningful progress.
This is where I stand, with a vision far beyond what I could reach, and already pretty lucky that I was given the vision on how to make such a fun game happen, have found such a powerful language to make that happen, and was given this genius-level problem-solving ability to solve problems, but they are not enough!
And this applies not only to this goal but to my smaller goals as well!
I often see a lot of theoretical possibilities, and no way to reach them! My main goal can’t be reached! My smaller goals can’t be reached! I can only do gimmicks and tricks with Julia(or other languages). That’s very limiting!
And considering that Julia is already the most expressive, efficient language I have, I have nowhere left to run to!
I am stuck (with Julia) and have nowhere to run to!