TypeScript, Groups, and Heretics


I can still remember it. Eight years old, second grade, Mrs. King’s class, and I’m openly stressing to my friends about a particular embarrassment that I’m hoping to conceal from the other students.

To tell you the truth, the one thing I can’t remember is what this embarrassment exactly was. But, hey, it was second grade in the 90s; it could have been anything. Even a jean length that didn’t adequately cover your ankles was cause for ridicule in 1993.

At one point during the conversation, my best friend Dillon bruskly remarked:

“Why do you care what other people think?”

Okay, before proceeding, let’s get this out of the way. Yes, I recognize that this is generic, throw-away advice that we’ve all received and discarded a million times. But to eight-year-old me, it landed right where he intended. And it hurt. Had he received some deep, life-calming lesson that somehow skipped over me? It wasn’t until that moment that I even considered the notion that there might be value - and even status - in not worrying over the potential opinions of others; potential being the keyword here. Easier said than done, of course, but that one sentence remedied my second grade dilemma that particular day.

A bit of an aside. Looking back on this moment with adult eyes, I don’t think Dillon intended this of course, but the friendly, yet slightly condescending way in which he brushed off my embarrassment with that “Why do you care” remark may also have implanted a lesson that there’s a bit of narcissism in indulging these sort of what-if scenarios that forever play on repeat in our minds.

  • “What if the other kids notice that I’m, gasp, wearing high waters because my mom thinks there’s two more months of use out of these jeans?”
  • “What if the kids make fun of me for having a gap between my two front teeth?”

Yes, these are real worries at that age. And yet, still, it all revolves around an intense focus on yourself…which is rarely good.

Let’s be clear, a certain level of self-molding and shaping by others is probably a necessity. It keeps us in check and worthy of being included in the group (more on that shortly). But sometimes I look back on my life and wonder how many key moments (or lack thereof's) were determined, not by my desire or disinterest, but instead by how the “audience” might react.

  • "What will the kids think if they see me dancing at… a school dance? Can’t risk it."
  • "What if I stumble on my words during a class speech? Will they snicker? Better to avoid at all costs."
  • "What if I ask that pretty girl out and she flippantly laughs, 'Eww, no'?" Boys don’t recover from moments like this. The rejection sticks to your soul for life, like superglue.

I’m sad to say that, too often, the audience won the battle. Actually, come to think of it, the audience didn’t win…the potential audience won; the worst-case scenario in my head that didn’t actually exist. I love this quote:

When you’re 20, you care what everyone thinks. When you’re 40, you stop caring what everyone thinks. When you’re 60, you realize no one was ever thinking about you in the first place.

The Group

I wish I could say that Dillon’s advice solved this problem for life. But no such luck. I think about his words often (usually during moments when I’m participating in the opposite thought process), but I’m afraid this mind trap never releases us.

I’m 38 years old, well-practiced in the “don’t worry so much about the opinions of others” mantra, and, still, often waste mental cycles worrying. Why?

I used to imagine that the grown-up version of “me” would be a completely different person. But I’m still that scared second-grader….just with hair on my arms.

Like a long-running process, there’s no magic finish line when you graduate high school and free yourself from the restraints and worries of group expectations. There's no kill-switch. It keeps running in the background. We just don't talk about it as adults.

The Stoics of course offer advice in this area:

“It is likely that some troubles will befall us; but it is not a present fact. How often has the unexpected happened! How often has the expected never come to pass! And even though it is ordained to be, what does it avail to run out to meet your suffering? You will suffer soon enough, when it arrives.” - Seneca

We're programmers, so let's break it down and improve clarity. What would be a good method name for the thing that triggers incessant fear and worry within us? We'll start with a test, and write the method name like a complete sentence. How about this?

test('be accepted in the group at any cost', fn () => ...);

How many generations did it take for us to instinctively adhere to this one sentence without realizing it? “Be accepted in the group at any cost.” Don't do anything to risk banishment. Thousands of years ago, if exiled from the village, you were effectively sentenced to death. At that point, it’s only a matter of time until the wolves get you. We no longer live in fear of wolves, and yet isn’t it funny how the instinct never leaves us. Be accepted in the group.

Online Communities

These days, some communities exist exclusively online, comprised of people you’ve never met in person. We could never have predicted this even a hundred years ago. A social group, with the obligations and restraints of any group, but one in which few members have physically met.

Here’s a thought. How did a PHP tool that Taylor Otwell built in his bedroom turn into a group? But it did.

If Taylor says the word, “Zonda” or tweets the “Laravel forever” battle cry, others repeat it. How odd! Are there those who speak “Zonda”, but don't know what it means? Almost certainly.

And why should anyone - excluding its creator - ever say, “Laravel forever?” It’s a tool. If a better tool comes along, use that tool. You’d never say “hammer forever.”

But, of course, these communities are rarely about the actual “thing.” Instead, they’re the amalgamation of countless little naturally forming innovations, and tendencies, and approaches, and inside-jokes.

As a person who has spent years and years writing PHP, I can tell you with certainty that the Laravel and Symfony communities are both wonderful. But they’re incredibly different. Different culture. Different goals. Different mindset. Different… many things, all wrapped up and branded under the name of the tool. Just like the Jets and Sharks from West Side Story, every group needs a name so you can join it. Or, in other words, I can make certain assumptions about a person with relative accuracy based upon their choice of framework. That’s a bonkers thing to say, and yet it proves true over and over again.

And it’s valid for countless things. For instance, why should it be the case that knowing a person’s preferred political party should inform me about their views around climate change, or traditional media, or vaccines? But it does. If I know which party/group you belong to, I can make pretty good guesses about you, as a person. It shouldn't be this way, but it is. And that brings me to my next point.

Say What We Say

There’s nothing wrong with joining a group, of course. Even folks who openly dislike groups… have inadvertently formed their own group. Snap! But there’s one potential risk: allegiance. Get in line, or risk removal from the group. I’m reminded of a Bill Burr church joke that concludes with the mantra “Say what we say…when we say it.” This… we don’t want.

The unintended culture of the Laravel community is very much rooted in the rejection of established norms and practices. I was around in 2012, when Laravel was first presented to the core PHP community like a mother letting her family hold her newborn for the first time. And let me tell you, that Laravel baby was almost instantly shunned. Facades? Huge file of helper functions? Service containers? Active Record? Unit tests that touch the database? No thanks. This framework is dangerous.

The committee unilaterally voted for banishment.

To the extent that there has historically been hostility between Laravel, Taylor, and some of the wider PHP conference community, here's what I'll say. Like Star Wars: A New Hope, I saw it with my own eyes: Taylor didn’t shoot first. But, of course, if you're paying attention, you could have guessed that I would take that stance. ;)

Laravel represented a seismic shift in the PHP landscape. The framework suggested - even recommended - certain practices that were considered unacceptable in those days. The irony is I don't think Taylor was itching to show the middle finger with his "blasphemy." Originally coming from the .NET world, he didn't know what the PHP norms were. He just did what seemed to make for clearer code. As I like to imagine, the PHP elite met in private, compiled their Best Practice Commandments, and were not so keen to find an up-and-coming tool that ignored some of these established rules.

Tempers have long since cooled, but it’s nonetheless a reminder that any group, whatever it may be, desperately wants to be immutable.

The TypeScript Debacle

As I write this, there’s currently a significant debate on social media around TypeScript, due to a reasonably respectful, but inflammatory article by David Hanson, around his company’s decision to remove TypeScript support from their existing projects. Here’s a relevant quote from that article:

This isn't a plea to convert anyone of anything, though. As I discussed in Programming types and mindsets, very few programmers are typically interested in having their opinion on typing changed. Most programmers find themselves drawn strongly to typing or not quite early in their career, and then spend the rest of it rationalizing The Correct Choice to themselves and others.

As it turns out, types, too, fall prey to group dynamics. You’re either for types, or against. Choose. Perhaps there’s more to this TypeScript outrage than I’m aware, but the backlash to this one article was, by any calculation, wildly out of proportion.

You see, a company didn’t just make a decision about a tool. They sinned. It sounds hyperbolic, but there's some truth to it. It's true for all groups. To reject TypeScript is to signal to those who love TypeScript that you are no longer part of their group. You've left the church (and hence, worthy of ridicule and banishment from the village). This presents a problem. If you leave the church, others may do so as well.

I’m being slightly over the top here with my choice of words, but isn’t it funny how it’s not so different from how past versions of ourselves hundreds of years ago might have responded to transgressions?

Perhaps my old second grade friend’s advice might come in handy in situations like this. Why on earth do you care that a group of people you have never met (and will never) have chosen to omit a tool that you enjoy? Why do you care? It doesn’t matter. It goes without saying that debate is good. It’s how we form our ideas. But the moment things get nasty, we’re not in formation mode any longer. We’ve leaped to age-old group dynamics. Banish the heretic. So why do you care? Because, of course, we're not really talking about tools, are we? We're talking about groups. And groups protect us from the wolves. Or at least they used to.

Social media drama like this crops up in the programming world constantly. TypeScript is only the latest recipient. Laravel, too, has been the center of derision in the past.

Wrapping Up

It's not lost on me that group dynamics are a thing, and have been so for all of human history. That won't change. Few of us have switches in our pockets that can magically turn off our worry-centers and disable our "defend the village" tendencies. But if I have just one hope for Laravel specifically, it would be that it stays true to its original culture: question the norms. If we get to a point that everything Laravel does is stamped as gold and unworthy of critique, we’ve done little more than become the new PHP elite. And I’ll pass on that.