DEV Community

Cover image for I'm An Impostor
Adam Nathaniel Davis
Adam Nathaniel Davis

Posted on • Updated on

I'm An Impostor

I wanted to write this article because I'm routinely frustrated by (what I perceive to be) the continual arrogance of "tech types" and "fanboys" who vomit opinions over their coworkers, or over the interwebs, as though they are the Arbiters of Programming Truth. And yet... here I am. Cranking out my blogs. Spewing my opinion. And ultimately, I probably give the impression that I think I know what I'm talking about.

This hits home for me occasionally when someone pings me for advice. They seek my input - as though I can really provide any "answers". Some of these people are friends or colleagues. But since I started this little Dev.to thing, I've actually had several folks reach out to me on email. With no prior introduction. And while I'm truly flattered, I also can't help but think, "You have no idea just how much I don't know."

This also hits home for me when I hear others talk about "impostor syndrome". And it'd be hard for me to truly communicate how much I hate that concept.

I mean, sure, I understand that, at times, we all have doubts. But it really bothers me to think that anyone sees themselves as not "worthy" enough or "knowledgeable" enough or "experienced" enough. It bothers me because, for most of my career, I've flaunted these norms.

I'm completely self-taught. I don't have a computer science degree (or a bachelors degree of any kind). At times, I've had to, umm... embellish my resume. I've frequently acquired skills that, for years, no one would pay me for. Many of the "fanboys" that I so-frequently deride look at me, or my code, or my "style" - and they dismiss me.

Despite all this, there are still those who think that I've somehow "arrived" - and that they are somehow "impostors". So I'm gonna try to blow that up. Right here. Right now.

I'm gonna spell out, in plain detail, the stuff that's given me fits throughout my career. I'm gonna explain the stuff that still confuses me. I'm gonna try to admit the deficiencies that a lot of other tech bloggers like myself probably don't want to admit at all.

My hope is that you'll realize that if someone like me - a dude with a quarter-century of professional experience, still has these "shortcomings", then you're probably not as much of an "impostor" as you fear. So... here goes.


Alt Text

Regex Syntax

Regular expressions are one of the oldest - and most powerful - tools in a programmer's toolbelt. And you absolutely need to understand the concept of regular expressions. And you need to know the use-cases where they excel.

But syntax...???

Well, listen...

Regex's are less readable than hieroglyphs. Sometimes, I find myself in a scenario where I'm writing regular expressions all the time. And I transform into Regex Man (it even comes with a cape).

But then... I might go 12-18 months without writing anything more complex than a simple [0-9] match. When I go through periods like that, and then I have to dive deeply back into the regex universe? Well... I start googling.

Every few years I find myself re-learning various bits of regex syntax. I have friends that have permanently memorized all of those intricate details. I am not that guy. And I have no problem admitting it.


Alt Text

"College Stuff"

I understand the concept of Big-O notation. But I couldn't honestly care less about the nitty-gritty details. Because I basically don't use it. EVER.

Look, I understand that any "senior" dev needs to grok the intrinsic complexity of his algorithms. And I fully understand that this:

for (let i = 0; i < someLimit; i++) {
  for (let j = 0; j < someOtherLimit; j++) {
    // do some nested logic
  }
}
Enter fullscreen mode Exit fullscreen mode

Already starts to feel "problematic" because of the nested (i.e., exponential) nature of the loops. But if you want me to stand at a whiteboard and slap detailed Big-O notation on a long series of algorithms? Well... yeah, good luck with that. I'll be off in the corner writing functional code while you fret over the theory.

On a similar note, it seems that every Computer Science major drops into the workplace with a ridiculous familiarity with binary tree searches. And that's... great? I mean, yeah... binary tree searches are "a thing". And sometimes they can absolutely be the "right tool for the job". But in a quarter century in this career, I've had to dive deeply into binary tree searches... ONCE. And the next time I need to use them - I'll google that shizz.


Alt Text

Native Language Functions

This is one of my most-visited URLs:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

I probably hit this page several times every single day. It's not that I don't already "know" about Array.prototype functions. It's just that I still, to this day, can find it hard to grab the "right" Array.prototype function right off the top of my head. So I frequently find myself, with an array "in hand", knowing that I need to transform it in some way, and browsing over that page like it's a menu at a fine restaurant.

I also refactor my code frequently. Not, like... months or weeks or even days later. I'll often write something with say, a plain ol' .forEach() because, quite frankly, that's just the way my brain works. Then, when I have the logic working properly, I'll kinda step back and look at it and think, "Yeah... this should really be using .reduce()." And then I'll spend a few minutes refactoring it into it's "optimal" prototype function.

This trend isn't limited to JavaScript. For years I was writing a metric butt-ton (technical term) of PHP. And PHP has, approximately... 3,842 native functions. All of them have different syntaxes. Different behaviors. Different patterns. Different expected arguments. And I could write every single one of those native functions from memory. (As long as by, "from memory", you mean, "by googling that shizz".)

I've never been impressed with anyone who has memorized a particular language like the back of their hand. Good for you. You're a dictionary. That doesn't make you a problem solver.


Alt Text

Timed Exercises

Of course, (almost) the only time that you'll experience a timed exercise is in a job interview. And my brain has some kinda deep primeval resistance to these types of artificial hurdles. When you give me your silly little demo task, I'm almost certain that I can crush it. But then, when you give me a visual 15-minute timer, counting down in front of my face, it triggers some kinda internal meltdown in me.

The funny thing is that I'm pretty dang effective working under real-world time constraints. In rare moments, I've been "The Guy" working on a live production issue that was costing the company tens of thousands of dollars per minute. And in those scenarios... I slayed that shizz. I literally had execs looking at me in awe as my fingers flew over the keyboard.

But when you put that stupid artificial timer on me? I dunno man... my brain just kinda - rebels. And shuts down. Cuz I know that the whole exercise is just so fake.



Alt Text

Nomenclature Mismatches

At multiple points in my career, I've struggled with concepts that all of my colleagues had supposedly mastered. And then, after struggling with the academic concept - sometimes, for years - I finally realized that I was already doing that concept! I just didn't "grok" the terminology being used.

A great example of this is dependency injection. I dunno why, but for some reason, that term is so dang... obtuse to me. It just doesn't seem to mean, in my mind, what it actually means in the IDE.

So for a number of years, my colleagues would talk in haughty terms about dependency injection. And I'd just nod. And smile. And give them that knowing look of, "Oh, yeah! Dependency injection. I'm all about dependency injection!!" Then I'd go back and read the definition of dependency injection for the 100th time - desperately trying to import it into my brain.

The irony of this is that I'd already been doing dependency injection. For years. I just didn't realize it. What others were calling "dependency injection", I was just calling... "code". And maybe that's why I had such a hard time internalizing the concept?

Another example is closures. I even wrote, a few months ago, in response to one of my readers, that I rarely-if-ever use closures. But that statement was wrong. Very wrong. Because the simple fact is that, as a React dev, I write closures pretty much every dang day. But my definition of "closures" wasn't compatible with all of the code I was cranking out. And then I realized, "Wait... I write closures all the friggin time."


Alt Text

Dev-ops

I often feel like I'm alone with this. Because I have many programmer-type friends who seem to genuinely enjoy getting into all of the ancillary stuff "around" programming. They like configuring routers/servers/build-pipelines/etc. They get excited by hardware. They're very happy dealing with Linux kernels and Docker containers.

I'm incredibly... specialized in what I really want to do. I write code. I like to write code. It's not that I'm incapable of setting up your email server. But I have absolutely no desire to do it. In fact, if it's not a quick-and-dirty process that I can wrap up in a half-hour-or-so, getting everything hooked up will eventually make me annoyed.

I just wanna write my dang code. Show me where my environments are. Give me access to the required repos. And then leave me the heck alone.



Alt Text

Git

I've met many devs who wield their prodigious Git skills like a cudgel. They throw around all these command-line keywords and flags, and they're not very subtle about implying that, "I'm a real developer cuz I've mastered every possible command-line Git operation."

I love Git. I don't know if you can really be a "modern" dev without at least being comfortable with Git. I can happily sit at the command line and create new branches, commits, pushes, merges, etc. But Git is an intricate beast. And when I need to venture outside of the "normal", day-to-day, code-management stuff - I go back to my own cheat sheet.

I've been working on this Git cheat sheet for, oh... about five years. And it has little helper examples of all the "2nd-level" kinda operations that I typically only perform every few months or so. I know... that probably means that I'm somehow "lesser" as a dev. I don't friggin care.


Alt Text

Command Line / Terminal

While we're talking about command lines, there are many devs who seem to get offended at the idea of a GUI. I am not that guy. It's not that I'm impotent in a terminal, but I've never felt that my worth as a developer is tied to my knowledge of every possible grep option.

I can git pretty dang well. I can npm like a pro. I'm really comfortable in PowerShell and slightly-less-so with bash. But there are limits. And I've never felt bad because I couldn't regurgitate, from memory, a complex command line directive, with piping and flags and switches. You can master every possible command-line utility. And you'll get a free cookie. I'll spend my time mastering... code.


Alt Text

Tip of the Iceberg

This list isn't even close to comprehensive. If I spent another few hours thinking about it, I could easily come up with another dozen issues that have caused me fits. (Or are still causing me fits.)

My point here isn't to catalog every single one of my shortcomings as a programmer. My point is to illustrate that there's not a single person in tech who doesn't have at least some of these same handicaps.

That tech blogger you read regularly doesn't magically spit out every line of his-or-her code. They have hangups. Just like the rest of us.

I don't care if they've been coding for 50 years. There's still something that, occasionally, makes them feel like an "impostor". Which is really the just the best evidence for why none of us should ever truly feel like an "impostor".

There's more in this career field than any one person can ever learn. That's not a "fault" of the career field. It's what makes this career field absolutely friggin gorgeous.

Oldest comments (93)

Collapse
 
christiankozalla profile image
Christian Kozalla

Your articles are most entertaining!

My 2cents on the topic: I never really knew what this "imposter" thing was all about, or why it is even a thing.

Sure, I wouldn't go through StackOverflow blindly copy&pasting everything that remotely seems to solve my problem.

But I can't feel bad for actually solving the problem after googling and reading through some docs / blog posts / tutorials / other examples.. 👍

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

Absolutely. I feel like there's this urban legend about this army of crappy coders who blindly copy-n-paste everything out of StackOverflow without understanding how any of it actually works. In reality, I've rarely witnessed this from any coder - even the most junior ones. Sure, they may search StackOverflow (we all do), but it' almost always serves as a catalyst to better understand the actual solutions that are being suggested.

Collapse
 
siddharthshyniben profile image
Siddharth

Yep. We mostly copy logic, not code.

Collapse
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

Not so much an urban legend as much more a joke that spread too much among beginners. In itself it's just self-deprecating humour among programmer. We're all aware that we have to rely on online help a lot, so it makes sense to joke about it.

In itself, this might even be a good thing: Experienced developers continuously joking about how much we all rely on looking things up sends a strong signal to beginners that this isn't a bad thing. As much as I hate the joke for how over-used it is, the message it sends, although very hyperbolic, isn't a bad one: "None of us really has a clue, so don't worry if you need to look something up".

Collapse
 
dmahely profile image
Doaa Mahely

Love your writing, Adam!

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

Thank you!

Collapse
 
isaachagoel profile image
Isaac Hagoel

The irony here is that once one admits to having gaps around topic/skill x or y, they are no longer an imposter in relation to it

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

Hahaha - TRUE.

Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
bytebodger profile image
Adam Nathaniel Davis

This is a great point. I will admit that, in the past, with certain tools that have command line interfaces and GUI interfaces, I have sometimes spent too much time trying to figure out how to do something through the GUI when I could've just done it with one or two terminal commands. But I didn't do it because the command line syntax felt obtuse to me, and I was resistant to learn it. But I would've solved the problem faster if I was not so stubborn (because I usually ended up having to complete the task... by doing it in the terminal anyway). In other words, my "sin" was not that I wasn't already adept at the command line. My "sin" was that I was stubborn and thus, I was working inefficiently.

With nearly any class of problem, I'm not so much concerned with whether you've already memorized how to fix it. I'm much more concerned with whether you know where-and-how to search for the answers (cuz that, in itself, is a skill). Noobs will burn a lotta time randomly clicking through poorly-focused google searches. For seasoned pros, even when they don't already have the solution in mind, they can leverage the internet as something like the 3rd lobe of their brain.

Collapse
 
webketje profile image
webketje

Some examples where command-line is more interesting to invest in:

  • Changing environment/ tools. If you're consultant learning command line pays off way better than using a GUI (company A requires everyone use IntelliJ, company B Visual Code)
  • No local development possible, no TTY on remote server: you can only use command-line.
Collapse
 
bytebodger profile image
Adam Nathaniel Davis

If you're consultant learning command line pays off way better than using a GUI (company A requires everyone use IntelliJ, company B Visual Code)

I totally understand this point - although... my "answer" to this has been to not even consider opportunities anymore where the employer tries to dictate my toolset. I've had people contact me about Java opportunities, and then they tell me that, "The whole team is standardized on Eclipse." And... that's the end of the discussion for me.

I know that everyone doesn't have the same luxury. But I've actually run into this and I think it's borderline insane. After wrestling for years with Eclipse, and then seeing the night-and-day difference in writing Java in IntelliJ, I'm simply never writing another line of Java code in Eclipse again. If the employer thinks it's critical that I use the same IDE as everyone else on the team, then I am definitely not a good fit for that employer.

All that being said, I know that my little retort here is a diversion - and your central point is understood, and solid.

Thread Thread
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

If the employer thinks it's critical that I use the same IDE as everyone else on the team

Then the employer is probably wondering why none of the top applicants end up taking the job and always end up picking the other company where the boss isn't micro-managing what socks they wear on thursdays.

Collapse
 
lepinekong profile image
lepinekong

Oh my I so much understand for Regex, I really hate that beast currently I need to write a lot of them like /((?<!['"]){|[|>|()...(}|]|<|))(?!['"])/ :)

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

Oh, yes... I feel that pain. And no one should ever feel bad about not being able to look at at regex like that one and effortlessly read through it. (But of course, if you can, that's awesome too.)

Collapse
 
pracoon profile image
Prasham Ashesh

You sure can rant 🙌
Love it!

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

Thank you!

Collapse
 
prototypik profile image
Thomas Shallenberger

I loved every single point, except the section on DevOps; however, although I believe I am a very versatile, experienced developer, I love the fact that I can scaffold a prototype application with a continuous deployment pipeline that I can just keep rolling updates out to, and never need to worry about regressions (as long as tests hold), or config issues, or server maintenance, etc.
Basic DevOps introduced a peace of mind that I hadn't known before, by eliminating virtually all the stress that went into a deployment to production servers.

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

I totally understand this. The truth is that I kinda sorta want to be better at the whole devops side of things. But when I get stuck on something, it's more frustrating than when I get stuck on code. With code, I'm like a bulldog, wanting to fight through it. With devops stuff, when things just won't line up properly, I find myself getting exasperated faster.

But you're absolutely correct that it's valuable knowledge that can give you much peace of mind.

Collapse
 
kellykels21 profile image
Marke'l Spellman

As a self-taught dev working at a fin-tech company surrounded by accomplished engineers I can say, Every single thing you wrote here spoke to me! Thank you! 🔥

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

You're welcome! And thank you for the feedback!

Collapse
 
pelayomendez profile image
Pelayo Méndez

I agree 200% with all your conclusions. I specially don't understand the timed exercises. Work interviews had changed dramatically in the last 20 years. They fell like exams. I bet you that many developers that have been successfully performing their job for years in the same company, would fail in an interview for that same position today.

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

YES! I know this to be true. During in-person interviews, I've seen one of our guys absolutely stump some candidate on the whiteboard with a very tough question. Then I've posed that exact same question to our existing employees who weren't in the room, and watched as they struggled to answer it. And the effect is only magnified when you throw that ominous countdown timer into the whole equation.

Collapse
 
d4vev profile image
David West

I bet you that many developers that have been successfully performing their job for years in the same company, would fail in an interview for that same position today.

I think this is where someone would chime in with a comment about the time the developer of Homebrew applied and got rejected for a job at Google.

Collapse
 
seanolad profile image
Sean

Nice to get your 2cents lol.😄

Collapse
 
denniswebdel profile image
dennisFS

'keep it simple stupid' applied to coders and not code this time...
Great article 👍👍

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

Thank you!

Collapse
 
juanfrank77 profile image
Juan F Gonzalez

Join the club. I'm an Impostor too masquerading as a web engineer.

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

We all have many masks! 😁 😁 😁

Collapse
 
panditapan profile image
Pandita

aaaah you pretty much explained how I feel about being an imposter! the only difference is that I do have a degree in computer engineering but honestly? I was a little more worried in getting a boyfriend (whyyyy????) than really paying attention to class so, while I studied, passed tests, earned scholarships and even an honorable mention in my thesis... I don't remember most of the theoretical concepts I studied hahaha I'm always looking things up because I have a bad memory for these things! XD so yeah, even us with degrees have to be a bit of an impostor sometimes!

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

I have friend who decided, years after he was already an established programmer, that he should get his CS degree. And he did. And he's always told me that it was a complete waste of time and money. I think it's one of the few things he's done in his career that he'd truly take back if he could.

Not that there's anything wrong with a CS degree, of course. (Or any other degree, for that matter.) But he got absolutely no value from it. And it cost him a great deal in time-&-money.

Collapse
 
panditapan profile image
Pandita

aaah well I think it's because he was already an established programmer! I sorta realized mid-way through my studies that what they were doing (at least in my uni) was training my mind to solve problems in an "engineering" sorta way? I can't really explain it! It's like they already have the framework to help you get there, though I think symbolic logic is the main class that helped me understand programming in the end xD

But, if you already know how to solve problems because you're self taught, then you're not going to get value from the classes itself! you might get a bit from the connections and networking but still, you can do that much easily now with social media, conferences and such.

I did have friends in uni who did the same as your friend and honestly, they too where like "I know this already aaagh" but they found value on Fridays when the class would go out and drink hahahaha

There's also that this was in a Venezuelan university that was very acce$$ible at the time. I think I paid very little for my degree compared to other universities, I got a scholarship for 80% or a bit less on my last three semesters (if you were the top student of the semester the next one is free! met a girl who only paid for her first semester only, afterwards all free) so for these friends, they didn't really see it as a money investment, rather an investment that helped open up opportunities for them in the market since Venezuela value degrees a lot. I think that nowadays the uni is a lot more expensive due to situations.

But yeah, I don't regret getting my degree because it helped me be the programmer I currently am, but I also understand that it's not life changing for those who are already established programmers, unless you studied in a very prestigious university (not my case) :3

Collapse
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

I "wasted" three years of my life at university without getting a degree. I'm still disappointed that I could count on one hand the useful things I learned from university, yet figured out countless things on my own that have ended up being much more useful. During those years I learned to use Git, to set up a linux server, a whole lot of programming concepts, how the internet works (I'm basicalle "the CSS guy" at my company now, whenever some web-related task comes up every few months), and the list goes on and on and on. All of this from home and on my own.

Every now and then I wonder if I should get a proper degree just to have that piece of paper that says "This guy's cool", but every time I quickly conclude that, even though to others a degree might lend me more credibility, to me it would be worth its weight in toilet paper.

I wouldn't discourage anybody from getting a degree if that's what they want to do, but I just refuse to treat anybody who has one as inherently more competent.

Collapse
 
paulmajor profile image
paul

"...You're a dictionary. That doesn't make you a problem solver." -- This right here.

The static around what you need to know to provide value to the private sector is painfully misleading. We all have our eyes on a handful of online resources (you thought of all of them as you read this article), and there's nothing wrong with that. You are adding value when you come into a company and start solving problems for them.

Spoiler/hot-take alert: with some exceptions, of course, they don't care how you do it.

I'm not advocating bad practices, I'm advocating no one be discouraged by what you're told you need to know. Being able to think-through-a-problem, communicate, and work well with others goes a lot further than having a single snippet of any programming language memorized.

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

I love that "hot take". Too many times, the interviewer/screener cares about all that nitpicky detail because they're just trying to find a way to logically eliminate candidates until they're left with only one. But your employer probably couldn't care less if you use async/await or .then()/.catch() (or 1000 other nitpicky possibilities about how to write an app).

Collapse
 
bytebodger profile image
Adam Nathaniel Davis • Edited

One more note on this:

I'm sure you already get where I'm coming from, but it's not as if being a "dictionary" is a bad thing. Some of the sharpest coders I knew where guys who had vast swaths of minutiae memorized. But people so often fail to appreciate the difference between correlation and causation.

Those super-sharp coders weren't amazing code jockeys because they had memorized all that crap. They managed to memorize all that crap - over a span of years - as a side-effect of the fact that they're amazing coders. But just having everything memorized doesn't make you a good coder.

It's kinda like chess. The grandmaster have tons of openings memorized. But they're not grandmasters because they've memorized those openings. The opening memorization came as a side effect on the road to becoming a grandmaster. If you were trying to evaluate the skills of an unknown chess player, it would be silly to just quiz them on their knowledge of openings. I've actually met numerous very-low-level chess players who have an impressive command of openings... but they're still very weak chess players.

Collapse
 
bytebodger profile image
Adam Nathaniel Davis

Beautifully said!