14 min read

You Are Not Your Class

What object-oriented programming teaches us about labels, identity, and how networks form around the boxes we put people in.

Here's something programmers figured out forty years ago that the rest of us are still catching up to: the way you categorize things determines what you can do with them. Not the things themselves — the categories.

If that sounds abstract, stick with me. Because the system that programmers built to organize software is an almost perfect mirror for how society organizes people. And once you see it, you can't unsee it.

A Quick Detour Through Code

In the 1960s, software was getting complicated. Programs were ballooning into millions of lines, and nobody could keep track of what did what. So some very smart people in Norway invented a way to organize code called object-oriented programming — OOP, if you want the acronym.

The core idea is dead simple. Instead of writing one giant set of instructions, you define classes — blueprints for things. A class called Vehicle might have properties like speed, color, and fuel type, and behaviors like start, stop, and accelerate.

Once you have a class, you create objects — specific instances of it. Your 2019 F-150 is an object of the class Truck. Your neighbor's Prius is an object of the class Sedan. Both are also objects of the broader class Vehicle.

Here's where it gets interesting for our purposes. Classes don't just describe what something is. They determine what it can do. If the class Truck has a behavior called tow, then every truck can tow. If the class Sedan doesn't have that behavior, then sedans can't — even if a specific sedan is physically capable of it. The blueprint constrains the object.

Sound familiar? It should.

The Classes We Live In

Society runs on classes. We just don't call them that.

We call them labels. Father. Veteran. Retiree. Divorcé. Manager. Blue-collar. White-collar. Boomer. Gen X. Conservative. Liberal. Introvert. Extrovert. Addict. Survivor.

Every label is a class definition. And like classes in software, they come with built-in properties and behaviors — expectations about what someone with that label is and what they can do.

You're a father? Then you're supposed to be a provider, protective, emotionally stable (but not too emotional), present at soccer games, handy around the house. Those are the properties and behaviors the class defines.

You're a divorced man? Then you probably lost the house, you see your kids on weekends, you're either bitter or "finding yourself," and you eat a lot of takeout. That's the class definition society loaded for you, whether it fits or not.

You're a middle-aged man? Midlife crisis. Sports car. Hair loss anxiety. Quiet desperation. Those are the defaults in the blueprint, and the world will interact with you as though those defaults are accurate — even when they're not.

The label constrains the person. Just like the class constrains the object.

Inheritance: Where Labels Get Their Power

OOP has a concept called inheritance. A class can inherit properties from a parent class. The class Truck inherits from Vehicle, which means every truck automatically gets all the properties and behaviors of a vehicle — speed, fuel, start, stop — plus whatever truck-specific stuff is added on top.

Human labels work the same way. They stack.

You're not just "divorced." You're a divorced man — which inherits from man, which inherits from adult, which inherits from human. Each layer adds expectations. Each layer constrains. And critically, each layer is assumed to override the ones above it when there's a conflict.

If Human says feel emotions and Man says suppress emotions, which behavior executes? In code, the more specific class wins. In life? Same thing. The most specific label you carry is the one people expect you to perform.

This is why a man who cries at his father's funeral gets a pass, but a man who cries at a Tuesday staff meeting gets a very different reaction. The label grieving son has crying in its definition. The label male manager does not. Same human. Same tears. Different class, different allowed behaviors.

Interfaces: What You're Expected to Expose

In OOP, an interface defines what an object shows to the outside world. It's the public-facing contract — the methods other code is allowed to call. The object might have all kinds of internal complexity, private variables, hidden processes. But the interface says: this is what you get to interact with.

Every label comes with an interface. It defines what parts of yourself you're allowed to show in a given context.

At work, your interface is Professional. Competent, productive, collaborative, emotionally neutral. Your private variables — the anxiety, the divorce paperwork on your kitchen table, the 3 AM insomnia — are not part of the public interface. Exposing them would be a violation of the contract.

At the bar with old friends, your interface switches to Buddy. Funny, self-deprecating, up for another round. The private variable I'm lonely most nights is still not in the interface. Different context, different contract, same hidden data.

Men are particularly good at maintaining strict interfaces. We've been trained to. The problem is that when you spend decades hiding your private variables from every interface you expose, you can start to forget they exist. The internal complexity doesn't go away. You just lose access to it.

And here's the system-level problem: networks form around interfaces, not internals.

How Labels Build Networks

Now we're getting to the intersection of OOP and the network theory we've been talking about in previous articles.

When you carry a label, you get sorted into a network of other people with the same label. This happens automatically, often without your conscious participation.

Get divorced? Suddenly you're in the divorced guys network. You didn't sign up for it. But your married friends start treating you slightly differently — you're a reminder that marriages end, and that makes some of them uncomfortable. Meanwhile, other divorced men start gravitating toward you. You share a class now. You have compatible interfaces.

Get diagnosed with something? You're in the patient network. Start a business? Entrepreneur network. Lose your job at 52? Over-50-and-looking network, which inherits from aging-workforce, which carries properties like expensive, set in ways, and hard to train — none of which may be true about you specifically.

This is the mechanism: labels create clusters in the social network. People with the same label form edges between each other more readily than with people outside the label. Network science calls this homophily — the tendency of similar nodes to connect. But "similar" doesn't mean similar in any deep sense. It means carrying the same class definition.

You might have more in common with your neighbor who's still married than with some divorced stranger on a support forum. But the label has already done its sorting. The network doesn't care about your actual properties. It cares about your class.

Polymorphism: The Escape Hatch

OOP has one more concept that matters here, and it's the hopeful one: polymorphism.

Polymorphism means "many forms." In code, it means an object can behave differently depending on context, even though it shares a class with other objects. A Shape class might have a method called draw. A Circle draws itself as a circle. A Square draws itself as a square. Same interface, different behavior.

This is the part most people miss about labels: you can implement the interface differently than expected.

The class Divorced Man has a default implementation. Bitter. Lonely. Frozen pizza. But you're not running the default implementation. You're a specific object with your own internal state, and polymorphism means you get to override the defaults.

You can carry the label middle-aged man and implement it as someone who picks up sculpture at 48. You can carry the label father and implement emotional support in ways your own father's class definition didn't include. You can be a divorced man who isn't bitter, a retiree who isn't idle, a veteran who doesn't define himself by his service.

Polymorphism is you saying: yes, I belong to this class, but I override the default behavior.

The catch? The network doesn't update immediately. Other nodes in the system are still calling the default interface. They expect the standard methods. When you override them, there's friction — confusion, judgment, sometimes rejection. The divorced-guy network doesn't know what to do with a divorced guy who's genuinely thriving. The middle-aged-man network doesn't have a slot for someone who isn't in crisis or denial.

That friction is the cost of polymorphism. It's also the proof that it's working.

Labels You Choose vs. Labels Imposed on You

There's a critical distinction in programming between classes you define yourself and classes that are imposed by the system architecture. In life, the parallel is exact.

Some labels you choose. Runner. Woodworker. Volunteer. Reader. These are classes you instantiate deliberately. You opt into the network, the interface, and the expectations — and because you chose them, you have more control over the implementation.

Some labels are imposed. Old. Unemployed. Sick. Widower. These get applied to you by circumstances or by other people, and they come with class definitions you had no say in writing. The network forms around you based on someone else's blueprint.

And some labels are inherited — in both the OOP and the human sense. Your father's class definitions get passed down to you. Not genetically. Socially. The way your father implemented Man becomes your parent class, and you inherit his defaults unless you deliberately override them.

This is why patterns repeat across generations. Not because of some mystical bloodline. Because the parent class was never refactored. The son inherits the father's methods — handle conflict with silence, express affection through provision rather than words, treat vulnerability as a bug rather than a feature — and runs them as defaults because nobody told him he could override them.

Recognizing which labels are chosen, which are imposed, and which are inherited is the first step toward deciding which class definitions you actually want to keep running.

Refactoring Yourself

In software, refactoring means restructuring existing code without changing what it does — making it cleaner, more intentional, better organized. The program still works. It just works better, because someone went through it and asked: does this still make sense? Is this the best way to do this? Is this method here because it should be, or because it's always been here?

You can refactor a life the same way.

Not a dramatic reinvention. Not a midlife crisis where you blow everything up. Just a systematic review of the classes you're running, the interfaces you're exposing, and the networks those labels have sorted you into.

Ask yourself:

  • What labels am I carrying? List them. All of them. The ones you chose, the ones imposed, the ones inherited.
  • What behaviors does each label expect? What's in the default implementation? Are you running those defaults, or have you overridden them?
  • Which networks have formed around those labels? Are those the networks you want to be in? Are those the people you'd choose if the label hadn't sorted you?
  • What's in my private variables that no interface currently exposes? Is there stuff in there that needs to come out — not to everyone, but to someone?
  • Which inherited methods am I still running from my father's class? Which ones serve me, and which ones are just unexamined defaults?

This isn't therapy. It's engineering. You're not broken. You're just running code that someone else wrote, and you have the ability to read it, understand it, and change it.

The System-Level View

Zoom out one more level and you see something important: labels don't just affect individuals. They structure entire networks.

When a society decides that Man Over 50 means declining, obsolete, past prime, that class definition shapes hiring networks, social networks, dating networks, healthcare networks. It determines which edges form and which don't. It determines who gets included in which clusters and who gets pushed to the periphery.

This isn't a conspiracy. It's an emergent property of a system where labels carry default behaviors and networks form around shared classes. Nobody sat in a room and decided that older men should be isolated. But the class definitions produce that result as reliably as code produces its output.

Understanding this — really understanding it, at the systems level — is power. Not the power to change the whole system overnight. But the power to see the code you're running, recognize which parts are yours and which were written for you, and start making deliberate choices about your own implementation.

Because here's the thing about objects in a system: when one object changes its behavior, it changes the interactions it has with every other object it touches. Override your defaults, and you don't just change yourself. You change the network.

One node at a time. That's how systems actually change.