The article is unfortunately paywalled so I couldn't read it. That ratio is indeed more sensical and interesting. But I think it still misses two points.
First, the distribution of tax payers to different marginal tax rate brackets differ. That is, how many percent of US tax payers actually pay top marginal rate vs how many in Belgium do.
Second, the differences in purchasing power. What does the average income (or the top income for that matter) actually get you in different countries.
You can't really compare tax rates between countries like that. Some 20% of households in the USA earn 112000€ or more per year, where as only 6% of house holds in Germany earn 72000€ or more per year.
Atleast here in Finland the political hurdle is so tall that when the green ligth is finally given, they basically have to build the biggest reactor possible.
> You seem to trust that programmers will play by the rules, even if the compiler doesn't enforce them.
I've been trying to say the exact oppisite. C, C++, Javascript, all those languages provide ways to define abstract datatypes that cannot be circumvented (by "normal" code. Even Haskell has unsafePerformeIO). My latest argument was that people decide not to use those abstractions not because they are unavailable, but because it is more ergonomical or performant not to. The same happens even in ML, not all data is abstracted as an abstract data type.
My comment "not something people do" was about directly accessing memory to circumvent the private data abstraction in c++ and I stand by that.
I admit that I kinda pushed you into it, but you are moving the goal post. People indeed use public fields in languages like C and Javascript.
In C it's often done for the sake of performance. Hiding data behind a pointer has a cost.
In Javascript I would say it's lazyness above all. Front end programs often aren't that big nor pinacles of code quality.
But it is possible to define abstract data types in both languages. ML makes it a bit easier and some times even more performant, but it doesn't "own" the idea.
Abstractions are quite like immutability. You can enforce both in many languages, some just give you better tools for it.
Yes, you can access raw memory and flip bits to modify a private member of an object (and it migth even be defined, not too sure about that thou). But I don't find that an valid argument for the statement that you can't do abstractions in c++. That's just not something people do.
The c++ version of your example would be, if I understood your code correctly, to take an std::vector as an constructor parameter, copy it to an private field and sort it.
> That means it is illegal because it goes against the (higher) EU law.
It actually does not mean that. The courts cannot ignore an Act of Parliament even if it conflicts with the Human Rigths Act but can o ly give an declaration of incombability which they have done.
The Human Rigths Act specifically does not grant the courts the possibility of not following Acts of Parliament when the too conflict. The courts can only give an declaration of incombability which they have done. This is how an Parliamentary sovereignty works.
Umm... that is exactly how an parliamentary democracy works. The parliament can enact any law. Yes, many such systems contain laws that overrule all other laws and are often harder to change. These are often called constitutions. But I can't recall any constitution that could not be changed.
Exactly. The point of time boxing is that you have to stop and reflect on the time spent. It gives you the chance to switch tasks if priorities have changed or to split the current task.
Or to go on to the next sprint with the same task. But here lies the problem in many cases. The sprint is taken not as a time box but as a deadline. A sprint should meen: "You can work 2 weeks, 5 days a week, 8 hours a day on this. Then you stop to think."
It depends. If the duplicated code is supposed to do the same thing in both places then the two pieces of code are already dependent. You change one of the duplicates, you need to change the other one two.
You'r missing 300k from your after tax sale proceeds. You could still afford the smaller house with 263k left over. You would make a 37k loss yes, but you could buy the new house. An important distinction in my opinion.
As I understand this, the client here is not the caller of the methods defined in the interface, but the one implementing them.
Caller has no problem just ignoring the methods that it doesn't need. But the implementer doesn't have that possibility. If you have a read-write interface and a read-only source, you need to resort to subpar solutions like throwing an exception.
No, not really. Quite the contrary actually. It would be very unlikely that a volatile and nonreplicating molecule would be the carrier of biological information through billions of years.
My understanding is that this process didn't really come into existance but stayed in existance. Countless other arrangements failed to replicate and endure.
First, the distribution of tax payers to different marginal tax rate brackets differ. That is, how many percent of US tax payers actually pay top marginal rate vs how many in Belgium do.
Second, the differences in purchasing power. What does the average income (or the top income for that matter) actually get you in different countries.