400 karma · joined May 5, 2018
Sleep deprivation, stress and overwork, controlling the lives of participants, targeting at risk populations, etc. are cult programming techniques.
Looking at the dependencies list (https://gist.github.com/tisonkun/06550d2dcd9cf6551887ee6305e...) I see plenty of reasonable things like:
* Base64/checksum/compression encoding libraries
* Encryption/hash libraries
* Platform-specific bindings (likely conditional dependencies)
* Bit hacking/casting/zero-copy libraries like bytemuck, zerocopy, zero-vec, etc.
* "Small"/stack allocated data structure libraries (smallvec, tinystr, etc.)
* Unicode libraries
There are certainly things that would add bloat too, but I think it's silly to pretend like everything here is something a database engine would need custom implementations of.
People who praise the game by saying "the board teaches you how to play" are technically correct, but I think this glosses over how difficult it is to internalize turn structure before sitting down to play the game.
That being said, it's not the worst game I've ever had to learn. That dubious distinction probably belongs to Wehrle's John Company (scowling at you "Events In India" rules).
I'm not convinced that using AI as more than auto-complete is really a viable solution, because you can't shortcut an understanding of the problem domain to be assured of the correctness of code (and at that point the AI has mostly saved you some typing). The theory-crafting process of building software is probably the most important aspect of it. It not only provides assurance of the correctness of what you're building, it provides feedback into product development (restrictions, pushback that suggests alternate ways of doing things, etc.).
Who’s writing those?
Also this reads like a cry for help:
> Therefore, to keep our Kubernetes clusters optimized, it would necessitate mandating all teams to perpetually engage in complex manual optimization processes indefinitely, or until Mercari goes out of business.
I'm not sure an "Appendable" Int or IO type, or a "Runnable" / "Composable" List type is any less confusing to Joe Programmer. These descriptions do not articulate the same things implied by the Monoid, Functor, and Monad laws. Some of these aren't even correct (i.e. not all Functors are "Runnable", Monadic types do not necessarily compose directly, just via Kleisli composition).
> This says little about whether knowing the field of category theory will be useful to programming. Indeed, I think there's a good argument to say Haskell programming is much harmed by it.
> If its authors hadnt used their knowledge of category theory, but rather named the abstractions in more ordinary terms, the language would be more useful to more people.
I think this is really the least of Haskell's problems. Mystifying/poorly written monad tutorials and conflation with IO (or confusion about how IO works in the haskell runtime) is more responsible for confusing new programmers than the concept itself. I have no background in mathematics above undergrad calc 2 and I was able to understand them just fine.
I’d also recommend the author delve into the existing catalog of negotiation games, since the linked post in the top of this article seems to indicate that they aren’t be aware some of the brilliant games in the genre:
* Cosmic Encounter - Players play one of several wildly unbalanced alien races with a special power and are forced into a series of confrontations where they must either battle or negotiate. One of the few games I’ve played where 1 to N players can win (and I’ve seen cooperative wins before). The game revolves almost entirely around negotiation (with your matched opponent, with other players at the table as potential allies, etc)
* John Company - A wild simulation of running the British East India Trading company. Players hold different positions within the company providing different privileges and effectively must negotiate to better their position. Players can also work to undermine the company at the expense of those more invested in it, or can hedge against the company’s failure.
* Quo Vadis? - Players are Roman politicians who must move their senators through a series of committees, to the inner sanctum, where the player with the most prestige wins. Moving through committees occurs through votes, and prestige can be obtained through voting (as an incentive provided by the game) for others or by negotiating more prestige.
I definitely don't recommend this. While cute, Learn You A Haskell is lacking a lot of pragmatic advice about how to write software in haskell. It's good for getting you up to the FAM trio of type classes but leaves out a lot of practical advice around things like navigating base (what to use and ditch from it), the available community libraries, topics like monad transformers, and pragmatic advice around things like error handling, testing, and isolating effects from tests that come up very quickly in real world Haskell development.
Haskell Programming From First Principles is a much better book IMO: https://haskellbook.com/
I haven't written Haskell in a while, but there may be even better books today as well.
A recent evolution of the term "Euro" has given it the connotation of describing games that are largely solitaire, but historically it was used to denote games that lacked an element of chance (little to no use of shuffled cards, dice, or other sources of randomness), that were often not thematic or based on a licensed property, but that were often _highly_ interactive. Knizia in particular has designed some of the best interactive multiplayer games of all time.
As much as I appreciate the resurgence of interest in board games, I don't love that the designs seeing the most press are narrative games that don't advance the medium or really lend themselves well to the format of tabletop games, but rather seem to be an attempt to bolt on the strengths of video games in a clumsy way.
[1] https://boardgamegeek.com/guild/3948
[2] https://boardgamegeek.com/boardgamefamily/19/series-18xx https://boardgamegeek.com/boardgamepublisher/65/winsome-game...
[3] https://boardgamegeek.com/boardgamepublisher/140/splotter-sp...
The oft-cited Rich Hickey talk [0] I think gets _somewhat_ closer to vindicating the concept of simplicity being something we can talk about more objectively, but I'm still not convinced the concept is worth redeeming. Instead I would propose that languages should have a clear purpose and context in mind. Designing a language with clarity about the intended scale and pace of change in software that will be built in the language, the domain/category of software it is well adapted to build (i.e. embedded, web, OS, compilers, mathematics, mobile, servers, games, and so forth), and the nature of the teams and the public community it intends to support supersedes and encompasses whatever we want to call "simplicity" or "ease". What is easy, simple, helpful, etc. is incidental to how purposefully built a language is to a set of use cases.
Inheritance is not the only problem w/ OO either, many things are straight up awkward to express when you must couple data and code together. Many 2+-argument function w/ disparate parameter types create confusion about which class "owns" the definition of the function.
You also don't need to marry data and code to get the benefits of encapsulation. Many functional languages in the ML family have developed clever solutions to encapsulate the definition of a datatype while exposing it to module-local functions. There's no need for the datatype to carry a method around with it to support this.