I’ve never shied away from explaining my career journey. I’ve been open to the the fact that I was lucky to have gotten a break in 2003; I can’t stress it enough to say that my experience is probably atypical, and I have no qualms in not recommending the path I took.

I did not have a complete formal education in computer science. For sure, I’ve grown since then and I’ve learned a lot about data structures and algorithms and such, but I am keenly aware of the gaps in my knowledge. I have a bare minimum understanding of automata, about compiler theory, about a large chunk of theory that might have informed the way I wrote code in my career. It’s come across, some of those things: the way I designed a content delivery system for digital signage was informed by the gaps in what I knew about trees and graphs; the way I tackled the problem of matching records across systems based on human-provided labels was a hack, and would have been tighter and better had I known about Levenshtein distances.

Of course, my career thus far hasn’t been a waste. I’ve filled the gaps with my own autodidactic readings, which to be honest has so far served me in good stead. I never really regret the path I took though: I wouldn’t think of discarding the entirety of it, and the liberal arts curriculum I went through in university was fulfilling in its own right. It’s definitely informed my way of thinking and how I solve problems.

On the other hand, I would gladly take a class in discrete mathematics, if given the opportunity to do so, for instance. And maybe when I retire I’d spend my days back in university – who knows.

The fact that I know what I don’t know sort of fuels my own insecurities. With work came a realization that I was swimming in the deep end – with time and experience came the realization of the vastness what I did not yet know: the things that I thought I knew, but actually didn’t, and the things that I never even heard about until I was told about it, or stumbled onto it serendipitously.

There’s a term for that sinking feeling that you aren’t good enough: impostor syndrome. It’s something I struggle with quite often, and over the years as I’ve learned a lot from experience and from my peers, it hasn’t gotten any better. I’ve learned though that the best way to fight it is to dig in, be open to admitting your own lack of knowledge, and actually learn from others.

That humility to learn is important to me, and it’s been my north star; without it, I wouldn’t be at this point in my career.

However, the past week has brought to fore some of my own foibles in this regard.

I can be unfortunately abrasive and combatative at times, and those who know me can attest to the arguments and debates I’ve had over some random technical matter. I’ve had long and drawn out conversations with folks about things like whether mmap is better than doing your own file I/O, or even the merits of the then-new Grand Central Dispatch compared to doing threading on your own.

Not that I’ve ever been completely intransigent about things, mind; I can be quite slow and stubborn, however, to change my mind once I’ve settled on a matter.

For sure, once the data is there I come to one side or the other of the argument, begrudgingly or not. It might take a while for me to get there, but I will.

So far, in the past year I’ve thankfully not had the chance to be as stubborn on my opinions. Last Friday, I came close though. One of my colleagues expressed the opinion that a bug in the system my team owns is a high severity issue; I was of the opinion that it wasn’t, that the issue didn’t merit such a concern.

After that argument, we had dinner, and I realized I was falling into old patterns: I did not have full knowledge of his own context, on why he thought that way, and I was not humble enough to try to learn from it.

The dark side of my own impostor syndrome is the way I sometimes overcompensate: when I think I know something, I fight tooth and nail to that world view.

To be fair, the fact that I’m aware of it means I know to route around it, or to somehow compensate for it. But when I’m in that mindset, that thinking of false superiority in my understanding, my view narrows and it’s sometimes hard to break out of it.

Of course, not all of the technical arguments and debates I’ve had over the years have been like that, but I think I should strive to be a better human and a better engineer, and that to me means being humble and knowing that there are those gaps I mention.

Previously: Celebrating the Small Wins