1. 16

    I don’t quite agree with all of the analysis, but in the current political climate I don’t think the juice is worth the squeeze.

    1. 4

      What part of today’s political climate would prevent you from voicing a rational, erudite argument on why you disagree with some parts of the analysis?

      1. 25

        What would be the benefit, do you think? To me, to you, to Dan, or to the community?

        Dan presumably believes his (I think his, please correct me if the pronoun is incorrect) conclusions are correct, and additional argumentation on the point is unlikely to generate a retraction or a significant change.

        You might enjoy going over the argument with me and spotting issues, but you might not. I don’t know.

        The community doesn’t really gain anything if I point out some things I think Dan has missed.

        For me, there’s not really any benefit in pointing out issues with methodology or cited papers or maybe unreasonable comparisons. I’m not getting paid, it won’t get me more dates, it won’t win me more friends, and such points are unlikely important enough to win me the golden Rationalist of the Year fedora or whatever.

        And what of the costs?

        Dan doesn’t lose much, since his original article is completely reasonable, and it’s not like anybody is realistically going to hold him to the fire for making an incorrect or imperfect argument in support of the zeitgeist of the times.

        The community may in the ensuing discussion get really ugly. Gven the experience of past threads about Damore’s memo and other things suggests that the odds are high that we’ll just end up with unpleasantness if there is any genuine disagreement. Even assuming we can all have a polite and dispassionate reasoned discussion, it is quite a popular opinion these days that simply speaking of certain things constitutes violence–and I do not wish to accidentally commit violence against fellow Lobsters!

        To you, I’d imagine there’s no real cost beyond continuing to burn cycles reading a discussion back and forth. Then again, think of all the creative, productive, or cathartic things you could be doing instead of reading a thread of me trying to well-actually Dan without spawning a dumpsterfire.

        To me, it at the very least requires a time commitment in terms of research and writing. I need to go grab counterexamples or additional context for what he’s written about (say, additional statistics about how majors actually turn into careers, background research around why the mid 1980s has that change in CS, and so forth) and make that into a coherent argument. And that’s fine, and if that were all I stand to lose I chalk it up as the opportunity cost of performance art and the good fun of public debate.

        Alas, that’s not the potential full cost at all. Even assuming I could put together a critique that cleared some arbitrarily high bar of rationality and erudition, it is entirely probable that it’ll be held against me at some time or another–just look at what happened to RMS, an author who surpasses me in ideological consistency and rationality as much as he differs from me in viewpoint. I may well be held liable for (as @nebkor put it) “garbage opinions” that have no textual or factual basis. This could cost me career opportunities, this could cost me friendships, this could cost me any number of things–and that just isn’t outweighed by the minor joy I get from debating online with people.

        (And note: I bear this risk not only for taking a completely opposite position, but for taking a position probably in agreement but quibbling about the details and suggesting different arguments. My experience is that people get grumpier and more vicious over little differences than large ones.)

        That’s the sad state of things today. People have made the already-marginal benefits of reasoned and civil public debate much less than the potential costs, and there is almost no goodwill left that one can argue in good faith (or in bad faith but with rigor as polite arguendo). We have lost a great deal of intellectual curiosity, freedom, and frankly ludic capacity–things are too serious and the stakes too high for playing around with different ideas and viewpoints!

        Thus, I elect to politely protest.

        1. 3

          Yet, still, it is better to react and run the risk of being ostracised and shunned than it is to remain quiet in fear of retribution. Once enough people start doing this those who want to silence any and all who dare to voice a differing opinion will no longer be able to do so. They will be exposed for what they are, they’ll lose their power over others and with a bit of luck end up as a side note in the history books, taught to children in the same lesson where they learn about book burnings and state propaganda drives. Let’s hope that that is where it ends and that freedom of expression remains the norm.

          I have voiced some differing opinions on this board and elsewhere yet I’m still here. For now the worst that will happen is a pink rectangle in the browser telling you that your posts have been flagged a lot recently and a reduction in whatever those karma points are called here. That pink rectangle is easily removed with a uBlock rule and those points don’t matter to begin with.

          1. 1

            For now the worst that will happen is a pink rectangle in the browser telling you that your posts have been flagged a lot recently

            I had to re-read that, because I thought surely you were referring figuratively to the pink triangle. Ironic.

          2. 3

            What would be the benefit, do you think? To me, to you, to Dan, or to the community?

            What was the benefit of your original reply, though?

            1. 7

              I don’t know what @friendlysock intended, but from my perspective, one benefit is that it draws attention to the fact that people disagree but for $reasons, don’t want to go into details.

              1. 0

                Or this 663 word treatise?

              2. 2

                To me, it at the very least requires a time commitment in terms of research and writing. I need to go grab counterexamples or additional context for what he’s written about (say, additional statistics about how majors actually turn into careers, background research around why the mid 1980s has that change in CS, and so forth) and make that into a coherent argument. And that’s fine, and if that were all I stand to lose I chalk it up as the opportunity cost of performance art and the good fun of public debate.

                You opened up this thread by claiming that you don’t agree “with all of the analysis”. And yet you reveal here that you lack a “coherent argument”, and have neither counterexamples nor context to inspire your disagreement in the first place. This is one way of defining a bad faith argument. You can’t have it both ways. You either disagree because you’ve got a reasonable analysis yourself, or because you have an existing bias against what has been written. As you’ve expressed in many words, one of these is worth sharing and one is not.

                1. 6

                  You either disagree because you’ve got a reasonable analysis yourself, or because you have an existing bias against what has been written.

                  I hold that it is entirely possible to disagree based on a rough analysis or by applying heuristics (for example, asking “what is missing from this chart?” or “are there assumptions being made about which population we’re looking at?”) that are in good faith but which require additional cleanup work if you want to communicate effectively. This is a third option I don’t believe you have accounted for here.

                  The nastiness in this thread somewhat underscores the importance of arguing coherently and choosing words carefully–I haven’t stated which points I disagree with Dan (nor how much!) and yet look at the remarks some users are making. With such understanding and charitable commentary, no argument that isn’t fully sourced and carefully honed can even be brought up with the hope of a productive outcome. That’s not a function of reasonable arguments not existing, but just being able to read the room and see that any blemish or misstatement is just going to result in more slapfighting.

                  We don’t have discourse, because people aren’t interested in exploring ideas even if they’re not fully-formed. We don’t have debate, because people are uncivil. What’s left then is argument and bluster, and better to protest than to participate.

                  1. 3

                    We don’t have discourse, because people aren’t interested in exploring ideas even if they’re not fully-formed.

                    No, we don’t have discourse because in most discussions that even remotely brush up against the intersection of tech with other currents in society, members such as yourself cry “politics” and immediately shut things down. And much more often than not these topics call us to engage in ethical problem solving i.e. what to do about toxic members of the tech community or how to address inequalities in open source. So by shutting down discussion, folks such as yourself – whether you mean to or not – send the message to those affected by these issues that not only are you not interested in solving these problems, but that you’re not even interested in discussing them at all. In this context, who do you think sticks around?

                2. 1

                  Dan doesn’t lose much, since his original article is completely reasonable, and it’s not like anybody is realistically going to hold him to the fire for making an incorrect or imperfect argument in support of the zeitgeist of the times.

                  He wrote it in 2014 and updated it recently. I don’t think it’s entirely fair to tag that as “in support of the zeitgeist of the times.” Your turn of phrase makes it sound much more fleeting. That is not to call into question the other reasons you don’t want to differ; but I think the way you stated this does not give the piece enough credit.

                  1. 9

                    I don’t mean to make it sound fleeting–rather that things being what they are right now, I doubt that anybody is going to be terribly upset if there’s some flaw in his argument revealed through discussion at this time. I apologize for any confusion or disrespect that may have been parsed there.

                    1. 3

                      That’s fair. Thanks for clarifying.

                  2. -10

                    It’s not polite protest; it’s lily-livered chicken shittery.

                    1. 10

                      You are making his point.

                      1. -6

                        He’s making mine.

                        He’s not an unknown quantity, with no record; he’s a consistent fount of hard-line whataboutism and trenchant, deliberate ignorance. His first comment was lazy cowardice, pure and simple.

                        It’s not nice. It’s not valuable. It’s fucking exhausting.

                3. -10

                  This is passive aggressive horseshit, dogg. If you don’t want to subject your garbage opinions to the rigours of discourse, you don’t have to say anything.

                1. 4

                  But if we actually read what economists have to say on how hiring markets work, they do not, in general, claim that markets are perfectly efficient or that discrimination does not occur in markets that might colloquially be called highly competitive.

                  If the bar is perfection, then there is no limit to the number of “fixes” that will be proposed.

                  We can fix this, if we stop assuming the market will fix it for us.

                  By enacting more laws, or how exactly?

                  1. 7

                    If the bar is perfection, then there is no limit to the number of “fixes” that will be proposed.

                    I guess that’s true, and I guess a good thing. Or should we not always seek to improve?

                    1. 2

                      I agree with this, but I don’t think our rhetoric is sustainable. It’s far too toxic and divisive and progress demands cooperation; I think this toxicity and steamrolling to create change is creating a debt of divisiveness that will prevent us from progressing in the future. We need to figure out how to advocate for progress without being utterly hateful–people need to stop using “fighting injustice” as a cover for their personal vendettas against individuals and groups (political parties, races, genders, etc).

                      1. 4

                        We need to figure out how to advocate for progress without being utterly hateful–people need to stop using “fighting injustice” as a cover for their personal vendettas against individuals and groups (political parties, races, genders, etc).

                        Taking your comment at face value, it is a distortion of a hallucinatory magnitude to characterize socially progressive movements – which I assume you are referring to through the fog of plausible deniability – as “divisive”, “hateful”, and having a “personal vendetta” against groups defined by “race” and “gender”. Taking for example the movement for racial justice in the US, compare a near half millennium of violent racial oppression to the overwhelmingly peaceful forms of protest across the US, and ask yourself whose toxicity, divisiveness, and vendettas against groups should be considered worthy of your critique.

                        1. 3

                          I can’t disagree more strongly. The canonized authors of the movement publicly write things like “White identity is inherently racist” (note that this is a quote from DiAngelo’s best selling book) and talk about racism incurable in white people (whites are irredeemable) and kafka trap people (“white fragility”–if you denounce the term you’re only doing so because of your own white fragility, same with “internalized racism” if the objector is a minority) and otherwise go to remarkable lengths to support the primacy of race. They redefine “racism” such that white people simply participating innocuously in their own culture is inherently racist and consequently evil and not only that but colorblindness–literally the opposite of ‘racism’ as the term has historically been defined–is also racist. I don’t see how this can be anything other than hateful and divisive and racist (per the traditional definition).

                          (And for the “So what? Words change meaning” crowd, the significance is that the term isn’t the thing that carries the moral weight; it’s the meaning–as a society we agreed that racial prejudice and hate were evil–they are evil whether “racism” as a term refers to those things or their opposites. If someone inverts the meaning of the term–and I think this is a fair characterization–and then calls themselves “antiracist”, they are necessarily opposed to justice).

                          Taking for example the movement for racial justice in the US, compare a near half millennium of violent racial oppression to the overwhelmingly peaceful forms of protest across the US, and ask yourself whose toxicity, divisiveness, and vendettas against groups should be considered worthy of your critique.

                          I’m concerned about the parallels between the former and this new ideology (which condemns the very liberalism that so significantly reduced racial oppression in so short a time). Notably the primacy of race over the individual, the eagerness to regulate speech and thought, the propensity to celebrate or rationalize political violence, the promotion of segregationist policies, the newspeak rhetorical devises, and so on. Liberalism condemns the far left and the far right at once.

                          1. 2

                            The canonized authors of the movement publicly write things like “White identity is inherently racist” (note that this is a quote from DiAngelo’s best selling book) and talk about racism incurable in white people (whites are irredeemable) and kafka trap people (“white fragility”–if you denounce the term you’re only doing so because of your own white fragility, same with “internalized racism” if the objector is a minority) and otherwise go to remarkable lengths to support the primacy of race. They redefine “racism” such that white people simply participating innocuously in their own culture is inherently racist and consequently evil and not only that but colorblindness–literally the opposite of ‘racism’ as the term has historically been defined–is also racist. I don’t see how this can be anything other than hateful and divisive and racist (per the traditional definition).

                            You realize that works like these are written from a critical perspective, right? They’re intellectual and/or sociological analyses, not literal dictates.

                            1. 2

                              They seem to be building a racial worldview that is seized upon en masse, so I take little comfort in their perspective or analytical nature.

                            2. 2

                              If you’re interested books on racial justice, Angela Davis and Michelle Alexander are good places to start. Verso books publishes a lot of on this subject too. I think you’ll find many thinkers who are less concerned with what you may perceive as a certain moralizing political correctness, but rather more interested in understanding and dismantling systems of violent injustice. Think policing, jailing, housing, education. This is what I’ve referred to above vaguely as “the movement for racial justice”. Not to be dismissive, but books like “white fragility” are IMO more like beach reading for guilty white folks. Serves a purpose and may be a nice book, but I don’t think anyone would refer to it as “canon”.

                              1. 2

                                I think we’re exposed to different angles of this movement. I see a lot of people (white and black) boosting Kendi and DiAngelo and their ilk, but you’re the first who has recommended Davis or Alexander. I’ll have a look. I don’t think Kendi or DiAngelo are actually interested in “racial justice” in any meaningful way, but rather trying to advance an abstract theoretical framework (or perhaps an incoherent word salad that aspires to look like a framework) that indicts groups and individuals they don’t like irrespective of whether or not those people have anything to do with the disparate outcomes. I fully believe there are lots of genuine people involved in the movement, but the part of the movement that is being seized upon by the media and corporations seems to strictly be the critical race theory part (they recommend the same authors, use the same jargon, etc).

                                1. 2

                                  trying to advance an abstract theoretical framework . . . that indicts groups and individuals . . . irrespective of whether or not those people have anything to do with the disparate outcomes

                                  But, like, this is entirely correct! Structural racism means people don’t have to actively do racist (little-r, micro scale) things to be part of a racist (big-r, macro scale) group.

                                  The conversation is about understanding this distinction and it’s effects so they can be corrected, to reduce suffering — not about amplifying the distinction so it can be weaponized, to increase suffering. I understand why you might think otherwise, but that conclusion requires believing the entire conversation is happening in bad faith, and there’s just no justifiable way to reach that conclusion, the evidence and Occam’s Razor don’t support it.

                                  1. 1

                                    Structural racism means people don’t have to actively do racist (little-r, micro scale) things to be part of a racist (big-r, macro scale) group.

                                    Then this definition of “racist” can’t carry any moral value, and anyone who assigns moral value to this definition is by definition a bigot and if the group in “part of a racist group” refers to a race then the person who assigns moral value to the term is precisely a racist in the original sense of the term—one who believes a person is guilty for no reason other than the color of their skin. This is hateful.

                                    1. 2

                                      I can’t help but be left with the overall impression that you’re trying to win a game of 7-dimensional chess which is suspended above our planet. I enjoyed introducing you to Davis and Alexander, and at this point I’d suggest that you pick up some of those books because there aren’t many other ways I think I can re-state the same point, one that @peterbourgon has also expressed, and which is hammered home in those works. I don’t mean to tell you what to think, but history makes the fact of systemic injustice pretty uncontroversial. It seems that rather than confront these systems, you’d prefer think of racism as a personal choice made by context-free actors. I don’t mean to shut down discussion, but I have said what I could and the information is out there for you to engage with if you choose to.

                          2. 4

                            There has been a lot of hate, frankly, disguised for decades as civil discourse and apparently ordinary polite society behaviour. While some of the apparent tone of recent movements is appreciably different, and approaches a fever pitch in cases where people are at the end of their rope due to continuing maltreatment, I think it is disingenuous to paint the pushing back as somehow more hateful than what’s being pushed back on.

                            1. 2

                              There has been a lot of hate, frankly, disguised for decades as civil discourse and apparently ordinary polite society behaviour.

                              There’s also a lot of people who call civil discourse ‘hate’ as a way to shut down differing points of view.

                              While some of the apparent tone of recent movements is appreciably different, and approaches a fever pitch in cases where people are at the end of their rope due to continuing maltreatment, I think it is disingenuous to paint the pushing back as somehow more hateful than what’s being pushed back on.

                              From my vantage point, I see a lot of people being slandered, canceled, and even assaulted for living their ordinary lives and failing to toe a particular ideological line. These aren’t hateful people and many of them are themselves minorities; if they knew what policy would fix various racial disparities, they’d support it (e.g., IIRC a majority of even Republicans support police reform–there’s clearly more good will/faith out there than we’re lead to believe). They simply don’t buy the far-left newspeak rhetoric and extreme and frankly idiotic solutions (“tear down capitalism!”, “defund police!”, etc).

                              Further, your characterization is that the bad actors are presumably minorities at the end of their ropes, but the people I see behaving the worst in this regard are very often white and almost uniformly privileged people, often with lofty positions in media or universities. Similarly there are many well-behaved people of all races and positions. There’s not a strong racial signal as far as I can tell (although you wouldn’t know it from the mainstream media).

                              I think you and I have different positions, and that’s fine. I’m sure mine is skewed, and I’m always trying to understand better. Hopefully in time people with views similar to yours and people with views similar to mine will come to a more mutual understanding, but of course that’s dependent on a healthy debate.

                              1. 4

                                There’s also a lot of people who call civil discourse ‘hate’ as a way to shut down differing points of view. From my vantage point, I see a lot of people being slandered, canceled, and even assaulted for living their ordinary lives and failing to toe a particular ideological line.

                                Something I have noticed from a lot of conservative-leaning Americans is the tendency to latch onto the idea that someone might address their behaviour as somehow being the gravest sin, far worse than the shitty behaviour itself. Free speech doesn’t mean free from consequences!

                                Communication is certainly a two way street, but the “differing views” stuff is frankly pretty exhausting. The paradox of tolerance is a pretty tangible phenomenon, as it turns out. If you have a pattern of poor behaviour, other people are welcome to – and should! – point it out, especially when the transgressors are powerful people. The religious right have been doing this in their own way for years, harassing advertisers and TV networks, and politicians; organising boycotts and making a racket, to shut down TV shows or laws or organisations that they believe are offensive.

                                In another thread, you said:

                                They redefine “racism” such that white people simply participating innocuously in their own culture is inherently racist and consequently evil

                                I am a white person from Australia, where we have our own unfortunate, regrettable history. There are aspects of what I imagine you’re defining as “white” culture (whatever that is) that are indeed quite horrid. By “simply participating” in modern US society you (and I) are utilising a pile of wealth that was created through colonialism, and slavery, and many other deeply awful, violent, destructive aspects of our shared societal history. On top of that, many societal institutions (like the police, or the fact that wage theft is not a crime) are structurally configured to protect certain groups of people at the often violent expense of other groups.

                                By pretending it isn’t something we all need to deal with urgently, that we have the luxury of waiting for someone to come along and debate us in a tone of which you approve, you are taking a fundamentally regressive stance. There is no move on this chess board that isn’t inherently a political decision, even though it might feel like your doing nothing and staying out of the way is somehow balanced or apolitical.

                                a majority of even Republicans support police reform–there’s clearly more good will/faith out there than we’re lead to believe

                                I will believe it when I see it! Republicans have periodically had concurrent control of the House and the Senate and the Executive and a lot of the courts and statehouses in this country. They have had ample opportunity to drive forward any “reform” that they felt would mean less people are oppressed, harmed, killed. It isn’t at all surprising to me that people are deeply unhappy with the status quo.

                                1. 0

                                  Something I have noticed from a lot of conservative-leaning Americans is the tendency to latch onto the idea that someone might address their behaviour as somehow being the gravest sin, far worse than the shitty behaviour itself. Free speech doesn’t mean free from consequences!

                                  Take comfort in that I’m not a conservative, but a moderate liberal. Your observation would indeed be frustrating, but that’s not what I’m doing here. My claim is that ordinary white folks and increasingly minority folks who are just going about their business are maligned by the progressive left. We’re not talking about “shitty behavior”, we’re talking about something much closer to “having white skin”. Note that this is not worse than what many minorities endure; however, it is unjust to slander, malign, and cancel people, and further it distracts from progress with respect to improving minority outcomes. There certainly is no dichotomy in which we much choose between anti-white racism and anti-minority racism; morally you can’t be opposed to racism with race-based caveats (e.g., “except against $race”) but practically you’ll very likely create a lot more anti-minority racists by perpetrating anti-white racism.

                                  Communication is certainly a two way street, but the “differing views” stuff is frankly pretty exhausting.

                                  Agreed; it is exhausting; however, to be clear, “differing views” means we need to work to understand each other. It’s not some morally relativistic argument that you must accept my viewpoint.

                                  The paradox of tolerance is a pretty tangible phenomenon, as it turns out. If you have a pattern of poor behaviour, other people are welcome to – and should! – point it out, especially when the transgressors are powerful people.

                                  It may be a tangible phenomenon, but without a criteria for what is “tolerant” and “intolerant” the principle is easily abused to give anyone license to abuse any other party simply by defining intolerance such that they are intolerant. This is exactly what we see with many progressives (especially intellectuals) who seek to change the definition of racism because it doesn’t target the right people (white folks, including “colorblind” white folks, mostly). So we’re not talking about “transgressors” except insofar as the transgression is having the wrong skin color.

                                  The religious right have been doing this in their own way for years, harassing advertisers and TV networks, and politicians; organising boycotts and making a racket, to shut down TV shows or laws or organisations that they believe are offensive.

                                  And we eventually collectively shut them down in the name of liberalism. The religious right lost every significant fight–abortion, sex and violence on TV, gay marriage, etc (and while it did get Hobby Lobby, it’s not a significant issue and it won it because of liberalism).

                                  I am a white person from Australia, where we have our own unfortunate, regrettable history. There are aspects of what I imagine you’re defining as “white” culture (whatever that is) that are indeed quite horrid.

                                  I don’t think there are, but we should talk in concrete detail about what they might be. I think there certainly were elements of “white culture” which were horrid, but I think we largely expunged them (or to be precise, there are still individual racists, but they aren’t allowed to express their views in society).

                                  By “simply participating” in modern US society you (and I) are utilising a pile of wealth that was created through colonialism, and slavery, and many other deeply awful, violent, destructive aspects of our shared societal history.

                                  Granted, but this is true of all Americans (including minorities) to widely varying degrees. This has left white people with more money on average than black people (whites are more likely to have wealth privilege), and I’m pretty open to reparations or some other ideas for addressing this. I genuinely don’t know what the right answer is, nor do the overwhelming majority of white folks; however, I don’t think that gives progressives (or leftists or whichever term you prefer) any license to abuse them for their race.

                                  On top of that, many societal institutions (like the police, or the fact that wage theft is not a crime) are structurally configured to protect certain groups of people at the often violent expense of other groups.

                                  Yeah, this is real white privilege. We need to understand the extent to which this is a problem and understand its dynamics in order to solve it properly. We need trustworthy academic and media apparatuses (even if they are on “the right side”, Americans need to be able to trust that these institutions are asking questions on their behalf)–which means we need to reform or retire our concept of activist journalists and academics.

                                  By pretending it isn’t something we all need to deal with urgently, that we have the luxury of waiting for someone to come along and debate us in a tone of which you approve, you are taking a fundamentally regressive stance.

                                  It’s precisely because the problem is urgent that we can’t afford to use the moment as an opportunity to exercise our personal hatred toward whites or conservatives or otherwise stroke our own enlightened egos. We need to build coalitions and simply wishing that people would take our abuse and still be on our side is naive at best (the less-than-charitable view is that those who heap the abuse don’t actually want circumstances to improve; they like the moral landscape because they feel it gives them moral license to heap their abuse without actually suffering social consequences for doing so). People who sabotage this coalition building are obstacles that we can’t afford to ignore.

                                  will believe it when I see it!

                                  Behold

                                  You can debate whether it will be effective or whatever, but they have a proposal and I can’t seem to find the poll, but an overwhelming majority of Republican voters support police reform (this being the motivating factor for the proposal).

                                  Republicans have periodically had concurrent control of the House and the Senate and the Executive and a lot of the courts and statehouses in this country. They have had ample opportunity to drive forward any “reform” that they felt would mean less people are oppressed, harmed, killed. It isn’t at all surprising to me that people are deeply unhappy with the status quo.

                                  As have Democrats. Biden’s ‘94 crime bill wasn’t exactly friendly toward black Americans, nor was Hillary’s famous thinly veiled “superpredator” remark. But we can’t let partisan bickering distract us.

                                2. 2

                                  There’s also a lot of people who call civil discourse ‘hate’ as a way to shut down differing points of view.

                                  “Different points of view” is a phrase that can be weaponized to paper over categorically different things.

                                  Whether or not the Laffer Curve is an effective means to guide tax policy are different points of view, and we can have a civil discourse on the subject.

                                  Whether or not transsexual women are mentally sick men are not merely different points of view. One position is hateful; civil discourse is impossible because that position is in its nature un-civil.

                                  Bringing it back on-topic: whether fewer women exist in programming occupations because of hiring bias, or because of some innate, gender-based distaste for science or math or whatever, is a gray area. It’s possible to have this discussion in a civil way, but it requires considerable attention to context. For example, not every forum is appropriate for the discussion. It would be inappropriate to have this kind of debate on a mailing list of a technology company, where women engineers at the company would be justifiably aggrieved by colleagues arguing for the “innate” position. Insisting on having this discussion in that context is hateful, to some degree.

                                  (n.b. the correlation of “differing points of view” that are actually hateful to a specific American political stance/party isn’t evidence of political censorship, it’s evidence of regressive and hateful politics.)

                                  1. -1

                                    I strongly disagree. For instance, it’s not a gray area at all to debate the cause for why there are fewer women in programming—this is an empirical question, and moreover only a minority of women are offended by either position (indeed there’s no reasonable cause for offense). This doesn’t fit any reasonable definition of “hate”. I’m strongly of the opinion that “hate” is the weaponized term, used by a specific group of bad faith actors to suppress reasonable debate as previously discussed. I agree that this is evidence of regressive and hateful politics, but probably not in the way you mean. Anyway, I don’t really enjoy rehashing these same largely semantic debates over and over, so I’ll leave you to the last word.

                                    1. 3

                                      there’s no reasonable cause for offense [for] women engineers [witnessing] colleagues arguing for the “innate” position [in a debate in the office on] whether fewer women exist in programming occupations because of hiring bias, or because of some innate, gender-based distaste for science or math

                                      Your claim kind of stands on its own here, I think.

                            2. 2

                              Or should we not always seek to improve?

                              Improving isn’t cost free. if the cost to implement a solution exceeds the fruit, it is not worth it.

                              1. 4

                                if the cost to implement a solution exceeds the fruit, it is not worth it

                                Well, that’s a truism, so I’m not sure how much insight it delivers. The issue tends to be an appropriate accounting of the benefit. For example, many of the advanced safety features on cars probably seemed “not worth it” by this formula at the time of their introduction or regulatory mandate, because it’s difficult to put an accurate value on future lives saved. Similarly, many of these discrimination-reducing measures could easily be seen as “not worth it” as it’s difficult to put an accurate value on the long-term benefits of more representative and diverse organizations.

                              2. 1

                                then there is no limit to the number of “fixes” that will be proposed.

                                I guess that’s true, and I guess a good thing

                                Depends on your appetite for another can’t-win, perpetual war. We are still fighting the wars on poverty, terrorism, and drugs.

                                I see two independent ideas in your comment:

                                1. seeking to improve oneself
                                2. seeking to improve others

                                1 is virtuous IMO. 2 leads to pesky authoritarian over-corrections.

                                1. 8

                                  As an aside, I always find it fascinating how readily tiny incremental changes that are light years short of perfection get called pesky authoritarian over-corrections.

                                  1. 0

                                    My comment was specifically about the risk of over-corrections, not tiny changes, that tends to follow from a zeal for improving other humans. Errors accumulate.

                                    1. 2

                                      Sure. When they’re errors. My point is that what you might call an over-correction someone else might call a tiny incremental change.

                                  2. 5

                                    “seeking to improve others” leads to pesky authoritarian over-corrections? Do you find this to be true when you think of anything else besides gender or racial equality?

                                    1. 1

                                      I’m guessing you expect an answer other than “yes”, or perhaps you had hoped to enlighten a lower creature.

                                      Your reply (and others in this thread) quickly turned personal. Hmm.

                                    2. 2

                                      seeking to improve others . . . leads to pesky authoritarian over-corrections

                                      Well, that’s certainly one failure mode of any kind of policy of mandate from authority, and we should be careful to guard against it, but it’s hardly inevitable. More importantly, there is an upper bound to the amount of progress that can be achieved on a large scale via individual virtue and action alone.

                                      1. 1

                                        Even for part 1 it is not clear that it is always good. Why would becoming the best programmer in the world good, when it would take so much effort and time, which can be spent on enjoying yourself, if you are already a pretty good programmer that can command a pretty good salary. Diminishing return is a thing and self-improvement is not without cost.

                                    3. 14

                                      If the bar is perfection, then there is no limit to the number of “fixes” that will be proposed.

                                      Indeed, that’s exactly what a benefactor of a broken system would say. For excluded folks, there’s no cost in trying to change the system; they aren’t benefitting from it regardless.

                                      1. 1

                                        that’s exactly what a benefactor of a broken system would say.

                                        Okay, but is he wrong?

                                        1. 4

                                          About what? This?

                                          If the bar is perfection, then there is no limit to the number of “fixes” that will be proposed.

                                          Yes? No? I’m unfamiliar with any documented result that answers this question, so I’m going to go with maybe here. This is such a nebulously defined problem that I’m not really sure one can answer it. Fixes to what? Perfection where? How much effort does perfection take?

                                          My point was simple: it doesn’t matter what you think about perfection or fixes or the lack thereof. Disenfranchised people, throughout history, have agitated for franchisement. From the Roman Empire’s discrimination of Christians to the brutality of Belgian rule on the Congo. No matter the advantages of the system, the disenfranchised have sought to topple theirs. Advance a position with known disenfranchisement at your own peril.

                                        2. 0

                                          Indeed, that’s exactly what a benefactor of a broken system would say.

                                          While this is a fun argument, it’s not an actual one. Just because a bad entity would say something, does not make whatever is being said bad.

                                          For excluded folks, there’s no cost in trying to change the system; they aren’t benefitting from it regardless.

                                          They think they are benefitting from it. But predicting the future is hard, and regrets do happen.

                                          1. -1

                                            Indeed, that’s exactly what a benefactor of a broken system would say.

                                            If you have nothing to hide then you don’t need privacy, right?

                                            This is Christianity’s “original sin” concept, a cudgel used against anyone who questions the priest class.

                                            1. 4

                                              If you have nothing to hide then you don’t need privacy, right?

                                              I’m unclear what that has to do with my comment.

                                              This is Christianity’s “original sin” concept, a cudgel used against anyone who questions the priest class.

                                              I’m not sure what you’re talking about. What cudgel is this for what or for whom? I’m just trying to tell you that if you don’t find a solution acceptable by all parties, then disenfranchised people will understandably not care about your perspectives or your ideals. Telling them to be quiet in the name of a philosophical good is sophistry at best.

                                          2. 5

                                            By enacting more laws, or how exactly?

                                            The legal industry has Diversity Lab.
                                            They conduct policy hackathons, create policies to promote diversity, and report on the results.
                                            The Mansfield Rule is an example of one of their policies.
                                            Now in its third iteration, the Mansfield Rule Certification measures whether law firms have affirmatively considered at least 30 percent women, attorneys of color, LGBTQ+ and lawyers with disabilities for leadership and governance roles, equity partner promotions, formal client pitch opportunities, and senior lateral positions.
                                            102 large law firms have agreed to this rule and their compliance is assessed by third-party audits.

                                            There’s nothing to stop the technology sector from taking similar actions.

                                            1. 1

                                              Thanks. But those efforts are part of the free market, they aren’t state mandates. So this is an example of the market voluntarily experimenting with solutions.

                                              1. 2

                                                It’s a combination of voluntary actions and state mandates.
                                                The legal industry has been working on gender equity and diversity for decades.
                                                Law schools used affirmative action to admit gender-balanced classes in the 60 and 70s.
                                                Class-action lawsuits in the 1970s forced law firms to change their hiring practices.
                                                Diversity is also important to clients for legal services; Diversity Lab’s initiatives are backed by Microsoft, Starbucks, Bloomberg LP, and 3M.

                                                Edited to add the following text.
                                                Law firm diversity metrics are public and widely shared.
                                                The National Law Journal’s Women in Law Scorecard, for example, was released earlier this week.

                                            2. 7

                                              The majority of the article makes clear that perfection isn’t the bar. The point of using the word “perfectly” seems to be to address a specific disingenuous claim:

                                              1. Markets are competitive
                                              2. Unjustified discrimination is a competitive disadvantage
                                              3. Market forces in a competitive market must tend toward a perfect balance that squeezes out disadvantageous behavior
                                              4. Therefore, discrimination can’t be a significant factor in the market

                                              I’d reckon laws aren’t likely the point. It’s already illegal (in the US at least) to discriminate on most of the bases talked about in the article; from a policy perspective, a change in enforcement might help. But most likely, the change is going to have to be a cultural one. The sort of thing where enough people talk about this, and enough people agree that it’s not okay, that it’s almost impossible to be a member of the computer science community and not find yourself actively checking for this bias in your decision-making.

                                              1. 0

                                                But most likely, the change is going to have to be a cultural one.

                                                Culture, social change, blog posts, are all part of the free market. These discussions are poisoned with the common assumption that anything lacking a credit card transaction is somehow not part of economics.

                                                Has anyone considered that anti-discrimination laws may contribute to the problem? Hiring a protected class carries the perception of increased liability in terms of lawsuits, whereas hiring a non-protected class may carry less liability.

                                                Maybe the laws did their job and now it’s time to enter “phase 2”: remove special protections. That was the goal, wasn’t it? Note that discrimination on the basis of liability is different in origin though not effect. The laws never cared about origin, only effect.

                                                1. 6

                                                  Conversely, I feel as if your claim is poisoned by the common assumption that anything lacking government intervention is somehow part of the free market. Maybe economics in general has broader applicability, but if we’re talking about market forces, the topics of our discussion are explicitly going to be things related to the accumulation of capital. Culture, social change, blog posts, and so on are only related insofar as they have value that can be expressed in monetary terms. Whatever the case may be, it’s empirically true that whatever value they currently have isn’t sufficient to change hiring behaviors. So either we need to change that value or we need to effect changes that cause people to act for reasons unrelated to satisfying market pressures.

                                                  Your second argument might be correct (I don’t know), but if it is, it’s a red herring. You can’t argue that discrimination doesn’t exist in the market because anti-discrimination laws are such a poor remedy that they create incentives to discriminate. The original article is addressing a single, specific claim - that it is economically impossible for discrimination to exist, because if it did companies would find competitive advantage by not discriminating until the market reached equilibrium. If you want to find a cause for why discrimination does exist, that’s a different thing.

                                                  1. 3

                                                    Culture, social change, blog posts, and so on are only related insofar as they have value that can be expressed in monetary terms. Whatever the case may be, it’s empirically true that whatever value they currently have isn’t sufficient to change hiring behaviors. So either we need to change that value or we need to effect changes that cause people to act for reasons unrelated to satisfying market pressures.

                                                    This does not follow at all. Let’s say (although almost no one is explicitly calculating as follows) one is willing to hire men rather than women up to $1M of economic damage due to held value, and resulting inefficiency causes loss of $500K economic value. Also, social shaming (“culture”) causes $300K of economic damage. In this scenario, as you say, culture is empirically insufficient to change hiring. But it is simply incorrect to say the choice is either to change such held value, or to deploy non-monetary force. If social shaming intensifies 2x, the total damage reaches $1.1M and hiring changes.

                                                    1. 1

                                                      I might have miscommunicated - your example is exactly what I meant by changing the value of culture, etc.

                                                      1. 2

                                                        That must be the case. From what I can read, you and jmk are in agreement: quotes giving me such impression include “By enacting more laws?” and “market forces (which includes culture)”.

                                                    2. 3

                                                      Culture, social change, blog posts, and so on are only related insofar as they have value that can be expressed in monetary terms

                                                      It’s really simple why these are part of the free market: These things influence the reader, the reader’s thinking, and therefore they influence the reader’s spending.

                                                      1. 1

                                                        We agree. And since the existing influence on spending isn’t enough to force changes in hiring practices, then if different hiring practices are desired, the solution is either intensifying that influence, or relying on something other than economics, e.g. community norms.

                                                        1. 4

                                                          FYI, the entire point of contention is that community norms IS economics. That’s what jmk’s “common assumption that anything lacking a credit card transaction is somehow not part of economics” phrase is about.

                                                      2. 2

                                                        The original article is addressing a single, specific claim - that it is economically impossible for discrimination to exist, because if it did companies would find competitive advantage by not discriminating until the market reached equilibrium.

                                                        Framing the question as a binary (“perfect or not perfect”) is not meaningful and thus disingenuous. “Economically impossible” (assuming anyone used those words) is obviously a theoretical upper bound, since economics is dynamic (changes with time and context).

                                                        The meaningful question is whether market forces (which includes culture) tend to improve the situation. Are we going in the right direction or not?

                                                        1. 5

                                                          The claim the article argues against is explicitly a binary one - that the economic disadvantage of discrimination proves that discrimination can’t explain observations about women and minorities in the tech industry. If you agree that the economic effects are anything less than perfect, then you agree that discrimination can explain some of the observations, and you may agree with the article.

                                                          1. 4

                                                            I think dl and jmk are talking past each other, because dl’s article is mostly about diagnosis, and jmk is mostly concerned about solution. dl says observed disparity is not wholly explained by economics and it is likely explained by discrimination, and I think jmk agrees? (I agree.)

                                                            But to jmk (and to me), the important part is what to do about it. Existence of discrimination does not support any governmental intervention, since it is possible all government interventions are harmful. The thing is, I think dl also agrees. The article merely says “We can fix this, if we stop assuming the market will fix it for us”, it does not suggest or support any specific governmental intervention, it doesn’t even suggest or support governmental intervention is necessary.

                                                            To me, the whole debate is about what “market” means: which is boring terminological discussion. To dl, large scale social movement (aka jmk’s “culture”) is not part of the market, but to jmk, it is. So I think both agrees about the solution (mostly cultural, not legal), but disagree whether to call it market or not.

                                                  2. -2

                                                    By enacting more laws, or how exactly?

                                                    “muh free market” isn’t the perfect solution, but a pretty good solution that’s very easy to implement. Women and minorities can get what they can get, nothing is stopping them. If the boys are bad, then just make a women only corporation, crush the market with your 20% reduced salary expense, and counter-discriminate the boys. that will show them….

                                                    No it’s not perfectly workable. But it’s really good. Trying to ‘fix’ the ‘injustice’ is like balancing a ping-pong on a paddle while blind folded. There’s no guarantee that if we fix the 20% gap, we are not subsidising women for their choices that we simply didn’t know about.

                                                  1. 2

                                                    Many of these problems are key successes of urbit, a distributed system with ubiquitous idempotency, exactly-once messaging. For example your mention of NUMA:

                                                    Tons of effort is also expended on things like how various bottlenecks often entail a complicated hierarchy of caches that need to be kept in sync with the underlying data store.

                                                    …reminds me of this item from https://urbit.org/blog/a-founders-farewell/ :

                                                    20th-century computers have two brains: one fast and temporary, the other slow and permanent. When one of these two-brained computers hears a packet, and sends an acknowledgment, that only means the temporary brain heard it. Acks are not end-to-end transactions.

                                                    This means you can’t write a command protocol where your commands get executed exactly once. You can only choose “at least once” or “at most once.” This problem is as ridiculous and frustrating as it sounds.

                                                    You can address it in three ways: (a) make all your commands formally idempotent, so that repeating them has no additional effect; (b) insert a layer of stateful middleware — a message queue; (c) be fine with “almost always once.” Guess which approach is most popular?

                                                    [In Urbit,] acks are end-to-end transactions — no packet is acknowledged until all its direct effects are finalized. Every message channel is its own message queue. And every message is executed once.

                                                    Also from your post:

                                                    one case I can remember was when I wanted to send a large data structure, but the available serialization system could only serialize it all at once rather than streaming it packet by packet

                                                    Urbit does that transparently.

                                                    1. 11

                                                      Thanks for posting! I wrote this with the help of some wonderful contributors. I’d be happy to work on any feature requests or answer any questions.

                                                      1. 13

                                                        Indeed, I’m excited and impressed at the the contributions to neovide. This is a case where Nvim’s decoupled architecture seems to bear fruit (which isn’t always totally obvious :)–people can fully embrace new ecosystems like rust without being blocked by Nvim’s tech stack.

                                                        Recently https://github.com/equalsraf/neovim-qt/ (c++) has been picking up steam as well thanks to some talented contributors.

                                                        For more on Nvim arch see also: https://lobste.rs/s/gchgjr/switch_sway#c_df7js3

                                                        1. 8

                                                          I can not say enough good about neovim’s design. By taking care of the text editing part, I can focus on the front end concerns such as font selection, glyph calculations, and text rendering. Zero to functioning text editor was really fast as well so it was easy to get started

                                                          I highly recommend making a neovim gui as it gives you a better understanding of how things work in the text editor. @jmk and company have been doing amazing work

                                                        2. 1

                                                          I immediately gave it a shot as I am avidly looking for a nvim GUI interface with good performance and ligature support, but was greeted with a SIGSEGV on OS X 10.15.3. It looks like a know issue, so I’ll keep my eyes peeled.

                                                          1. 1

                                                            Wanna help debug? I don’t have access to a mac and so am kind of at a loss for how to fix this. I think it has something to do with font-kit, but I don’t have any way to know beyond that

                                                        1. 8

                                                          I really like tilling window managers and I used to use them exclusively in my younger days, but now I find I don’t have the time or energy to spend fiddling with their configuration and set up. I’d really love it if there were a desktop environment that has all the richness and integration of Gnome/KDE but with forced tilling. I’ve tried various tilling extensions for Gnome and they’re all kludgey and don’t work well, especially with multiple monitors. Sway looks great but I don’t want to have to mess with manually installing and configuring notifications, launchers, menu bars, etc.

                                                          1. 7

                                                            I installed sway and used it in its default configuration, except for arranging my monitors, which you have to do in any WM because there’s no way it can know the physical layout of your monitors. I’ve added a couple of keybindings for stuff like taking screenshots, but again, nothing tiling wm-specific there.

                                                            You can customise it if you want to, but you don’t need to. It works fine out of the box.

                                                            1. 4

                                                              there’s no way it can know the physical layout of your monitors

                                                              I’ve wondered about this; back in the day of CRTs if your system switched off and on your display and used a stereo mic, it could determine which side each display was on. It seems that nowadays modern LCD screens are relatively silent, but I’m also sure my ears aren’t as sensitive as my laptop’s mic.

                                                              1. 3

                                                                I’ve wondered about this; back in the day of CRTs if your system switched off and on your display and used a stereo mic, it could determine which side each display was on.

                                                                Huh. Was this actually a feature that was used in practice?

                                                                1. 3

                                                                  Nah, just some random idea I came up with. Never heard of it being implemented.

                                                            2. 2

                                                              Seconded. I’ve tried Sway and like it, but I wish it were a little more batteries-included. I already have to train my fingers to use splitscreen windowing shortcuts in tmux and vim, dealing with yet another model just isn’t much fun.

                                                              1. 2

                                                                I really wish vim were set up so different vim windows could be connected to the same vim ‘server’ like you can do with Emacs. It would mean one less layer of tiling window managers.

                                                                Even just different ‘client’ sessions with some really strict requirement like ‘always looking at a different tab’ would be fine with me.

                                                                1. 7

                                                                  I really wish vim were set up so different vim windows could be connected to the same vim ‘server’ like you can do with Emacs. It would mean one less layer of tiling window managers.

                                                                  Neovim intensifies

                                                                  1. 9

                                                                    :) that link is actually the legacy Vim remote interface. But Neovim is indeed working on Emacs-like frame capability, which requires a few different components:

                                                                    1. client-server capability: multiple UIs to connect
                                                                    • Nvim supports this since ~2015, but the same layout is shown on all clients
                                                                    1. “multigrid” feature: logical separation of layouts internally (no, Vim didn’t have this: instead it sprinkles calls carefully across the codebase to build a unstructured cell map)
                                                                    • Nvim 0.4.3+
                                                                    1. “tabgrid” feature: allows connecting to different tabpages from each client, so clients can see different layouts of the same server.

                                                                    By the way, even Emacs does not have Nvim’s decoupled UI architecture. Emacs renders a TUI server-side and sends it to dumb clients. Whereas Nvim sends structured data to clients which then decide how to render it.

                                                            1. 2

                                                              Advocacy doesn’t work.

                                                              Consumers have access to very advanced technology–which started as something difficult to use, and was later refined–but it sounds like they aren’t using the technology that the author wants them to use, which is different than the grand proclamation of the article’s title.

                                                              1. 3

                                                                Yes, "$@" is the only thing I use and it’s a confusing syntax. Because "" usually means “don’t split” or “give me one string”, but "$@" gives you multiple strings, in contrast to “$*”. (And the other two possibilities are even more confusing.)

                                                                It generalizes to arrays – you should use "${array[@]}" and not "${array[*]}". I’ve never found any reason to use the latter or any other variant:

                                                                See Thirteen Incorrect Ways and Two Awkward Ways to Use Arrays

                                                                In Oil, you can just write @myarray instead of "${myarray[@]}". And @ARGV is an alias for "$@". Let me know if it doesn’t make sense :)

                                                                oil$ var myarray = @('has spaces' foo)
                                                                oil$ var s = $'has\ttabs'
                                                                
                                                                oil$ echo $s
                                                                has     tabs
                                                                
                                                                oil$ lines() { for x in @ARGV; do echo $x; done }
                                                                
                                                                oil$ lines @myarray $s
                                                                has spaces
                                                                foo
                                                                has     tabs
                                                                
                                                                1. 1

                                                                  not “${array[*]}”. I’ve never found any reason to use the latter

                                                                  In Neovim we’re using it to:

                                                                  shellcheck doesn’t complain about this, but maybe there’s a better way? :)

                                                                  1. 3

                                                                    So the hilarious thing is that POSIX shell rules are even more complicated than what I laid out in that post. I’ve been meaning to write a followup Shell Has Context-Sensitive Evaluation to explain this.

                                                                    But it’s buried here under the bit about EvalWordToString and EvalWordSequence:

                                                                    https://github.com/oilshell/oil/wiki/Shell-WTFs

                                                                    So you can simply use "${array[@]}" in all those cases because it’s on the RHS of an assignment. But yeah if you want to use * for “clarity”, I won’t argue. It’s a matter of style. Shell syntax has nothing to do with its semantics :)

                                                                    $ a=('has spaces' foo)
                                                                    $ argv "${a[@]}"
                                                                    ['has spaces', 'foo']
                                                                    
                                                                    $ s1="${a[*]}"
                                                                    $ s2="${a[@]}"
                                                                    
                                                                    
                                                                    $ argv "$s1"
                                                                    ['has spaces foo']
                                                                    $ argv "$s2"
                                                                    ['has spaces foo']
                                                                    
                                                                1. 5

                                                                  I’m a bit confused, if it improved enabling SACK on the sender, wasn’t the issue on the sender side? What am i missing?

                                                                  1. 5

                                                                    The underlying issue was that Amazon’s private network was triggering lots of out-of-order packets whereas the public internet link was not. Private needed SACK, public did not.

                                                                    1. 3

                                                                      I wondered that as well. Two comments on the article mention BGP path selection.

                                                                      Out-of-order packets on redundant interconnects are unfortunately very common due to multipath caused by ECMP-based routing. Were on-prem routing tables checked for equal cost paths?

                                                                      … multipath splitting traffic across interconnects with mismatched latency. I see it with my customers frequently (10Gbps interconnect at <50Mbps)

                                                                      … check your BGP path MED on both sides of your links for traffic splitting. If you failover to one link, and the issue resolves, you have your culprit.

                                                                    1. 31

                                                                      Modern cars work … at 98% of what’s physically possible with the current engine design.

                                                                      Ignoring the fact that ICEs are thermodynamically constrained to something closer to 20% efficiency, “current engine design” is quite an escape-hatch. Computer software and hardware designs, similarly, are subject to “current designs”, and there’s no reason to think that SWEs are somehow less inclined to improve designs than mechanical engineers.

                                                                      Only in software, it’s fine if a program runs at 1% or even 0.01% of the possible performance

                                                                      There is no objective “possible performance” metric. There’s only “current implementation” vs “potential improvements gained by human attention”.

                                                                      Everything is unbearably slow

                                                                      No. kitty is fast. ripgrep (and old grep…) is fast. Mature projects like Vim and Emacs are getting faster. JITs and optimizing compilers produce faster code than ever. Codecs, DSP are faster than ever.

                                                                      Yes, tons of new software is also being created and power law effects guarantee that most of it will be low-effort and unoptimized. The fact that you can scoop your hand into an infinite stream and find particulates, means nothing.

                                                                      Text editors! What can be simpler? On each keystroke, all you have to do is update a tiny rectangular region

                                                                      If that’s all you expect from a text editor then your computer can do it very quickly. But you chose to use a text editor that does much more than that per keystroke.

                                                                      Build systems are inherently unreliable and periodically require full clean, even though all info for invalidation is there

                                                                      “All info” is not there. Most builds have implicit state created by shell scripts, filesystem assumptions, etc. That’s why conforming to bazel or NixOS is painful (but those projects are examples of people working to improve the situation).

                                                                      Machine learning and “AI” moved software to guessing in the times when most computers are not even reliable enough in the first place.

                                                                      :)

                                                                      Spin another AWS instance. … Write a watchdog that will restart your broken app … That is not engineering. That’s just lazy programming

                                                                      That’s how RAM ECC works, that’s how MOSFET works. Failure is an inherent property of any physical system.

                                                                      I want state-of-the-art in software engineering to improve, … I don’t want to reinvent the same stuff over and over

                                                                      I agree with that. Clojure and urbit are efforts in that direction. Taking code-reuse and backwards-compatibility seriously, allows us to build instead of repeat.

                                                                      But dispense with the nostalgia for DOS and the good old days. CompSci artists ignore cost/benefit. Engineers consider economics (cost/benefit, not just “money”, all costs).

                                                                      The bulk of new activity in any vigorous market will be mostly trash, but the margins yield fruit. High-quality software is being built at the margins. The disposable trash is harmless, and serves a purpose, and will be flushed out as users adjust their relative priorities.

                                                                      1. 4

                                                                        Mature projects like Vim and Emacs are getting faster.

                                                                        Ignoring the fact that older software had to be optimized in order to run on older computers, a bit of this is survivorship bias. People don’t use the old bad programs anymore or they got fixed.

                                                                        Older software crashed a lot and it corrupted your documents. Today, even if it crashes you probably won’t lose anything. To an extent, this is the result of consciously trading performance for correctness.

                                                                        1. 1

                                                                          Ignoring the fact that older software had to be optimized in order to run on older computers,

                                                                          You’re making assumptions. Emacs and especially Vim have many unoptimized components. Vimscript, the core language of Vim, doesn’t even produce an AST, it re-parses every source line over and over (including while-loops/for-loops). Only recently has this got attention. Fixing it takes human time, and now the human time is being spent on it because relative priorities arrived there.

                                                                          survivorship bias. People don’t use the old bad programs anymore or they got fixed.

                                                                          The converse is that every program that touches a computer should be optimized before it reaches a user. That makes no sense.

                                                                          1. 1

                                                                            You’re making assumptions.

                                                                            No! You! :)

                                                                            I didn’t mean to imply that they are perfectly optimized. I meant that they had to perform more optimization to run on older computers than modern software might have to make to run on newer computers.

                                                                            The converse is that every program that touches a computer should be optimized before it reaches a user. That makes no sense.

                                                                            I don’t think every program should be optimized. I don’t follow what you are saying here.

                                                                            1. 1

                                                                              I don’t think every program should be optimized.

                                                                              Then it does not make sense to discount good software as mere “survivors”. It is a contradiction. Good software takes time, bad software gets filtered out over time. In the interval, there will be bad software, but that is because more time is needed for good software to take its place.

                                                                              1. 1

                                                                                Good software takes time, bad software gets filtered out over time. In the interval, there will be bad software, but that is because more time is needed for good software to take its place.

                                                                                I agree. The comment about survivors is about how not every piece of software from an era is as good as the software from that era that we use today. I.e., the survivorship bias fallacy:

                                                                                https://en.m.wikipedia.org/wiki/Survivorship_bias

                                                                        2. 2

                                                                          Actually, measured by latency (which is almost certainly the benchmark you care about in a terminal emulator), kitty is moderately fast and extremely jittery, just like alacritty. Both Konsole and Qterminal perform substantially better every time I benchmark them, especially if you have a discrete GPU instead of integrated graphics.

                                                                          1. 1

                                                                            Fast software exists, that’s my point. You’ve provided more examples of fast software.

                                                                          2. 1

                                                                            So, I think you maybe be misinformed about the cars thing. ICEs and turbines can get between 37 and 50ish percent efficiency by theoretical maximum, and real-world engines get very close to that.

                                                                            This is important when you look at the claimed efficiency of computers: a modern multi GHz CPU should be capable of billions of operations a second, and for any given task it is pretty easy to to make a back-of-the-envelope calculation about how close to that theoretical ideal we are–that’s one of the ways efficiency in traditional engineering fields is calculated.

                                                                            We are seeing efficiencies of tens of orders of magnitude smaller than seems reasonable. There are reasons for this, but the fact is inescapable that anybody saying “we really use computers inefficiently” is not wrong.

                                                                            Also, on the restarting the app bit–it is one thing to use ECC to compensate for cosmic ray bit flips, or to mirror data across multiple hard drives in case one or two die, as a way of doing reliability engineering. It is something else entirely to, say, restart your Rails application every night (or hour…) because it leaks memory and you can’t be bothered to track down why.

                                                                            1. 3

                                                                              It is something else entirely…

                                                                              Is that ‘a difference in scale becomes a difference in kind’?

                                                                              They seem like the same kind of thing to me, just at very different points on the effort/value continuum.

                                                                              1. 2

                                                                                Statistical process control is a tool we can use to answer that.

                                                                                If the problem is predictable enough to count as routine variation inherent to the system, we should try to fix the system so it happens more rarely. (And I’d argue the memory leaks that force you to restart every hour belong to that category.)

                                                                                If the problem is unpredictable and comes from special causes, we cannot generally adjust the system to get rid of them. Any adjustments to the system due to special causes only serves to calibrate the system to an incorrect reference and increases the problem. (This is where I’d argue cosmic radiation belongs.)

                                                                                Another way of looking at it is through the expression that “you cannot inspect quality into a product”, meaning that continually observing the system state and rejecting the system when it goes out of bounds is a way to ensure only systems within limits are running, but it is very expensive compared to ensuring the system stays within bounds to begin with. It is only acceptable for cosmic rays because we can’t work the cosmic rays out of the system, so we are regrettably forced to rely on inspection in that case.

                                                                                1. 2

                                                                                  Memory errors are not unpredictable; for a given stick of ram, the rate of bit flips is not that hard to figure out (takes quite awhile to get good numbers for ECC sticks).

                                                                                  We adjust this by adding error correction codes.

                                                                                  RE memory leaks: a memory leak isn’t worth chasing if it’s not causing trouble. I have inherited an app that uses the “restart every hundred requests” strategy and I cannot fathom that ever being on my top ten problems. My users don’t care, and it isn’t expensive. I dislike the untidiness, and would probably fix it if it was a side project.

                                                                                  1. 1

                                                                                    Indeed. Volatile RAM is a horrible hack (continually refresh capacitors, waste power) compared to NVM. The cost calculation is clear there, so few complain about it. But the cost calculation of “human attention” is less clear to puritans who think that lack of Discipline and Virtue is what prevents a utopia of uniformly better software.

                                                                                2. 1

                                                                                  ICEs and turbines can get between 37 and 50ish percent efficiency by theoretical maximum, and real-world engines get very close to that.

                                                                                  I said “closer to 20% [than 98%]”. I didn’t bother to look up the actual number. 50 is closer to 20 than 98.

                                                                                  a modern multi GHz CPU should be capable of billions of operations a second, and for any given task it is pretty easy to to make a back-of-the-envelope calculation about how close to that theoretical ideal

                                                                                  • Why do you assume that the current hardware design is the theoretical ideal?
                                                                                  • CPU saturation as a performance metric assumes that the instructions are meaningful, not to mention TFA is concerned about an over-abundance of instructions in the first place.
                                                                                  1. 1

                                                                                    I said “closer to 20% [than 98%]”. I didn’t bother to look up the actual number. 50 is closer to 20 than 98.

                                                                                    I am not sure that you are interpreting those numbers correctly. There are two numbers: the ~37-50% efficiency allowed by physics, and the 98% efficiency in achieving that theoretical efficiency. The former is a measure of how good an ICE can ever be at accomplishing the goal of turning combustion into usable mechanical energy, the latter is a measure of how well-engineered our engines are in attaining that ideal–only the latter we have any control over.

                                                                                    Why do you assume that the current hardware design is the theoretical ideal?

                                                                                    There may well be a more efficient means of computation out there! In the mean time, it seems reasonable to look at the theoretical max performance of real silicon we have on hand today.

                                                                                    1. 0

                                                                                      There are two numbers: the ~37-50% efficiency allowed by physics, and the 98% efficiency in achieving that theoretical efficiency.

                                                                                      That’s why I said “Ignoring…”. Also mentioning “thermodynamic limit” is a pretty clear signal that I’m aware of the difference between physical limits and engineering tradeoffs. OTOH combustion itself is a design choice, and that is a hint that the distinction isn’t so obvious.

                                                                                      You chose to comic-book-guy that part of the comment instead of focusing on the part that didn’t start with “Ignoring”.

                                                                              1. 4

                                                                                metacomment: Fascinating to see lobsters taken over by people who are fully homo economicus, and equate good software with business value.

                                                                                The answer is really to be looking to create legal liabilities for defective software. If the software doesn’t perform to spec, lawsuits civil and up to criminal should be applied. Otherwise you’re in a barely controlled race to the bottom for commodity goods.

                                                                                1. 2

                                                                                  As a first-order analysis tool when examining human behavior,the homo economicus view is generally very helpful. Care must be taken to see it as descriptive, not prescriptive.

                                                                                  create legal liabilities for defective software.

                                                                                  Another approach to creating better quality software would be to enforce a professional standard on software developers (akin to lawyers, MDs, and engineers in some jurisdictions). It’s quite possible that enforcing legal sanctions would quickly lead to such a situation.

                                                                                  In both cases, it would be more expensive and time consuming to develop software.

                                                                                  1. 1

                                                                                    In both cases, it would be more expensive and time consuming to develop software.

                                                                                    Given that software is so intertwined with our lives, I think not being able to deliver ultra-cheap junk to users is perfectly fine.

                                                                                  2. 1

                                                                                    create legal liabilities for defective software

                                                                                    How authoritarian.

                                                                                    1. 1

                                                                                      much like legal liabilities for engineering, yes, definitely. /sarcasm

                                                                                  1. 6

                                                                                    I can’t pass algorithms interviews!

                                                                                    Impressive humility, and really encouraging to hear from someone as capable as Dan.

                                                                                    But anyways…

                                                                                    The problem with criticisms about whiteboard/algorithms is that the alternative isn’t clear. Compare most other industries and you’ll find something much more arbitrary, nepotistic, and gatekept.

                                                                                    It is amazing that the software industry is willing to consider candidates based on portfolios and (crudely) demonstrated abilities, who didn’t go to MIT or perhaps any university. That’s amazing and unique. So I’m quite skeptical of the loudmouths that declare whiteboard interviews to be invalid.

                                                                                    And by the way, as always–especially in the current market where software developers are in high demand–any org that finds a better approach to interviewing (lower false-positive + false-negative) will have a massive advantage. CTOs and hiring managers are desperate to find a better approach.

                                                                                    Perhaps companies would be more willing to take hiring risks (and thus lower the bar to entry) if firing people were not so risky. I should probably not say such things in public though.

                                                                                    P.S.: If you’re not using Python for interviews, you’re not using the right tool for the job ;)

                                                                                    1. 1

                                                                                      Python: Pseudocode you can run.

                                                                                      1. 1

                                                                                        Firstly whiteboards tell almost nothing about a candidate’s ability to write software (for most software jobs). The alternative could be something like writing some software examples. If your job was writing algorithms on a whiteboard then sure I think it’s a fantastic test.

                                                                                        It’s not amazing, there’s frequently a shortage of labor.

                                                                                        They will have an advantage until they are bought by a much more wealthy corporation, and then that advantage will be tossed aside for the sake of risk aversion.

                                                                                        Firing people isn’t particularly risky where I live. It doesn’t magically fix the problem of risk aversion in large businesses and cargo culting of this behavior by small business. Sure ones that do realize that it’s bad for business end up with a huge advantage, but then they get bought. The advantage is immediately scrapped. This happened at my wife’s workplace the other year.

                                                                                        1. 2

                                                                                          whiteboards tell almost nothing about a candidate’s ability to write software

                                                                                          Doing well on a good whiteboard test is fairly good evidence for cognitive capabilities which are essential to effective software development, so I would say they do tell you something valuable, some of the time. The problem is that lots of people have those capabilities, but don’t have the emotional or attentional skills to express them in a high-pressure, social context like a whiteboard interview. So on their own, such tests reject a lot of people. But for an organization which gets a lot of applicants like google, that’s probably ok. For most of the people copying therm, it’s probably detrimental.

                                                                                          1. 1

                                                                                            Yeah it’s one of those, it tells you something if they pass it, it tells you nothing if they fail it. Worse, it discourages candidates. I personally will turn down any job offer that has a whiteboard test. It’s a luxury of course that not everyone has the opportunity to make but for me its indicative of a business that won’t be successful and will be onerous when it does not need to be.

                                                                                          2. 1

                                                                                            It doesn’t magically fix the problem of risk aversion in large businesses and cargo culting of this behavior by small business.

                                                                                            It doesn’t need to be magic, it just needs to improve incentives (or rather remove artificial, arbitrary chilling effects), which it does. It’s not realistic to expect a straight line from cause to effect in a complex dynamic system. Inertia of megacorps is always a factor, but we can see that disruptions do occur and cultures change over time.

                                                                                            Microsoft was supposedly “invincible” in the 90s yet it was disrupted and later adapted. That’s a good thing. Megacorps that adapt, by definition, are responding to new information in order to survive/thrive, which has similar benefits as if they were replaced.

                                                                                        1. 22

                                                                                          Bram’s benchmarks are not using LuaJit. So when he mentions my benchmarks (on the mailing list at least) and presents the Vimscript2 vs Lua benchmarks, this is confusing. LuaJit is 10x faster.

                                                                                          The Vim9 benchmarks are always structured as function definitions, because the Vimscript2 optimizer won’t work at script scope (i.e. outside of a function). And it sounds like “lambdas” will continue to be slow.

                                                                                          The main disappointment for me is that existing Vimscript plugins won’t benefit from Vimscript2 optimizations, because Vimscript2 is a different language. If authors must rewrite plugins then I would prefer a well-engineered language (like Lua) instead of Bramscript.

                                                                                          Given how bigoted and petty people are about syntax, my grand prediction is that the unpaired } will be the most disliked feature of Bramscript.

                                                                                          1. 19

                                                                                            If authors must rewrite plugins then I would prefer a well-engineered language (like Lua) instead of Bramscript.

                                                                                            You know, Lisp would be a good choice for a well-engineered choice to extend an editor …

                                                                                            1. 4

                                                                                              Given how bigoted and petty people are about syntax, my grand prediction is that the unpaired } will be the most disliked feature of Bramscript.

                                                                                              I remember people mocking it in Zimbu, so you’re right on the money.

                                                                                              1. 3

                                                                                                Out of interest - is Lua interpreter of VimL still in the making or it is paused indefinitely? That would be interesting thing to see in the future.

                                                                                                But I agree, if there is plan to replace VimL with another implementation then it would be the best to either use WASM and compile any language to it or to use LuaJIT/V8 instead.

                                                                                                1. 8

                                                                                                  Somewhat counter-intuitively, to make Lua the more popular/standard choice, it could be a good idea to make a translator from Lua to VimScript2, and then proceed to not support VimScript2 in NeoVim. This way, for plugin developers who want to support both Vim9 and NeoVim, Lua would be the reasonable “cross-platform” choice, automatically giving their plugins wider adoption with no extra effort required.

                                                                                                  I remember reading an article long ago which explained how this exact dynamic worked for some technology, but can’t surface any specific details from my memory. I kinda think it was maybe about Sun and Java, but not sure. I think it might possibly be called something like “platformization of a technology” by business people, but also not 100% sure about it. Basically, the idea is to force one’s competitor to become “just” exchangeable infrastructure. Ok, I think I remember now, and the article’s thesis about the Sun story was, that by making Java free, they wanted to make their hardware more popular, but instead they painted themselves into a corner of being “just an exchangeable platform/infrastructure for running Java”, where they were squashed by others.

                                                                                                  1. 6

                                                                                                    This idea also comes up when talking about the python 2 to 3 transition. If, instead of releasing a 2to3 tool, they had released a 3to2 tool, folks might have focused on developing for 3 earlier.

                                                                                                    1. 3

                                                                                                      The biggest problem with Python 2 ↔️ 3 thing is that it’s virtually impossible to reliable translate code due to the nature of the changes in Python 3 and Python’s lack of typing info. Functions that previously returned/accepted str now return bytes, and it’s very hard to reliably detect 100% of all cases in Python.

                                                                                                      1. 1

                                                                                                        You’re right, and that’s part of why they started using mypy for everything at dropbox– to catch edge cases when transitioning.

                                                                                                    2. 5

                                                                                                      you’re thinking of spolsky’s commoditize your complements

                                                                                                      1. 1

                                                                                                        So it seems indeed, thanks!

                                                                                                    3. 6

                                                                                                      is Lua interpreter of VimL still in the making or it is paused indefinitely?

                                                                                                      Why continue it? The patch is there for anyone to try. It’s too slow according to its author (ZyX), who later used parts of that work to implement the VimL parser in C (see :help nvim_parse_expression() ).

                                                                                                      Once you have a parser it doesn’t really matter whether it was written in Lua or C. Problem is, Nvim currently only has a parser for VimL expressions–i.e. half of the language. ZyX later disappeared, perhaps driven mad or perhaps realizing that text editors are not a very good thing to spend one’s life on.

                                                                                                      1. 3

                                                                                                        Out of interest - is Lua interpreter of VimL still in the making or it is paused indefinitely? That would be interesting thing to see in the future.

                                                                                                        It’s paused.

                                                                                                      2. 3

                                                                                                        Considering that conversion tools from Python, JavaScript, and TypeScript are mentioned, I would expect that a VimScript → VimScript2 tool would also be included.

                                                                                                        1. 7

                                                                                                          Such a tool could target any language, and therefore doesn’t answer the question “why Bramscript instead of an established, well-engineered, existing language”.

                                                                                                          1. 2

                                                                                                            Converting from VimScript to VimScript2 is probably going to be easier than converting it to pretty much anything else. Note that those Python/JS tools aren’t necessarily expected to be complete (” Ideally a conversion tool can take Python, JavaScript or Typescript code and convert it to Vim script, with only some things that cannot be converted.”).

                                                                                                            Arguably, using VimScript is easier as you can use any ex commands without frobbing about. I think there is some value to that.

                                                                                                            I believe Bram previously stated he doesn’t like Lua much (can’t find ref for that right now), and just “plug and play” a programming language in Vim is probably not so easy; the only two mainstream(ish) easily pluggable languages I can think of are Lua and Tcl.

                                                                                                            But perhaps most importantly, I think Bram just likes working on this kind of stuff; he said so pretty explicitly actually: “Yes, it’s going to be a lot of work. But it’s the kind of work I enjoy doing”.

                                                                                                            1. 4

                                                                                                              But perhaps most importantly, I think Bram just likes working on this kind of stuff; he said so pretty explicitly actually: “Yes, it’s going to be a lot of work. But it’s the kind of work I enjoy doing”.

                                                                                                              Creating language is fun, maintaining it - not so much.

                                                                                                              1. 1

                                                                                                                Bram has been doing this for a while… I think he’s perfectly capable to judge and decide what he finds “fun” or not.

                                                                                                                1. 2

                                                                                                                  Still, I find having “fun” while creating language isn’t the main problem. The main problem is that others need then to deal with your language. And using another, established, and maintained by someone else, language in general is much easier. This would also provide access to broader amount of optimisations, implementations, libraries, etc. Ok it is nice that someone wants to create language, but IMHO Bram isn’t the best language designer out there. I would be much more happy if he would rather decide to go with something that is already there, and there is a lot of languages/technologies to pick:

                                                                                                                  • Lua
                                                                                                                  • many embeddable Lisps
                                                                                                                  • MRuby
                                                                                                                  • JavaScript

                                                                                                                  Or even ignore all of that and go with WASM so the language in which the extension is written doesn’t matter at all. The last thing I think would be the best option IMHO in current state, as even current VimL interpreter could be compiled as a WASM blob instead of being “built in” into editor itself. This would provide us a lot of flexibility and potential speedups by using well-established VMs.

                                                                                                                  1. 1

                                                                                                                    having “fun” while creating language isn’t the main problem. The main problem is that others need then to deal with your language

                                                                                                                    So don’t use Vim then, if you don’t want to do that. You don’t “need” to deal with this language; there are plenty of options.

                                                                                                                    Aside from the technical arguments (which I don’t really care about, as I think it doesn’t really matter much), I find this kind of reasoning weird.

                                                                                                                    1. 2

                                                                                                                      Oh yeah, the ultimate argument - if you do not like part of X then GTFO. The “you do not like your government - go live somewhere else” argument. So instead of making things we like, we get attached to, we should abandon them instead of trying making them better. That is marvellous idea, that I completely ignore and treat as a lowest point of reasoning. I like Vim, I like using it, I like some ideas behind it, and I want it to be better and better. Partially that is why I have switched to NeoVim now, because I seen it as an advancement over stagnated Vim development in pre-8.0 version.

                                                                                                                      Aside from the technical arguments (which I don’t really care about, as I think it doesn’t really matter much)

                                                                                                                      Technical arguments are THE arguments, anything else doesn’t matter. Unfortunately, for me, Bram has very high NIH syndrome which I think that we all can agree that this is bad thing. “Making new things” because it seems “easy and fun” rarely is a good thing. There is a lot of work already done in matter of the performance, usefulness, libraries, and all the stuff around it, and ditching them just because? Does the Bram knows better? Is he some kind of the god that can do everything better than others? I highly doubt so. Nanos gigantum humeris insidentes is thing we should do, and reducing internal complexity of Vim is IMHO good thing. See how much of completely dead code (that could never end in Vim as the flags were excluding themselves) were removed by NeoVim.

                                                                                                                      Just in case, I do not say that NeoVim is better than Vim, but for sure it make Vim advance faster since it became a thing. I like that both projects make advance the Vi-like editing, sometimes in way I like, sometimes in way I have doubts, but still, if you do not evolve, you are doomed.

                                                                                                                      1. 2

                                                                                                                        Does releasing something on the internet and having people use it automatically mean you have a responsibility to listen to “users” who feel they know better than you what to work on or how to fix problems?

                                                                                                                        The problem with a lot of the discussion here is that there is nothing wrong with chiming in (“hey, I think solution X might be better for reasons Y and Z”), but there is a sense that something should be done different. And that is a rather entitled and toxic attitude.

                                                                                                                        Imagine someone coming on your issue tracker and saying “hey, you should do X, because NIH”, and you reply that you don’t like X, and then this person would persist in telling me that I really should use X. I don’t know what your response would be, but mine would be to tell that person to get lost rather quickly. If my project is useful to you: great! And I’ll gladly accept suggestions, but telling me what I should do? Yeah nah, that’s crossing a line.

                                                                                                                        I don’t see how Vim is any different from my small personal project.

                                                                                                                        NIH syndrome which I think that we all can agree that this is bad thing.

                                                                                                                        No, I don’t agree. Vim is Bram’s project. He works on it for fun. He likes inventing languages for fun. So he invents a language.

                                                                                                              2. 0

                                                                                                                But perhaps most importantly, I think Bram just likes working on this kind of stuff; he said so pretty explicitly actually: “Yes, it’s going to be a lot of work. But it’s the kind of work I enjoy doing”.

                                                                                                                That only thing that troubles me about your conclusion, is the delicacy with which you reached it :) That is, it is obvious to anyone watching the vim_dev mailing list and studying Vim’s architecture, that most decisions are driven by NIH fetish.

                                                                                                                1. 2

                                                                                                                  So? It’s Bram’s project; he works on it for fun, he works on the kind of things he finds fun.

                                                                                                                  1. 1

                                                                                                                    Pretty sure that’s not the tagline on vim.org, nor in the help files, nor does Bram himself raise such an invincible retort against criticism. But it’s a comfortable reductionist hole for ending discussions.

                                                                                                        1. 7

                                                                                                          Hype aside, I’ve gone looking through Java and C# frontends a few times as a serious alternative to TypeScript.

                                                                                                          TypeScript is a huge improvement on JavaScript for web apps. But lacking runtime types (e.g. for safety and pattern matching) is such a pain. Even as a big ML guy, none of the Haskell/Elm/Reason/BuckleScript/Scala.js options are seriously something I’d consider introducing at work.

                                                                                                          I am looking forward to the next generation of mainstream typed frontends after TypeScript. I’d consider Blazor or even GWT/J2CL next time around. But my guess is that it the next generation mainstream frontend will be something else completely.

                                                                                                          1. 2

                                                                                                            If you don’t mind losing async/await functionality, check out Haxe compilation to JavaScript… Is able to check if something implements an interface on runtime, for example.

                                                                                                            I would be all-in with it, but the lack of async/await is a bit painful. I don’t want to get back to the callback hell, or chain promises in obscure ways.

                                                                                                            1. 1

                                                                                                              typescript can be used as an extremely strict language with compiler options (like no implicit any, strict null checks, and probably some more). I know this isn’t the default so its hard to introduce into existing codebases but honestly the only downside to typescript is that it doesn’t expand on features like pattern matching and it doesn’t have proper tuples, but the type aspect of it is probably the most powerful of any mainstream language I’ve seen - see type operators like conditional types, mapped types, keyof operator, etc.

                                                                                                              1. 1

                                                                                                                Did you consider clojurescript?

                                                                                                                1. 2

                                                                                                                  While I’ve seen more companies using Clojure(script) or Scala(.js) they are both on the same list of languages I don’t think will ever be mainstream enough for me to feel comfortable introducing for a long-term project at work.

                                                                                                                  Edit: also, Clojure is as bad as JavaScript (give or take macros and limited pattern matching). If I wanted a dynamic language without type safety I’d stick with JavaScript. I like JavaScript a lot. I just want something safer at work.

                                                                                                                2. 1

                                                                                                                  You probably weren’t looking for swathes of suggestions as replies but I enjoyed Ocsigen (OCaml) several years ago and it looks like it’s still going strong. Eliom is an extension of OCaml that basically does what Blazor does.

                                                                                                                1. 12

                                                                                                                  weak men … already know you won’t find time to watch it

                                                                                                                  My stopwatch estimates I spent a minute and thirty-eight seconds reading this blog post. one sixtieth of the time, roughly, of Blow’s talk. My time and my attention are far more valuable than Yet Another Frigging Talk/Podcast. Fortunately, OP implicitly recognized this and wrote text, the appropriate medium for serious thinking and concepts.

                                                                                                                  That said.

                                                                                                                  Software is a house of cards because our economic system does not reward or prize proper reinvention, and American consumers reject, with passion, (remember Windows 8’s rollout?) substantial change in how their world works, demonstrating a lived conservativism for how their tools work.

                                                                                                                  The entire stack is built on these notions of backwards compatibility teetering on adhoc processors and systems from the 70s. Then the Web is rolled in, and now we’re building on a language designed in 2 weeks, just to make the monkey dance.

                                                                                                                  Yet, it makes money, reliability is tolerable, and profits continue flowing.

                                                                                                                  To really fix the situation, you’re looking at scrapping (in the end), everything from the x86 interface on up, and butchering so many sacred cows it’d be a revolution in the religion of software dogma. Costs for the end consumer & businesses would, in the medium term, probably rise 10-50x, since no more commodity would exist for the system.

                                                                                                                  1. 8

                                                                                                                    our economic system does not reward or prize proper reinvention … Costs for the end consumer & businesses would, in the medium term, probably rise 10-50x, since no more commodity would exist for the system.

                                                                                                                    Not such a rousing case for “proper”. As always, when people look at legacy, they see the ugly surface and ignore the deep value below the surface.

                                                                                                                    Certainly the pile of hacks is nasty and I don’t like it, but to wag one’s finger about “proper” ways and claim that a working system is a failure of economics(?), makes no sense.

                                                                                                                    butchering so many sacred cows

                                                                                                                    Legacy is the opposite of a sacred cow, it actually provides value, and is detested rather than worshipped. The Proper Way is the sacred cow, a false ephemeral idol that yields vaporware and lofty claims.

                                                                                                                    By the way, proper engineering considers real-world constraints including time/financial budget, effort vs payoff (leverage), and, yes, existing investments.

                                                                                                                    Meanwhile https://urbit.org has actually done what you suggest: reimplement the entire stack. Have you tried it? Or too busy on the legacy stack? :)

                                                                                                                    1. 0

                                                                                                                      I’m familiar with the dark enlightenment’s creation, thanks.

                                                                                                                      The Proper Way is the sacred cow, a false ephemeral idol that yields vaporware and lofty claims.

                                                                                                                      oh, go away.

                                                                                                                      ed: That is demonstrably false; a genuine false centrism that propagates terrible ideas and prioritizes legacy in the name of value. I simply refuse to engage with that kind of ahistoricity and bad philosophy of science.

                                                                                                                      1. 3

                                                                                                                        prioritizes legacy in the name of value.

                                                                                                                        If value isn’t a worthwhile goal, you may excuse the passers-by on your street corner for being confused about your meaning.

                                                                                                                  1. 15

                                                                                                                    I’m having a hard time seeing how it threatens most consultants. It seems like it’s intended to crack down on those “consultants” who solely function as employees of a single company.

                                                                                                                    For people who are really doing consulting as a business and want the ability to have more than one client, by my read of the article there’s an easy out: set up an LLC, LLP or S-Corp. That’s cheap and easy and a very good idea (for more than just moving yourself outside the purview of this law) if you’re serious about being in the consulting business.

                                                                                                                    Am I missing some way this law threatens people who aren’t just using “independent contractor” as a loop hole to avoid an employment relationship and all the obligations that carries?

                                                                                                                    1. 6

                                                                                                                      This sounds much like the German law on Scheinselbstständigkeit (“fake independence”), but 2 loopholes closed in. The reason for that law to be passed was that companies happily circumvented all labor laws by putting people on contract: no obligations to pay them holidays, leave, social security, the ability to fire them easily. At the same time, they expected performance of a workforce: be there at 9, sit at your allocated desk, work 40 hours. Many even were confused when such a person suddenly started working for a different client. And that’s just IT. Making every package deliverer a contractor was quite common.

                                                                                                                      The “fix” for the first wave of legislation was to encourage people to form a limited company, which lead to the law getting stricter: this does not protect you anymore. There’s other loopholes, like working through a company that is in itself a shell for multiple people. This now requires registration (it’s literally called “employee lending”) - it is (sometimes) checked if your employee is actually under your command as a business owner. (Indications: who do they ask for leave days? You or your client?)

                                                                                                                      The huge problem of this is that businesses regularly skirt the rules, which makes the rules become stricter and stricter. Other companies have to shield themselves against being hit by such a restriction - people who end up proving that they are actually employees will be able to sue themselves into your company. And by such encouraging other people employed at the same time to do the same, easily costing you millions in social security (for the last few years).

                                                                                                                      We have weird situations like explicit “contractor desks” without markings to make clear that you are definitely not part of the workforce. Other companies have started to create “bridgeheads” where only some people are allowed to give contractors tasks and isolate them.

                                                                                                                      It’s an absurd situation, but in a weird way, I can’t hold it against the state: every loophole has been so aggressively used that something had to be done. Now we are now in a situation where the lawyers rule. And lawyers are damn conservative when it’s not clear where the boundary will move next.

                                                                                                                      1. 1

                                                                                                                        It’s an absurd situation, but in a weird way, I can’t hold it against the state: every loophole has been so aggressively used that something had to be done.

                                                                                                                        No, something doesn’t have to be done. But everyone always assumes that, so we get more and more laws which require more enforcement, more inspections, more friction, and less opportunity.

                                                                                                                        1. 3

                                                                                                                          No, something doesn’t have to be done.

                                                                                                                          Let me rephrase this, then.

                                                                                                                          If we want labor laws to remain relevant, then something has to be done. If you’re fine with de-facto employees working less than minimum wage with no benefits and no employee protections, then nothing needed done.

                                                                                                                          1. 2

                                                                                                                            We could either go for a completely different system (with different rules), but boundary skirting situations will always lead to those effects, independent of the boundaries.

                                                                                                                        2. 7

                                                                                                                          I feel like everybody pushing back against this is shilling for big business.

                                                                                                                          1. 4

                                                                                                                            My consulting business certainly fits the eight required criteria, including having more than one customer, an LLC, etc.

                                                                                                                            However this just adds additional risks that my customers may not want to deal with anymore. For example it may be easier to stop all consulting until things get sorted out.

                                                                                                                            1. 6

                                                                                                                              I think the original point of the law is to protect Uber drivers and similar gig economy people who are “exploited” by big business.

                                                                                                                              Lots of industries got exceptions added to the law so that their contractors wouldn’t be affected like medical doctors and hairdressers.

                                                                                                                              No one spoke up for software freelancers, so no exception for them.

                                                                                                                              Should be interesting have the unexpected effects work themselves through the system.

                                                                                                                              1. 2

                                                                                                                                No one spoke up for software freelancers, so no exception for them.

                                                                                                                                Not surprising, given our level of organisation/representation structurs.

                                                                                                                                1. 2

                                                                                                                                  Yeah this law was a bad idea, driven by hate of the Uber/Lyft business model (which I think is in turn driven by an ideological dislike of people having additional transportation options besides public transit). If “lots of industries” gain exceptions to the law because someone thought to lobby for that industry specifically, and other industries are getting screwed by the law because they happened not to have the right connections to get themsleves written an exception (I’ve seen freelance journalists and writers complain about this law in exactly the same terms as this article), then why was it a good idea for Uber/Lyft drivers in the first place?

                                                                                                                                2. 4

                                                                                                                                  I was not thinking of customers who’d be so irrationally risk-averse that they’d even stop using consultants who were obviously OK.

                                                                                                                                  The way I’m reading the news, it’d be a little surprising if there’s even a whiff of enforcement against anyone who’s not using 1099s in a few specific anti-patterns, so I hope your business does not suffer.

                                                                                                                                  I don’t expect this to make either of my CA-based customers change their practices at all.

                                                                                                                                  1. 3

                                                                                                                                    It’s actually not as surprising as you make it seem. Most big companies don’t hire independent contractors directly probably for very similar reasons; the consultant then has to go through one of the approved vendors of the big corp to be hired as a sub-contractor, which often eliminates the main benefits of being an independent contractor in the first place — much higher hourly rate (wouldn’t necessarily be possible anymore if a third party has to get their cut, too, plus all the potential liabilities for the employer to support unemployment benefits), the ability to deduct your own office space and equipment, being able to be hired and fired on a very short notice etc.

                                                                                                                                    1. 1

                                                                                                                                      Most big companies don’t hire independent contractors directly probably for very similar reasons; the consultant then has to go through one of the approved vendors of the big corp to be hired as a sub-contractor,

                                                                                                                                      While I can’t speak to “most”, that does not align with my experience. The ones I’ve dealt with (fortune 50/USG scale) have either been able to contract directly with us or direct a prime to contract with us on their behalf in a way that preserves the benefits you mention.

                                                                                                                                      The thing that would surprise me would be if the authorities in CA enforce this new law against anyone who’s not using 1099s in one or more of a few crappy ways. My gut is that any CA corporation who’s hiring subs from a company with any kind of customary structure will be completely outside the scope of what the CA government is going for with this law.

                                                                                                                              1. 3

                                                                                                                                The number of applications that do even the minimal safety-net of “create new file, rename it atomically over an old one” is basically zero

                                                                                                                                Vim (and Nvim, and probably Emacs) does that at least :)

                                                                                                                                And if we have a Linux-specific magic system call or sync action, it’s going to be even more rarely used than fsync().

                                                                                                                                Not to mention the BSDs all have their own completely different APIs. This is why libraries like libuv are really valuable. Yet many C projects blithely assume that POSIX and ISO and vt100 happy-land is all they need to think about.

                                                                                                                                Do you think anybody really uses the OS X FSYNC_FULL ioctl?

                                                                                                                                libuv does: https://github.com/libuv/libuv/commit/5b0e1d75a207bb1c662f4495c0d8ba1e81a5bb7d

                                                                                                                                But anyways, I agree with the general sentiment:

                                                                                                                                So rather than come up with new barriers that nobody will use, filesystem people should aim to make “badly written” code “just work”

                                                                                                                                Databases have done a good job of hiding the unreliability of the underlying systems. But having worked on embedded systems and a text editor, my impression is firmly that OSes aren’t the cathedrals I had once assumed they were. Incidentally that’s (one reason) why I’m pretty certain that urbit or something like it makes sense.

                                                                                                                                1. 2

                                                                                                                                  This is nice. But it’s still more setup than needed. Instead I just .gitignore everything and force-add the things I want to add.

                                                                                                                                  Starting from zero:

                                                                                                                                  cd ~/
                                                                                                                                  git init .
                                                                                                                                  echo '*' > .gitignore
                                                                                                                                  

                                                                                                                                  To add a file, use the “force” option:

                                                                                                                                  git add -f
                                                                                                                                  

                                                                                                                                  To setup a new computer:

                                                                                                                                  cd ~/
                                                                                                                                  git clone <git-repo-url> foo
                                                                                                                                  mv foo/.git .
                                                                                                                                  git reset --hard @
                                                                                                                                  

                                                                                                                                  That’s it. No idea why people insist on symlinks, install scripts, “gnu stow” and various other over-engineered things. Well, actually I have an idea of why people insist on over-engineered things ;)

                                                                                                                                  1. 4

                                                                                                                                    I did that for a while, but I find it really easy to accidentally mess stuff up badly by thinking you’re in a directory with a git repo but then you’re accidentally running against your ~/.git. That’s not an issue if everything is pushed to a server (unless what you accidentally ran included git push -f), but if there”s been a while since you pushed (or, god forbid, a while since you committed), it’s possible to lose quite a bit of work that way.

                                                                                                                                    Maybe one solution would be to use something like ~/.dotfiles-git instead of ~/.git and alias dotgit to git --git-dir=~/.dotfiles-git --work-tree=~ ? We’d have the same simplicity benefits, but just running regular git commands in the wrong dir wouldn’t have any effect (and IDEs and text editors which try to scan the git dir to be useful wouldn’t be as sad).

                                                                                                                                    1. 1

                                                                                                                                      I do pretty much the same, but with Mercurial. No need to run setup to shuffle symlinks, or have the repo outside ~ itself when I’m making changes, and where one might git clone to pull in other projects in a setup script, I do have a script can add them, but my config degrades gracefully without them. I can pull stuff in if I want to, and function fine without. I don’t think I’ve run into any trouble or surprises doing this, so I’m not sure what the advantages of other schemes might be.

                                                                                                                                      1. 0

                                                                                                                                        if you do this manually right now, check out https://github.com/tubbo/homer :)

                                                                                                                                        1. 1

                                                                                                                                          Are you joking? That’s an example of the very thing I want to avoid. The “manual” steps I describe above are not more complicated than the steps needed to install and use a “shell plugin” or other third-party tool.

                                                                                                                                          1. 0

                                                                                                                                            no, not joking…just trying to help. i did the above for years and got annoyed trying to remember the right commands to run. Homer does a few more things than just the home directory repo thing but that’s one of its big features.

                                                                                                                                            1. 4

                                                                                                                                              That makes sense if dotfiles is the only thing you use git for, or you’re in a situation where the only git commands you really need are git clone/add/commit/push. However, as I’ve gotten used to how git actually works through years of contributing to open source and working professionally with other people, what /u/jmk is suggesting doesn’t look like commands I would have to remember any more than how you have to remember that cd <directory> goes to a directory or tar czf foo.tgz foo makes a compressed tarball of foo.

                                                                                                                                      1. 5

                                                                                                                                        AF_UNIX is supported on Windows now too, and has some advantages over named pipes: https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/

                                                                                                                                        1. 6

                                                                                                                                          At the rate things are going, in 2024 Windows is just going to be a UI on top of the Linux kernel…

                                                                                                                                          1. 6

                                                                                                                                            You use unix or you spend 30 years reinventingreinventing unix, they say…

                                                                                                                                            1. 2

                                                                                                                                              I’ve speculated about that on lobste.rs before. To summarize a few thousand words of discussion: Windows supports legacy applications primarily via its elaborate kernel. A fully backwards compatible swap is out of the question.

                                                                                                                                              I think the recent-ish Windows Long Term Service Branch/Channel gives Microsoft a path to switch the consumer Windows kernel to Linux, and put the NT kernel into full on maintenance mode. But perhaps developing WSL on NT will always cost less than a full kernel swap? Hard to say.

                                                                                                                                              1. 2

                                                                                                                                                I think I’d be okay with that.

                                                                                                                                            1. 3

                                                                                                                                              The items in the “general” section should be caught by linters. But overall this is a good list because it’s terse, and thus usable. If it grows into a giant FAQ or guide then it will be ignored as usual :)

                                                                                                                                              Actually, this post should be in :help.

                                                                                                                                              More generally, I wish that @sjl accepted PRs or at least corrections for http://learnvimscriptthehardway.stevelosh.com/ , so that the community could continue to iterate on it. Instead of continuing the sprawl of random tutorials/guides/vim-101 blogs.

                                                                                                                                              1. 2

                                                                                                                                                If it grows into a giant FAQ or guide then it will be ignored as usual :)

                                                                                                                                                This post was inspired by Effective Go, which is exactly the sort of “giant guide” that you mention, but I still think it has value because it’s quite detailed and in-depth (you can almost learn most of Go from just this guide alone). I think both approaches have value; I opted for a more concise post because I’m lazy and wanted to actually finish this in 2019, and not 2023 or whatever because:

                                                                                                                                                $ ls -l ~/arp242.net/_drafts/*.markdown | wc -l
                                                                                                                                                233
                                                                                                                                                
                                                                                                                                                1. 1

                                                                                                                                                  This post was inspired by Effective Go, which is exactly the sort of “giant guide” that you mention

                                                                                                                                                  For long-form it would make more sense to iterate on http://learnvimscriptthehardway.stevelosh.com .

                                                                                                                                                  1. 1

                                                                                                                                                    Learn VimScript The Hard Way is great, and I regularly refer people to it, but it’s also written in a certain format that doesn’t work well for everyone. I don’t think it should be the only resource for all things VimScript related.

                                                                                                                                              1. 2

                                                                                                                                                This all can only happen because the web got used to monolithic all-inclusive, batteries-included browsers in the 90s.

                                                                                                                                                They need to be broken up in components, so that one could pick the bookmarks database, a caching solution, a VPN/proxy solution, a webclient/downloard (or choose to omit these components for certain use cases). Web- and content blocking could well be done in a proxy => no conflict of interest like in the current browsers oligopoly Translation could well be done in a proxy, Mozilla would not have leverage to interfere.

                                                                                                                                                I’ve lately gotten fed up with Mozilla mostly due to the imperative take on DoH.

                                                                                                                                                Maybe donate some money to the next browser guys?

                                                                                                                                                1. 8

                                                                                                                                                  What technologies are you envisioning as enabling an alternate universe where such components are composable in a useful way? Keeping in mind that not even operating systems have figured this out after 30 years: we barely have working shells.

                                                                                                                                                  1. 2

                                                                                                                                                    Sorry for the late answer, I’m offline in lots of waiting rooms at the moment.

                                                                                                                                                    I want to ask counter questions:

                                                                                                                                                    • Why are there only two major browsers left? Because “browser” is a huge all-inclusive behemoth. It need to be broken in smaller components (or modules or parts), making it more comprehensible, hackable, changeable, and rightsizesable.
                                                                                                                                                    • Why is hacking browsers so unattractive to many people? Because of the hard learning curve: even IF you managed to wrap your head around one browser and changed or extended its function, even then you archieved it only in one browser, changing N browsers is N-fold the amount of work.

                                                                                                                                                    Bookmarks IMO are one thing that does not belong to the application but to the user - it is HIS data. Why should a User have to implant N extensions in N browsers only to be able to export/import/move his bookmarks colletion?

                                                                                                                                                    Many users chose to rent something like del.icio.us or pinboard, just to have everything in one place.

                                                                                                                                                    If you were to extend a bookmark manager to possibly regularly ping the URLs, cache sites for offline use, go the zotero route, save HARs or WARs of bookmarked resources or just implement a way better search, you have to do so for each and every browser (and maybe buy even other platforms, because Safaris does not run on BSD or Linux, IE11 does not run on Linux…)

                                                                                                                                                    Same goes for caching, and cache cleaning. Why does it have to implemented in each and every browser, why does it have to be deleted in each and every browser? A “local disk cache server” could even store google fonts and all mayor frameworks and CDNs for offline use, blocking off requests to the originals and REFERER: leaks.

                                                                                                                                                    Same goes for browsing history - it’s the users history, not the users history in IE, not the users history in (Chrom(e|ium)|Opera), not the users history in FF. There should be ONE place to look it up and to delete it.

                                                                                                                                                    Same goes for adblocking, and adblocking rulesets.

                                                                                                                                                    It is alway a massive vendor-lock-in of a users data in a product.

                                                                                                                                                    For the interfaces I can only recommend reading Apollo program documentaries.They worked without fixed, predefined interfaces, but were flexible to change it if there was need to change. And it worked out for the project.

                                                                                                                                                    If for example you had your DOM (and react’s shadow DOM) in a headless browser, and your browser tab was only a “copy-of-DOM-renderer”, you could archive fantastic things:

                                                                                                                                                    • the DOM in the headless browser could run without adblocker, all of the dandruff fully loaded => all of the “pleeze switch off adblock for our domain” dialogs and blockings are gone. You would nevertheless not see any of it, because YOUR adblocker would run during copying the DOM to your renderer - you get the “improved” copy.
                                                                                                                                                    • during the same step you could also implement translating the text, as well as OCR on the “[EXIT]”- Button-GIFs and other texts in images.
                                                                                                                                                    • if you are really good in AI, your DOM-copying middleware could implement an “almost shopper”: automatically clicking on banners, browsing ads, adding things to shopping carts - and never buy them, but reload them every 10 min, the best corporate honey pot possible. Placing ads in the web would be prohibitively expensive for THEM if every browser would do so.
                                                                                                                                                    1. 1

                                                                                                                                                      Why are there only two major browsers left? Because “browser” is a huge all-inclusive behemoth. It need to be broken in smaller components

                                                                                                                                                      Sounds great, but it’s meaningless: everything would be better if everything were just magically better. What you are proposing will add engineering cost to an already complex endeavor, without adequate motivation.

                                                                                                                                                      My question was: what technologies and methods do you propose. Your “counter questions” only reframe the original premise.

                                                                                                                                                      Why is hacking browsers so unattractive to many people? Because of the hard learning curve

                                                                                                                                                      I’m certain that everyone wants their own projects to be well-architected so that humans can reason about them. Anything else is counterproductive, for all parties. There is zero doubt in my mind that everyone working on every software project wants the project to be simpler and better architected.

                                                                                                                                                      Typically that is defeated by the need to use existing/legacy work. For a radically different approach, see urbit which throws out everything and starts fresh.

                                                                                                                                                      If you were to extend a bookmark manager …

                                                                                                                                                      Why would you need a browser for that at all?

                                                                                                                                                      It is alway a massive vendor-lock-in of a users data in a product.

                                                                                                                                                      People should not use “lock in” to mean “inconvenient”. There is absolutely no lock-in if you have access to your data. “Lock in” refers to cases where you can’t get your data.

                                                                                                                                                      If for example you had your DOM (and react’s shadow DOM) in a headless browser, and your browser tab was only a “copy-of-DOM-renderer”, you could archive fantastic things:

                                                                                                                                                      Headless support exists and is actively improving, because it’s crucial for testing/automation/accessibility. Example: https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

                                                                                                                                                      The ad-blocker idea is interesting, but will be complicated regardless of the current “browser monopoly”.

                                                                                                                                                      It’s insane that we have pervasive open source in 2019, yet people find a way to call it a “monopoly” or “lock in” or other hyperbole. This is a better future than we could ever have hoped for in the 90s, when the fate of OSS was not so obvious.

                                                                                                                                                  2. 1

                                                                                                                                                    What do you envision the benefits being of having a separate bookmarks database (for example) as opposed to just making the browser’s built-in one more configurable somehow? I share @jmk’s concern that that kind of architecture would make everything a little bit slower, with 95% of users not getting any kind of benefit to offset that slowness.

                                                                                                                                                    I’m also not sure how you could do content blocking as well in a proxy as you can with something like uBlock Origin. That extension lets me block certain elements on certain pages, and it lets me whitelist content from cdn.com when it’s requested from example1.com but not when it’s requested from example2.com. Even if you were able to get all this kind of logic in a proxy, what would the UI look like for the user to configure it? I’m guessing you would want that UI to be in the browser, right?

                                                                                                                                                    1. 1

                                                                                                                                                      Sorry for the late answer, I’m offline in lots of waiting rooms at the moment. I gave my answers in the reply to jmk, please read there (and forgive spelling errors, I’m not used to write in bed).