Life is like a Programming Language: Gratitude, Grief, and JavaScript

Nicole GathanyNicole Gathany
3 min read

I'm honestly going through a hard time right now. Someone I met in a coffee shop heard about what I was going through and told me to try writing in a gratitude journal.

I used to hate those. I tried one back in 2016, and it made me feel guilty for feeling bad. It felt like I was gaslighting myself—like I was supposed to ignore my pain just because something good also existed.

But I tried it again recently because of this stranger’s suggestion out of curiosity, and this time, it felt different.

I started writing about things I’m genuinely grateful for—not despite the hard things in my life, but because of them. I’m grateful for the time I have now to do yoga or take long walks. I’m grateful for the odd jobs I’ve worked since being laid off from a coveted software engineering job—jobs that have taught me things about people and management that I wouldn’t have learned otherwise. I’m grateful for the way that community has showed up for me.

These upsides along with the downsides that they come attached to reminded me of the trade-offs of JavaScript.

JavaScript is a dynamically typed language. It’s known for its flexibility and approachability:

Pros:

  • Easy to get started

  • Flexible: you can reassign variables to any type

  • 100% backwards compatible

Cons:

  • Harder to manage in large codebases

  • Prone to runtime errors due to that same flexibility

There’s also quirky behavior like NaN == NaN evaluating to false, and typeof null returning "object". These inconsistencies won’t be “fixed” because the TC39 committee prioritizes backwards compatibility—so JavaScript evolves without breaking the past.

It’s also the only language that runs natively in the browser. You can compile others (like TypeScript or Elm) to JavaScript, but in the end, it’s JavaScript doing the work.

And what makes JavaScript great—its flexibility, openness, ubiquity—is also what makes it difficult at times.

Sometimes, JavaScript isn’t the right tool for the job. For projects that involve heavy computation, we might turn to Python. For something performance-critical like programming a self-driving car, we might reach for C++.

In the same way, just because we practice gratitude doesn’t mean we’re settling. It doesn’t mean we stop reaching for more. It means we’re using the right tool for this moment—finding the good that exists even in difficulty, without pretending the hard parts don’t matter.

That’s life, too.

Just because there are things to be grateful for doesn’t mean we shouldn’t want more, or set goals, or feel grief. Taking stock of what is good doesn’t erase what’s painful—it just puts it in a fuller context. Sometimes gratitude isn’t about forcing joy; it’s about softening shame and creating space for hope.

We use JavaScript not because it’s perfect, but because it’s what works in a lot of environments. It gets the job done. And sometimes, so do we.

0
Subscribe to my newsletter

Read articles from Nicole Gathany directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Nicole Gathany
Nicole Gathany

I am a people-centered software engineer with a past life in public health and reproductive justice. I'm using this blog to combine my love for tech and communication.