Noticing Skill Issues is Not Gatekeeping

I recently waded into the waters of an intentionally obtuse piece of engagement bait on .NET Twitter, mostly because I thought it was funny:

It also happens to be true on both counts:

  1. var is used throughout important .NET code bases like ASP.NET Core and the C# Compiler itself (Roslyn) - it’s obviously not “too hard” to use on critically important projects or the C# language team would have never added it to the language.
  2. If 11-year olds building their first “Hello World”-grade applications with Python can figure out what the type of a variable is by just assigning it, authoring their code using bare bones tools like Notepad++, it’s reasonable to expect that experienced, professional .NET developers who command high salaries and use much more powerful tools like Rider and Visual Studio should be able to do the same.

Both pieces of this criticism received some intense push-back from commenters on Twitter, primarily objecting to my use of the word “low-skill.” My post was directed at developers without the ability to quickly understand implicitly typed code.

Ironically, many of the developers objecting to my post thought I was criticizing their preference for explicitly typed code, something I made no comment on at all. If you have trouble comprehending syntax written for computers I suppose it follows that you might also have trouble comprehending syntax written for humans; recasting an inability to understand something into a personal preference might fly with the former but it simply outs you with the latter.

Less loudly, I saw some mentions that my post construed “gatekeeping” - and this is what I really wanted to address after taking some time to think about it.

Gatekeeping

The top definition of “Gatekeeping” on Urban Dictionary explains it thusly:

When someone takes it upon themselves to decide who does or does not have access or rights to a community or identity.

“Oh man, I love Harry Potter. I am such a geek!”

“Hardly. Talk to me when you’re into theoretical physics.”

In my own words: “Gatekeeping” is when you recast something that has a low, open barrier to entry into something more exclusive that requires a much higher standard in order to be accepted.

If I said: “in order to be a real .NET developer you have to successfully have a pull request merged into the dotnet/runtime repository” - that would be gatekeeping.

Gatekeeping goes against the grain of my entire modus operandi with Petabridge - we build powerful .NET open source tools like Akka.NET because we believe that:

  1. Having great tools raises the power level of every .NET developer who learns how to use them and
  2. Having more software developers running around at higher power levels will be a net improvement to our civilization - more productivity, better experiences, fewer errors, and a better quality of life.

Raising developer’s power levels also necessitates challenging and ridiculing self-limiting beliefs expressed in public spaces by software developers. “You shouldn’t use var because you have to think harder” is, quite clearly, a self-fulfilling prophecy: if you believe that implicit typing is inherently bad, you will avoid its use, and thus never acquire the familiarity and skill to read code written with it. You will limit yourself in terms of what code you can read and understand. Therefore, this belief should not be tolerated.

Skill Issues

“Skill issue” is basically used to attribute one’s lack of performance to lack of ability - I think the real problem some commenters took with my post it’s considered rude to notice them aloud.

Dark Souls 3 "You Died" == Skill Issue

However, this leaves us with a problem: how else can we engage with questions of professional significance like “what skills are essential to our industry” without articulating skill deficits or necessities?

Imagine this discussion between two professional fishermen:

Fisherman 1: You can’t be a real fisherman until you’ve learned how to tie an overhand knot, sheep shank, bowline, and a clove hitch - that way you can keep your boat safe and secure out at sea and on the dock.

Fisherman 2: Wow, that sounds awfully exclusionary of you - way to gatekeep our industry.

Weaponizing “gatekeeping” to attack forms of legitimate criticism is net harmful to the very people Fisherman 2 is trying to “protect.” Sure, it probably plays well on social media, but it’s infantilizing: it reduces professionals who want to do well to helpless children with no agency.

Public discussions such as “what should we be learning?” within our industry are an absolute necessity. If you want to be a better professional software developer, then yes, you really should become comfortable with implicit typing given how commonplace it is.

If someone frames part of a discussion as “developers who can’t comprehend var / write unit tests / write documentation / etc are low performers” - well, you can either get mad at those because they’re true but “sound mean;” you can disagree; or, most importantly, if it applies to you then you can do something about it.

If you keep applying “skill issue” to yourself over a long enough period of time, you will excel at whatever you put your mind to. I do this to myself every day - hence why I’m learning new things like building Roslyn Analyzers this year.

If you have to chose between “git gud” or “get mad online” - choose the former. You’ll be better for it.

P.S. I have a follow-up post I’m working on related to this - please subscribe if you’d like to read it.

Image Credits to the “Ds3 Skill Issue You Died Screen and More” mod for Dark Souls 3.

Discussion, links, and tweets

I'm the CTO and founder of Petabridge, where I'm making distributed programming for .NET developers easy by working on Akka.NET, Phobos, and more..