Go is a bunch of preferences and aesthetics. It clearly appeals to a bunch of folks, others have a hard time putting up with it.
Everyone is free to both love and/or hate go. The language's spirit is not going to change. I'd much rather see more realism, honesty, and acceptance. Instead, this class of discussions always seems to become incessant "no u" ping-ponging.
Certainly not what I'd consider curiosity and critical thinking.
What I find most maddening about it is that the batteries are technically rechargeable! The vapes just aren't configured to support it. (And the presence of nicotine "juice" in the vape - especially if it's been damaged, e.g. by being run over in a gutter - makes them difficult to recycle safely.)
I think if we sold daily short-term use items with sealed AA/AAA with the amount of sales as disposable vapes, we'd be having the same discussion about AA/AAA batteries now. But we don't. Aside from anomalies like, say, the Gameboy or Game Gear, traditional batteries are used in things like remotes or smoke detectors, where you might need to replace the batteries every few months.
> Aside from anomalies like, say, the Gameboy or Game Gear
And at the time there weren't good rechargable options. If modern NiMH had existed a few years earlier, lasting just as long as alkaline for a dollar each, they would have been the normal power source for those hungry devices.
I had an external battery pack for my Gameboy, could play and charge off the wall at the same time.
IIRC, no indicator of charge, just had to guess based on the contrast setting. I think it did eventually fail to hold a charge, but it lasted several years, at least. Not as good as NiMH from several years later though, but it was better than buying batteries all the time.
Someone in the reviews posted test results and found they only had a 253-333mAh capacity at 1.5v (so 0.5Wh). 10440 lithium-ion cells (which closely match AAA size) have 250-350mAh at 3.7v (say, 1.295Wh).
If they actually had the 1200mAh capacity they say they'd have 1.8Wh which is much higher than a straight lithium-ion cell without the charging and voltage regulation circuitry taking up space.
Yeah, this worries me a bit! Never seen any issues, and I'm only using them in low-impact environments (keyboards + mice), and only charging while present.
Venting: I'm so tired of this. I've countless times learned that something something monoid of endofunctors. And yet, I've never been able to make that knowlwdge more useful than "do a flatMap here".
Not looking for solutions. Ok with emotional support.
I work with a bunch of functional programmers. We went through most of “category theory for programmers.” We had support from a math PhD.
Broad consensus was it was a waste of time. Functional programming has taken the useful bits, and some of the less useful bits. The rest is arcanum, and as useful to programming as astronomy
I'm a PhD in math. I love category theory and it's very useful for studying abstract algebra at the research mathematics level because it clarifies concepts and even provides algorithmic ways for computation at that level (e.g. adjoint functors and cotriples to compute homology). But to be honest, except for computer science researchers, I would not recommend it to programmers. I am also a programmer (at least a part-time one sometimes, and previously full-time), and I can say with absolute confidence that a deep understanding of category theory is 100% useless for programming.
Again, with a few exceptions, but if you are one of these exceptions, you will already know it.
I love category theory, but I think there's a secret category of "high effort programming things" that programmers who have done them love to say that "Everyone should do x because it will make them a better programmer".
Here's the kind of things I'm thinking of:
- Learn category theory
- Build an interpretter/compiler
- Develop your own programming language
- Learn about and built distributed systems
- Learn to write code for the GPU
- Understand assembly code
- Learn about CPU architecture
I think, especially since it's the holiday season, maybe lets take a step back and just accept these things probably will make you a better programmer, but there are lots of them. If you do all of them, you'll maybe become a very good programmer, but you'll definitely become a very tired human being.
If you have an interest in the mathematical underpinnings behind some of the ideas in Haskell et al, you might love category theory, but if you just want to do effective functional programming effectively, you're fine just doing that
Every other item in your list is actually used to produce technology except one.
Compilers? Used to produce executables form source code.
Programming language? Allows us to write code using higher abstraction.
Distributed systems? Allows us to build systems across multiple machines, users, continents, etc.
GPU? Allows us to speed up heavily parallel code for graphics and scientific applications.
Assembly? Allows us to write closer to the hardware.
CPU architecture? Allows us to understand what our code runs on.
If anything, this list shows how category theory is not like the other things programmers could spend time on. If the goal is “learn a bunch of math to expand your math skill”, then maybe category theory makes sense. If the goal is to become a better programmer then I think there are better uses of time.
I suppose that's true - but then I would suggest that type systems are (at least to some extent) the application of category theory.
It's hard to see how learning about Hindley-Milner type inference isn't academic type theory (which I'd argue is a category theory subfield) but applying Hindley-Milner type inference is clearly practical and related to producing technology.
I'm not saying all branches of category theory have a section that relates to directly producing technology, but I'd definitely argue that some do.
I read a book on category theory that described how to model databases using category theory.
My conclusion was that the goal was not to provide insight into databases but rather into category theory, which seemed backwards to me.
Instead I picked up some books on the relational algebra/logic for databases, and those books were actually useful — you could show that some set of transformations would be mathematically identical.
At some point, too high level of abstraction is not useful. For category theory, it seemed that the point was to show how all these different things were “similar” but in a way that didn’t allow you to do anything with it.
You are not alone. Composition and the general idea of type is enough for most of us. You do not need Schopenhauer to discover that life is hard, or Hegel to know that opposites exist and sometimes their relation creates something different “not in the middle”.
Just gonna unecessarily jump in to defend Schopenhauer, and maybe Hegel! (I'll leave category theory to look after itself)
I think especially in our fast moving, low attention society, there's a tendency to reduce philosophers like Schopenhauer to a few bullet points. I definitely was really guilty of doing this when I studied philosophy in university a while back. But you get so much more out of spending time reading Schopenhauer than just those bullet points- you get insight into a whole person's way of seeing things. That's such a great thing to spend time doing!
I do realise I'm mostly arguing against a point that you didn't make, or at best, made only tangentially, but, as a pedant on the internet, I couldn't turn down the opportunity to give my unsolicited opinion.
Right you are, indeed. I was first annoyed by your comment but (miraculously) I stepped aside for a few seconds!
Of course. But nevertheless, Category Theory or Schopenhauer are good ways to get interesting insight which may (emphasis) be useful. But not as a tool (which is how CT is usually sold in those tutorials), but as a (long) path to knowledge. Only some times and some people get "useful" results from studying them.
Trying to sell CT as a means to a utilitarian end is prostituting it. Like selling Hegel to learn how to body-build.
I'm glad I did- I think the utilitarian distinction you made is such a good point.
Interesting as category theory is, and even while it does have applications, I think claiming that it's value is somehow in helping you learn Haskell/Elm/Gleam etc is just dishonest and misleading.
Hey there! I'm the author, so I suppose I ought to address this :)
First I'll say that I absolutely get this head-banging-on-desk feeling of no progress. Monads got me like that for a while but F-Algebras/recursion schemes got me like that much more, so make sure you keep your distance from them haha. I'm sorry to have contributed to your frustration.
It actually sounds like you've grasped monads quite well. flatMap is the essence. I won't try to explain it though, because I know that's not what you're looking for, and I don't want to contribute to your frustration even more!
I will say that my usual readership includes a lot of people who like designing type systems for programming languages. Category theory helps make sure you don't make mistakes in this process, though there are other techniques of course. I also find it helps my ability to think formally a lot, which has helped me a ton in studying and discussing philosophy, a separate interest of mine. Hopefully you can see from my post that I didn't really make an effort to justify or explain category theory for regular programmers much. Category theory is overhyped for that use case. I personally really hate reading overly mathematical Haskell code!! But if you just enjoy math or philosophy or learning or thinking, I hope you can have some fun with the beauty of these ideas. And since authoring the post I've added a wiki https://ryanbrewer.dev/wiki that can give more accessible background on things like monoids.
I could be wrong but I don't think I mentioned a monoid of endofunctors or flatMap a single time in the post. I did mention monads, as an example of natural transformations, but completely from the perspective of beautiful math, not from a programming perspective at all. And once you learn about adjunctions, monads get even more gorgeous! https://ryanbrewer.dev/wiki/adjunction
But all of this math takes a ton of patience. I'm someone who loves programming because the feeling of solving a hard bug is exhilarating and satisfying. The emotional payoff is bigger the longer it takes, and math is the same way for me. Don't beat yourself up about it, and don't feel bad if category theory just isn't helpful or enjoyable for you and your particular way of thinking! :)
Oh yeah I'm well aware of the meme haha. I just wanted to show that I'm conscious of these things in my writing. My dedicated entry on monads (https://ryanbrewer.dev/wiki/monad) alludes to the meme in the first sentence :)
Go is a bunch of preferences and aesthetics. It clearly appeals to a bunch of folks, others have a hard time putting up with it.
Everyone is free to both love and/or hate go. The language's spirit is not going to change. I'd much rather see more realism, honesty, and acceptance. Instead, this class of discussions always seems to become incessant "no u" ping-ponging.
Certainly not what I'd consider curiosity and critical thinking.