1. 47

  2. 27

    I first learned programming when I was 13. My dad showed me visual basic and I was hooked. I got really excited until some experts told me VB wasn’t “real” programming and I had to learn C++ if I wanted to be a “real” programmer. So I learned C++, which was such an awful experience it made me hate programming until I learned PHP eight years later. Sure, PHP is a bad language, but I could finally explore ideas in CS instead of fighting with memory management to do even the most basic things.

    I’ve had friends who started learning C for the same reasons, not because they actually wanted to know C, but because toxic experts told them they had to to count as “real” programmers. I’ve argued with people who said you’re a bad programmer if you use Python 3 because it has a higher startup time. I’ve interviewed at places that used “Do you know the tortoise-hare algorithm” as a first-order filter. We’re awfully good at finding ways of separating ourselves from the unwashed masses.

    For some reason it’s always what you already know that’s used as a gatekeeper. Nobody ever seems to think that you need to know assembly in order to be a “real” programmer.

    Of course none of this applies if the gatekeeping knowledge is actually relevant to the task at hand. It’s totally fine to filter on “do you know cycle detection algorithms” if you’re regularly encountering cycles.

    1. 16

      I remember feeling pretty hurt when I discovered Dijkstra’s quote:

      It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.

      given that BASIC had been my first language. Of course in context I realize he was being glib, but as a kid I was genuinely worried that this inadvertent choice had “mentally mutilated” me.

      I like Dijkstra’s writing but I do think there’s a macho real-programmers tradition that is inspired by that kind of thing.

      1. 12

        The thing that helped me with Dijkstra is realizing that he thought just about everyone was an idiot. Not saying I’d enjoy interacting with him nonetheless, but easier not to take anything personally after realizing that.

        For example you mention the “macho real-programmers tradition”, but he thought lots (most?) of them were idiots too, since he came from more of the academic formal/theoretical/algorithmic approach to programming and thought of a lot of people in the “real industry programmers” kind of tradition as undereducated rubes.

      2. 4

        Just like you I started programming very young, did BASIC, then VB , then C++. Unlike you I was fortunate that there were no expert around me and I kept programming. I often looks back and wonder if I was one of the asshole experts stultifying people’s desires to learn. If I was, I deeply apologize to any affected. Now I just realize I know Jack shit.

        1. 3

          It is very hard for me to be non-judgemental because I am so attached to programming. My girlfriend learned PHP and typical 90s PHP problem patterns with it. I couldn’t refrain myself from telling her about how bad I think that is. It didn’t improve anything about the situation, I realized that in advance and still I couldn’t hold back.

          Silly humans.

        2. 3

          There are languages that offer the ease of PHP or VB without the major design flaws.

          1. 12

            I think the key might be friendly guidance instead of gatekeeping and snobbery. Like, “hey, you know all this pain you’ve been having with keeping this code from breaking every time you make a change? I find some features in this language I really enjoy help a lot with this.” (although as a kid, the speed of basically every other language was the big motivation to move away from BASIC)

            1. 7

              I’ve had the good fortune to occasionally advise teenagers on their first steps in learning programming. I’ve found that they run into people in programming-language communities who are jerks to them almost immediately. I’m sure some of those people realize they’re talking to a child and are jerks anyway, and some do not realize.

              I agree with you: What works is friendly guidance in the form of offering my own experience rather than criticizing somebody else’s. I also find that I need to give a lot of context on the fact that there are people who act in very toxic ways out there, and that it’s probably best to understand that as their problem rather than yours.

              1. 3

                This probably says more about me than anything else, but I ran into some people like that when I was ~14 and first getting on FidoNet, but it actually worked for me rather than pushing me away from programming for some reason? Was opinionated people who thought low-level, fairly old-school styled C was basically the only legitimate programming, and told me to do X and Y if I wanted to be a “real programmer”. I think the fact that they seemed confident that they knew what they were doing, plus (this part’s fairly important) told me what specifically they thought I should be doing, with pointers to free resources, helped me cut through the decision paralysis of feeling that I couldn’t do anything because I didn’t know what I was “supposed” to do.

        3. 7

          There’s a dimension that I haven’t seen mentioned yet.

          Communication norms differ wildly across cultures. For instance, people in The Netherlands speak bluntly, to the point of seeming offensive to people from the US. Contrariwise, people from the US may seem like they constantly beat around the bush and won’t just say what they mean.

          Now, I don’t know of a culture where saying “you should be ashamed of this” is considered acceptable form. But a statement like, “You’re wrong. Here’s how,” can come off as rude or belittling to people from cultures like the US and Canada, where direct criticism is not used. I’ve seen the reverse too, where “That’s bollocks” was routine business comms.

          1. 2

            You even see this distinction within the US. I notice a lot of northeastern individuals have a more direct approach to discussion than compared to west coast people.

          2. 7

            I know this happens with every good word (see: synergy, hate, hack,…) but can we please stop labeling everyone who’s attitude we don’t like “toxic”? It’s gone too far. There was a time when “toxic” meant “poisoning those around them”, which is close to the traditional meaning, but now it’s just any supercilious (that was the word you wanted) person being, err supercilious (or pedantic and a bit rude) on blog comments. As usual, in the grab for hyperbole and eyeballs we’ve lost some more nuance in our language.

            1. 11

              I actually agree from a different angle. People aren’t toxic. Things that people do are toxic.

              The reframing is important because so many people are both abused and abusers, in different contexts, and at different times. And applying a term like that to a person as a whole rhetorically denies the possibility they could ever change.

              I don’t agree that using “toxic” to describe people’s attitudes is wrong in principle though. But yes there’s a line, and it’s only for serious stuff. It’s important not to dilute it.

              1. 5

                If the author had described what he disliked about the pyon’s comment without using the word toxic, it might have been easier for pyon to change his/her behavior. I sympathize with the author but in a sense he makes the same mistake by conflating a really good point with negative personal attributions.

                1. 1

                  Point taken, yes.

            2. 3

              I’ve made a similar mistake. I’ve been in an organization that used PHP for pretty much everything. It came naturally to me to point the problems of the language quite often. Only way afterwards, when it was too late to fix the damage, it was revealed to me that the programmers thought I was attacking them when I talked against this language.

              There’s some sort of a keatsian lesson here. If you’re trying to fix any problems you perceive in an established organization, tread carefully. You’re treading on their dreams.

              1. 5

                The post in question Big-O: how code slows as data grows

                The comment by ‘pyon’:

                You should be ashamed of this post. How dare you mislead your readers? In amortized analysis, earlier cheap operations pay the cost of later expensive ones. By the time you need to perform an expensive operation, you will have performed enough cheap ones, so that the cost of the entire sequence of operations is bounded above by the sum of their amortized costs. To fix your list example: a sequence of cheap list inserts pays the cost of the expensive one that comes next.

                If you discard the emotion, he gives out a fairly interesting additional note about what amortized analysis means. Instead of giving the information value, Ned reacts on the part that questions his authority. Such a brittle ego that puts you to writing a small novel worth’s of rhetoric instead of shrugging it off. Childish.

                1. 52

                  If @pyon had just phrased the first part of the comment like “You’re making a number of simpliications regarding “amortization” here that I believe are important…” this would probably not have escalated. This is what Ned means with being toxic - being correct, and being a douche about it.

                  1. 10

                    Indeed; the original article appeared on Lobsters and featured a thoughtful discussion on amortization.

                    1. 2

                      I wonder whether better word choice without changing the meaning would help one step earlier: the original post did include «you may see the word “amortized” thrown around. That’s a fancy word for “average”», which sounds a bit dismissive towards the actual theory. Something like «Notions of ‘‘amortized’’ and ‘‘average’’ complexity are close enough for most applications» would sound much more friendly.

                      (And then the follow-up paints the previous post as if it was a decision to omit a detail, instead of a minor incorrectness in the text as written, which can be (maybe unconsciously) used to paint the situation as «correctness versus politeness», and then options get represented as if they were mutually exclusive)

                      1. 4

                        I feel like that would have put the author in a more defensible position on this specific point, yes. Being clear about where additional nuance exists and where it doesn’t is something that anyone writing about technical subjects should strive for, simply because it’s useful to the reader.

                        I don’t think it’s likely that that clarification would have much of an effect on most readers, since the hypothetical reader who’s mislead would have to study complexity theory for some years to get to the point where it’s relevant, and by that time they’ll probably have figured it out some other way. We should all be so lucky as to write things that need several years of study before their imperfections become clear. :)

                        But more to the point, while I can’t know anything about this specific commenter’s intent, somebody who’s determined to find fault can always do so. Nobody is perfect, and any piece of writing can be nit-picked.

                        1. 1

                          Several years sounds like an upper bound for an eventually succesful attempt. A couple months can be enough to reach the point in a good algorithms textbook where this difference becomes relevant and clear (and I do not mean that someone would do nothing but read the textbook).

                          I would hope that the best-case effect on the readers could be a strong hint that there is something to go find in a textbook. If someone has just found out that big-O notation exists and liked how it allows to explain the practical difference between some algorithms, it is exactly the time to tell them «there is much more of this topic to learn».

                          These two posts together theoretically could — as a background to the things actually discussed in them — create an opposite impression, but hopefully it is just my view as a person who already knows the actual details and no newbie will actually get the feeling that the details of the theory are useless and not interesting.

                          As for finding something to nitpick — my question was whether the tone of the original paragraph could have made it not «finding» but «noticing the obvious». And whether the tone may have changed — but probably nobody will ever know, even the participants of the exchange — the desire to put a «well, actually…» comment into the desire to complain.

                          1. 3

                            Not having previous familiarity with this subject matter, I was guessing at how advanced the material was. :)

                            I agree about your best case, and that it’s worth trying for whenever we write.

                            I’ve never found anything that avoids the occasional “well, actually”, and not for want of trying. This is not an invitation to tell me how to; I think it’s best for everyone if we leave the topic there. :)

                            1. 1

                              I consider a polite «well, actually» a positive outcome… (Anything starting with a personal attack is not that, of course)

                    2. 25

                      It’s possible to share a fairly interesting additional note without also yelling at people. Regardless of what Pyon had to say, he was saying it in a very toxic manner. That’s also childish.

                      1. 5

                        Correct. But I don’t just care about the emotion. I care about the message.

                        Instead of trying to change web into a safe haven of some kind, why not admire it in its colors? Colors of mud and excrete among the colors of flowers and warmth, madness and clarity. You have very little power over having people get angry or aggressive about petty things. Though you can change a lot yourself and not take up about everything that’s said. Teaching your community this skill is also a pretty valuable in life overall.

                        1. 32

                          I don’t want my community to be defined by anger and aggression. I want beginners to feel like they can openly ask questions without being raged or laughed at. I want people to be able to share their knowledge without being told they don’t deserve to program. I want things to be better than they currently are.

                          Maintaining a welcoming, respectful community is hard work and depends on every member being committed to it. Part of that hard work is calling out toxic behavior.

                          1. 5

                            I want beginners to feel like they can openly ask questions without being raged or laughed at.

                            While I agree this is critically important, it’s not entirely fair to conflate “beginners asking questions” and “people writing authoritative blog posts”.

                          2. 10

                            Yeah. That kind of self-regulation and dedication to finding signal in noise are endlessly rewarding traits worth practicing. And to extend your metaphor, we weed the garden because otherwise they’ll choke out some of the flowers.

                            1. 5

                              But I don’t just care about the emotion. I care about the message.

                              I’m with you unless the message includes clear harm. I’ll try to resist its affect on me but advocate such messages are gone. That commenter was being an asshole on top of delivering some useful information. Discouraging the personal attacks increases number of people who will want to participate and share information. As Ned notes, such comment sections or forums also get more beginner friendly. I’m always fine with a general rule for civility in comments for such proven benefits.

                              Edit: While this is about a toxic @pyon comment, I think I should also illustrate one like I’m advocating for that delivers great information without any attacks. pyon has delivered quite a lot of them in discussions on programming language theory. Here’s one on hypergraphs:


                              1. 5

                                I personally always care about the emotion (as an individual, not as a site moderator), it’s an important component of any communication between humans. But I understand your perspective as well.

                                1. 3

                                  I may have been unclear. I do too. I was just looking at it from other commenters’ perspective of how Id think if I didnt care about it but wanted good info and opportunities in programming sphere. Id still have to reduce harm/toxicity to other people by ground rules to foster good discussion and bring more people in.

                                  So, whether emotional or not, still cant discount the emotional effect of comments on others. Still should put some thought into that with reducing personal attacks being among easiest compromise as they add nothing to discussions.

                                  1. 2

                                    Ah! Okay. I misunderstood then, and it sounds like we’re in agreement.

                              2. 4

                                It’s ridiculous to say that if someone cannot ignore personal attacks, they have a brittle ego and are childish. While also defending personal attacks and vitriol as being the thing that we should celebrate about the internet. Rather, we should critique people for being assholes. The comment was critiquing the manner and tone in which he explained amortized analysis, but he’s not allowed to say that the comment’s manner and tone was bad? It’s ridiculous. The comment was bad, not because of the point it made, but because it made the point badly.

                            2. 22

                              Compare this approach:

                              I believe this post simplifies the idea incorrectly. In amortized analysis, earlier (cheap) operations pay the cost of later (expensive) ones. When you need to perform an expensive operation, you will have performed enough cheap ones that the cost of the entire sequence of operations is bounded by the sum of their amortized costs. In the context of your list example, a sequence of cheap list inserts would pay the cost of the expensive one that comes next.

                              This is the same content, free of “shame” and accusations of “misleading.” The original comment is a perfect example of the terrible tone that people take, as discussed in this post and in my previous post of Simon Peyton-Jones’ email.

                              1. 4

                                Instead of giving the information value, Ned reacts on the part that questions his authority.

                                The author does give it value. You’ve missed the point. The author isn’t saying it’s incorrect or not valuable; he’s saying that this attitude from experts (who use their expertise as a tool to put others down) is highly toxic.

                                1. 4

                                  If you discard the emotion, he gives out a fairly interesting additional note about what amortized analysis means. Instead of giving the information value, Ned reacts on the part that questions his authority.

                                  It’s not clear that Ned interprets pyon as questioning his authority. His criticism is of pyon‘s tone, which is histrionic. The cutting intro isn’t bad if we discard it; but what is the effect if we include it? It would be more balanced for Ned to discuss the details and value of pyon’s post, but that does not invalidate Ned’s point.

                                2. 3

                                  I’m going to be a little bit nuanced here, and say that there are some fields where accessibility can do harm.

                                  Encryption is one. If you think you can write a good encryption algorithm, you almost certainly can’t. You can only validly know that you can from the perspective of standing on the corpses of your algorithms you thought were good but weren’t. Therefore, if someone new to the field thinks they can write a good encryption algorithm, we’d all better hope that the only other people who ever see that algorithm are experienced enough to poke great big holes in it. Otherwise, some other innocent could get hurt, perhaps badly.

                                  Does that justify “toxic behavior”? It might justify some frank talk. Being aggressive to people who want to learn is a bad idea, but if they don’t understand that some things can be dangerous, a little yelling might save a lot of pain, and not just for the budding cryptographer.

                                  So to bring this back to the article:

                                  Toxic experts will latch onto a particular skill and decide that it is essential. For them, that skill is a marker dividing Those-Who-Know from Those-Who-Don’t. These shibboleths vary from expert to expert. In the current case, it’s a detail of algorithmic analysis. I’ve seen other toxic experts insist that it’s essential to know C, or assembly language, or recursion and pointers, and so on.

                                  The idea that “It is dangerous and harmful to others to just jump into some fields and compete”, or, in other words, the skill required to understand why bad crypto can hurt people, is an essential piece of knowledge, one which could very easily exclude newbies. It should be stated in the bluntest terms to ensure people know it’s serious, it’s not “just an opinion”, and it does apply to them. Does that make me a “toxic expert”? (Heck, if it does, it’s the only kind of crypto expert I am.)

                                  1. 6

                                    There’s a difference between personal attacks and telling a person how hard it will be to design a good cipher that will be accepted. I just give those people this:


                                    In it, Bruce’‘s tone isn’t ideal but it’s better than what they’ll face. It almost comes off as tough love where he tells them it’s going to be a long, tough road in a field that will ignore them until they meet certain criteria. He then, in plentiful detail, tells them everything they need to do to become a recognized expert in cryptography. I’ve shared that post and others of his on this topic for years with mostly positive feedback. There were a few people depressed that it wasn’t as easy as learning a new programming language.

                                    “the skill required to understand why bad crypto can hurt people”

                                    You may not be intending to mislead here but you’ve made a leap. You’ve gone from designing encryption algorithms… an inherently benign work people can do for any reason… to designing or recommending algorithms for situations where someone could be harmed. Academics and hobbyists everywhere do the former with no effect. The latter, if done with a non-vetted method, should receive constructive criticism with evidence first as that’s sometimes enough to handle it. If it doesn’t work, we move to straight-up slamming the source for it with justification that they’re provably endangering people.

                                    So, even if talking encryption, I still don’t see a reason to be less than civil unless absolutely necessary. This is also coming from someone who spent years slamming people as you describe with the blunt approach of putting the dumb stuff down. I saw over those years that folks got more results when they took a gentler, charitable approach to the criticism. I’ve tried to work on that bad habit minimizing it where possible. I’ve seen a bit more uptake of stronger tech that I promote as a result.

                                    1. 4

                                      I think there’s also a huge difference between e.g. making an offhand comment about something on a forum and writing an entire blog post about it. We should have standards for people who are publishing false claims in a formal or semi-formal setting, because it’s bad news if people believe them. It doesn’t have to be rude, but it also shouldn’t be gentle. A comment of the form “this is wrong about X, see paper Y” would probably be fine; no need to hedge or beat around the bush.