1. 29

    I think classifying C as simplicity 5 / 5 is a bit odd, because it is superficially easy but then actually writing correct code is hard because you need to know the subtleties of it. No wonder there is a book called “Deep C secrets”. In this regard Java is much, much simpler because for the most part you don’t need to concern yourself too much about what the code will compile to, it will be sort of correct. There are a couple of weird and surprising gotchas but my impression is that it is overall way more manageable.

    Also the amount of tooling required to make C correct is anything but simple.

    Of course, all of these points are even more valid in C++.

    Also I think your praising Go with points that are just as valid for Python and Ruby, which you’re pretty much damning (“quite a large number of projects invested into it already, has been stable for years and probably isn’t going anywhere”).

    1. 5

      That’s a great point about C, you changed my mind on that one, even more damning for C++.

      With regard to python and ruby, you are very right, my brain sort of just registered it as a given, but I should have been more clear. I would bet much much more stuff runs on python or ruby than Go.

      1. 8

        I think classifying C as simplicity 5 / 5 is a bit odd, because it is superficially easy but then actually writing correct code is hard because you need to know the subtleties of it

        Simplicity and ease of use are two different things. You could envision an assembly language for a tiny risc with load & store and a handful of other instructions and that’d get you about as simple a turing complete language as one can imagine but it won’t be easy to write complex and correct software in it.

        Now, as for the subtleties of C, I feel like they’re a little overstated. They’re there, but you learn the stuff that matters in a weekend. The rest of Deep sea secrets is just an exposition of funny tricks you can do, if you’re into IOCCC and party tricks.

        Can’t really compare it to Java since I don’t know Java. But going by the spec and features, Java does not appear to be a simpler language.

        I definitely agree that C isn’t 5/5, but it’s fairly simple for a mainstream language.

        1. 7

          Now, as for the subtleties of C, I feel like they’re a little overstated. They’re there, but you learn the stuff that matters in a weekend.

          The ceaseless litany of security problems in C codebases is evidence that this is pretty demonstrably untrue.

          1. 3

            To be fair, security was on a different 0-5 scale so I would presume explicitly excluded from this one. Also, it scored a 0 on security, so I think the author agrees with you.

            1. 2

              I think it’s evidence that a lot of people write code very poorly and that there’s a lot of old C code. It is possible - easy, really - to write very secure C code. It requires you to use a ‘subset’ of the language, I guess, but it’s not difficult. Certainly if you argue that C++ is more secure than C then you’re admitting that the security of a language is not based on all of its features but on the features people use, given that all of C’s security issues exist in C++.

              1.  

                I think it’s evidence that a lot of people write code very poorly and that there’s a lot of old C code. It is possible - easy, really - to write very secure C code. It requires you to use a ‘subset’ of the language, I guess, but it’s not difficult.

                Well, I mean, by all evidence it is difficult, because plenty of big and important and long-lived projects, with extremely good C programmers behind them, are deeply and critically insecure. At some point you can’t just blame poor craftsmen, at some point it is the fault of the tools.

            2. 1

              Also, if some language X is written in C, then I do not get that X can be simpler than C, as to have X running on your machine, you would need both a C compiler and a X engine/compiler.

              1. 1

                Plus, there’s tools that can check for funky stuff. KCC, the executable semantics for C, says it crashes when it detects undefined behavior during a compile. So, one idea I had was making sure all safer modules compile clean with it.

                1. 1

                  Simplicity and ease of use are two different things.

                  I agree with you here, unfortunately the article does not do a distinction between simplicity and ease of use. When it comes to simplicity, assembly is pretty simple, so are stack based languages like Forth, with C being someone in the middle ground. In this regard Java is not simple, agreed.

                  When it comes to ease of use it is different, but one can also evaluate it in different contexts. Writing a C program that compiles is quite easy, writing correct C programs at scale is a very different matter. Maybe that’s another possible point of comparison: how well does a language scale from simple to complex tasks.

              1. 2

                What is the concurrency story? I didn’t find any mention of “thread” or “concurrency” on the main page or the examples page.

                1. 1

                  There’s nothing announced; for the moment you have libpthread for threading but no specific support. In the future I’d like to add coroutines, but it’s still in the design phase.

                1. 4

                  There is no need to create a slice of single-value channels in Go, a single channel with or without a buffer more idiomatically implements the pattern.

                  Rob Pike explicitly said, no generics

                  This is also not true, to the best of my knowledge.

                  1. 2

                    Here’s a more idiomatic version of the Go code.

                    // Definitions
                    longComp1 := func() int { return 5 }
                    longComp2 := func() int { return 6 }
                    fs := []func() int{longComp1, longComp2}
                    aggregate := func(a []int) { fmt.Println(a) }
                    
                    // Scatter
                    c := make(chan int, len(fs))
                    for _, fn := range fs {
                        go func(fn func() int) { c <- fn() }(fn)
                    }
                    
                    // Gather
                    var results []int
                    for i := 0; i < cap(c); i++ {
                        results = append(results, <-c)
                    }
                    aggregate(results)
                    
                  1. 0

                    I’m very happy with vgo after spending years frustrated with buggy, partially-broken third party tools: first glide (no way to upgrade just one package, randomly fails operations) then dep (100+ comment issue on not supporting private repos).

                    This comment from HN sums up my feelings on this post:

                    Go does not exist to raise the profiles of Sam Boyer and Peter Bourgon. Sam wanted to be a Big Man On Campus in the Go community and had to learn the hard way what the D in BDFL means. The state of dep is the same as it was before - an optional tool you might use or might not.

                    Lots of mentions in Peter’s post about things the “dep committee” may or may not have agreed with. Isn’t this the same appeal to authority he is throwing at Russ? When did the “dep committee” become the gatekeepers of Go dependency discussions and solutions? Looks like a self-elected shadow government, except it didn’t have a “commit bit”. Someone should have burst their balloon earlier, that is the only fault here. Russ, you are at fault for leading these people on.

                    Go is better off with Russ’s module work and I personally don’t care if Sam and Peter are disgruntled.

                    1. 14

                      This is an extremely bad faith interpretation of events. Your words have an actual negative effect on people who have tried for a very long time to do the best they could to improve a bad situation.

                      1. 9

                        had to learn the hard way what the D in BDFL means

                        Except Go is not (or at least doesn’t market itself as) BDFL-led. The core team has been talking about building and empowering the community for years (at least since Gophercon 2015, with Russ’ talk).

                        When did the “dep committee” become the gatekeepers of Go dependency discussions and solutions?

                        They were put in place by / with the blessing of the Go core team, so some authority on the subject was certainly implied.

                        Go is better off with Russ’s module work

                        You can certainly prefer Russ’s technical solution, that’s only part of the thing being discussed (and I think it’s fair to say it’s not the heart of the matter).

                        The rest of your quotes are just mean.

                        1. -4

                          People don’t seem to realize that Go is not driven by the community, it’s driven by Google. It’s clear to me that Google doesn’t trust its programmers to use any advanced features, the code is formatted the same (again, don’t trust the programmer), everything is kept in one single repo and there is no versioning [1]. In my opinion, Google only released Go to convince a ton of programmers it’s the New Hotness (TM), get everybody using it so they can cut down on training costs and disappointed engineers looking for resume-worthy tech to work on [2].

                          So, any proposal for Go that violates Google’s work flow will be rejected [3]. Any proposal that is neutral or even helps Google, will probably be accepted. As far as I’m concerned, Go is a Google-proprietary language to solves problems Google has. The fact that it is available for others to use is intentional on Googles part, but in no way is it “communitty driven.”

                          [1] Because if you change the signature of a function, it is up to you to change all the call sites at the same time. Because the code is all formatted the same way, there does exist tooling to do this. At Google. Probably no where else.

                          [2] “What do you mean we got to use this proprietary crap language? I can’t put this on my resume! My skills will stagnate here! I hate you, Google!”

                          [3] Stonewalled. Politely told no.. But ultimately, it will be rejected.

                          1. 4

                            To be fair, don’t trust the programmer, is a pretty good rule to follow when you design a language or API. Not because programmers are bad or incompetent but because they are human and thus predisposed to make mistakes over time.

                        2. 5

                          hrm, I actually want to push back against this quite strongly. any BDFL making decisions in the absence of community input will quickly find themselves the BDFL of a project that has no users, or at least one that often makes poor technical choices. Also, framing this disagreement as a personal one where prestige and reputation are at stake rather than as a technical one is a characterization that nobody other than the involved parties can make, certainly not people uninvolved in the project at all. In particular, making character judgements about people you don’t know based on technical blog posts is something I expect from the orange website, but I’d like to think the community here is a bit better.

                          and as far as that technical disagreement goes, I’ve read through rsc’s rationale and I’m not any more convinced than I was in the beginning that jettisoning a well known package management path (SAT-solver) in favor of a bespoke solution is the correct decision. It is definitely the Golang thing to do, but I don’t know if it’s the best. Time will tell.

                        1. 9

                          This is a great article. I loved it. I generally agree with all of it, and actually practice most of it as well. I do have two pieces of critical feedback though. :-)

                          Firstly, this doesn’t talk about error handling. For the most part, there isn’t much to it, but there are definitely interesting pits that one can fall into. e.g., If you need to perform batch operations that can partially succeed or the correct translation of errors into corresponding HTTP errors. It’s easy to let errors nest, so simple type switching can be problematic, although the github.com/pkg/errors can help with that via its causal chains.

                          Secondly, I think this article gives the standard party line on interfaces, but it is incomplete IMO. And not in a pedantic way, but importantly incomplete. I wrote about this more here: https://lobste.rs/s/9ots3k/advanced_testing_techniques_go#c_1ueuxw

                          1. 8

                            Thanks for the feedback. I chose talking points based on my experience of what tends to trip folks up, and in my experience, error handling hasn’t really been an issue. Tell people about pkg/errors.Wrap and they’re pretty much good to go.

                            Also, we’ve spoken about this aspect of interfaces before; I still believe we work in sufficiently different codebases. That is:

                            The only real issue here is that you want everyone else that uses this storage system to be able to also use the in-memory implementation as well. The most natural way to do that is to define an interface.

                            In the line-of-business code I’m most often exposed to, packages rarely have more than one consumer; often, it’s just package main, plus relevant tests. In that case, where the interface definition lives is essentially a coin-flip, and (IMO) keeping the consumer contract with the consumer is the best default way to encode the abstraction boundary.

                            Or, if the package does have multiple consumers, most often each consumer is using a different subset of functionality. For example, a shared repository type might be a dependency to two components, but one writes, and the other reads. In this case, it still makes the most sense to define downscoped consumer interfaces.

                            If I did have multiple packages using the complete methodset of a shared type, I would absolutely define the interface with the implementations. I just can’t think of many (any?) times in my industrial programming experience where that’s been the case.

                            1. 3

                              Interesting. I forgot we talked about this before. :-) We have many packages that make use of said storage layers. e.g., There are lots of different things that want to communicate with out Elasticsearch cluster for a variety of different reasons, but we can manage to button up all of the Elasticsearch specific stuff for a particular data model behind a layer of encapsulation. The interface for it is quite large, as you might imagine. :-)

                              RE error handling: it hasn’t been a major source of frustration, but it definitely hasn’t been zero either. It is very easy for a type switch to not do what you think it’s doing when needing to perform error conversion or when needing to “cleanse” errors such that you aren’t showing, say, transient Elasticsearch errors in your HTTP 500 payload. We’re probably approaching it in the wrong way, honestly.

                              1. 2

                                We’re probably approaching it in the wrong way, honestly.

                                In the Go kit view of the world, there is a strict separation between business domain and transport (e.g. HTTP). One common operation is translating business domain errors to and from transport semantics. The pattern that seems to work best is to do it explicitly, via some kind of mapping. That is,

                                func httpError(biz error) (code int, err error) {
                                    if biz == service.ErrBadCredentials {
                                        return http.StatusNotAuthorized, biz
                                    }
                                    if biz == service.ErrInvalidRecord {
                                        return http.StatusNotFound, biz
                                    }
                                    switch e := biz.(type); e {
                                    case service.DependencyError:
                                        return http.StatusBadGateway, e.Error
                                    case service.RegionError:
                                        return 451, errors.New(e.Description)
                                    }
                                    return http.StatusInternalServerError, biz
                                }
                                

                                This behavior can be implemented as a free function defined in the transport package, as above, which is what I generally recommend. Or, if the service only really speaks one transport, it may make sense to “splat” the logic out into a common interface, which all business errors can implement:

                                type HTTPError interface {
                                    Code() int
                                    Err() error
                                }
                                

                                This approach technically violates separation of concerns and the inward-facing dependency rule, but it can be a useful hack in some circumstances.

                                Maybe this gives you some ideas for how to handle crossing the Elasticsearch/business domain boundary.

                                1. 2

                                  Thanks! I’ll ponder that. :-)

                          1. 3

                            As a budding go programmer just out of college this has been one of the most useful posts to help me understand the language and best practices, especially that scatter/gather pattern. Thanks for spending time preparing for the presentation and kudos for posting it here!

                            1. 7

                              A good resource for additional patterns is https://gobyexample.com/.

                            1. 1

                              I’ve sponsored quite a few 1-2 person teams, and each team I’ve regretted it. To repeat: I have regretted it every single time.

                              Interesting. The best teams I’ve ever been on—by any and all metrics: innovation, quality, delivery speed, cohesion—were small, 2 or maximum 3 people. Conversely, the worst teams have uniformly been larger, 6 to 8 people. My experience was that communication overhead and the cost of building even rough consensus were always the bottlenecks, and worth optimizing for. But maybe I work on different problem domains, or in different types of organizations, than the author of this article.

                              1. 1

                                How long were you on these 2-3 person teams? Did you have to maintain what you built for years?

                                1. 1

                                  Yes, typically 6–18mo, but shifting responsibilities slightly in that time. The most common pattern was that the small team would build and productionize a project to a steady state, and then fold it into the operational responsibilities of a larger group. The engineers would rotate through that larger group and form new, small teams when business needs arose.

                              1. 34

                                please don’t. When learning you make a lot of mistakes. And writing a tutorial with this mistakes doesn’t help other learners when they read this.

                                1. 12

                                  And even if you don’t make mistakes, most people will misunderstand their own process and come up with unhelpful things like monad tutorials: https://byorgey.wordpress.com/2009/01/12/abstraction-intuition-and-the-monad-tutorial-fallacy/

                                  But now Joe goes and writes a monad tutorial called “Monads are Burritos,” under the well-intentioned but mistaken assumption that if other people read his magical insight, learning about monads will be a snap for them.

                                  1. 7

                                    Came here to say something similar to this.

                                    Learn new technology through writing a tutorial about it, but don’t publish it.

                                    There’s so much misinformation by well-intentioned learners.

                                    I’m not trying to diminish the importance of journaling either! Journaling != Tutorials.

                                    1. 7

                                      Publishing your tutorial gives it an audience, which means someone may (hopefully!) come along and correct you on your errors. This is invaluable.

                                      I also disagree with this negativity. Make it clear at the top of your tutorial that you’re a beginner and you may not have it all right. But with that caveat, publish away.

                                      1. 3

                                        I think we’re discussing the same thing but disagreeing on the semantics of it.

                                        • Belief #1: Sharing how you learned something can be a valuable tool to someone else.
                                        • Belief #2: Tutorials can seem like they’re from a source of authority, so a lack of a disclaimer could be hazardous.
                                        • Belief #3: Imposter syndrome is real. We need to mitigate misinformation, but not at the expense of people being afraid to share.
                                        1. 1

                                          Publishing your tutorial gives it an audience, which means someone may (hopefully!) come along and correct you on your errors. This is invaluable.

                                          Absolutely invaluable, but at the very same time, the exposure spreads the misinformation to more readers, potentially doing more harm than good. I don’t think a disclaimer is enough. I think the word “tutorial” implies some authority, unfortunately.

                                          I think a better way is to humbly share a report of your findings so far, with questions and an (as appropriate) admission that you don’t understand everything. Julia Evans is masterful at this style.

                                          As a reader new to the topic, you get the benefit of an explanation of what she currently understands (which is often from a beginner’s mind), and usually some questions to seek answers to on your own. As an expert of the topic, you are invited to share more, or clarify, or correct (and this happens a lot on twitter, and/or HN, etc). But you’re doing so from a place of empathy (you want to be helpful) instead of from a place of disgust (ugh! why is this tutorial so bad!).

                                    1. 2

                                      Sounds like this person wants referential transparency, where each function is only described by its inputs. Perhaps I’m misreading this?

                                      1. 3

                                        That’s a good goal to shoot for, I’d say, yeah.

                                      1. 7

                                        Oddly - this sounds like the author has just discovered dependency injection? I would have thought that concept would translate pretty well to Go. I’ve written a lot of Go, but I cut my teeth largely on C, C++, and C# so dependency injection has always been on my radar. When I wrote Go, I learned it and largely applied my own lessons from C, C++, and C#.

                                        Due to compiler constraints and the language’s ethos, global state and func init feel weird in Rust (my current language). You can’t, without jumping through hoops, create objects that are partially constructed (e.g. using Option for uninitialized types). That said, even if you’ve got struct members that are of type Option, you are actually initializing it to something - sometimes it’s just None.

                                        I don’t have enough context in Go land to know why this author’s argument might be a novel conclusion. Does anyone have some context? I’d love to learn more.

                                        1. 10

                                          Many Go programmers seem to feel very comfortable with global state. When I join new organizations or projects, I often find myself needing to educate and socialize the problems that come from that. This post is just a formalization of the things I’ve been saying informally for a long time.

                                          I wish I knew why this was so relatively prevalent in the Go ecosystem. If I had to guess, I’d speculate that it’s because a lot of the example code in e.g. books and tutorials doesn’t really shy away from global state.

                                          1. 7

                                            It’s also related to the standard library itself having lots of globals. Which itself leads to bad things, like the cryptographic randomness source being trivially modifiable: https://github.com/golang/go/issues/24160

                                            1. 3

                                              The Go community has a strong culture of writing application-specific code that is “good enough”, and tends to err strongly on the side of avoiding premature abstraction. For a significant number of use cases, globals (combined with a reasonable amount of documentation, testing, and good discipline) tend to be the “good enough” solution.

                                              The thesis of Go’s culture is that premature abstraction often costs more than rewriting code. The argument is that you often know your domain better after writing a “good enough” first version, and that premature abstractions lock you in to specific designs more tightly that may be harder to change down the line.

                                              It’s definitely not a conventional position, but it’s not indefensible – it’s hard to argue that Go developers are not pragmatic (or not productive).

                                              1. 1

                                                Interesting. Good to know!

                                              2. 2

                                                Yup, this was my comment when this appeared a year ago on HN:

                                                In other words, use a pure dependency-injection style, and ZERO globals.

                                                https://news.ycombinator.com/item?id=14521894

                                              1. [Comment removed by author]

                                                1. 3

                                                  Five minutes per person!! That sounds interminable. One minute per person, including (short!!) clarifying questions from other members, seems like a much more reasonable limit. Standups are strictly for orientation; any meaningful or deeper conversation should occur elsewhere.

                                                  edit: I see I agree with jpatrick, basically.

                                                  1. -1

                                                    The goal is to let people know you are working on things and the kind of things you are working on

                                                    The goal is to replan the sprint. It is a mini planner.

                                                    See “Daily Scrum” in http://www.scrumbook.org/

                                                  1. 4

                                                    Author here, thought this might create some interesting discussion!

                                                    TL;DR:

                                                    Why have multiple distinct syntactic constructs for if-then-else, pattern matching and things like if-let, when they are largely doing the same thing (check some condition to make a decision on how the program should go on)?

                                                    The core idea is having a single, unified condition syntax that scales from simple one-liners to complex pattern matches that subsumes the existing syntax options.

                                                    1. 3

                                                      Are they the same?

                                                      Why do we even use if statements anyway?

                                                      k/q doesn’t use them very often, since it rarely makes things clearer. Function application is indexing, decode, projection and each-left, and so on, make it possible to write much less code.

                                                      for example, if x == 1.0 then "a" else "z" could be simply "za"1=

                                                      “one comparison operator on multiple targets” is: "zba"2 sv 1 2=\:

                                                      “different comparison operators, equality and identity” is: "zna"2 sv(1=;0w=)@\:

                                                      “method calls” are "zne"2 sv(isempty;0 in)@\:

                                                      Scala is an atom-language though. It can only do one thing at a time, so you see there to be a need to “check some condition to make a decision on how the program should go on” but, let’s say those lists are big, we can trivially parallelise “each”; In a data-parallel language, you very infrequently check some condition to make a decision on how the program should go on.

                                                      1. 9

                                                        Your “simply” is my “incomprehensibly”.

                                                        Computer languages need to strike a balance between human-language intuition and machine-parser explicitness. Simply slamming the slider all the way to the right isn’t a solution, so much as an admission of defeat, IMO.

                                                        1. 2

                                                          My idea was totally different. I’ve noticed what people comprehend depends on their thinking style, background (esp prior languages), and so on. However, there’s fewer underlying concepts or structures in play than there are surface syntaxes or API’s. So, I was thinking that maybe languages should try multiple front-ends with different syntaxes, coding styles, etc. As a start, C and Python. Each client has a tool that automatically translates it to their style with same meaning.

                                                          1. 1

                                                            maybe languages should try multiple front-ends with different syntaxes, coding styles, etc.

                                                            is it just me or does it sound like racket’s #lang?

                                                            1. 1

                                                              Probably also not a coincidence that Racket is at the top of my list for a future project doing something similar. ;)

                                                          2. 1

                                                            Your “intuition” is really mediocracy.

                                                            Code that is shorter has a higher chance of being correct. If you can’t read it now, learning how to read it will make you a better programmer, and that benefits you, and everyone you work with.

                                                            1. 1

                                                              (laughs)

                                                              Downvote my thoughtful response as a troll, insult me, and then talk down to me. Really hit the internet trifecta, huh?

                                                              1. 0

                                                                You’re the one who said you can’t comprehend something, and yet you believe you have something important to comment on it?

                                                                How is that not mediocrity?

                                                        2. 2

                                                          Nice. I wonder how it works out grammatically for parser.

                                                          1. 4

                                                            Either indentation-based, or requiring some delimiter.

                                                            I’m largely in the indentation-based camp these days, so I haven’t spent much time thinking about how to make the delimitation to look nice. I’d probably just go with mandatory curly braces around the branches.

                                                        1. 2

                                                          So, generics are on the table for 1.x, I did not expect that…

                                                          Carlisia Pinto: [00:28:09.12] So you’re saying there will not be generics?

                                                          Russ Cox: No, I didn’t say that. [laughter]

                                                          Brian Ketelsen: That was a big jump.

                                                          Carlisia Pinto: Because that would be a big event, I would say…

                                                          Russ Cox: Well, but maybe generics are like 1.54, or something.

                                                          1. 2

                                                            Why didn’t you expect that? It has been consistent with the core team’s messaging on the subject since pre-1.0.

                                                          1. 11

                                                            Lots of other things to comment on but I firmly think interfaces-as-structural-types is one of Go’s greatest strengths. To put it in the “bad” group is upsetting and kind of made me discount the rest of the article.

                                                            1. 6

                                                              I think it’s a philosophical difference:

                                                              Some developers write code to document to coworkers what they are doing, and some developers just want things to compile with the least effort possible.

                                                              1. 2

                                                                It’s not a matter of least effort. Go is one of the first languages I know of that was primarily designed for large teams of engineers instead of individuals. Heavy focus on compile time, gofmt, not allowing compilation with unused variables, etc, all directly stem from this approach. Structural typing specifically reduces cross-team friction. Go will often make decisions that incur individual overhead to reduce overall team overhead

                                                                1. 5

                                                                  Not sure I agree on this.

                                                                  Compilation is not particularly fast, even compared to more more modern languages like Algol, its dependency management is a disaster, it’s error handling ignores the last few decades of lessons learned and the amount of code duplication it forces upon developers makes it hard to maintain.

                                                                  I think it does well in terms of helping Google’s requirements of having all code in a large mono-repo, and enabling people who have no practical experience to produce code.

                                                                  1. 2

                                                                    Whether or not they succeeded at being fast wasn’t my point (though my position is they did succeed). My point is the kinds of things they emphasized in language design. Russ Cox argues that compilation speed is one of the reasons they don’t have generics, for instance.

                                                                    Dependency management doesn’t matter with large teams in a mono repo, yeah, and the code duplication to me felt like it would be an enormous issue when I started but in practice, half a million lines of code later, it doesn’t come up nearly as much as you’d think.

                                                                    1. 2

                                                                      Compilation doesn’t have to be slow just because generics are involved, the author of D demonstrated that fairly well. I think this is rather an issue of generics not having been invented at Bell Labs (or decent error handling in this regard).

                                                                      I’m not sure why “dependency management doesn’t matter if you are a Google employee” should be a convincing argument for programming-in-the-large for the millions of non-Googlers out there.

                                                                  2. 2

                                                                    Structural typing specifically reduces cross-team friction.

                                                                    Can you talk about how structural typing accomplishes this?

                                                                    EDIT: Ah, I see you answered this in another thread.

                                                                2. 3

                                                                  Languages are funny. I’d consider defer to be a bad idea elevated to a language feature, but it’s in the “good” group 😀

                                                                  1. 2

                                                                    Can you explain why you like this idea?

                                                                    1. 4

                                                                      Sure! Let’s say someone writes a library you use frequently but writes it such that it does not explicitly implement any interfaces, as the author of the above post prefers. Maybe you use a library called Beep like this:

                                                                      type Beeper1 struct { ... }
                                                                      func NewBeeper1() *Beeper1 { ... }
                                                                      func (b *Beeper1) Beep() { ... }
                                                                      

                                                                      You are writing your library, but want to support multiple implementations of Beepers. Maybe there’s another beeper (for a test, or another library, or something else) that also has a Beep() method. So you write your code to just expect

                                                                      type Beeper interface {
                                                                        Beep()
                                                                      }
                                                                      

                                                                      Now you can use the third party code, your code, your test code, etc, without having to change the third party code upstream to implement your interface.

                                                                      This is a super contrived example, but as your codebase and team grows larger, this becomes incredibly useful for reducing friction in having teams of engineers work together with minimal stepping on each other’s toes.

                                                                      Ultimately, I describe Go’s structural typing system to Python programmers like the static typing equivalent of Python’s “duck typing” principle, which is, if it looks like a duck and quacks like a duck, just treat it like a duck. Coming from statically typed languages that require you to list what interfaces a concrete instance implement, Go not requiring that dance felt like a huge reduction in friction to me.

                                                                      1. 2

                                                                        I guess, to me, it feels like a strictly worse approach than what Rust has with traits, or Haskell with typeclasses, because there’s no explicit guarantee that a “Beeper” is actually abiding by the contract of the “Beeper” interface. It could have a “Beep” method that actually nukes Vienna. There’s friction to implementing a trait or typeclass for a new type, but there’s also value in it. If I have explicitly implemented a trait, there’s documentation of the type’s usage in that context as well as of its conformance with the interface.

                                                                        1. 3

                                                                          A frequent pattern in Go to get some of that functionality if you want it is to write something like

                                                                          var _ InterfaceName = (*ConcreteType)(nil)
                                                                          

                                                                          which simply adds a compile time assertion that ConcreteType does indeed implement InterfaceName

                                                                          Certainly does nothing to constrain the behavior, but I’m super happy with that (optional) middle ground

                                                                          1. 3

                                                                            There exists a spectrum: let’s say that on one extreme, it’s maximum programmer friction with minimum risk of mis-use; and on the other extreme, minimum programmer friction with maximum risk of mis-use. Go puts a marker down closer to the latter extreme, judging friction to be a worse evil than risk for their context, and providing some affordances (like the one-liner jtolds mentions) to mitigate some of those risks via convention.

                                                                            I think no position on the spectrum is “strictly worse” than any other. It is a question of trade-offs to satisfy particular programming contexts or requirements. I think this is the same for any technical decisionmaking.

                                                                            Go makes a lot of decisions this way. (Not all, and there are warts for sure — but many.) I think it is a nice and refreshing change from where most languages (like Rust) decide to land, and I think Go’s success in the market proves it is a viable, or maybe even preferable, compromise-point for many users.

                                                                    1. 7

                                                                      The merits of minimalism aside, brutalism was a blight on architecture for decades, a cult of ugliness, and produced buildings which still ruin cities to this day. The examples of brutalism inspired web design in the article are highly aesthetic by comparison.

                                                                      Also, I appreciated the Nine Inch Nails reference.

                                                                      1. 4

                                                                        This article was posted on lobste.rs a while ago and it really opened my eyes to the point you’ve stated about brutalism. Here was the discussion around it.

                                                                        1. 4

                                                                          I dunno. I find brutalist architecture quite aesthetically pleasing.

                                                                          1. 5

                                                                            Brutalist buildings in good repair are treasures.

                                                                            1. 4

                                                                              By what measure? Taste/distaste for brutalist architecture is highly opinionated in my experience.

                                                                              1. 1

                                                                                By the measure of my subjective experience, of course :)

                                                                                1. 2

                                                                                  At least you’re honest about it. :)

                                                                          1. 2

                                                                            Just envision how complex would it be to deploy to mesos/kubernetes without the container abstraction…

                                                                            Nice and complete article!

                                                                            1. 4

                                                                              I was at Twitter when we deployed the first production deployment of mesos. It did not use “containers” as they are understood in the docker sense. We shipped binaries, there was a shared filesystem you could see if you logged into one of the machines your service was running on, and mesos set up service discovery to connect the local ports you were randomly assigned at boot time in an (iirc) env variable.

                                                                              For mesos, and, I believe, borg before it, containers came after to make things easier.

                                                                              1. 1

                                                                                containers came after to make things easier. That’s the whole point of it! Obviously you can do without, but like I said, imagine how complex it would be!

                                                                              2. 3

                                                                                Because those are built for containers. Containers came first. Maybe I am missing your point…

                                                                                1. 1

                                                                                  I’m not speaking about the configuration details but the whole concept. Can someone point me to a technology that correctly and easily describe the runtime convention such as port binding, volume mounting, but as the same time enable extensibility and security?

                                                                                  Sûre many tools exist to do things here and there, but none use them offer a coherent solution to build on top of.

                                                                                  1. 2

                                                                                    Sure, containers enabled this paradigm. But it’s not as if networking, data storage/access, scaling, and security didn’t exist before containers. They were just handled differently with different technologies.

                                                                                    Does kubernetes make this easier/better? Probably depends who you ask. And for my take, you still have to run kubernetes on something. That something still has the same needs/requirements as always. (This is where you introduce the cloud layer, or someone else’s computer.)

                                                                                    1. 3

                                                                                      Does kubernetes make this easier/better?

                                                                                      Similarly to how containers apply the benefits you can easily get from the Maven model to any runtime, I’ve always thought that kubernetes was just Greenspun’s Tenth Law but about the benefits of Erlang.

                                                                                2. 2

                                                                                  Honestly, I think it wouldn’t be too bad.

                                                                                  Artifacts would be shipped around as e.g. .zip files downloaded from HTTP servers, instead of containers pulled from container registries. Those artifacts would be tagged with metadata to indicate which runtimes they require, and nodes in the cluster would be tagged to indicate which runtimes they provide; the scheduler would schedule jobs based on those constraints. Kubernetes, at least, already supports this. On balance, I think dropping containers for this aspect of things would actually make the overall system simpler.

                                                                                  Resource limits and namespaces would need to leverage underlying OS primitives directly, rather than going through the container abstraction. Probably a proto-container spec (like OCI?) would arise from these requirements naturally. This is where things would get more complex.

                                                                                  1. 1

                                                                                    In terms of a framework that would allow you to programmatically deploy (virtual) machines, get applications installed then configure those and start them, it’s basically what I built at my last job. I didn’t get onto any advanced features like automatic load distribution and automatic machine setups when the environment needs more resources but it was completely possible on the back of the basic features as well as the fact that the system did set up distributed (peer to peer and mastered) services together with their own encrypted virtual networks.

                                                                                    I don’t know what other advanced features are possible in Kubernetes/Mesos that wouldn’t work without containers but AFAIK the security isolation is still better for VMs than containers and the networking should be easier since it’s simplified by not having a machine effectively be a router for the containers.

                                                                                  1. 2

                                                                                    I can’t help but disagree with the “accept interfaces, return structs” thing. Especially if you’re exposing those functions publicly. I’m probably dumb and just doing this very wrong, but I’ve lived through many cases where mocking dependencies is harder than it needs to be because I need to provide a struct as the result of something. I mean, especially when it’s an external package, I don’t necessarily want to be tightly bound to the struct that is exposed and would generally much rather use an interface. Am I doing this wrong?

                                                                                    1. 4

                                                                                      If you mock dependencies, you’re creating a mock implementation of a narrowly-scoped interface as an input to a function, not a copy of a struct as the output of an e.g. constructor.

                                                                                      Concretely, if you have a function

                                                                                      func process(s3 *aws.S3) error {
                                                                                          x, err := s3.activate()
                                                                                          if err != nil {
                                                                                              return errors.Wrap(err, "activation failed")
                                                                                          }
                                                                                          if err := x.signal(); err != nil {
                                                                                              return errors.Wrap(err, "signal failed")
                                                                                          }
                                                                                          return nil
                                                                                      }
                                                                                      

                                                                                      it should instead be

                                                                                      +type activator interface{ activate() (xtype, error) }
                                                                                      +
                                                                                      -func process(s3 *aws.S3) error {
                                                                                      +func process(a activator) error {
                                                                                      

                                                                                      but aws.NewS3 can and should continue to return *aws.S3.

                                                                                      1. 2

                                                                                        I had the same impulse when starting Go and friends rightly warned me away from it.

                                                                                        If you write functions that take interfaces and that return interfaces, your mock implementations start returning their own mocks, which gets brittle very fast. Instead, by having interfaces as inputs and concrete types are return values, your mock implementations can simply return a plain struct and all is well.

                                                                                        But I think it’s worth not taking someone else’s word for it, and trying both approaches and seeing how it goes.

                                                                                        1. 3

                                                                                          I agree but in effect, most non-trivial libraries (stuff like Vault, for example) return structs that expose functions that return structs. Now, if I need to access that second layer of structure in my code, the appropriate design would seem to be, under those directions, to declare a function whose sole job is to accept the first level of structure as an interface and spit back the second layer (which still leaves me with a top-level function that is hard to test)

                                                                                          1. 1

                                                                                            Looking at Vault’s GoDoc, I see Auth.Token, which sounds like the kind of API you’re describing. Sometimes, it might be a matter of how to approach the test, like instead of mocking heavily, you run an instance of Vault in the test and ensure your code is interacting with Vault correctly.

                                                                                            1. 1

                                                                                              I’m not against this, technically, but this is not necessarily practical. Take databases for example. Or external services? Vault is one thing, but what if the thing you depend on us an external service that you can’t mock cleanly, that depends on another service that it can’t mock cleanly? I don’t have a solution for this, I realize that exposing an object as an interface is not especially practical either, and that it’s weird to decide what to expose through that interface. The inverse, to me, is equally weird for other reasons.

                                                                                        2. 2

                                                                                          I’m probably dumb and just doing this very wrong

                                                                                          If so, then I’m right there with you. If I followed @peterbourgon’s advice, then my code would be an unsalvageable dumpster fire. Defining a billion ad hoc interfaces everywhere very quickly becomes unmaintainable in my experience. I’ve certainly tried to do it.

                                                                                          See also: https://lobste.rs/s/c984tz/note_on_using_go_interfaces_well#c_mye0mj

                                                                                          1. 2

                                                                                            All advice has a context, and the context for mine is that you’re dealing with mostly- or completely-opaque structs for the purposes of their behavior (methods) they implement, and not for the data (fields) they contain. If you’re doing mostly the latter, then interfaces don’t help you — GetFoo() Foo is an antipattern most of the time. In those cases, you can take the whole original struct, if you use a lot of the fields; or the specific fields you need, if you only take one or two; or, rarely, re-define your own subset of the struct, and copy fields over before making calls.

                                                                                            But when I’m in the former situation, doing as I’ve illustrated above has almost always improved my code, making it less fragile, easier to understand, and much easier to test — really the opposite of a dumpster fire. And you certainly don’t want a billion ad-hoc interfaces, generally you define consumer interfaces (contracts) at the major behavior boundaries of your package, where package unit tests naturally make sense.

                                                                                            1. 1

                                                                                              I do suspect we are thinking of different things, but it is actually hard to tease it apart in a short Internet conversation. :-) I am indeed dealing with completely-opaque structs, and those structs generally represent a collection of methods that provide access to some external service (s3 being a decent example, but it could be PostgreSQL or Elasticsearch), where their underlying state is probably something like a connection pool. Defining consumer interfaces was completely unmaintainable because their number quickly becomes overwhelming. Some of these types get a lot of use in a lot of code, and tend to be built at program initialization and live for the life of the program. At a certain point, using consumer interfaces just felt like busy work. “Oh I need to use this other method with Elasticsearch but the interface defined a few layers up doesn’t include it, so let’s just add it.” What ends up happening is that the consumer interfaces are just an ad hoc collection of methods that wind up becoming a reflection of specific implementation strategies.

                                                                                        1. 5

                                                                                          The file is 649 lines because large files are encouraged.

                                                                                          A 649-line file is not a large file… ?

                                                                                          1. 2

                                                                                            The same project has several files that are thousands of lines long. I took a shorter example so it wouldn’t seem hyperbolic. The point is that this file fills more than a single screen so checking the import declaration means jumping to a new context.

                                                                                            1. 1

                                                                                              Depending on the situation it might be. Though considering that I’ve seen a fair share of 1KLoc and 10KLoc files, that doesn’t really seem too large to me either.

                                                                                            1. 41

                                                                                              Although I think the author does point out some very valid weaknesses in CoCs, both theoretically and in how they are currently implemented, I think the author overlooks, or chooses not to address, a few important points in favor of CoCs.

                                                                                              The largest factor to me is that, regardless of any particular problems with CoCs, the choice to not have a CoC has, in many cases, become a sort of dogwhistle for events that are explicitly inclusive of harassers, and have no intention of running a broadly welcoming event. In essence, the choice to not have a CoC these days is tantamount to an open invitation to the worst of the people in our industry. That’s not to say that good people don’t also attend these events, or even that the organizers are knowingly trying to create that sort of environment, but ignorance of the message you’re sending doesn’t necessarily change the message itself.

                                                                                              I also think the author is getting rather bogged down in the nitty gritty specifics of the language of the CoC. As a community organizer and moderator, I do find having specific CoC terms useful from time-to-time, but by and large the goal I think a CoC is less about rules and more about values. A CoC as a statement of community values can serve two important purposes:

                                                                                              First, a CoC can help a community manage and be intentional about it’s growth. Small communities may not see any need for a CoC, because in small groups there is often enough social pressure to prevent toxic jerks from dominating the community, but as a community grows and the social graph becomes less fully connected, the opportunities for toxic and abusive corners of the community to appear, and without intentionally managing these, an entire community can devolve. The CoC in this case can provide a shared vision for the values of the community and help to slow the festering of some of these more toxic community elements.

                                                                                              Second, a CoC lets members outside of the community know what the shared value of a community are, and helps people to make an informed decision about whether their values align with the community, and if the community is worth engaging with.

                                                                                              1. 27

                                                                                                Thanks for a thoughtful response to the submission. :)

                                                                                                A few thoughts:

                                                                                                In essence, the choice to not have a CoC these days is tantamount to an open invitation to the worst of the people in our industry.

                                                                                                I would suggest that that status, and the dogwhistle effect you mentioned earlier, is perhaps due just as much to repeated memes about coded messaging and hostility as any of the actual behavior in those communities. At some point, repeated public shaming starts to create pathological behavior on its own.

                                                                                                I also think the author is getting rather bogged down in the nitty gritty specifics of the language of the CoC.

                                                                                                The issue is that, if you expect fair enforcement of rules, you need to use language as clearly as possible. I understand your viewpoint (of CoC as values and not as rules documents) doesn’t take that approach, but for a great many folks a Code of Conduct is taken at face value to be a “Hey, if you do , then happens, so please consider instead.”

                                                                                                a CoC lets members outside of the community know what the shared value of a community are

                                                                                                The problem with treating CoC as signalling documents is that it undermines their efficiency as behavior guidelines (because you have to include language and statements whose purpose is aligned more with value expression than on expressing permissible behavior). Separating the “rules” documents (“hey folks, if you harass somebody, you will be ejected”) from the “values” documents (“we believe that everybody should be secure all the time”) lets a community be more explicit in both areas.

                                                                                                Secondarily, I’d argue that the great benefit of technology is that it works regardless of the value and belief systems of the folks using it. Both a Marxist and a libertarian can sit down at, say, a numerical methods conference on optimization and expect to find something useful for planning out resource expenditure. Neonazis and Antifa both benefit from a good lightning talk on OPSEC. Both Republican and Democrat workers benefit from sharing knowledge about how to use AWS properly.

                                                                                                Using a CoC to try and shoo away folks who have ideological differences runs directly counter to the free exchange of ideas, and serves to limit the utility of those communities by ostracizing others. If we lived in a world where, say, you could point to somebody and say that “This person is a Nazi” with 99.999% accuracy, maybe I’d feel differently–but abuse of terms and the public square by overzealous if well-meaning people (some of whom are even users on this site!) has caused me to severely doubt the reliability of our mechanisms.

                                                                                                1. 18

                                                                                                  Thanks for your thoughts as well. A few follow-on thoughts to your notes:

                                                                                                  I would suggest that that status, and the dogwhistle effect you mentioned earlier, is perhaps due just as much to repeated memes about coded messaging and hostility as any of the actual behavior in those communities. At some point, repeated public shaming starts to create pathological behavior on its own.

                                                                                                  I think there’s probably some truth to this, especially the problems with public shaming. There is an unfortunate tendency to shame people in a way that I think makes them double-down on problematic behaviors. That aside, I don’t think we can ignore the effects of something, dog whistling in this case, regardless of it’s original cause.

                                                                                                  The issue is that, if you expect fair enforcement of rules, you need to use language as clearly as possible. I understand your viewpoint (of CoC as values and not as rules documents) doesn’t take that approach, but for a great many folks a Code of Conduct is taken at face value to be a “Hey, if you do , then happens, so please consider instead.”

                                                                                                  Writing clear rules intended to be taken literally that cover all forms of potentially allowed and disallowed behavior is essentially a fools errand. Ultimately there must be some human arbiters of behavior that will have to interpret the intention of the rules, look at the behavior, and decide if a violation occurred. You’re basically talking about a miniature domains-specific legal problem here, and if you look at the complexity of most modern legal systems it’s clear that you can’t really have a clearly written exact set of rules that will apply without human interpretation.

                                                                                                  I do agree with your suggestion that having a separate rules and values document can help. In the communities that I help moderate we do exactly that- we have a set of rules that are more specific, and have specific consequences, along with a broader values document that outlines the types of behavior we want to see, and how people should behave. The rules document still requires some level of human judgement.

                                                                                                  Secondarily, I’d argue that the great benefit of technology is that it works regardless of the value and belief systems of the folks using it. Both a Marxist and a libertarian can sit down at, say, a numerical methods conference on optimization and expect to find something useful for planning out resource expenditure. Neonazis and Antifa both benefit from a good lightning talk on OPSEC. Both Republican and Democrat workers benefit from sharing knowledge about how to use AWS properly. Using a CoC to try and shoo away folks who have ideological differences runs directly counter to the free exchange of ideas, and serves to limit the utility of those communities by ostracizing others. If we lived in a world where, say, you could point to somebody and say that “This person is a Nazi” with 99.999% accuracy, maybe I’d feel differently–but abuse of terms and the public square by overzealous if well-meaning people (some of whom are even users on this site!) has caused me to severely doubt the reliability of our mechanisms.

                                                                                                  This is one set of values, but I think it’s not the only one. There’s a place for venues that are focused on allowing all people regardless of ideology or background, but it’s perfectly reasonable to want to run or participate in other types of communities.

                                                                                                  In communities that I moderate, I am unapologetically uninterested in excluding some ideologies. Ultimately, there are some ideologies that simply cannot coexist, and focusing on equalizing them just favors the more aggressive of the ideologies. I’m okay with excluding Nazis, because the alternative is to exclude people who are targeted by Nazis. This is one of the ways a CoC can help signal values- by being explicit about the values of the community it is quite quickly clear on which side of this particular chasm an organizations values fall.

                                                                                                  1. 13

                                                                                                    In communities that I moderate, I am unapologetically uninterested in excluding some ideologies. Ultimately, there are some ideologies that simply cannot coexist, and focusing on equalizing them just favors the more aggressive of the ideologies. I’m okay with excluding Nazis, because the alternative is to exclude people who are targeted by Nazis. This is one of the ways a CoC can help signal values- by being explicit about the values of the community it is quite quickly clear on which side of this particular chasm an organizations values fall.

                                                                                                    Exactly. There’s always the “why can’t you be tolerant of my (intolerant) views???” mock innocence, or the “don’t be so easily offended, it was just a joke” mock confusion.

                                                                                                    1. 12

                                                                                                      There’s a place for venues that are focused on allowing all people regardless of ideology or background, but it’s perfectly reasonable to want to run or participate in other types of communities.

                                                                                                      Yet, regrettably, the attempt to run those venues gets a great of slander and libel about dogwhistling–as you yourself point out earlier. So, clearly, there isn’t a place for them, if they don’t wish to be tarred by folks who feel they aren’t sufficiently repressing some outgroup.

                                                                                                      I’m okay with excluding Nazis, because the alternative is to exclude people who are targeted by Nazis.

                                                                                                      You could exclude neither, and let them sort it out themselves elsewhere. Indeed, seeing each other in a context that doesn’t constantly reinforce their ideology might serve to build bridges and mellow both sides–and while your example is a bit stacked, one could apply the same argument to fundamentalists and secular folks, to Israelis and Palestinians, to feminists and men’s rights activists, and so forth.

                                                                                                      Assuming that people from different backgrounds will never get along is a very pessimistic view of humanity.

                                                                                                      EDIT: Anyways, I’m happy to continue this via PM or email if you’d like to go back and forth more…I don’t mean to clutter up the main thread too much. :)

                                                                                                      1. 21

                                                                                                        You could exclude neither, and let them sort it out themselves elsewhere.

                                                                                                        One important lesson of the (waving my hands here) social media information age is that this strategy is not viable, because it always results in a “win” for the trolls. Communities are both empowered and obliged to stamp out this form of sociopathy with prejudice, because failing to do so means ceding the public square to the extremists.

                                                                                                        Free speech and free expression are wonderful goals in the absence of context, but they aren’t trump cards that outweigh all other factors, they’re variables in a complex equation that, when solved, should (among other things) minimize human suffering.

                                                                                                        1. 8

                                                                                                          Exactly. If our Code of Conduct bans violence, but doesn’t exclude, say, explicit white supremacist clothing, the end result is that black people aren’t going to feel comfortable showing up to the con if there’s a bunch of skinheads with swastikas all over the place.

                                                                                                          “But if the skinheads do something to the black patrons, they’ll get kicked out!”

                                                                                                          Sure, but there’s a concept of making people feel comfortable at an event open to the public. The white supremacists are welcome (in theory) to come to the con, but they need to keep it to themselves.

                                                                                                          1. 2

                                                                                                            The CoC is almost a courtesy to the skinheads in that example. The owner of the venue (or the lessee) is almost always allowed to make people leave. At least in New York, if you’re told to leave and then don’t, it becomes criminal trespass. Codes of Conduct don’t matter in any practical sense when you get to that point.

                                                                                                            I think instead what they’re useful for is what you say elsewhere in this thread, which is setting a tone: is your con t-shirt and jeans, or jacket and tie? Is it for some political goal or for advancing professional development?

                                                                                                          2. 2

                                                                                                            That complex equation comes down to value judgments. You’re not likely to know the ultimate effects of your actions. For instance: affirmative action is not colorblind, but it might lead to genuinely colorblind outcomes some generations from now.

                                                                                                            If you’re using deontic ethics instead and your sense of duty requires you to defend freedom of speech, that doesn’t necessarily yield a result worse in terms of human suffering. Utilitarianism’s core problem is that although you can look at the immediate outcome, you don’t know the ultimate yield.

                                                                                                            I think these ideas are somewhat compatible. At some point, the question becomes “freedom for whom” – if you can’t get people to show up to your con because of extremism, how much speech did you facilitate? I think there’s something more to championing freedom of speech than not prohibiting things.

                                                                                                          3. 1

                                                                                                            You could exclude neither, and let them sort it out themselves elsewhere. Indeed, seeing each other in a context that doesn’t constantly reinforce their ideology might serve to build bridges and mellow both sides–and while your example is a bit stacked, one could apply the same argument to fundamentalists and secular folks, to Israelis and Palestinians, to feminists and men’s rights activists, and so forth.

                                                                                                            I know this is a little late to the conversation, but your examples are full of grossly false equivalences. I’m pointing this out not to attack you, because I think you just haven’t really thought it through or are unaware of the context for the statements you’re making, but because spreading them is bad for society.

                                                                                                            Start with “fundamentalists and secular folks”. Fundamentalists are radical theocrats, and in the United States, are identified by believing things like homosexuality is sinful, women must submit to their husbands, etc., and in general being radically intolerant of other peoples’ private business. “Secular folks” are “everyone else”, in terms of values.

                                                                                                            Feminists believe that women are as human and as entitled to agency and dignity as men are; MRAs believe that women are inferior to men and should be enslaved.

                                                                                                            There is no meeting halfway with them. Their values are bad, and any social currency they might gain by publicly participating in high-prestige, “neutral” contexts, like tech conferences, will be used to further their heinous agendas. Ignoring this is how Nazis take over; it creates safe spaces for them, and once they’re in, the space is unsafe for everyone else.

                                                                                                            1. 1

                                                                                                              Feminists believe that women are as human and as entitled to agency and dignity as men are; MRAs believe that women are inferior to men and should be enslaved.

                                                                                                              There are some folks that identify with MRAs that believe that, and they’re scum. There are also some feminists that cannot share a room or conversation with a man because they view men as needing to be eliminated (for example, Solanas). Ignoring the shades of belief and judging groups by the most offensive members is in fact what puts all discourse in peril.

                                                                                                              This is all quite off-topic for Lobsters. If you want to argue, hit me up on DM. :)

                                                                                                              1. 1

                                                                                                                It’s slightly off-topic for lobste.rs, but not for this thread, and I don’t want to minimize the point that you cannot meet Nazis halfway.

                                                                                                                So, again, your equivalence between MRAs, any MRAs at all, even the most milquetoast “I think society needs to nicer to men” whiner, and even the most extreme misandrist feminist activist is false, because there is no large-scale issue with cultural and institutional misandry, but there is cultural and institutional misogyny. One viewpoint is laughably absurd and harmless (“men should be eliminated”; it’s not a credible threat to men), the other is simply, “Keep things as they are or make them even shittier to women,” which is extremely credible as a threat to the well-being of women. See also below, re: the President brags about sexually assaulting women.

                                                                                                                Going back to, and again I need to emphasize that we’re talking about literal Nazis, given that the most powerful single official of the most powerful nation on the planet is an unapologetic white supremacist and rapist, it’s insane to say, “Let’s just set politics aside and welcome anyone.” The presence of Nazis is a threat to public safety and well-being, whether or not they’re in uniform or are being “polite”. Failure to deal with them as the manifest threat they are, given the friendly political environment for them, is spineless abdication of moral duty. There is no “both sides” argument to be made.

                                                                                                                I’m telling you this not to accuse you of cowardice, but to help you understand what you’re actually arguing and who would benefit from it, so that you may stop being part of the problem, and start being part of the solution.

                                                                                                                1. 2

                                                                                                                  One viewpoint is laughably absurd and harmless (“men should be eliminated”; it’s not a credible threat to men)

                                                                                                                  Well, except for the fact that the author shot two men and attempted to shoot a third, and was on record for being “dead serious” about her manifesto.

                                                                                                                  the other is simply, “Keep things as they are or make them even shittier to women,” which is extremely credible as a threat to the well-being of women.

                                                                                                                  There are certainly some folks claiming membership that push for misogyny, but the actual stuff asked about is things like genital mutilation, how domestic abuse of men is handled (when it is recognized at all) and what support networks they have, how divorce and custody is handled, and so forth. You grossly misstate reality here. That’s forgivable, because people tend to be fuzzy with terms these days, but still.

                                                                                                                  we’re talking about literal Nazis

                                                                                                                  Somebody hide the Sudetenland! Quick, warn Poland! Buy stock in Volkswagen (and IBM )! That’s what a literal Nazi is about. If you want to talk about neo-Nazis, white supremacists, or even the (poorly-grouped) alt-right, I’m happy to criticize positions they have (most of which range from garbage to odious). Using incorrect terminology makes it hard to talk about a thing productively.

                                                                                                                  Why does this matter? We can’t defend or even relate to literal Nazis following orders liquidating a ghetto. Some poor white trash who had his job outsourced to Shenzhen though? Somebody who has strong opinions about how blacks are attacking police (despite growing up in a rural town with no African-Americans at all, and a police force which consists of like a county sheriff and a couple of deputies)? Those folks we can reach and educate, if we stop lumping them in with perpetrators of one of history’s biggest genocides.

                                                                                                                  given that the most powerful single official of the most powerful nation on the planet is an unapologetic white supremacist and rapist

                                                                                                                  That power is why he’s able to maintain such a solid Department of State, why Congress is doing whatever he wants, why he has met such acclaim and success in his dealings, and why he has been able to dismiss all of the court cases and suits brought against him. Alternately, he’s a boogeyman inflated into vast proportions by people looking to be scared about something.

                                                                                                                  There is no “both sides” argument to be made.

                                                                                                                  There is, I’ve made it, you don’t buy it because you’re invested in demonizing and dehumanizing the side you don’t like, life goes on, history will be on the side of tolerance and the dialing back of polarization–or we’ll be shooting at each other and fighting over cans of food in a generation.

                                                                                                                  This line of discussion is not on-topic for lobsters, and is quite divorced from even the original question of codes-of-conduct.

                                                                                                                  1. 2

                                                                                                                    Welp, you have clearly stated your desire to do nothing in the face of evil and refuse to even name it, so, you’re correct, we will never meet on this.

                                                                                                                  2. 1

                                                                                                                    When you say, “All are welcome,” what you are really saying, and what is heard loud and clear by both aggressors and victims, is, “This is a safe space for Nazis.” Or rapists. Or slavers. Or killers. You get the picture. So do they.

                                                                                                            2. 1

                                                                                                              Writing clear rules intended to be taken literally that cover all forms of potentially allowed and disallowed behavior is essentially a fools errand. Ultimately there must be some human arbiters of behavior that will have to interpret the intention of the rules, look at the behavior, and decide if a violation occurred. You’re basically talking about a miniature domains-specific legal problem here, and if you look at the complexity of most modern legal systems it’s clear that you can’t really have a clearly written exact set of rules that will apply without human interpretation.

                                                                                                              I completely agree, and this is my biggest problem with the whole “code of conduct” paradigm: it creates a promise of clear, formal rules that can’t possibly be delivered on. Talking in terms of values and moderation policies is a more useful framing that puts the human subjectivity front-and-centre and guides us towards thinking about questions (Who’s going to moderate? What process will they follow? Who are they accountable to?) that are really quite central to dealing with conduct issues in communities, but are swept under the carpet by thinking in terms of a “code” that a project can simply adopt.

                                                                                                            3. 3

                                                                                                              Im ok with a higher false positive rate for ‘Is this person a Nazi’ test if it means fewer false negatives. The beauty of technology is not that it’s value less, but that it’s an expression of human value. Technology is anything people make and which things people make is a huge signal of what they value. While some technology are useful tools regardless of value (i can use the butt of a gun to hammer a nail) we can make a pretty good statement about what that society values based on their technology.

                                                                                                            4. 7

                                                                                                              While I don’t inherently disagree, I find that a lot of CoC’s that get pushed out are rather restricting. I find it’s better to interpret them as guidelines, not rules, rules lead to toxic individuals getting wiggle room through loopholes.

                                                                                                              I’ve also been to events in Germany that don’t have any CoC at all and I don’t hear many complaints from other events around here either. If you’re being a jerk you get thrown out, end of story.

                                                                                                              1. 4

                                                                                                                The CoC provisions on offensive speech are usually interpreted broadly benefiting certain groups over others. In other words, it works the opposite of the general rule where these give enforcers lots of leverage over large groups of people. The wiggle room is theirs.

                                                                                                                1. 6

                                                                                                                  Personally I think any ruleset is only good if it’s applied equally to everyone, same for guidelines.

                                                                                                                  If a CoC is provisioned and enforced it must be done with the same rigour and accuracy as one would apply law in a proper court.

                                                                                                                  1. 5

                                                                                                                    Personally I think any ruleset is only good if it’s applied equally to everyone, same for guidelines.

                                                                                                                    That runs into the whole “why can’t you tolerate my intolerance?” problem though. If they say that “hate speech is not allowed” and you interpret a gay married couple discussing their honeymoon is hateful towards Christians (note that not everyone feels this way, just using an example), then who wins? The decision is up to the organizers of the con, but in general most these days are going to side with the married couple (as they should, IMNSHO).

                                                                                                                    If a CoC is provisioned and enforced it must be done with the same rigour and accuracy as one would apply law in a proper court.

                                                                                                                    Absolutely not. They’re not laws. They’re rules that a private entity made up for participation in a private function. The correct interpretation of the CoC is exactly whatever the organizers of the con want it to be and nothing else. Generally, they’re going to interpret it in whatever way furthers the goal of the con (e.g. more attendees, higher quality talks) or the values of the organizers (more diversity in gender or ethnicity or whatever).

                                                                                                                    1. 6

                                                                                                                      I would interpret “no hate speech” as strict as Section 1 §130 StGB of german law;

                                                                                                                      “1. […] against any national, race, religious or ethnic group, against parts of the population or a single person based on predetermined groups or incite parts of the population to violence or despotism or 2. the dignity of another human being, based on a predetermined group, parts of the population or membership in a predetermined group or a specific part of the population insults, maliciously attacks or frames […]” (excuse my crude translation)

                                                                                                                      Section 2 covers any transmission of anything mentioned in Section 1.

                                                                                                                      I think that about covers it in terms of “hate speech”. In the specified case, the couple wins since they’re part of a predetermined group of the population.

                                                                                                                      They’re not laws. They’re rules that a private entity made up for participation in a private function

                                                                                                                      I think they should be handled like laws. Rigour, precision, efficiency and accuracy are important. The organizers of a con should therefore word their rules such that any violation will be absolutely clear in either word or spirit of the rules without a doubt. If anyone breaks these rules and spreads hate speech then there will be no doubt by anyone involved they crossed the line. There will be no need to extensively discuss it or any wasting of time on people who want to wiggle around the rules.

                                                                                                                      I would love if some organizer did precisely this.

                                                                                                                      1. 1

                                                                                                                        I cannot see how anybody could interpret that as hate speech. In an attempt to overcome by own biases, can you flip that example on its head somehow so I can relate to it?

                                                                                                                        1. 6

                                                                                                                          Trust me, people can and do. The whole “I’m fine with gay people but do they have to throw it in my face??” because they have a picture of their significant other on their desk or something, whereas the person in question wouldn’t bat an eye at a heterosexual person having a picture of their spouse on their desk.

                                                                                                                          I’m having trouble coming up with an opposite example, which is my fault.

                                                                                                                          1. 3

                                                                                                                            Oh, I know that there are people who would find that offensive. But the bar for hate speech is higher than merely being offensive.

                                                                                                                            1. 1

                                                                                                                              Opposite? How about being annoyed that something says husband and wife. Or taking offense at something like a father and daughter event because nobody in your family is technically a father.

                                                                                                                              1. 1

                                                                                                                                Fair enough. I was trying to come up with an example from a right-wing perspective (“opposite” in that regard), but the thought process is alien to me so it’s hard.

                                                                                                                            2. 3

                                                                                                                              (This is just for the sake of the argument, we’re already off the track so I’ll roll with it) One might interpret Christian couples taking PR actions against abortion as hateful against its supporters.

                                                                                                                              1. 3

                                                                                                                                Nope, I can’t see that being considered hate speech either.

                                                                                                                                1. 5

                                                                                                                                  http://www.cbc.ca/news/politics/summer-jobs-abortion-images-ccbr-1.4523255

                                                                                                                                  [Justin Trudeau] called flyers depicting bloodied, aborted fetuses used by the Calgary-based Canadian Centre for Bio-ethical Reform (CCBR) “hateful.”

                                                                                                                                  Joyce Arthur, executive director of the Abortion Rights Coalition of Canada, said she believes those images … should be outlawed as hate propaganda.

                                                                                                                                  [emphasis mine]

                                                                                                                                  1. 2

                                                                                                                                    wow. I stand corrected.

                                                                                                                            3. 1

                                                                                                                              They’re not laws. They’re rules that a private entity made up for participation in a private function. The correct interpretation of the CoC is exactly whatever the organizers of the con want it to be and nothing else. Generally, they’re going to interpret it in whatever way furthers the goal of the con (e.g. more attendees, higher quality talks) or the values of the organizers (more diversity in gender or ethnicity or whatever).

                                                                                                                              A CoC is legalistic by its very nature. I’m fine with an organisation adopting formal rules that are interpreted as rigorously as actual law; I’m fine with an organisation using the subjective judgement of its human moderators. But adopting an ambiguously-worded “code” that is in practice subject to interpretation is the worst of both worlds: it reduces moderators’ flexibility, but doesn’t offer participants enough clarity to be useful.

                                                                                                                            4. 1

                                                                                                                              Agreed.

                                                                                                                        2. 4

                                                                                                                          In essence, the choice to not have a CoC these days is tantamount to an open invitation to the worst of the people in our industry. That’s not to say that good people don’t also attend these events, or even that the organizers are knowingly trying to create that sort of environment, but ignorance of the message you’re sending doesn’t necessarily change the message itself.

                                                                                                                          Equally, the message I get from the choice to have a CoC, as someone generally perceived as white and male, is that I’ll be held to a double standard and if the wrong person takes a dislike to me then I’ll be thrown out, regardless of my actions. That’s probably not a fair reflection of the organisers’ intentions, but it is the message.

                                                                                                                          1. 0

                                                                                                                            Apart from that concern, which I totally agree with, I also try to stay clear of projects that boast a CoC because it shows me that their priorities lie in politics, rather than in technical matters. It’s a waste of my time to spend any effort on endeavors like that.

                                                                                                                            1. 2

                                                                                                                              It frequently doesn’t though.

                                                                                                                              Almost any large project with a code of conduct has it precisely because they want to focus on the technology more than the politics, and without a code of conduct, or with too loose a code of conduct, they end up being controlled by the loudest jerk.

                                                                                                                              1. 1

                                                                                                                                See the replies to my comment up thread for people who are advocating for CoCs for nakedly political reasons that have nothing to do with technology.

                                                                                                                            2. 1

                                                                                                                              It’s my experience that the only people who whine about this are better left excluded, because somehow, white dudes are still abundantly present and everyone has a nice time.

                                                                                                                              1. 2

                                                                                                                                White dudes? Yes. Working-class people, or even just any kind of conservatives? Often not. People have a nice time yes, but people tend to have a nice time in homogeneous spaces - everyone having a nice time is, if anything, even more common at events attended solely by white dudes. So equally I could say the only people who whine (your term) about diversity/inclusivity/… are better left excluded.

                                                                                                                            3. 4

                                                                                                                              Some thoughts, from someone running a con that has chosen each year to not have a CoC, but is in the process of developing an alternative model:

                                                                                                                              The largest factor to me is that, regardless of any particular problems with CoCs, the choice to not have a CoC has, in many cases, become a sort of dogwhistle for events that are explicitly inclusive of harassers, and have no intention of running a broadly welcoming event.

                                                                                                                              It’s not a dogwhistle for events that are explicitly inclusive of harassers. A lack of something is not the same as explicitly including the opposite. The author explicitly covers the lack of effectiveness in many conference CoCs under gray zones and enforcements.

                                                                                                                              As someone who organises a conference, attends lots of events around the world and spends a bit of time sharing stories with organisers, I have yet to see a conference with the resources to properly ensure that all participants know and understand the CoC, how to use and enforce it. Such an event may exist, I haven’t seen it. I’ve experienced harassment and stalking at events myself, and watched it fumble wherever I’ve reported it.

                                                                                                                              That’s not to say that CoCs are useless, some events may find them useful, but for the majority of events I’ve attended they have caused more problems than they solve in themselves.

                                                                                                                              Second, a CoC lets members outside of the community know what the shared value of a community are, and helps people to make an informed decision about whether their values align with the community, and if the community is worth engaging with.

                                                                                                                              Nearly every CoC I encounter is a variant of or asserts to be inspired by the same geek feminism-based CoC. I have argued against it repeatedly on the grounds that anyone using it has not properly considered the purpose, scope and enforcement of such a document, nor the complications it presents. I have had event organisers flat out admit that they’re using it because people who don’t come to their event will choose not to come to their event if they don’t.

                                                                                                                              Frankly, if someone feels that the presence of a CoC is the determining factor in whether they attend an event. Maybe an event without a CoC isn’t the event for them. A copy-paste geek feminism sample CoC is a dog whistle to say, “We’re virtue signalling our CoC but don’t really care enough to do it properly”.

                                                                                                                              Organisers should focus on their existing community and welcoming new arrivals at the event rather than people who won’t turn up if there isn’t a universally ignored and unenforced document put up everywhere to make existing people feel that little bit shittier.

                                                                                                                              1. 0

                                                                                                                                Nearly every CoC I encounter is a variant of or asserts to be inspired by the same geek feminism-based CoC

                                                                                                                                If you are a geek and not a feminist, what are you? I’m a male, geek, and a feminist.

                                                                                                                                I’m surprised anyone working in high technology would choose to not be a feminist and prefer to live in the last century. Fortunately I don’t meet many of those people. They seem to only exist on the internet.

                                                                                                                                1. 6

                                                                                                                                  I reject the label feminist for many of the reasons outlined here: https://necpluribusimpar.net/the-trouble-with-feminism/ (and frankly I wouldn’t call myself a geek either, especially not if people are going to use it as an excuse to say that I am obliged to hold one or another political opinion. It’s never been a label I particularly cared for in any case).

                                                                                                                                  I don’t have a problem with reasonable Codes of Conduct in principle, but in practice, as stevelord states, they are specifically feminist advocacy, and I think that many vocal strains of modern feminism are hostile to values I think are important and want to see reflected in the culture around technological work. A succinct way of putting it is, I would be fine with any Code of Conduct that mentioned James Damore by name as someone whose speech would be unambiguously permissable in a project or convention - and if a Code of Conduct was designed by people who want James Damore’s words to be grounds for expulsion (as they were for him in the technological community of Google engineering employees), I don’t want that Code of Conduct in force in any space I care about.

                                                                                                                                  1. 3

                                                                                                                                    I would argue that this is an example of doing exactly what CoCs are intended to do. If you think a project should have people like Damore driving away people who don’t want to be made out to be novelties or second-class class contributors, then frankly I don’t want you in my community.

                                                                                                                                    1. 3

                                                                                                                                      You’re free to give your “diverse utopia” a shot on your own turf, but the moment you try to co-opt or subvert an existing community or project imagined, initiated, and implemented by (as your side frequently points out) utterly un-“diverse” (i.e. white male) contributors you are throwing the first punch.

                                                                                                                                      This kind of subversion has already occurred - repeatedly - so the bed has been made and all you can do now is lie in it. I, and I’d bet most people in tech, did not expect our field of work to be made into a political battlefield, but hey, solving problems is what we do. We’ll solve this one too.

                                                                                                                                      1. 2

                                                                                                                                        It’s interesting that you yourself point out how many existing projects and communities have adopted more inclusive policies. The fact is that culture is shifting toward inclusion, and even non-idealistic communities are realizing that broad and inclusive policies attract more and better contributions, and the benefits more than outweigh the technical contributions that would have been made by hateful and toxic community members. It’s not like those of us who value and appreciate CoCs and otherwise inclusive policies have any particular power to dictate the rules and structure of existing projects. Communities are broadly recognizing the value of CoCs and adopting them because the people there want to make their communities better.

                                                                                                                                        1. 3

                                                                                                                                          If I can just point you at an example of CoCs causing significant damage to communities, I’d point you at FreeBSD’s huggate scandal.

                                                                                                                                          That’s what everyone needs to avoid. CoCs mustn’t be entered into lightly. They have to be properly considered, debated and set up to enhance rather than detract from a community.

                                                                                                                                      2. -2

                                                                                                                                        Love it! EttiCosmocrepe really did prove your point.

                                                                                                                                      3. 1

                                                                                                                                        You really believe James Damore’s anti-intellectualism is a benefit to technological work? His contributions had nothing to do with technological work and seemed to create a huge distraction away from technological work. I would love to see an argument from you detailing how James Damore’s speech was constructive to technological work.

                                                                                                                                        If you are confused about why I called James Damore’s speech anti-intellectual, I would hint here that empiricism is no substitute for thinking.

                                                                                                                                        1. 0

                                                                                                                                          Thanks for your comment. Just one thing. I didn’t state they’re specifically feminist advocacy, it’s the blanket adoption of the geek feminism wiki CoC template I was rallying against.

                                                                                                                                          To be clear:

                                                                                                                                          • Yes the template is problematic on many levels for various events
                                                                                                                                          • The template is a form of feminist advocacy, but that’s not an issue and may be an advantage for some events
                                                                                                                                          • IME An event that posts it verbatim is usually more interested in telling you they have a CoC than enforcing the content

                                                                                                                                          Part of running a decent conference is accepting that there will be people there with different views to you. Your job as an organizer is to create a fun and friendly event, not arbitrarily provoke people (I do enough of that in my spare time :)).

                                                                                                                                        2. 3

                                                                                                                                          Sorry, perhaps I wasn’t clear. By geek feminism-based CoC I specifically mean this template and it’s wholesale adoption verbatim or almost verbatim.

                                                                                                                                          1. 4

                                                                                                                                            That one has exactly the kind of politically-motivated and dominating stuff I aim to block in CoC proposals:

                                                                                                                                            “‘Reverse’ -isms, including ‘reverse racism,’ ‘reverse sexism,’ and ‘cisphobia’ (because these things don’t exist)”

                                                                                                                                            My emphasis added. The start is denial victims exist in white, male, or straight groups operating in environments where minority members dominate the power structure. This is dictated by proponemts’ political beliefs that are controversial even among minority members they claim to he about protecting. The next move the ideology brings is not allowing them a say in things or allowing statements/actions toward them that would be offensive/banned if done to other groups. The next is ridicule or ejection as a response to dissent.

                                                                                                                                            All starts with accepting the sophist definitions and rules of a tiny few intended to dominate their opponents in larger groups that they enshrine into a CoC they’ll tell groups is just about civility and stopping bad behavior. No it isn’t: it’s ideological subversion of groups’ norms to enforce the pushers’ beliefs. They’ll put down minorities resisting those beliefs as quickly as anyone else, too.

                                                                                                                                            1. 1

                                                                                                                                              Every single statement you’ve made is baseless and false.

                                                                                                                                              1. 2

                                                                                                                                                Your counter has no evidence. So nobody should believe it. That simple.

                                                                                                                                                Unfortunately, I still have to go into a workplace where many groups are dominated by politics benefiting one type of minority (blacks) at everyone else’ expense. That’s in social groups, work assigned, and promotions. Sounds like the definition of structural racism to me. If ever applied to non-whites, the two sentences above would be all the proof they needed that they’re victims of structural racism. You’d agree with them. Logically, there the same function or algorithm for determining structural bias that just have different inputs or outputs. As the sophistry goes, those on the linked article and now you if backing them redefine their own term for just these conversations so it can’t apply to a white person.

                                                                                                                                                With the magic of political bias and agendas, the same definition can be two, contradicting things so that one group is villainized whether delivering or receiving damage interacting with other groups. Such sophistry is not just illogical: it’s inhumane given the damage it supports to decent people in the target group. So, I’d fight a CoC or agenda that starts with a declaration that non-whites in positions of power would never abuse their power against whites. Likewise, women never abusing men. Both are insane statements in light of both recorded history and minority members’ own incessant claims about how other minorities mistreat them at work, school, etc.

                                                                                                                                                The logical response is banning and addressing every instance of group X uses their power to discriminate against group Y with who X and Y are varying case by case, place by place, issue by issue. That protects the most people with the most fairness. It also takes hardly any additional effort in event white or male discrimination is as rare (“nonexistent”) as my opponents believe. Most work would probably still benefit their preferred groups as well given that’s where most of the discrimination is right now.

                                                                                                                                                Note: I should also point out to anyone reading along that even a sub-Reddit on feminism had a list showing they recognized male-specific biases and discrimination. It’s done from their viewpoint but has points that corroborate my claims. Clearly, it’s only some feminists I’m battling with these claims rather than all feminists.

                                                                                                                                                1. 3

                                                                                                                                                  Unfortunately, I still have to go into a workplace where many groups are dominated by politics benefiting one type of minority (blacks) at everyone else’ expense. That’s in social groups, work assigned, and promotions. Sounds like the definition of structural racism to me. If ever applied to non-whites, the two sentences above would be all the proof they needed that they’re victims of structural racism. You’d agree with them. Logically, there the same function or algorithm for determining structural bias that just have different inputs or outputs. As the sophistry goes, those on the linked article and now you if backing them redefine their own term for just these conversations so it can’t apply to a white person.

                                                                                                                                                  Sorry for the late reply.

                                                                                                                                                  So, we don’t really know each other. I have some ideas about you: male, 20s, information security professional. Probably not in California. From what you’ve previously posted, it sounds like you had it not so easy growing up.

                                                                                                                                                  Here’s where I go out on a limb a little bit: you believe that the most important thing about doing your job is professional competence, like ability to debug an issue or design a feature to be safe and easy to use. You also hate that there are exploitable systems in place in society; exploitable systems are bad.

                                                                                                                                                  Now, it sounds to me like your boss thought other things were important, like smelling nice or getting along with other teams, were also important, and when some of your friends, who you thought were very good at their jobs, were fired or laid off, they were replaced by people your boss, who is not white, knew or approved of.

                                                                                                                                                  Am I way off base?

                                                                                                                                                  Anyway, I’m saying all this to demonstrate that I have some idea of how things are, based on my decades of professional interaction with infosec teams, and working in IT, and being online.

                                                                                                                                                  So, you say above, “My black boss favors other black people over white people, sounds like the definition of structural racism to me.” But your error is so fundamental that explaining how wrong you are is such a huge task. It requires you to understand:

                                                                                                                                                  1. there is no separation of concerns or contexts for human beings in society; there is no such thing as “professional identity” and “personal identity”, for example, because actions in one context have effect in all the other ones;

                                                                                                                                                  To this point, consider how you feel about the decision to exclude the fascist Urbit dude (Moldbug) from a conference, where presumably, he was going to talk about his idea for a feudal internet and recruit people to support him and its development. You’re mad because you think the details of his software, developed as a reification of his values, is not a political issue, merely a technical one, and you don’t think any status given to him for speaking at that conference will carry over to his Moldbug persona, and no one who he thinks should be subjugated will stay away as a result of his presence. I leave the absurdity of that belief to stand on its face.

                                                                                                                                                  1. there is a difference between small, local, private social spaces, like an office or a conference, and THE ENTIRE REST OF THE WORLD, where those larger contexts’ effects dominate.

                                                                                                                                                  To the second point, for example, and to bring up something you said previously in a different thread, there is no study of the unfair discrimination done by female bosses against men because there are so few female bosses.

                                                                                                                                                  And so, that brings us to the final thing you need to understand before you could understand why I said your statements were baseless and false:

                                                                                                                                                  1. the presence of an exploitable social system is not the same as its mass exploitation by one identifiable group.

                                                                                                                                                  You have a black boss who favors people who are like her, and this offends you. To say, “this is structural racism in action,” though, is to ignore the fact that 90% of the bosses are white men who also favor people like them, and that the current real cultural and political landscape favors people like them in terms of access to education, and jobs, and wealth opportunities, and protection by police, and ability to relocate to some other place where the people there will probably be friendly to them. And most of them are hostile to the idea of changing that to make it more equitable.

                                                                                                                                                  And I don’t think you’ll ever understand that, or at least, not here and now. So when you say something unfounded and ignorant like, “reverse racism is just as bad as real racism”, which is false and baseless because it ignores nearly every relevant factor in favor of “any exploitation of an exploitable system is offensive and bad”, the most legitimate response is a one-liner like the one I gave.

                                                                                                                                                  1. 3

                                                                                                                                                    “So, we don’t really know each other. I have some ideas about you: male, 20s, information security professional. Probably not in California. From what you’ve previously posted, it sounds like you had it not so easy growing up. Here’s where I go out on a limb a little bit: you believe that the most important thing about doing your job is professional competence”

                                                                                                                                                    I appreciate you attempting to understand where I’m coming from. Unfortunately, it gave a great example of the kind of projection I’m talking about that certain types of politics depend on to prop up myths or suppress alternative views. The profile doesn’t even match some of my comments on Lobsters about my job, how people get promotions, or what to expect in businesses. It is common among people that push a specific type of politics or CoC’s. Almost every one of them that profiles me says same thing you did. So, let’s get a better picture.

                                                                                                                                                    I grew up in areas where dominant groups were very different from me: black school with pervasive racism against whites; rural areas with rednecks that look down on “nerds” and tech; mixed, suburban school that was great in comparison, all groups anti-nerd in nicer way, and a nerd/outcast crowd that was cool (yay!); businesses and other organizations with different makeups. I’m in 30-40 range. I’m not currently in tech or information security as main job: I went into operational side of a company that does mix of high-volume sales and service activities. My job mixes both: sometimes moving product, othertimes handing customers. Our customer base is as diverse as they get with me interacting with, serving, taking abuse from, or being praised by at least 22,000 people face-to-face on record with high, satisfaction rate from those surveyed. With many, especially in groups, I’m required to listen to or make conversation with them to make a pleasant experience. I also observe and listen to what they say to each other just being curious of how they act and what they think. On Facebook, I also created a diverse crowd to see all the things people could teach me about popular topics that I’d otherwise miss due to a filter bubble.

                                                                                                                                                    My long time effectively being a white person in both minority-dominated environments and effective slave to mix of people showed me they act effectively the same over sample size of twenty to thirty thousand people in many circumstances with tens to hundreds of thousands of interactions with them among my coworkers and I. Most exploit our company’s level of service to get what they can out of us. Most sound polite, some neutral, and a few ugly with almost all apathetic to burdens or damage they cause. Last subset will use their power in ways that seriously disrupt the company or cause employees harm. Some have used race/gender cards against white males but root cause of exploiting power with misinformation or threats is something all groups do to us. The cards are rarely necessary given our vulnerability. The bosses, which come and go a lot, are mostly either folks wanting a safe bet at blue-chip company with upward mobility or opportunists wanting a ticket punching opportunity move laterally into better pay at another company. At upper levels, it’s almost always politics over performance with team supervisor level being a mix of performance and politics leaning toward performance if it’s about at least keeping the job.

                                                                                                                                                    As part of my work, I constantly ask my customers of all groups questions about their jobs, lives, and even politics with no judgment or argument: I just tell them I’m curious, I like hearing others opinions, and thank them for whatever they tell me. Depending on how I assess them, I’ll either politely decline further engagement or carefully ask questions making sure I don’t step past their boundaries. Down-to-earth, non-judgmental or just fun-loving customers I’m more open with or do my comedic approach I do with coworkers for their enjoyment. Those few being non-threatening to my career means I can self-censor less and be myself more. Work style is goofball/satirist/wiseguy who has everyone’s back or gives headaches to those team decides needs it.

                                                                                                                                                    That leads me to the next thing. I’d be willing to bet that neither you nor most people advocating some of these views, CoC’s, etc have been under the power of large numbers of minorities or interviewed hundreds to thousands in diverse area for their views without leading questions that reinforce your own beliefs. The comments you see me make on here are often compatible with many of them I’ve talked to. That’s despite some’s attempts to censor them saying that’s about “protecting” minorities or blocking what offends “them.” There’s a huge gap between what piles of black people tell me and what some liberals (including whites) tell me that pretty much all black people think. For instance, most black people I interview in the Mid-South think racism is something every group can do, that it can happen at many levels, and black people can be racist, too. There are plenty that think the other way but they aren’t majority I’ve encountered. When the latter are in control, the views that disagreeing blacks espouse about definition or nature of racism being a general thing are not allowed despite coming from minority members. The standards/rule promoting groups claim to advance or protect minorities while systematically excluding all of them with dissenting views from participation. And then they have a problem with whites making similar claims, too.

                                                                                                                                                    Your longer comment might make more sense if you were responding to what a white male with minimal social interaction would believe after a few brushes with run-of-the-mill discrimination. Thing is, my posts are a summary of position of whites, blacks, men, and women who believe these things based on their lifetimes of interaction with their groups and others with many of us under power of other groups in organizations they control. So, we’ve gotten to see it both ways. We’re a very diverse crowd. We shouldn’t be pigeonholed into these projections that pretend it’s one or two subsets of demographics, we have limited experience with other groups in control, we must be social idiots who don’t know The Game at work that gets promotions, and so on. We’re a mix of minority members and white males who understand people, have tons of experience with them, and disagree with your position based on those experiences. Seeing how minority members disagreed among themselves on topics of race, gender and so on reinforced my fight against any group dictating one set of beliefs/practices being acceptable or not. My own group saying it could just be bias but many of them concluding similar things from different backgrounds hinted it might be greater truth.

                                                                                                                                                    “there is a difference between small, local, private social spaces,”

                                                                                                                                                    It turns out this is true but circumstantially rather than fundamental. The experience I’ve had with thousands of people (esp minorities), observing many more groups controlled by them, listening to minority members in structures controlled by majority or minority types, and so on indicates minority members act just like whites or males. They reward those like them, discriminate against those substantially different, and mostly don’t care about other groups in day-to-day speech or actions. This trend is supported by data from most groups going back most of human history. Any country that has a certain majority with power will have its members come to dominance mostly rewarding their group or a privileged few penalizing others. There’s usually common enemies, too, to unify them. African countries under black control had same traits. Over here, it was mostly white males in power reinforcing their preferences which perpetuated that cycle. So, that’s the majority of the problem at the national level. Switch to cities, organizations, etc that blacks control, you see a reversal of the effect where they boost their own group more and battle/minimize politics of others.

                                                                                                                                                    From there, how do we react? Well, if it’s a universal phenomenon, then we need to define it as a universal phenomenon rather than definitions or practices that only villify specific groups for others’ gain. The honest definition costs us nothing: we just note bias, expect each group to combat theirs, and assess it in al group activities by default. Minority members that agreed with me and I are all already doing it to varying degrees. So, it’s not hypothethical. From there, we’d expend most of our effort on whatever is most prevalant in our locale and the national level. I’d expect most of that to be combating white racism or male sexism at national level. At local one, it will usually depend on the group with white dominated areas having mostly white racism we gotta fight, non-white dominated areas having non-white racism we have to fight, and occasional weird ones you’d not expect if just using checklist-like approach to who is oppressors or victims. It will vary as the demographics and beliefs vary among the various power and social structures.

                                                                                                                                                    For instance, our [huge] company has different types of -ism’s in different groups depending on their makeup. The executive and senior levels are definitely biased for whites and mostly males with promotions all politics. Middle started from there to get much more mixed with mosty same politics plus some new. On lower levels of management, there’s been a shift in my area toward blacks benefiting only certain types of blacks in two to three groups, white women in three, white men in two others (one biased for women), and one was mixed before ejecting a scapegoated, white dude recenty to get a black guy. Last one in flux. The black-controlled groups even wanted to poach me to boost their numbers but my bosses and I prevented it. I’m still forced to help them once a day or so but that’s driven by cost-cutting and politics, not racial issues.

                                                                                                                                                    Blocking transfer was good since turnover is at record high now in their groups, even among black men and women, since leadership’s favoratism discriminates across three attributes (race/gender/age) instead of one or two we’re used to dealing with in the South. High-performing workers with great, social skills who were mostly white, Asian, and one Pacific Islander were given unpopular grunt work with older, black women given better work or promoted. They talk to them differently, too. The advantaged blacks ranged from low performers that transferred to that group (the older women) to a few high performers so good I’d personally invest time in if they asked. Two, a younger male and woman, were exceptions to get advantaged with older women. Women to male ratio in general for advantaged positions is around 8-10 to 1 with ratio among high-performers 1 to 1 to around 3 to 1 depending on what skills you want and whose coming/going. Their personnel decisions don’t make sense unless structural discrimination and/or politics is at play.

                                                                                                                                                    Which is what I expect by default and combat for all types. And we end with:

                                                                                                                                                    “And I don’t think you’ll ever understand that, or at least, not here. So when you say something unfounded and ignorant like, “reverse racism is just as bad as real racism”

                                                                                                                                                    You’re really saying you think all the minority members I’ve listened to or worked with who agree with my position couldn’t possibly understand because of (white male stuff here). It makes no sense because they’re not white males but share my position. Majority are women, too, with many sharing positions on women topics some labeled sexist or something on various forums. You’re right that I can’t understand why only one set of views about minority matters is allowed or often reported, a good chunk preaching them being white, when minorities themselves have an interesting, diverse range of views. I’ve learned a lot from listening to them. They helped shape what I think on tolerance, true inclusiveness, and so on where rejecting certain views on false pretenses (eg only ignorant or hateful white dudes say that) would lead me to systematically discriminate against or suppress minority members with those views in large numbers.

                                                                                                                                                    That would be racist and sexist like my white, male executives who only tolerate their type of people, views, and practices. I’m not like that. So, I avoid it and fight it when people who do it want to make any form of it a standard practice to force everyone to think, talk and act like them. Usually have minority members backing me up in most places, too, except on these tech forums. Since they’re not present and invisible to my opponents, I have to speak up on their behalf to let people know they and their beliefs exist. They wouldn’t want to be dismissed with labeling and/or censored.

                                                                                                                                                    1. 2

                                                                                                                                                      Welp, at least I’m way off-base in my projection, though your childhood was what I meant by rough time (you brought it up in a different comment) :)

                                                                                                                                                      So, that’s a lot to reply to, and I don’t want you to think I’m ghosting or don’t appreciate the long and thoughtful reply. I do, and I thank you. But I’m about to walk out the door and won’t be able to reply in kind until tomorrow. Or, if you don’t want to continue publicly, I am happy to DM. Or if you’re sick of me and my shit, I respect that.

                                                                                                                                                      But I mean, I’m surprised you’re not in the industry, when you’re so passionate about what it’s like for people who are in it.

                                                                                                                                                      1. 1

                                                                                                                                                        These discussions take a lot of energy as I aim for strong accuracy minimizing effects of my biases. They don’t piss me off or anything except for few times I’m straight up attacked in a clear way. I might not reply just to get back on other stuff like tech or better job, but I’ll definitely read and think on whatever your reply is. :)

                                                                                                                                                        Far as IT or INFOSEC, I assumed you’d assume I was in it because it’s a reasonable assumption. I didn’t hold that against you so much as use it to illustrate we come here and to our beliefs from many backgrounds that might surprise you. Most people online can’t believe I’m not in INFOSEC. Some have accused me of lying about that to protect my identity at some defense contractor. Yeah, I’m living in movie True Lies lol…

                                                                                                                                              2. 1

                                                                                                                                                minority members dominate the power structure.

                                                                                                                                                If only there was a movement that wanted to eliminated dominating power structures…. I just can’t put my finger on it. Or that’s it! Welcome comrade, have you googled The Bread Book?

                                                                                                                                                1. 2

                                                                                                                                                  Lol. I do try to keep them in check. I stay away from communism, though. Utilitatianism via incentives, regulation, and individual action are my preferred methods.

                                                                                                                                              3. 1

                                                                                                                                                It seems like a reasonable CoC. Your argument that organizers copy and paste it is strange. 50% of software is GPL, and the remaining are copy-paste licenses like MIT, Apache, and BSD. Likely less than 1% have licenses that are custom. Would you say the same thing about software people choosing a license and copy-pasting it? It seems to me most projects do make a big deal about which license they choose.

                                                                                                                                                A well designed CoC like the one you linked seems reasonable to re-use.

                                                                                                                                                1. 1

                                                                                                                                                  Software licences are not the same as CoCs. Software licences police the use of software. CoCs police peoples public behaviour. Using a boilerplate template is a clear indicator that people are posting it to say they’re good people rather than properly looking at how they use or enforce them.

                                                                                                                                                  You may think the Geek feminism CoC template is fine. I find it deeply problematic for most events in my size, location and cultural bracket for events I’m involved in. That’s not to say it doesn’t make interesting points, but it’s better that event organisers consider them (along with everything the wiki has to say about CoCs) when preparing their own.

                                                                                                                                                  1. 0

                                                                                                                                                    I think enforcement is less important than setting expectations. CoC is priming people on what kind of behavior is expected. This priming will have a positive consequence where people will likely act better. There is good psychological research behind priming that you should read. Enforcement is not the primary purpose of a CoC.

                                                                                                                                                    1. 3

                                                                                                                                                      I think enforcement is less important than setting expectations.

                                                                                                                                                      If you’re setting expectations withough an ability to enforce them then this will be your outcome.

                                                                                                                                                      I’m discontinuing this thread with you as you’re no longer adding anything to the discussion.

                                                                                                                                              4. 6

                                                                                                                                                I’m neither a geek, nor a feminist. I strongly resent any association between people who claim they are geeks and myself. I am also an anti-feminist. Unlike modern feminists I believe in equality; men and women should have the same rights, just like blacks and catholics and whatever other people from any group you can think of. Modern feminists don’t think that (EttiCosmocrepe provided a link below) and that’s why the are my enemy.

                                                                                                                                                1. 0

                                                                                                                                                  Last I checked feminists want the sexes to be equal. Sounds like you are a “traditional feminist”.

                                                                                                                                                  1. 2

                                                                                                                                                    I’m neither a geek, nor a feminist.

                                                                                                                                                    I am also an anti-feminist

                                                                                                                                                    hence

                                                                                                                                                    Sounds like you are a “traditional feminist”.

                                                                                                                                                    I believe your reasoning really speaks for itself, hence no further comment is necessary.

                                                                                                                                                    1. 2

                                                                                                                                                      I think your pet definition of feminism has clouded your reasoning. Example: You said you want men and women to be equal. That’s what feminism is! In the same breath you call yourself an anti-feminist because you have this strange idea of what feminism is.

                                                                                                                                                      1. 1

                                                                                                                                                        Technically someone who wants men and women to be equal is an egalitarian. Feminism and Masculism are mostly concerned with equality for the respective side.

                                                                                                                                                2. 1

                                                                                                                                                  Until you decide to explain which version of feminism (or even generation of feminism, grossly speqking) I don’t think it’s easy to have a productive conversation.

                                                                                                                                                  1. 2

                                                                                                                                                    The feminism that wants equality for all sexes in all spheres of life.

                                                                                                                                                    1. 1

                                                                                                                                                      equal opportunity, or equal outcome?

                                                                                                                                                      1. 2

                                                                                                                                                        Equal opportunity and equitable outcome.

                                                                                                                                                        1. 2

                                                                                                                                                          You can’t have both. They’re mutually exclusive. Even given 100% equal opportunity there will always be differing outcomes. You can optimize for either, but you reach a point where optimizing for one will always displace the other.

                                                                                                                                                          This isn’t to say we don’t live in a deeply unequal world in either sense, just that what you want isn’t possible.

                                                                                                                                                          1. 1

                                                                                                                                                            Notice I didn’t say equal outcomes, I said equitable

                                                                                                                                                            1. 2

                                                                                                                                                              Notice I didn’t say equal outcomes, I said that your two options were mutually exclusive and implied a trade-off between them.

                                                                                                                                                              1. 3

                                                                                                                                                                You can’t have both. They’re mutually exclusive. Even given 100% equal opportunity there will always be differing outcomes.

                                                                                                                                                                When I said the outcomes need to be equitable, I obviously recognize equal opportunity will result in differing outcomes. This is not a contradiction. This is simply your failure to recognize dynamic systems. Imagine a system using dead reckoning . We have our simple model of system behaviour (equal opportunity leads to equal outcome). Efforts for equitable outcomes is a course correction after applying a Kalman filter from our expected simplified model. What really happened is equal opportunity resulted in different outcomes because people are different. So we apply equitable distribution to course correct. This is a self correcting system.

                                                                                                                                                                The truth is “equal opportunity brings more equal than no equal opportunity outcomes, but obviously not equal outcomes” is a complex model. We can simplify with “equal opportunity brings more equality” and then course correct with equitable distribution.

                                                                                                                                                                It’s absolutely strange that computer people fall back on “logic” instead of dynamic systems to deal with an obviously dynamic system (society).

                                                                                                                                                              2. 1

                                                                                                                                                                What would an equitable outcome look like, I’m genuinely interested in what you exactly mean with it.

                                                                                                                                                                1. 3

                                                                                                                                                                  Society should decide what people need at a minimum (housing, food, healthcare, access to internet, etc) to live a decent life and provide it to them. Some people will need to be provided more than others depending on their differences (people with disabilities may need more help, etc).

                                                                                                                                                                  In other words, from each according to their ability, to each according to their need.

                                                                                                                                                                  I like the term David Graeber defined here called “everyday communism”

                                                                                                                                                                  1. 2

                                                                                                                                                                    That indeed sounds like something that can and should be achieved.

                                                                                                                                                  2. 1

                                                                                                                                                    If it’s public, I’m curious to hear more words or links about your alternative model for a CoC. What do you see as key differences do you see in problems to be addressed, approach to solving them, enforcement, administration, education, etc.?

                                                                                                                                                    1. 2

                                                                                                                                                      CoCs assert to set expectations for behaviour, but in reality they tend to focus on harassment. We have had harassment at our event (and I have no doubt that plenty goes unreported), but our most common problems are theft, fighting and damage caused by drunkenness. I’ve never seen a CoC address this.

                                                                                                                                                      Another common (at least to us) area CoC’s tend to fall completely short is disruption of talks. BSidesScotland’s Code of Conduct is very good in this respect.

                                                                                                                                                      Now some people might think that all we need to do is make a multi-page document outlining what we can and can’t do with a 4 page section on harassment and we’ll be fine. We won’t. In the interim we’ve settled on Wheaton’s Law as the equivalent of a CoC, along with some light rules about enforcement. However, we still have theft, damage, violence etc. on occasion.

                                                                                                                                                      The current (non-public) iteration is something we’re calling house rules - a one-pager that goes up on the site, at our event that everyone’s supposed to abide by focusing on actions, not opinions. People who think that a person’s value is defined in some aspect of identity can attend. Act on that, and they’re getting thrown out. People who believe that it’s right to punch people dumb enough to think worth is related to skin colour are also getting thrown out. People who steal or try to steal are getting thrown out.

                                                                                                                                                      To make this work we’re going to hold training sessions with ops leads and all the crew, and we’re going to make sure attendees know the house rules through a mix of mailshots, entry in the brochure and possibly (although we’re not sure yet) having the house rules printed up and put up probably around the registration area. On top of this we’re looking into first aid training for ops leads and a bunch of safeguarding education so we can improve our responses.

                                                                                                                                                      This assumes that we get this ready in time for this year’s event. Previous iterations have failed due to opposition to identity-based CoCs, mostly from female members of the crew and female attendees. The feedback that I’ve had is that anything that singles people out on the basis of gender or identity is unfair and uncomfortable for them, and introduces an ugly element to our culture that previously wasn’t part of it.

                                                                                                                                                      More than anything else, we’re trying to specifically avoid a re-run of donglegate, the FreeBSD debacle(s), and make sure we’re ready to properly support a very severe incident. Ultimately we just want our event to be the same great event it’s always been, to make sure people have a good time and to be welcoming to everyone.

                                                                                                                                                1. 4

                                                                                                                                                  After looking for pro/cons in Elm and ReamsonML, my final point was that although Elm has a great pattern and offer simplicity, the interop with JS to import any external library is not fitting the need that I have.

                                                                                                                                                  If I ever need to write apps without JS interoperability, then elm would be great, but for now, the ecosystem not here yet.

                                                                                                                                                  1. 5

                                                                                                                                                    I find this odd given that Elm targets browsers. It’s a bit like creating a native language and say: we don’t need C FFI, people can use named pipes.

                                                                                                                                                    1. 6

                                                                                                                                                      It’s not really that odd, when it fits into the Elm model of the world: I suggest listening to this podcast, which goes over why things in Elm are the way they are: https://elmtown.audio/99e18f41

                                                                                                                                                      1. 7

                                                                                                                                                        I think the vision put forth by Evan sounds like a great thing to strive for. However, as he says, these things are going to take years to happen.

                                                                                                                                                        I think we are seeing the tension between building out this grand vision were everything has an ideal interface, and people using it to ship features today. It seems that recently, there has been more and more negative chatter about the limitations and issues of the language around this tension.

                                                                                                                                                        Not having small patches to fix things like the issue mentioned in the linked post is probably one of larger concerns. Users of the language can make a hotfix and push it to prod in minutes, but issues in language aren’t patched for a year. I know these aren’t the same thing, and actually doing things are never as easy as they sound, but this seems to be where the creator and user are at odds.

                                                                                                                                                        1. 2

                                                                                                                                                          I think we are seeing the tension between building out this grand vision were everything has an ideal interface, and people using it to ship features today. It seems that recently, there has been more and more negative chatter about the limitations and issues of the language around this tension.

                                                                                                                                                          I think it’s OK, and even a good thing, if the power users of a language or library or whatever are persistently frustrated by the thing, if it means a stronger and more consistent story for new and intermediate users. They’re by far the larger and more important demographic. I don’t know a lot about Elm but I get the sense that this is the case.

                                                                                                                                                          1. 1

                                                                                                                                                            Oh, certainly. Even having the userbase around to have these frustrations is a good thing.

                                                                                                                                                            It seems there are some growing pains going from a toy language no one really uses, to one that companies are built on. I guess we have yet to see how these concerns are handled.