I think a lot of the loss of shame is a result of multiculturalism. The more cultures you accept, the fewer behaviors you can openly shame.
As a benign example, eating food with your hands rather than utensils. In some cultures this is rarely ever tolerated, in others it depends on the food item, and in others still you might always eat with your hands. These will be at odds and you have to decide what is OK to shame and what isn’t.
I think we as a society bias against shaming in seeking inclusivity, but some things can be lost along the way as well. To use the eating example again, eating with your hands instead of utensils may be more likely to spread disease (or maybe it needs to be coupled with a stronger shame against _not_ washing hands). I don’t know what the right approach is to strike a balance here in a multicultural society.
That is an interesting possibility, and seems plausible. When in Rome… becomes not so much about getting along, and more about maintaining social coherence, fostering prosperity and security.
> As a benign example, eating food with your hands rather than utensils. In some cultures this is rarely ever tolerated, in others it depends on the food item, and in others still you might always eat with your hands.
I know there are some strange people who eat pizza with a fork, but is there actually anyone who does that with say hamburgers?
Yes, there are people who eat burgers with utensils. It's more common in quasi-formal settings like business-organized dinners where people don't want to appear messy from my experience.
I see a lot of people below arguing that this isn’t the fault of the EU policy but the companies. I think that’s being overly charitable to the policy. While you can be rightly upset with the companies behavior, ultimately policy has to work with the incentives it creates. The policy in its current form allows for meeting requirements with annoying cookie banner opt-outs while keeping the lucrative business of tracking. If we don’t want that, the policy should be changed. Don’t expect companies to go against their interests here, even if some will actually be thoughtful and find a way to do so. The “Purpose Of a System Is What It Does” principle applies, and the purpose of the EU policy seems to be cookie banners for most sites.
I’ve long believed that making companies liable for paying damages if PII is leaked in a data breach would be the best way to stop excessive tracking. If you force them to have to manage user data like they’re handling radioactive waste then the expense and overhead involved is a natural drag on the business logic that drives the bottomless appetite for data collection. They’ll collect it if they actually need it, and they’ll take great pains to secure it.
The most valuable data breach content isn’t your advertising tracking data, though.
It would be your payment information, which is orthogonal to most of the tracking data.
The black market demand for leaked advertising-related tracking data is basically nil, except maybe in cases where it’s related to something else exploitable or usable for blackmail like if someone frequents cryptocurrency exchanges or porn sites. Nobody cares to pay for black market data about you shopping for towels on Amazon or things like that.
Payment data doesn't live in a vacuum though. Every payment is authorised by your bank, who runs an AI looking for "suspicious transactions" and has a legal obligation to refund you if you lose money because any part of their payment network got hacked.
99% percent of them intentionally turn the "decline" choice into a 5 - 10 step game of dark patterns even though the EU policy says it should be equally easy to decline. They know its bullshit but they also know the chance that someone will drag them through court is low.
I got strong feelings of Vernor Vinge’s work here. I’m not sure how managed to come up with such a close picture to where it now seems programming and security is headed.
While the connectedness of our world allows for great ideas to be spread and shared, there’s a huge reduction in actual variety. I don’t know what the solution is.
Not really that related. Refinement culture is concerned with evolving aesthetics and marketing which is partly a response to globalization and the rising middle classes of asia, partly related to digitization, and partly just a normal evolution of style.
What George is talking about here is much more related to the ideas of Nick Land, technocapital, Marshall McLuhan, and man's relationship to industrialization.
> Isolation is basically impossible because the Internet follows you everywhere. And it’s perfectly uniform, there is no other Internet, just a place with five corporate towns and some Chinese ones that are really hard to visit if you don’t speak Chinese.
This is McLuhan's "global village".
> I don’t think I’m properly capturing the scope of the machine. First you build the fence to keep the animals out then you build the fence to keep the animals in. It’s a Fullmetal Alchemist homunculus maybe it has already eaten your soul.
I think 99% of the commenters in this thread seem totally tone deaf to the article and the phenomenon being attacked by geohot. Granted, he doesn't articulate it well, but as you say, these aren't new concepts and much better introduced by Nick Land, Mark Fisher, Byung-chul Han etc.
>Yet even with a lot of manual steering, that type of code does not come out of LLMs naturally, and even if the code comes out naturally like that, they will still attempt to handle now impossible errors.
This is something I’ve struggled to fight against in many PR reviews. Especially once already written, convincing someone that their excessive null checking is harmful is an uphill battle. Short of better modeling (and languages that allow for sum types to enable it), I haven’t been able to come up with a universally convincing argument against this kind of “shotgun parsing.”
Maybe it really just isn’t that big of a deal? But when actually reading through and refactoring a codebase I’ve always found it frustrating to manage these unnecessary checks. Sometimes they’re nearly impossible to delete safely once present without first adding some kind of logging or broad investigation.
> convincing someone that their excessive null checking is harmful is an uphill battle.
The argument that seems to hit home more often than not is that optionals effectively “fork” the state space, the possible states your program can be in. And the larger the state space is, the harder it is to reason about the code and maintain it. That’s actually part of what make undesirable states un-representable means.
And AI code reviews encourage overly delusional defensive paranoia. triple null checking deep inside a function is technically a real risk, but in practice should never be hit because you've checked for nulls in every function that calls or could call the function in question and is thus not necessarily worth guarding against.
I tend to be a fairly defensive programmer - maybe nothing currently sends this function a negative value, but how hard is it for a future code change to alter that assumption? I always figured a clear error was best. It lets even someone unfamiliar with the code know what assumptions are being made about the valid range of inputs, so they don't have to consider impossible outliers.
Obviously it isn’t totally impossible, but it becomes challenging to know if it’s required or not. It’s hardest when it isn’t just throwing an error but instead defaulting to something only half-sensible. For example replacing a negative number with 0 or overflowing rather than panicking.
When it comes to assumptions about the input, ideally model them in the type system. If you can’t, explicit checks and throws are OK in my book. But don’t check-and-hide any errors. You’ll be hard pressed to debug the issues they’ll cause down the road, since it will usually be far from the implementation that you see the impact.
I hate the "pick defaults out of a hat" approach that LLMs seem to take. I suspect this behavior may be a result of reenforcement learning on coding challenges - making the code worse by throwing in these assumptions (which in turn become part of your documented API) may get you an extra half percentage point on the code challenges.
Do you have a source for how little maintenance this will need? I imagine there will be teams of people continually employed for regular maintenance and operations. Concrete does develop “bugs” in the form of cracks, chips, or other damage that needs to be repaired.
While software engineering certainly deals with different constraints, I don’t think this is a fair comparison. When stakes are low (as they are for most software engineering), different precautions are appropriate. The aerospace or financial software engineering worlds might be more comparable here, and the engineering for those systems looks quite different as a result.
> Do you have a source for how little maintenance this will need?
In Germany, twice a year inspection is mandatory for infrastructure [1] but this is only a visual inspection. Once every 6 years you got a large inspection [2] that includes a full go over everything including functionality checks plus a review of documentation (if it is still up to code) and of accident documentation, as well as a "knock test" on every m² of surface [3]. Fire safety systems are checked every quarter [4].
And out of these reports then you get action items. Depending on the severity of findings, it can be anything from "someone needs to do this until the next major inspection" to "holy cow stop ALL traffic NOW".
The problem is, it was known that the bridge was structurally unsound thanks to its age, but the elements that corroded and actually caused the damage could not be inspected at all. The report [1] is quite fascinating, the meat is on page 53/54:
> Auf Grundlage der gewonnenen Erkenntnisse und der positiven Berechnungsergebnisse wurde in der Gesamtbetrachtung weder ein akuter Handlungsbedarf festgestellt noch eine Verstärkung als erforderlich erachtet
> (Based on observation results and positive simulations no need to act was derived, nor was an increase in observation deemed to be necessary)
The root cause is deemed to be errors made all the way back during construction, most probably too long exposure of the steel cables to the environment (see page 108).
Only thanks to this desaster the actual failure mode and how to spot it got known in the first place. The report suggests (page 110) that bridges of a similar construction type (and thus, the same weakness) be retrofitted with acoustic monitoring to detect snapping cables.
Definitely I am making a broad assumption with many specifies where one can say "but what about X,Y,Z". Certainly, there are buildings that fall down and bridges collapse but what is the trend? Is software engineering getting better or worse?
From the linked article:
> And I would say that the success of AI coding agents has proved once and for all that we had successfully built an engineering discipline so strong that we are also the first discipline that has been able to successfully run AI at large scale within our discipline.
Yet we have no real clue how AI works or how to debug it, it's a brute force solution to everyday problems. Daily there are new examples of AI "escaping" its enforced cage. Why? Why doesn't AI "just work"? Because we don't truly understand AI.
I think AI is exactly the opposite to "true" engineering where one understands the system and can reproduce it. After all, retraining the AI will probably give you a completely different AI even if the training data was the same.
> Certainly, there are buildings that fall down and bridges collapse but what is the trend?
The trend is that they don’t because there’s a continuous maintenance happening on all of those. There’s an army of people doing checks and repairs all the time. Even then, it happens, like in Genoa.
This is an excellent article, I’ve seen almost all of the issues it calls out in production for various APIs. I’ll be saving this to share with my team.
I’ve seen two separate engineers implement a “generic idempotent operation” library which used separate transactions to store the idempotency details without realizing the issues it had. That was in an organization of less than 100 engineers less than 5 years apart.
This article reminded me a lot of a previous HN post[0] which hinted at choreographic programming[1]. While this post is light on details, I think this is an interesting space and deserves much more attention than it gets today. I'm excited to watch what comes from this space.
This is so cool, going to have to check out all of the posts in this series. I recently got a manual knitting machine (a basic round one, non programmable) and have really been enjoying the process.
Learning about the more advanced machines, even the manual ones, is fascinating. If computers weren’t around, I’m sure I’d be doing something with knitting professionally instead of programming.
As a benign example, eating food with your hands rather than utensils. In some cultures this is rarely ever tolerated, in others it depends on the food item, and in others still you might always eat with your hands. These will be at odds and you have to decide what is OK to shame and what isn’t.
I think we as a society bias against shaming in seeking inclusivity, but some things can be lost along the way as well. To use the eating example again, eating with your hands instead of utensils may be more likely to spread disease (or maybe it needs to be coupled with a stronger shame against _not_ washing hands). I don’t know what the right approach is to strike a balance here in a multicultural society.
reply