chambers
Joined 7 years ago
Joined 7 years ago
In any case, his caution birthed a comment tree that's normally verboten.
The issue, as I think history will judge it, is the truth that precedes liberalism has been spent & forgotten. In the absence of the "why", commitment became truth: the perception/prism/the water people see themselves in and others, the world, etc. From there, as you said, the logic proceeds mechanically (fact: kids are blank slates, results: parents, teachers, environment are to be blamed[1]). Because we can't reason our way out of the truth even if our senses and experiences are screaming at us to stop.
It is a consuming, comfortable & reasonable truth, held tightly because the alternatives are seen as unreasonable. In this way, modern liberalism is useful as a defense mechanism.
[1] reminds me of https://news.ycombinator.com/item?id=44226329
Oracle expressed the opposite. Within a year or two Larry killed OpenSolaris, let the MySQL, Hudson and OpenOffice communities fork away, sued Google over Java, and watched Gosling and most of the engineers who embodied Sun walk out.
The part that rankles the most, and undermines many a retrospective I think, is that Larry the lawnmower turned out to be a better steward of Java & MySQL than Sun was. Coldbloodedness is a survival trait.
The relentless demand for justification is indistinguishable from a demand for others to stop doing things you don't like.
A great point that’s also true in reverse.
On the note of science, I'll credit Java's maintainers for treating their language as a technology and not merely as a product. Many languages respect the real-world physics of computers to stay relevant. Few respect the "metaphysics" until weird bugs keep emerging in the compiler and ecosystem. Bugs that can't be solved with more building, engineering, or even design. Because those bugs are not defects; they come from the concepts & axioms of the language itself, not its implementation.
Feature flags are gates for whether a piece of code runs; basically, an if-condition. Remote configs are a mechanism for changing runtime values without redeploying[1].
For example:
# Feature flag — variant gate for rollout
flag = sdk.check_gate(user, "checkout_flow")
if flag == 'open':
render_new_checkout()
elif flag == 'warning':
render_warning_checkout()
else:
render_old_checkout()
# Raw remote config pulled — structured values for tuning behavior
config = sdk.get_config(user, "checkout_settings") # if the config changes based on user or context, this "remote" config is considered "dynamic"
timeout_ms = config.get("timeout_ms", 5000)
max_items = config.get("max_items", 50)
allowed_tlds = config.get("allowed_tlds", [".com", ".org"])
In practice, feature flags are implemented on top of dynamic configs[2] to manage the temporary lifecycle of a feature — aka, ship a new block of code, ramp its execution up to 100%, then delete the flag. Whereas dynamic configs are a deeper primitive meant for semi-permanent/safer operations like tuning rate limits or changing text copy on a marketing website.As I've seen it: the forcing function that separates the concepts are experimentation platforms: when human-control of feature flags is shared (via dynamic configs) with automated & randomized assignments. That's how Statsig built their system and, in part, why they could sell for a billion. Whereas companies that ignored the difference, like LaunchDarkly, struggled outside of feature flags.
[1] https://engineering.atspotify.com/2020/10/spotifys-new-exper...
[2] https://docs.statsig.com/dynamic-config/overview https://blog.x.com/engineering/en_us/topics/infrastructure/2...
Lower-case internet is ok as a tool for making spaces. But I reckon humane-ness, or really, virtue, is a habit built from within. And the habits the Internet rewards are generally the wrong ones.
Can you explain your view more? Otherwise, this sounds like a motte-and-bailey game.