I.e., treat DevOps as a way of working, rather than a role meaning something akin to "Ops person who knows terraform, or k8s, or Ansible etc".
1,547 karma · joined July 7, 2023
I.e., treat DevOps as a way of working, rather than a role meaning something akin to "Ops person who knows terraform, or k8s, or Ansible etc".
If I want to get a homeless person off of drugs, it sure as crisps is not going to happen until they have a roof over their head. The core issue is the lack of affordable housing. That should be priority number 1.
I think this statement will have two kinds of readers. People who are not familiar with monads, for whom it'll fly right over their heads, and people who are familiar with monads, who will be annoyed at its inaccuracy.
The problem that the wild ride post has is not that the filesystem api doesn't work for windows. It just uses it to illustrate a broader point: golang opts for silent failures (for example by just making up file permission bits for a file on windows), and just chugging along pretending everything is fine when it's not. This design choice goes well beyond the filesystem api.
Now, whether I think that's a fair criticism or not is beside the point. All I'm saying is that this post is not a valid response to the criticism illustrated by comparing Rust's filesystem api to that of Go.
Isn't this the very definition of not being agile?
The US is fifth in the world in terms of incarceration rate (i.e., there are only 4 countries which imprison a larger portion of their population). The thirteenth amendment allows the US to enslave its imprisoned population (which they do, and it's a very lucrative business). The US also has a thing called the death penalty where they literally _kill_ the person convicted of a crime.
According to the world press freedom index, the US ranks 55th when it comes to freedom of the press.
I don't know if you know this, but the US has been holding immigrant kids in cages at the border. Started with Obama, increased under Trump, and then increased some more under Biden.
Guantanamo also still exists, but I suppose torturing civilians without formally charging them for a crime doesn't count against the freedom of US citizens.
By what metric does the US have a lot of freedom?
> Our universities are probably the best in the world
Good colleges aren't worth anything if only the owning class can afford to send their kids there. Going to college puts people into lifelong debt (in America, that is). Out of the top 10 universities in the world according to the QS world ranking, 4 are from the UK, 4 from the US, despite the UK having about a fifth of the population of the US.
> And having a strong economy is generally a good thing -- there are jobs, which matters.
There were jobs during slavery too (I mean the slavery from before 1865, not the 13th amendment slavery from today). Jobs are not an inherent good. About 40% of the homeless (in the US) have a job, but cannot afford housing.
It very obviously isn't. The prime incentive for shareholders is profit (which is only natural), and this is in many, many cases demonstrably misaligned with what's best for society. Cases in point: health insurance, the military industrial complex, fossil fuel based companies, education, landlords, big tech.
Primarily slowness and brittleness. Tests with side effects are much more likely to be flaky, and flaky tests are the worst. Especially if they're slow and hence hard to debug.
Of course, you do test your use of the database, but in a much smaller test suite. For the business logic tests you just spin up a copy of your app with fake adapters, and you're done. Quick, deterministic tests.
I try to find theoretical situations that I find easier to think about, and hence easier to judge on a moral level. Usually I construct these situations by going to extremes with certain variables. What if your company had one employee? What if all of humanity was its workforce?
For example, let's say your employer just employs you, and your job is to press a button every month that kills a random person and generates 30k dollars. That's a situation where I personally find it very easy to make a moral judgement.
Then, in very small increments, try and change this theoretical situation to more closely resemble the real thing. Maybe there's some context missing, maybe one of the variables is too extreme. And with each increment, try to pass judgement.
For example, you can change the kill button so that maybe the button has some positive effect (maybe it kills someone, but also cures two terminal cancer patients). Or maybe you want to increase the number of employees and see how that makes you feel.
It's not a silver bullet, but there's a chance that pursuing this mode of thought ends up enabling you to confidently assess your personal situation in morality. It's also not necessarily easy. It can be difficult to find the right starting point (there's more than one!), or the right incremental change (there's more than one!). I hope it may be of help.
For an example of this way of thinking you could look up Peter Singer's argument for charity, or the pro stem cell research argument which asks you to choose between saving little girl or a box of embryos from a burning building (I forget the origin).
That's DDD?
I skimmed the article a bit, because it's structured in a strange way, and I couldn't quite find my footing. Then I came across the phrase
> it was everybody else that was wrong
in a section on composition vs inheritance. I know that it's a completely superficial thing to say, but I find it hard to take texts that sincerely use this phrase seriously.
For the opposite example, here's where my preference comes from: I'm editing a function. There's an argument called order, and most likely it's either an instance of some Order class, which has some attribute I need, or it's an integer representing the I'd of such an order, or it's null. I'm hoping to access that attribute, so I have to figure out the type of order.
In a dynamically typed language, I'll have to look at the caller of my function (goes on my mental stack), see where it gets it order from, potentially go to the caller of that function (goes on my mental stack), etc until I hopefully see where order is instantiated and figure out it's type, so I can take the call sites off of my mind, and just keep the type of order in my mental stack.
But actually, this is wrong, because my function is called by way more functions than the ones I examined. So really, all I know now is that _sometimes_ order is of type Order. To be sure, I have to go to _all_ callers of my function, and all their callers, etc. This grows exponentially.
But let's say I manage, and I find the type of order, and keep it in my mind. Then I need to repeat the same process for other arguments I want to use, which is now harder because I'm keeping the type of order on my mental stack. If I manage to succeed, I can go and edit the function, keeping the types of whatever variables I'm using in my head. I pray that I didn't miss a call site, and that the logic is not too complicated, because my mental stack is occupied with remembering types.
Here's how to do this in a statically typed language: read the type signature. Done.
I can see that this is an annoyance, but does it really increase cognitive load? For me language design choices like allowing arbitrary arguments to functions (instead of having a written list of allowed arguments, I have to keep it in my head), or not having static types (instead of the compiler or my ide keeping track of types, I have to hold them in my head) are the main culprits for increasing cognitive load. Putting a semicolon where it belongs after the compiler telling me I have to is a fairly mindless exercise. The mental acrobatics I have to pull off to get anything done in dynamically typed languages is much more taxing to me.
Suppose I give you functions f and g of respective types int -> str and Nothing -> str. Can you compose them? No, and you see this immediately from the types. Types make reasoning about composability a lot easier.
Of course, it's not a panacea, and it's less helpful the more side effects a function has. Can we compose pure int->int functions? Of course! Can we compose two of them where the second expects some image to exist in some docker registry? You'll need to read the first to be able to tell.
Given the highly side effectful nature of pipelines, I'd think the applicability of types would be limited. But maybe that's just a lack of imagination on my part.
Certainly information like "this pipeline expects these variables" and "this pipeline sets these variables" are susceptible to a typed approach, and it would make things easier. By how much, I don't know.
Has shown itself to be vague enough to be a perfect stand in for "harmful" in everything the parent comment says.
Viewed in isolation, the atrocities committed by these men deserve punishment. But in the bigger picture, the function these trials serve is for the institution in charge to be able to say "see? We do hold ourselves accountable" even though the vast majority of war crimes went uninvestigated and unpunished.
More heads, and more important heads, should roll. Not just that of one fall guy. Tens of thousands of deaths every year, and even more lives ruined. But we all know what side the US government is on, so I'm not holding my breath.
[1] https://en.m.wikipedia.org/wiki/William_Calley
[2] https://en.m.wikipedia.org/wiki/Mahmudiyah_rape_and_killings