DataFixerUpper looks more sophisticated on the surface, but it's egregiously overengineered, and tools accomplishing the same stated purpose could be made by a freshman with a couple of weekends to spare. It's also not particularly relevant to Minecraft, it's more of a general tool - so anyone hoping to learn about Minecraft from this will really learn more about Minecraft's annoying legacy baggage.
I think you underestimate how many weekends it would take a freshman - when I first took a CS course, I spent a solid few weekends working out array syntax, strchr and strncat, and how to best google compiler error messages. I was pretty proud of the text-based 2-player chess game for which I put in some late nights for my final project...a Minecraft renderer would have been a long way out.
This isn't a Minecraft renderer I'm talking about. The Minecraft renderer would be the non-trivial project I said "might end up being pretty cool" if they open source it.
When I went to university it was back in 94, and then people who took CS courses were pretty much self-taught programs already.
Sure "theory-stuff" was often new, because of the self-taught nature of the under-graduates. (I knew what a stack was because I'd done assembly-language coding, but I had no name for something I'd "created" which was a linked-list. Funny story.)
I assume nowadays with the internet people who want to code, can start early if they wish. Even if the lure of the outdoors is strong, and time is short.
With that in mind I'd assume any first-year student could write a system for updating data-files according to simple rules, (i.e. datafixerupper), and manage a simple parsing-class of some kind which would let you tokenize and react to "/send foo bar" input.
Well it depends what that freshman knows. Perhaps not an average freshman but if someone were to read about/see a talk on profunctor optics in (say) Haskell, trying to implement that in Java could be a fun weekend project. I think I saw a recording of some talk about profunctor optics when I was in my second year.
A reasonably large tested and complete library is not a project for a few weekends but I think profunctor optics in Java actually is. And much more suitable for a xs freshman than a typical Java programmer.
The papers define the "profunctor optics" mechanism, so it's not really that it isn't understood: it's really Haskell code that implements lenses and prisms, which previously had less elegant formulations.
Yes, there is also Bartosz Milewski having a go at applying category theory to explain why profunctor optics work. But that's not an essential part of understanding them: they clearly do what they are designed to do. This is programming, not physics.
I didn't describe them! I just told you what the state of play is.
A lens is a "functional reference". Say you have a data structure of some kind. You can create a lens which points at one of the fields. It lets you get and set that field. Because this is functional programming, when you set the field, you get given a new reference to the whole structure (can't change things in place). So, naturally the way lenses are used involves combinining a reference to a structure of type A, a lens which refers to a field within type A, and, if you are setting the field (not getting it) then you supply the new value as well.
The jury is still out on whether writing programs in this style is wise, but the notion of a lens is fixed now.
https://github.com/Mojang/DataFixerUpper/blob/master/src/mai...