Maturing as a Programmer

How do you know if you're getting better as a programmer? How do you know if someone else (coworker, friend, twitter talking head) is worthwhile to follow and listen to? What does it mean to 'mature' as a programmer, or even 'get good'?

I've been thinking a lot about these questions lately, and I have some thoughts on what it means to grow, mature, and 'level up' as a programmer.

One of the things I heard recently (over on a podcast called Soft Skills Engineering - episode 9) was how titles can be likened to leveling up in a video game. That struck a chord inside my noggin. The RPG metaphor certainly is something my peers and I have as a mental model going into the workforce, and it can be so damaging.

One of the ways gamifying career progression with titles and numbers can be damaging is because it leads to peers at work evaluating each other based on those titles or numbers. I say numbers, because where I work the 'titles' are basically numbers, think Dev I, Dev II, Dev II...etc. This proves to be a very narrow and limiting way to look at people and their ideas. In my own experience, for example, one of my coworkers is one level lower than I am. Despite that, I've come to confide in him, ask him for help, and vice-versa. He is not better than me in almost any regard, and I him. But on paper, you could make an argument that I am more valuable than he. Let's call this phenomenon having a title lens.

Title Lens

I have a problem with title lense because it equates complex, and sometimes arbitrary, corporate decisions as value. Corporate decisions like salary and title involve some level of negotiation and bureaucracy, which is never a good measure of a person. There are tons of circumstances to consider when thinking about a person, whether that is weighing the value of an engineer's technical input or just evaluating mentorship opportunities. In either case, one has to think about the circumstances of when and how each person was hired compared to the current context. Maybe they were hired 5 years ago, and the organization has terrible upward mobility, and therefore this coworker should be listened to more because of their intimate knowledge of the organization and system. My coworker had been working in the software industry for a few years, but isn't 'outspoken' or 'extroverted' like I am. Did that play a role in the salary negotiations? Absolutely. It also helped that I had an offer on that table while negotiating for my current position, so that already put me in a salary range where my title would be II instead of I.

All of this leads me to a pretty simple thesis I've come to time and time again. People are multifaceted, and if you want to make decisions or be informed in any regard when it comes to any and all issues surrounding people, it gets messy. You have to ask deeper questions and dig at your own assumptions. Both your preconceptions, and your assumptions about everything relating to this person you are trying to get to know.

This includes figuring out how to move up in your organization, in your career, or enriching your friendships, as all of these activities involve interacting with people.

Conflations

I've definitely let title lens affect not only how I view other people, but how I view myself too. It's easy and automatic to look at your company's org chart, or that email with the policy-mandated titles in the signature line, and just have thoughts. Judgmental thoughts, comparison thoughts, imposter syndrome thoughts, self-deprecating thoughts. And the dangerous thing is that because hierarchy is so pervasive in business, it just becomes the air we breath. It’s a subtle, constant presence that we always must filter and deal with. It’s not like you can come into work one day and say “no one is allowed to present me titles in any form or fashion” - that won’t work.

One of the easiest ways to move past this is just to recognize title lens as a conflation of corporate convenience and value. People can have competence, technical prowess, and influence without holding a high ranking title. Likewise, people may have the title and not have the competence. And in the end, the people you might get along most with in your own organization may be the entry or junior level positions. In fact, the people you might learn the most from will probably be the people you least expect. It's usually not some formal relationship, role, or position that magically grants the key insights we need to grow as individuals, teams, and organizations. Rather it is the mundane observations and random moments of perspective that give us much needed doses of inspiration.

In moving past title lense, we have to recognize the original need of how and why the titles were twisted in the first place”. Titles are needing to establish hierarchy and enforce order. It is primarily a social construct for corporations to ensure that business is conducted in an orderly fashion. It is also a way to enforce accountability. If the stock falls too egregiously, and the shareholders lose a lot of money, then the CEO is held accountable and might lose his job if subsequent quarters and years also fall short. I think back to Nintendo's management taking pay cuts for poor sales - now that's corporate responsibility!

Others

Have you ever had the experience where you watched a youtube video wherein some major thought leader talked and talked, and you thought it was just the coolest - and you shared it with... oh I don't know, your dad, coworker, professor, or just even the internet via comments and were utterly destroyed and shot down?

That can be hard and feel like you’re not being validated.

This loss of validation can lead to all sorts of thoughts exploding in your head about how they hate you, or think you’re stupid, or aren’t going to be your friend anymore. Trust me, all of those harsh words and destruction are directed at the idea your friend (or anonymous internet tormentor) just destroyed, and not you as a person.

What you need to realize is everyone has opinions about everything. Just read youtube comments, or go on reddit and read some threads. Or find an angry twitter thread. People get angry about stuff. Even if the thing you're excited about has nothing to do with the things those people are angry about. Sometimes through discussion and empathy we can come to terms with one another's perspectives on thought leaders and ideas, but other times you just gotta agree to disagree.

But that brings up a good question - how do you know if someone or an idea is worth investing more time in?

Well, you can look at whether or not someone is successful, but that's complicated and conflates success+money with value again.

A better way is to watch a person over a long period of time. Basically, do your research. As you learn more about a person (even if that is just watching their talks on youtube, or just eating lunch with them) you can more objectively inform yourself about their character and the merit of their ideas. Keep in mind that someone can be a shitty person and still have good technical ideas, but our ethics absolutely affects the way we implement our ideas, and how our ideas are made to relate to other people. So that shitty person with a good idea could eventually turn his or her idea into a pretty controlling platform or culture that excludes people and ideas.

This idea is profound. It isn’t just a statement of human fallibility, nor is it an admission of lack of perfection or falling short of some ‘objective’ picture in the distance. This idea is the recognition that we are primarily relational beings. And as relational beings, we specialize in pattern recognition and short term gains. The reason ethics informs our ideas is that, over time, we develop patterns to reinforce behaviours that produce results we like - especially results that society affirms in us that we like. If these patterns happen to be unethical, well, then it will lead to more and more unethical behaviour.

Of course, context is king when it comes to relationships, ethics, and humanity. Imagine a boss managing a team where she has identified two of her five employees to not have the best ethics at their core. They are good workers, but are willing to cut corners to make deadlines, step on other people, and don’t value collaboration and exploring ideas as much as the others. It would be wise for the boss to split up these two workers, and have the other three work with the two in a rotation, so as to promote the values that would more harmoniously fit the team and overall business culture.

Now, imagine that you are an employee on a team, and you have a coworker that is this corner-cutting, fast moving unethical machine. If your boss doesn’t seem to care, then you may not feel the social or business incentives to promote all the great things the previous scenario led to. As such, if you don’t provide the pressure to move the ethics of your coworker forward, that cycle of pattern recognition is unbroken and further reinforced for your coworker. In fact, a lot of people interpret inaction or apathy as encouragement.

Now, if you have people in your life currently that seem like pretty cool people and you want to learn from them - awesome! Sometimes it can feel like they wouldn't want to hangout with you, or wouldn't be open to mentoring you, but just go for it! It's always going to be awkward to ask for mentorship or to start establishing a fun partnership of mutual growth together. But it'll never happen if you don't ask.

Relationships and projects have driven my career growth more than anything else. By releasing code, and forming strong bonds through that, I learn a lot about myself, technology, and other people. And it's those cool insights we gain together that enrich our lives.

Values

One of the most helpful things to do to figure out how to progress as a programmer is decide what your values are. If you can define success, and you are open to hearing what other people's values and vision of success is, you can make measurable progress towards those goals, and adjust your goals as you meet new people and are exposed to new perspectives. I like thinking about this in terms of a mutable value system that, at its core holds learning, people, and different perspectives in a high regard. This allows you to have a reasonable starting point (people are valuable!), while feeling like you can make some incremental progress, while making room for adjustments and learning.

And know your limits. You cannot become a master ninja guru rockstar in all areas of life. But you can choose one, two, or three areas and focus your energy on that. You can even ask for help (gasp!).

So sit down, and think about some of these things you'd like to grow in. Here are some ideas:

  • Open source (contributing!)
  • Reading
    • Audiobooks are always an option
  • Podcasts
  • Attending meetups
  • Teaching
  • Taking a class
  • Speaking
  • Asking questions
  • Working less
  • Working more
  • Blogging
  • Learning
    • New languages
    • New frameworks
    • New tech
  • Ops / DevOps
  • Security

When you decide on a small set of things to work on, commit to doing it! Tell people you're doing it. Tell them you would greatly appreciate it if they ask you about it later.

And then go do those things. Go to meetups. Write a blog post. Read about security. Go learn Kubernetes and/or Docker. Make a small microkernel OS in Go or Rust. Do stuff! Or chill out and take vacation.

The real beauty of this process is that if you have decided to value working less and living more - more power to ya! This isn't another "Do X Y Z things for result W", nor is this a guilt trip about all the things you're not doing. Pick one thing you find value in, and set out to grow in that area.

Do it. I believe in you.