Ahhh, interfaces! Also known as APIs / protocols / behaviours / your-favorite-languages-jargon-term-here. The source of plenty of pain, much rejoicing, and far too much discussion. I plan on contributing, here and now, to that third category.
When I’m writing some function, there’s a general tradeoff between how abstract the function is, and how flexible it is. That's rather vague, so let's be a little more specific. It should be noted that for the entirety of the article, I'll be considering only pure functions with no side effects (e.g. no randomness, no IO, just pure data manipulation).
Look, I get it. Making a great API is hard. Nobody claimed it was easy! That being said, there are a phenominally lot of ways to do it wrong. The following is a list of problems that I have personally had in working with various third party APIs. Are these all super serious problems? No. Should I expect every API to not have any of these problems? Of course not; I myself am guilty of a number of these issues! However, the problems remain, and they are indeed problems, so without further ado:
st
field is supposed to contain? Or you should you just give it a human description in your documentation instead of only telling me that its a float?? curl
to inspect your API, that's bad. Constants suck. These seemingly arbitrary limits are annoying and really kill the vibe of what’s possible. No FTL communication? Say goodbye to travelling the stars. Heisenberg principle? Fuuuuck that. Godel’s incompleteness theorem? RIP total understanding.
Never did I imagine that there are non physical limits though. Take meaning, true meaning. It requires time and attention, it’s impossible to find without either. In many ways meaning and effort are isomorphic, one and the same.
You know what I want? I want my own private server, to run my own private software, and I want everyone else to have one as well. Let me explain:
I’ll start with privacy; it’s at the forefront of a lot of people's minds these days. Down with centralization of power! Embrace web-style topology over the hub and spoke model!
People claim today that there’s more controversy than ever, and that might be true. If pressed to say why, maybe they’d point to all the protests going on around the world, twitter flame wars, and the general feeling that there’s just a lot of people online who seem like they want to be angry about something.
You could talk about the psychology of the issue, and you wouldn’t be off track, but if I had to put my finger on what really changed, I’d point to the abundance of information.
The paradox of the abstraction is that the more general the abstraction, the less it can tell you, and so the more useless it becomes. The essence of abstraction is to unify that which is common; the more that can be unified, the less you will find in common. When you’re limited to working only at the level of the abstraction, this can be extremely limiting.
In Seeing like a State, James C. Scott puts forward the idea that in their pursuit of control, States have negative effects on the quality of life of the inhabitants. The basic premise that the State can only make decisions on what it can see (understand), the state wants to see more, that there is a whole world of information that the State cannot see (Scott calls this metis), and that because the State cannot see the metis, the State inevitably ends up destroying said metis, at great cost to its inhabitants. I won’t dive into a full breakdown, for a fuller understanding I highly recommend this summary.
I get asked a lot about what I think about cryptocurrency. It’s a hard question to answer, nobody really knows what it is exactly. It’s different things to different people, and it’s not helping that it’s at least somewhat complicated to understand the underlying technology.
Part of why these discussions are hard to have is that there’s many ways of looking at cryptocurrency. You have financial analysts and governments looking at it as a regulatory nightmare with no oversight, and you have hardcore programmers looking at it philosophically as a tool against oversight.
I’m going to argue that declarative style programming is going to be the future.
When I say declarative programming, I’m specifically talking about a code style in which you specify what you want, as opposed to what you want to do. The most popular example of a declarative language today is SQL; you don’t tell the database how to filter and join and group and order and what-have-you-not, you just YELL at the database what you want.
The larger a corporation, the harder it is for me to believe their actions of selflessness are genuine.
It’s not hard to imagine a mom-and-pop shop helping out locals on prices, providing good customer support because they genuinely care, and sponsoring the local soccer team to support children. And yet, suddenly, when a huge corporation does anything public, it’s taken purely as profit-driven. They cut prices to increase sales, they give customer support in so far as they have to, and if they’re sponsoring anything, it’s only for cheap advertising.
I think that increasingly people are rejecting the reality that they are in, and that they’re choosing the reality that suits them the most.
Waaay back in the day we lived in caves, believed in Gods, and had very little information about just what the hell was going on. There wasn’t a whole lot to understand, mostly because there wasn’t a whole lot we could understand.
I’ve noticed that, for any given argument, there’s two core approaches: you can argue who is right, or you can argue what is right.
Arguing what is right is the rational act of finding out which base priors parties disagree on. This involves discussion of why each party believes what they believe, what support they have for said beliefs, and figuring out what information both parties are missing.