Because limiting competition always leads to better performance, right? Oh yeah, it does if you’re a corrupt real estate developer or a game show host.
I used to joke that when SO goes under, I will move professions. The joke came from my experience of how many common issues in technology could not be solved with knowledge found via a search engine. I don’t see that niche as gone, so I wonder what is satisfying that requirement such that new questions do not show up at SO?
Time to just call these tariffs: sales tax. Extra money for the government on all goods imported are taxes. The rest of the complexity distracts from the basic cash flow and the inevitable results. More money spent and consumed by the government.
Yes, I like to call the style Procedural Composition. The key characteristics are no logic with IO, and all system functions are assembled from higher-order middleware functions. This is the way ring, the web framework, and various client libraries like clj-http work. One of the best ways to get familiar with it is to look at the ring libraries.
What this allows one to do is assemble handlers from lots of small higher order functions. It has the downside of one needing to have initialization well organized and thought out. But the fractal-cul-sac as one co-worker has nicknamed it of ever dividing and increasingly specialized functions with IO and logic twisted together is effectively prevented. One can always modify one handler without affecting others or changing how existing functionality works. And it is always testable in small unit tests because the logic is pure.
Systems built in this style can radically reform themselves in a controllable, reliable and consistent way indefinitely. They are immune to the "apogee" phenomena whereby a system gets to the size and fragility where it can no longer be modified without causing unforeseen regressions, triggering the need to rewrite it to move it forward.
This style is for handler-oriented procedural software common in web services etc. It does not apply to embedded state-machine oriented software that operates real-time control etc. That is a different problem space.
Complex solutions are easy. Simple is hard. Often simplicity takes time, iteration and understanding that comes from actually operating a system. I think the missing link here is the Kaizen-oriented refinement that turns complex into simple over time. I find that modern OO-languages frustrate this process by needing cross-cutting changes to refactor for incremental improvements. Expression-oriented languages (like Clojure) are much more fluid, enabling the incremental refactoring required to transform the initially complex and awkward system into the simple and refined scalable system. Unfortunately, just like other languages, it is possible to write difficult-to-change systems in Clojure. And that seems to be often the way it is done.
I don’t wish to be too much of a fly in the ointment. I understand the darkness of dark patterns. But if we wish to not be secretly tracked (which is dark), then isn’t the alternative to openly ask if I want to exchange knowledge of my identity in exchange for the content I seek, so they can target the ads that pay for the content aggregation service I am using? The preceding question mark is not rhetorical. Maybe I am missing something? In the end though, Cat picture or not, the people that provide the service need to get paid.
Any dumbing down of end-to-end encryption will hand Russia and China nuclear powered hacking tools for our economy, infrastructure and digital integrity. With near peer wars ongoing, I would relegate this stuff to a noise filter. The US DoD cannot afford encryption to be dumbed down. And they seem to understand that.
These initiatives will always exist because there will always be people that do not understand what encryption is and what it provides. But lots of smart people understand the consequences would be catastrophic, and rapid. We cannot eliminate dumb politically-motivated ideas.
Any dumbing down of end-to-end encryption will hand Russia and China nuclear powered hacking tools for our economy, infrastructure and digital integrity.
This narrative points to no proof expecting motive to suffice. I think the US is not the only motive hypothesis. It would have made more sense for the US to blow it up earlier. Given that the pipeline was unused at the time of destruction it seems more likely a Russian intelligence ploy executed from Baltic ports.
I think the Swedish investigation, with no public announcement, might be the only source of primary information. Add to this the sabotage against German trains etc, and the overall lack of ability of the Russian government to negotiate for its interests but instead choose subterfuge (they denied the invasion, and claim themselves the victim), it is more likely such a secret operation is in the interests of the aggressor.
I think the difference here is that static typing gives a poverty of real reliability guarantee's but one must always pay the cost. Since Clojure gives agency back to the programmer, there is a choice here. Clojure for production should check its types at the domain level or as close as possible, be simple, and spare. Personal experiments and tooling can be in a different style. It is just like building anything else, design and construction for maintainability is very different than prototyping or experimenting. Clojure has all the tools required to make robust production software. But it takes the intention and proper decision making to do so.
I had similar feelings, and I get the same feelings looking at today's front end development which looks increasingly like embedded C++ development. I had always tinkered with Lisp but expected it to be forever marginalized given how good Common Lisp was, and how poorly it had been adopted by industry. But Clojure changed that for me. The fun seems to come from agency, the ability to affect outcomes with reasonable amounts of time and energy expended. Agency is the ability to change one's circumstances, and modern tool chain's vast incidental complexity takes such agency away. But restore agency, and fun will follow, I suspect.
Now I don't mean to imply there are not good uses for tool chains like C++'s etc. Only I will say that the disconnection from the end result caused by the long write-debug-ship cycle leads to a certain programmer malaise. The same is true for things like coding chips with Verilog. The production chain is so long with respect to the creative endeavor itself that motivation and satisfaction is hard to get.
So, for me, doing SaaS software, which ships "all the time" with Clojure, has restored my ability to 1) read the std library and most others easily to understand them, 2) Create control, preprocessing and IO primitives myself for special purposes which easily rival standard ones, 3) use interop to access large libraries written in another long lived language (Java), 4) build and use tools that simply introspect the code, producing my own tool additions and automations without AST's, and elaborate tooling, after all, code is just data.
Obviously YMMV. One blog post documented someone who changed from C++ to Clojure and did not find satisfaction. But he was attempting to do something, embedded I believe, that is not well suited to a JVM. So changing to Clojure does involve changing to an area that favors one of the two big Clojure host language machines, JVM or Javascript based environments.
This populist stuff does nothing but create blame and distract from the real issues. Ending billions of dollars in petro-subsidies is where this energy should be pointed. Instead journalistic need for clicks will take us further away from decisions that that will change our fate.