1. 39
    1. 87

      nearly every professional programmer works in some sort of specialized domain. Most programmers think that the domain they work in is representative of programming in its entirety, and they’re usually wrong. An example of a specialized domain is “stateless http servers”. If most of your work is in stateless http servers, most of your opinions about programming are actually opinions about programming stateless http servers, which is a smaller and more specific topic. If most of your work is in game engine programming, most of your opinions about programming are actually opinions about game engine programming, which is a smaller and more specific topic.

      Nearly every topic involving Casey Muratori and Jonathan Blow boils down to this:

      • Casey and Jon Blow work in the specialized domain of games. They’re both good at these things.
      • They think that what is true of their domain is universal.
      • Techniques that make sense for programming http servers that do not make sense for game engines or game rendering they say are “wrong”.
      • They present this to a community of people who largely program stateless http servers, who proceed to lose their minds. Both sides are, in a sense, correct, but both sides see the other side as being wrong, because both sides believe they’re talking about the same topic when they are actually talking about different topics.
      • Repeat ad infinitum.

      That’s not to defend Clean Code specifically though, that book is pretty bad.

      1. 24

        There’s a good saying by Paul Bucheit that captures this:

        Limited life experience + generalization = Advice

        :-)

      2. 8

        Well said. I’m often baffled by the choices made in new versions of C++, but that’s because I have no idea how people use the language in embedded, real-time, or low-latency systems.

        I do think, though, they proselytize principles that cut across domains. Primarily: actually understanding what a computer is doing, actually caring about performance, actually molding your tool set to your domain. This isn’t all bad.

        1. 1

          Well said. I’m often baffled by the choices made in new versions of C++, but that’s because I have no idea how people use the language in embedded, real-time, or low-latency systems.

          How do you mean? I think the only place I routinely see C++ performance being worse than C is iostreams, which to me is more a byproduct of the era than C++ itself.

          1. 3

            I think what GP was saying was not “these features are slow” but instead “The design of the API has decisions that I find questionable but assume makes sense in other contexts”

      3. 7

        I think you could characterize this as a dynamic we have observed, although I think you’re selling a lot of folks in the general programmer community short by generalizing it to “nearly every” or “most” and by saying they themselves over-generalize from their limited frame. Maybe, maybe not. It’s a vast community. As a stateless http server programmer by trade but a “person who likes to understand how things work” by disposition, I always get a lot of value out of hearing from the wisdom of experts in adjacent domains. It doesn’t always have to be relevant to my job for me to get that value from it. It’s not as if I come back to my team hollering that we have to implement a HTTP handler in assembly, but it does help form mental models that from time to time break through the layers of abstraction at which my code sits, increasing opportunities to pattern-match and make improvements that otherwise would have been hard for me to conceptualize.

        Relatedly, the creator of Zig recently drew on some of the same performance-oriented learning from the games community to restructure his language’s compiler and dramatically speed it up. Seems like he applied good judgment to determine these seemingly disparate areas could benefit each other.

        1. 11

          general programmer community

          I think perhaps the really interesting hot take here is that such a community doesn’t exist in any meaningful sense.

          1. 3

            I should have said the set of all programmers

            1. 6

              Sure, sure, but I think that you touched on a really interesting point, right? I think we could make the credible argument that we don’t have “general” programmers and instead have a (large) cluster of web programmers, an even larger cluster of folks who use SQL and Excel, another cluster of embedded programmers who mostly do C and assembly, another of game developers, and so on and so forth. All of those clusters experience the act of programming very differently.

              Anyways, I think you were on to something or at absolute worst had kicked off a really interesting idea. :)

          2. 3

            yeah, “the general programmer community” is about as substantive of a concept as “the general hammering community”. It puts the focus on the hammer instead of the blow. It’s a great way to get people to avoid thinking about the consequences of their work, which is really useful if what you want people to focus on is “I went from using Java to Rust” instead of “I am building systems that violate the consent and boundaries of a large number of people and cause harm to society”.

          3. 1

            It would be a community of moving things around in memory for its own sake and nothing else. Even memtest86 would be too much. “I made a list of things and no one ever used it.” “I printed hello world to /dev/null”. An isolated unapplied spikes-only meetup.

            1. 2

              Hell, some programs for microcontrollers use only CPU registers. ;)

      4. 2

        What was bad about Clean Code?

        1. 6

          Not parent, but I have read the book, and have an opinion: avoid. Much of it teaches fairly bad habits, shows the wrong heuristics, and the code examples range from “meh” to downright awful.

          Strictly speaking the book is not all bad. Much of it is fairly reasonable, and some of its advice, as far as I recall, is actually good. Problem is, the only people capable of distinguishing the good from the bad are people who don’t need the book in the first place. The rest are condemned to take the whole thing at face value, and in the end we get SOLID zealots that blindly follow principles that makes their programs 3 to 5 times bigger than they could have been (not even an exaggeration).

          Unless you’re a historian, I would advise you to read A Philosophy of Software Design by John Ousterhout instead. Here’s a teaser.

          1. 4

            I like this article on the subject of Clean Code. In particular, the code examples that have been taken straight from the book just show the kind of havoc that following all the advice blindly can cause. For example, the prime generator example at the end of the article is 70 lines long and requires 7 functions with “readable” names such as smallestOddNthMultipleNotLessThanCandidate. By comparison, a simple sieve of Eratosthenes function takes roughly 20 lines of code and does not needlessly split the logic into unnecessary auxiliary functions.

            1. 2

              The function names you mention were put into an example of refactoring another example source code (in the book). I pick Bob’s exploded version with long names over the original source code every day. It’s not that I like the name. I prefer it to the original, because the original is obfuscated in some places.

              Honestly, I really have an impression that most people criticizing the book didn’t read it. There is a lot of good advice in the book, and maybe some shitty details. But those shitty details shouldn’t invalidate the good advice and I think that most of people think that it should. I’m really happy I haven’t followed the advice that the book shouldn’t be read.

        2. 3

          In a nutshell: it espouses premature abstraction and a dogmatic expert-beginner approach to programming.

          https://en.wikipedia.org/wiki/Shuhari

          Clean Code leaves the reader in the first of the three states of mastery.

          1. 2

            Too bad the tradition taught in Clean Code is the wrong one to follow.

            We should start from a better one. Such as A Philosophy of Software Design.

      5. 2

        Games are pretty broad.

        Even within a single game there are lots of modules with varied constraints. include rendering, sound, gameplay, controls, platform compatibility, tools… Some of it needs top performance, some of it needs top flexibility… from the outside I would guess expertise acquired when developing indie games as significant as Braid and The Witness is very likely to be relevant in many other domains. Perhaps even most.

        1. 5

          The Witness took seven years to develop, was privately funded off of a prior success, uses a custom engine, has very sophisticated optics and rendering, and has no combat, no networking, and no skeletal animations. Even in games, The Witness itself is highly irregular in terms of development. Most people don’t have seven years and $800k to make a puzzle game with a fine-grained attention to rendering and no combat. It’s an extremely specific context. The other thing I find so weird is that on HN and Lobsters people constantly bring up The Witness, but working in games, it’s not a game I hear talked about often.

          1. 3

            Two points:

            • Before The Witness there’s this success you mention: Braid. So it’s not just the one game, and he worked on other things before.
            • Many things go into the development of a single game. Especially if you do most of those things yourself. The game may be specific, but the development required to achieve it… not so much.

            The other thing I find so weird is that on HN and Lobsters people constantly bring up The Witness, […]

            This is a link involving Casey Muratori, and a comment thread mentioning one of his closest peers, Jonathan Blow. Of course The Witness was gonna come up.

      6. 1

        Really well said. It’s hard, because on the one hand I’d like to think that there are some universal truths about software. And maybe there are. But, so much is context-dependent.

    2. 34

      Regardless of how I feel personally about Bob or Casey, I do really like this format, of getting two people who disagree with one another to collaborate on a conversation by editing a shared dialogue file. I now really want to try this myself.

      1. 7

        It basically minimized the personalities and maximized the content. Definitely a +1 on the format from me too

      2. 6

        This format reminds me of c2wiki

    3. 14

      One thing that always bothered me about “programmer time is expensive; processors are cheap” is that it’s used to justify slow client software, when nobody is buying cheap processors for those who have to use it.

      (And even if they did, it would still be irresponsible and unsustainable, in my opinion.)

      1. 14

        My issue is that all these threads turn into “we should learn from game devs, they care about performance”. But game developers pretty obviously are not doing any better, on average, than the people they’re sneering at – the industry is infamous for forcing customers onto a hardware upgrade treadmill and for ludicrous “minimum” hardware requirements on new titles. And they don’t even get the optimization of developer time out of it, because the industry is also infamous for extended “crunch” periods.

        1. 12

          At the same time, console game dev is one of the few places where so much time and effort is spent on optimizing consumer facing software, often with great results.

          This is in contrast to my experience with most (if not all?) of the websites where often clicking something result in hundreds if not thousands of milliseconds of delay.

          1. 3

            Console is on an upgrade treadmill, same as other areas of game dev.

            And the kinds of high-impact high-rated big-name games you’re thinking of are, to be frank, a small fraction of the games industry as a whole. And the industry as a whole does not have a great track record on performance. As I mentioned last time around, the single best-selling video game of all time (Minecraft) infamously has a large, dedicated community maintaining third-party addons and mods to make its performance more bearable on average hardware.

            1. 1

              I don’t know what are you talking about with that upgrade trademill. The fact that every 8 or so years you can buy a better hardware doesn’t change the fact that during a given generation you can be pretty sure that games you buy will work well on current gen hardware. This is not something you can expect from typical user facing software.

              Let’s take as an example one of the biggest and richest company - Google. Can I expect that maps or sheets will work at 30fps (not to mention 60fps) without hiccups on a hardware that is ~6 years old? Of course not (and to a big extent that software is way simpler than realtime rendering of complex 3d scenes).

              This is not the case with console games, especially with first party studios. In those cases you can be almost 100% sure that current gen hardware will run the game flawlessly.

              This is what people are talking about when they put game dev as an example of subset of industry that cares about perf. No one is claiming that every game dev cares about perf. You seem to be strawmaning and I think you are well aware of this so this is my last message in this topic.

              1. 3

                This is not something you can expect from typical user facing software.

                Apple pretty commonly supports its hardware for as long or longer; macOS Monterey is still receiving patches and supports hardware Apple manufactured literally 10 years ago. The iPhone/iPad ecosystem similarly is known for long support cycles.

                That doesn’t mean every new app for those platforms is designed to stay within the capabilities of ten-year-old hardware, of course, but as I keep pointing out games go through a hardware upgrade treadmill too. It’s slower in the console world but the treadmill is still there and, if anything, is harsher – an old computer may run new software with reduced performance, but when the console world moves on they often just don’t release a version for the prior generation at all (and plenty of top titles are exclusives with deals locking them to exactly a particular console).

                This is what people are talking about when they put game dev as an example of subset of industry that cares about perf.

                Many people in this thread and the last one have been treating performance as a moral crusade. See, for example, other comments in this thread like “user time is sacred”. If console developers could require you to get a RAM or GPU or SSD add-on to run their games the way PC game developers can, they absolutely would do that without a second thought. We know this because PC game developers already do that. There’s no moral issue for them – the console devs aren’t carefully thinking about how every CPU cycle is a moral affront that steals time from the user, they’re thinking about it as a practical thing imposed on them by the hardware they’re targeting.

                No one is claiming that every game dev cares about perf.

                Well, here’s an example from the last thread where I brought up Minecraft and some other examples in response to someone who was claiming that:

                in a game, if you can’t keep to your frame budget (say, make 60 FPS on a modern PC, where nano/microseconds can add up) then that can lead to poor reviews, and significant loss of potential revenue

                This person wanted to generalize game dev not just to “cares about performance” but must care about it. Yet that’s just completely wrong. So I don’t know how you can reasonably claim I’m “strawmanning”.

        2. 5

          even in games, most people aren’t focussed in performance, that’s just one topic. Lots of games also don’t compete on performance metrics. Some games’ value proposition is very cool graphics, so those games are actually competing on performance. It’s one of few areas where customers are actually showing up to pay for the more performant thing. That stuff gets noticed by the lobsters crowd, but a lot of other stuff like dialogue systems don’t get noticed here as much, even though game devs love that stuff. and lots of people outside of games do care about performance. Performance tends to get talked about more when it’s easy to tie performance to revenue, and games is a domain where it’s often clear how performance relates to revenue, because in games, performance is often the product.

        3. 3

          Yup lol. When I hear ‘gamers are focused on performance’ I can’t help but think ‘but are they focused on user experience?’: https://arstechnica.com/gaming/2021/03/hacker-reduces-gta-online-load-times-by-over-70-percent/

      2. 11

        Programmer time is expensive.
        CPU time is cheap.
        User time is sacred.

        Many, possibly most, programs have many more users than they do developers. Saving only one second a day per user can amount to a huge benefit, but we often don’t pay attention because we can’t multiply. Likewise, while one CPU is cheap, the number of machines that needs to be updated because some popular program has chosen Electron definitely is not.

        1. 4

          Affirming this. My current client is willing to burn years of developer time on shaving literally one second off of an employee process because one second of employee time scaled over their nation-wide business works out to hundreds of millions in additional profit.

        2. 3

          Saving only one second a day per user can amount to a huge benefit, but we often don’t pay attention because we can’t multiply

          Or we can multiply, but we also realize that in many fields of programming we are rarely presented with such clean “this saves one second per day for every user of the software, with no other consequences or side effects” decisions to make.

          Remember: programmers are a finite resource. Assigning a programmer or team of programmers to do Task A means there are fewer available to be assigned to Tasks B, C, D, E, etc. Which is why, despite everyone hating it, we spend so much time in meetings where we try to prioritize different things that need to be done and estimate how long it will take to do them. And that is just the beginning of a complex web of tradeoffs involved in designing and building and shipping software.

          If you want to have, say, a rule that no new feature can be added until every existing feature has been optimized to a performance level than which no greater can be achieved, then you are of course welcome to run your teams that way. I don’t think you’re going to get very far doing it, though, because of your immensely long dev time for even small things.

          Which means that sooner or later you will have to decide on a level of performance that is less than the theoretical ideal maximum, but still acceptable, and aim for that instead.

          And we both know that you and everyone else who claims to “care about performance” already did that. So really the debate is not whether people care about “performance” or value the user’s time or whatever. It’s a debate about where, on a complex multi-axis spectrum of tradeoffs, you’ve decided to settle down and be content. But that doesn’t sound as pure and noble and as satisfyingly moralizing as making absolute proclamations that you care about these things and everyone else either doesn’t or is incompetent or both.

          But we both know the truth, and no amount of absolutist moralizing changes it.

          1. 2

            There’s a reason for grandstanding: the incentives of the programmer (or the programmer’s company) are often misaligned with the interest of the end user. Especially when the end user is locked in this particular software, there’s network effects, or switching costs… or just how performance looks before you’ve even tried the software. So yeah, the dev gonna prioritise. The question is for whom?

            Or we can multiply, but we also realize that in many fields of programming we are rarely presented with such clean “this saves one second per day for every user of the software, with no other consequences or side effects” decisions to make.

            Correct. The actual savings tend to be probabilistic (they affect fewer users), much larger (up to a freeze or crash), and fixing those is never without consequences… though if those consequences are too scary that would indicate a low-quality code base that should probably be refactored first thing in the morning, because at this point all your development cycle have seriously slowed down.

        3. 2

          This advice is applicable to any widely-deployed software.

          It does not apply to one-off scripts, except it actually does. You merely need to place the writer of the one-off script in the “user” slot.

        4. 2

          Biiiingo. There’s probably a blogpost in there somewhere, but I really just want to say thank you for highlighting what I’ve attempted (evidently poorly) to articulate elsewhere.

      3. 6

        It was also true more or less between 1990 and 2010, when powerful desktop hardware got 50% faster every year. People were just getting good at working with the implications of that when computers stopped getting trivially faster and battery-powered devices became way more important. I certainly wouldn’t call it true anymore; there’s plenty of people out there paying both developer salaries and AWS bills who will tell you how expensive processors are.

    4. 6

      But the kinds of environments where that kind of parsimony is important are nowadays few and far between. The vast majority of software systems require less than 1% of a modern processor’s power.

      This does not match my work experience. Don’t underestimate the ability of sloppy coding at every level of a stack to suck up processor capacity.

      1% of a modern processor, single core, is only something like 24 million cycles per second. If your operation needs 10k cycles, which is a lot but not a huge amount, you can only process 2.4k items per second. Which again is a lot, but not a huge amount. Add a few small-n square algorithms, cache misses, some blocking i/o calls, pretty soon you’re talking about real slowdowns.

      edit: I read on, and he goes into that. But I’m still not sure I agree. Pervasive waste creates a culture of sloth that makes it hard to optimize when cycles matter. Optimization is a skill that must be maintained, and that can be lost, even institutionally lost. What’s more, the modular approach doesn’t well account for “soup of slow” type programs, where the top profiler entry occupies 4% of the runtime.

      1. 5

        Pervasive waste creates a culture of sloth

        You’re applying moral values on economic decisions. They’re generally orthogonal.

        Optimization is a skill that must be maintained, and that can be lost, even institutionally lost.

        Or the institution can pay for the knowledge if and when it is needed. Sure, it will be expensive then, but customer needs have to be met now.

        1. 3

          You’re applying moral values on economic decisions. They’re generally orthogonal.

          I think of it as applying moral phrasing to technological decisions for the sake of emphasis.

          Or the institution can pay for the knowledge if and when it is needed. Sure, it will be expensive then, but customer needs have to be met now.

          Latency and throughput are also a customer need. And given a bad design and lack of experience and cultural fit, attaining the required performance may be literally impossible.

    5. 4

      Without paying too much attention to it, I chalked the recent arguments up (as u/scraps does) to the implicit / missing context of Casey’s eg. game dev background (where most code really is performance critical).

      This conversation pulls the argument out of that framework, recognizing that there is a place in practically all software for a performance-aware approach, while tactfully digging back at an equally dogmatic dismissal of other concerns (those which, as Casey may justifiably say, “are beyond the scope of this course”).

      Loving said course, and glad to see these two tribal icons able to enchange ideas and reconcile these tensions into conscious tradeoffs for their audiences (and those who will inherit future tribal knowlage) to consider.

    6. 10

      the creepy uncle bob or some other uncle?

      1. 20

        the creepy one

        1. 10

          This sort of commentary is beneath our community; if you must criticize, do it by engaging with ideas and not repeating namecalling and gossip.

          1. 30

            It’s never beneath a community to remind people of an authority figure who has behaved in a biased or intolerant manner. He believes men make better programmers than women.

            https://medium.com/@BradleyHolt/what-uncle-bob-gets-wrong-c01d85c52163

            1. 21

              I think both of you are right: “Authority figure believes men make better programmers than women” is engaging with ideas, calling him “creepy uncle bob” without sharing sources is namecalling and gossip.

              1. 6

                Indeed.

                I’d even argue that the former statement is still off-topic, because it has basically nothing to do with the technical discussion at hand other than to say “hey, fellow tribe member, look at this outgroup person who has ”…it doesn’t really engage with the the actual issues of performance, software and engineering tradeoffs, or anything else; it just paints ’this person is icky” in slightly more detail.

                That said, that would’ve been at least longer than two words so I guess there’s that.

              2. 6

                Someone wanted to know if “Uncle Bob” referred to Bob Martin or someone else named Bob. “Creepy Uncle Bob” was a short and clarifying reply.

                1. 11

                  “‘Uncle’ Bob Martin” would’ve been equally short, faster to google, and normalized (I hold) better civility.

            2. 3

              Whether they do or don’t, in fact, make better programmers, “he is creepy” has neither bearing nor any connection to the assertion. The only purpose is to insult.

          2. 18

            For anyone seeing this comment thread and are wondering what this is about, https://blog.wesleyac.com/posts/robert-martin is a good read.

            I personally think that we shouldn’t strive to divorce the ideas from the person, but this sort of conversation can move to meta thread if needed.

          3. 14

            if you must criticize, do it by engaging with ideas and not repeating namecalling

            Could you perhaps tell this to the person a few days back who dismissively referred to an interlocutor as “somebody who only lists python and webshit on their profile” in a thread on this same topic?

            1. 5

              I’m sorry if the humorous term webshit causes particular offense; having made my living off of it for the last decade or so I feel no qualms in calling it by that name and also paying some small homage to a delightful (if no longer active) critic of HN culture.

              I also point out that I didn’t go “creepy ubernostrum”, but instead “hey, I’m not sure if you actually have the background to viscerally understand some of the concerns folks that’ve done low-level programming have, have you actually done stuff in a non-interpreted language that isn’t Python?”–you then clarified that you had done C programming and that provided a bit of helpful context about what your experience was. These are rather different behaviors, as should be obvious at a cursory glance.

              1. 7

                I’m sorry if the humorous term webshit causes particular offense;

                “im sorry you were offended” is not an apology. (’m not OP, just pointing this out. Not sure if it was an intentional snub or accidental.

              2. 5

                If you absolutely must gatekeep and refuse to engage with ideas unless/until you’ve been sufficiently convinced they came from someone with the “right” sort of background/experience, you still can do it without resorting to insulting terms like “webshit”. And if you avoid that, you won’t have to write non-apology apologies, either. Win-win!

          4. 14

            My personal experience is that he gave a talk at lone star rubyconf that made me uncomfortable due to portrayal of women and I didn’t retain a single technical thing from the talk.

            I did retain that discomfort and the memory that a woman walked out of the talk and then after being confronted with the way it made her feel (and me too TBH) he said it was okay because the sexist character stereotype was played by his daughter and didn’t acknowledge or apologize for his impact.

            His name came up at a conf I helped organize as a person to invite and I shut it down. Just about everything I’ve ever heard or seen from him since has reaffirmed that gut decision.

            Also while I agree generally we should try to be specific with criticisms I also have learned that it can be difficult to bring up some of these uneasy feelings. Especially on the internet. Usually the first thing that happens after “but why specifically do you not like X” is not an acknowledgement but rather an attack with a logical fallacy.

            To expect good faith active criticism/critique, we also need to be supportive of people’s lived experiences even when they don’t affirm our own.

            1. 8

              …and as a privileged white male it is very, very, very easy to ignore the impact of this sort of thing on others until you are outright slapped in the face with it, because so often the underlying message is that It’s Normal and Not A Problem.

            2. 3

              Sure, but lots of people make me feel bad and uneasy, and I still wouldn’t think it acceptable to casually insult them over it.

              (You know what makes me feel uneasy and, frankly, unsafe? “the creepy uncle bob” dropped casually into conversation.)

              1. 6

                I personally don’t choose to protest his behavior and consistent replatforming in the same way, but I appreciate someone said something to open the door do an honest conversation.

                Something about that original comment brought you out of your comfort zone. Now you have to consider if that act of discomfort is worse than the patterns of behavior of the person being described?

                (This is a rhetorical question for reflection, I do not need or want an answer )

                1. 2

                  Now you have to consider if that act of discomfort is worse than the patterns of behavior of the person being described?

                  Why? Two wrongs don’t make a right; unease is no excuse for bad behavior.

                  (This is a forum - I shall answer anyway.)

                  1. 4

                    Two wrongs don’t make a right; unease is no excuse for bad behavior.

                    I’m not asking you to have one action dominate/erase the other. Quite the opposite, I’m asking you to hold onto both at the same time and weight them accordingly. Then I’m asking that you communicate that weighting clearly.

                    Zooming out a bit: When it comes to criticizing/critiquing a protest (or insult in this case) there are 4 options of observable behavior:

                    1. Support the comment only (and therefore also condemn the target behavior)

                    2. Support the comment but also support the target behavior (weird, but possible…maybe you just like insults or something)

                    3. Condemn the comment only (and by omission support the target behavior)

                    4. Condemn the comment and the target behavior

                    (Technically 5 options if you count “do nothing” as an option)

                    It’s an over simplification, but in general you get it. It’s a classic true/false two-by-two grid. I observe that you’ve condemned the comment and I don’t see anything about Bob’s behavior. To an observer (me), this omission is prioritizing the use of an insult and by omission implicitly supporting the behavior. Basically option number 3.

                    It’s about priority and observable actions

                    If you are actually in camp number 4 where you don’t like the insult, but also you want to condemn the target’s behavior…then you need to say that explicitly. Otherwise option number 3 is the same used by bad faith actors.

                    For example during black lives matter protests, fox news covered it…but they prioritized the protests and downplayed the topic (police killing people). They said “they should protest, just not like that”. This is a bad faith tactic to support an unpopular position without seeming to support it.

                    This isn’t a new phenomena either. Here’s a direct quote from a person we now consider famous for protesting well:

                    the white moderate, who is more devoted to “order” than to justice; who prefers a negative peace which is the absence of tension to a positive peace which is the presence of justice; who constantly says: “I agree with you in the goal you seek, but I cannot agree with your methods of direct action”;

                    A step further

                    If you want to be absolutely crystal clear about your intentions when talking about a protest the pattern I try to use is:

                    • “This method of protest makes me uncomfortable”
                    • “I think it’s more important to focus on the topic <x>, which they’re talking about”
                    • “Here’s an example of an action I took to protest or take action in a different way”

                    That way it’s unambiguous to anyone reading that you’re not arguing in bad faith, you do support thing <x>, and also you don’t prefer it being done that way. The third step is important because some bad faith actors will claim they support the cause, but then spend all their airtime bashing the method of protest. That’s why I’m using the word “prioritizing”. It’s a variation on “don’t tell me your values, show me your budget”. If someone spends all their time protesting a protest, it’s indistinguishable from being a counter-protester.

                    I’m not demanding you speak with this pattern. I’m telling you what i’m observing about your behavior, how it’s making me feel, and how I want people to communicate their condemnation for a protest/insult in general.

                    What am I asking? I would love it if you threw up your arms and shouted “wow, I finally see how my comments have been misinterpreted. I didn’t realize this was a common bad faith tactic and I’ll work extra hard to be more clear, also I still don’t like the insult but agree that after everything I’ve read that Uncle Bob should not be someone we prop up as a role model to be emulated”. But that’s a lot to ask.

                    I ask: Read my words, try to hold onto the idea that there might be some truth in them.

                    1. 3

                      Zooming out a bit: When it comes to criticizing/critiquing a protest (or insult in this case) there are 4 options of observable behavior:

                      I disagree with your matrix. You are omitting “have no opinion about the target behavior” - and also “consider the target behavior offtopic entirely”.

                      That way it’s unambiguous to anyone reading that you’re not arguing in bad faith

                      It’s hard to see what “bad faith” even means here. Are you suggesting that you weight my comment differently depending on my stance regarding what Uncle Bob did? Why?

                      It feels like you’re coming at this from a perspective of, something like… “the thing of highest importance is that we all agree that Uncle Bob = bad. Within these bounds, we may then debate the validity of certain rhetorical tactics.” Like there is a risk that if I communicate insufficiently my stance on Uncle Bob, you may accidentally misinterpret my comment as written by an ally, rather than an enemy, which would “obviously” color your reaction. If this is a bad interpretation, I apologize - but it is this totalitarizing mode of engagement in particular that raises my hackles.

                      1. 3

                        If anything the disagreement might be this: I do not believe you can ban political speech and I believe this insult to be political in nature. The personal is political. If you’re in for a long, but good, watch “How to Radicalize a Normie” video on youtube is very good and speaks to this phenomenon.

                        When you remove the tools to speak out against behavior you believes harms your community, when you silence lived experiences, it’s far from a neutral position. This is why I used the word “protest”.

                        To bring that back to this thread: “This political stance is of topic” is indistinguishable in impact (if not intent) from “Let’s rename Lobsters to ‘I love everything Bob says’”. Yes this is hyperbole, but the sentiment I believe holds true.

                        1. 5

                          “This political stance is of topic” is indistinguishable in impact (if not intent) from “Let’s rename Lobsters to ‘I love everything Bob says’”.

                          If you genuinely believe that these stances are indistinguishable in impact I think there is a fundamental misalignment here that probably can’t be reconciled.

                          One of the core ethical points you are touching on is “Does failure to condemn an activity constitute material support for it?” That’s a long-running question, one that is quite open to debate by respectable and good people on all sides, and also is something that is quite unsettled basically wherever it comes up.

                          1. 3

                            Does failure to condemn an activity constitute material support for it

                            If there’s an online exchange about someone who has done harmful things and a commenter chooses to spend hours solely arguing against the ways that people have brought up their grievances that’s not “failure to condemn” that’s active and willful support.

                        2. 2

                          I think neutrality itself is a deeply political stance; it’s just one which I happen to hold. (Radical centrism ho! The personal is political, and my political orientation is pro-neutrality.) I guess we’ve arrived at a value disagreement? Regardless, I cannot control your interpretation of my opinion, but it’s still worthwhile to note that it matches neither my interpretation nor my intent. (Though I accept it as an outcome. (No, that’s not the same thing as intending it.))

                          That said, I do believe that speaking out against behavior, certainly in this particular way, also harms the community.

                          1. 4

                            I think neutrality itself is a deeply political stance

                            I guess I agree. There’s a whole country known to have a “neutral” political ideology: Switzerland. So it’s certainly a possible state in our DnD matrix i.e. “chaotic neutral”. This is their intention, but through action or inaction everything they do has non-neutral impacts on those around them.

                            It’s my experience that advocating for neutrality favors the status quo. Essentially in any situation you can ask: “who would benefit from my action” or alternatively “who would benefit from my inaction”.

                            That said, I do believe that speaking out against behavior, certainly in this particular way, also harms the community.

                            An interesting point hidden here. I don’t think I’ve stated exactly what I’m wanting.

                            When you say “harm” I think you want people to be civil and nice on this forum (which this most recent reply is both, thank you for that). I want that, too.

                            I also want people to feel safe and included. I want people to speak their minds and have productive conflicts and disagreements and get the full range of experience from members. I don’t want a sanitized utopian facsimile of a community.

                            To get that inclusion, we must be tolerant. Paradoxically to be a tolerant community, we must be intolerant of intolerance (paradox of tolerance). This is also touched on in “Radicalizing a Normie”.

                            You don’t want a world where people are freely slinging insults around (we’re not /r/programming after all). I want a world where someone who loves programming and wants to come and share doesn’t feel like they belong due to their gender.

                            At the end of the day, that’s what I prioritize most.

                            1. 2

                              I mean: I don’t think it’s as simple as a difference in goals. You have a bunch of political theory behind your view, and also behind my view in yours: me, likewise. It’s just politics.

                              One thing I want to highlight: the idea that “we must exclude those who defected against our political norms elsewhere” is not just a matter of different goals; I disagree with this fundamentally. I think that … fundamentally, I actually disagree with the very idea that we should infer quality of belonging from the adherence of a site to the enforcement of global ingroup and outgroup standards. I think that’s bad. So it’s not, I want to emphasize, that I want people who are put off by Uncle Bob to “not belong”; it’s that I reject the entire paradigm that leads to that judgment.

                              But yeah, not something we’ll resolve here probably.

                            2. 1

                              I want a world where someone who loves programming and wants to come and share doesn’t feel like they belong due to their gender.

                              An unfortunate typo. I want to include people. I hope that was clear via the rest of the message.

                              Just goes to show how fraught text only comms can be :/

              2. 5

                he said it was okay because the sexist character stereotype was played by his daughter

                For my part, I’m fine with calling someone who behaves in the quoted way “creepy.” That behavior is creepy, doubly so if he didn’t acknowledge the issue because that increases the likelihood that he’s blind to other creepy behavior. He’s a broken stair that others need to be warned about and sometimes individuals need their visceral reaction to “creepy” to jolt them into recognizing that.

                1. 6

                  I think my problem with this whole idea is that it presumes that social spaces should be or are already homogenized, so that one single standard of acceptable behavior can govern all of them. I believe we agree (?) both that “creepy” massively compresses the communicated information and that it primarily serves as a social enforcement or consensus-finding mechanism; I would guess our main disagreement would be first that the consensus in question is so vital that it needs to be universalized, and that it is acceptable to attempt to enforce it on a totally unrelated site and a topic that is only related in that Bob is a participant in a technical debate, in which he exhibits no problematic behavior.

                  The classic term is “unsafe”. Bob to my knowledge neither poses a safety threat to anybody nor is credibly accused of posing a safety threat to anybody, has not behaved in an inappropriate way towards any specific person; as far as I can tell the worst he is accused of is bad language.

                  (Behavior isn’t inherently creepy. Creepiness is a culturally mediated relation between creeper and creepee; it is not inherent in any single person or action. The phrase “X is creepy” elides this fact; optimistically for compression, cynically for manipulation. If “I am creeped out by your actions”, this is primarily on me; if “you creep me out”, this is primarily on you.)

                  (PPS: learning about how to recognize rhetorical framing is annoying; you start seeing it everywhere.)

                  (PPPS: My visceral reaction to “creepy” is getting unreasonably angry at the person saying it.)

      2. 0

        (the funniest part of this is that everyone knew what i was alluding for, everyone recognized that it’s a creepy behaviour but for the sake of their personal comfort so many people were going out on a limb to defend platforming the creep)