The abstraction is the standard case and should invite custom behaviour to be added dynamically. This extra behaviour should be added by the caller / user of the abstraction.
Especially in a CRUD situation, every custom procedure will probably have a few basic steps that stay the same. All you usually need is a pre and a post hook.
I don't think it works like that. Letters are shapes but keys just are a relative position. The software is reading gestures, specific keypress motions seems much less data to work with.
China has big pharma too and they pivoted from authoritarian socialism to authoritarian capitalism, they're just making money now and don't care about their poor any more.
I think it's a bit more complicated. We just arrived a little while ago in late-stage capitalism (around 2007 I reckon?), so now looking forward it's either revolution or back to feudalism.
That's a really cool article. The wording could be a lot simpler but the important part is that it does not abstract the concepts. They don't need to be abstracted because they are really simple.
Situations can become very complex, especially when someone does not know what they are doing. Developers need to learn the priciples without lies and overzealous simplifications. If you know what's going on it's a lot more doable to not end up in a super complex situation, but not a lot of people have a really good explanation of git even if they understand it very well themselves.
One of them should fork it on their personal account and work on it during bussiness hours. No liability and all the benefits. Don't tell legal obviously.
"Someone forked it so now our fixes can get merged! :D"
They're all shit in one way or another and they are all based on a language that is constantly evolving and used to be a mess of different interpretations of an unclear standard I guess?