Not Saying I've Got Impostor Syndrome But...
Not Saying I've Got Impostor Syndrome But...
Here's the thing: I've been programming in some form for over twenty years and sometimes I feel like I've learned absolutely nothing. We spend so much of our time incorporating third-party libraries, swapping out third-party APIs and bouncing between UI frameworks that so much of what I once knew is now in some form entirely redundant.
I used to use jQuery. Who uses jQuery anymore?
I think in some way this feeling is why I've recently been trying to move myself closer to the bone, so to speak. I've ditched friendly operating systems and moved to the barebones Arch Linux experience, I've steered away from fancy UI libraries for my website and I'm trying my hand at building something from scratch with just Tailwind CSS' utility classes, and I've abandoned flashy IDEs in favour of tailoring a simpler text editor (Neovim) to my specific wants and needs.
And in the past few weeks, I've learned a little Bash-fu and have written half a dozen custom scripts, I've learned more about Linux than I ever knew, and more about how text editor buffers work than I thought there was to know. I've also accidentally learned a ton of Vim motions that make my development experience kind of... a joy... kind of zen. Couldn't necessarily write you a guide to my motions or tell you what any of them are; they're being learned like muscle memory, like walking, like breathing. It's nifty.
But okay, that's just the past few weeks. What have I actually learned over my twenty years developing websites and software?
Um...
Well...
And I think that's a common experience, isn't it? The mind draws a blank. You know, of course, that you've learned a lot... probably. But can you immediately name any of it?
I've been rewriting my CV recently too, and this involves trying to recall a lot about my old roles that, in many cases, hasn't been relevant in years since. I mentioned jQuery up top. That didn't actually make it onto my CV, but I remember I wrote it for a lot of personal projects back in the day and used it professionally for... actually, thinking about it, way longer than I think the technology was relevant. Perhaps every company I've worked for has had some jQuery in their codebase... Hm. Actually might still be relevant to include it on my CV after all.
The thing is, so far as personal dev work goes and indeed so far as my professional JavaScript contributions go, we have moved on. I know jQuery, I could dive back in and maintain some legacy code using it, but how relevant is it to future clients and employers? I dunno.
It feels like a similar story with Bootstrap and Foundation, two CSS frameworks I've used in the past. Actually both are still kicking around, both are still extremely popular but... I think maybe it's something to do with having moved onto a utility class framework like Tailwind CSS that has been blowing up in popularity and business adoption. It makes those frameworks feel like styling with training wheels. But that's belittling, and it's untrue--I know it is because I've used those frameworks, I know how difficult it can be to modify the provided classes and styles to client specifications. Training wheels? Hardly! It is actually harder to work with those frameworks to match expectations than it is to do the same thing with utility classes. You get a lot closer to the desired result a lot more quickly, but then begins a period of negotiating with the framework while the utility classes of Tailwind begin to close the gap.
And okay, so there's something I do know. I know about the strengths and weaknesses different libraries, and when one might choose one over the other, but most key to the above so far as I'm concerned is this: I know how to two things really well; read documentation and read source code. Because regardless of which of those frameworks you do choose, it is ultimately in the docs or in the source code that you find how to manipulate it to very specific results.
In my typical domain, backend development, there have also been a lot of shifts. I used to write PHP for WordPress and Joomla (or was it Drupal?), and I don't do that at all anymore. I think I could dive back in no problem, but I moved onto Ruby and Ruby on Rails. Packages like Warden, Devise, CanCanCan, Pundit, Minitest and Rspec have all entered and exited and entered-again my workflow, and do I feel like I'm an expert in any of them? No, but... we're circling towards the point that I'm an expert in something else here.
Actually, special shout-out to Devise! That's a great gem. It has been the goto authentication solution for Rails applications for a very long time. It's also one of the first backend software extensions that I needed to learn to do more than. Devise is great but when I shifted my own focus towards API development, I found it lacking in the area of supporting authentication for single page and mobile apps. Devise is one of the first pieces of software I did a real deep-dive into the source code of, only to discover that it uses Warden under the hood, and Warden supported writing custom strategies. I actually wrote my own authentication gem based on Warden that supported JSON Web Tokens as a an authentication strategy. So actually yeah, in that regard, I am a bit of a Devise expert; to most Rails devs, it's a simple drop-in solution for authentication, but I've dived into the source code there, I know what Devise really is--an elegant convenience layer providing a Warden strategy and a set of object and markup templates.
What I'm an expert in then isn't any specific language or syntax. It isn't any specific framework or library. I can become an expert in any of those, sure. I can dive into source repositories and see the code like Neo. But as time goes on and things change, that expertise rusts and it seems I forget I had it at all (until I remind myself in a series of ramblings like make up this post). No, I think the specific skill which makes me an expert in my domain is the diving deep into source code, is the reading documentation. It's the capability to read, review and adapt.
Impostor syndrome is easy to fall prey to because knowledge moves so quickly. Much of the raw knowledge that we possess becomes redundant very quickly in our ever-changing modern world. And the skill that really gets us by is something that's more abstract. Like if I put "5 years of Vue/Nuxt experience" on my CV, that's tangible. If I put "highly adaptable" that's something less tangible and isn't easily demonstrated by a document describing work history. That document says "Thom knows this, that and this other thing", it doesn't do a good job of describing my relationship with those things. And well, that's why we have interviews too, isn't it?
One can feel under-equipped and unsure of themselves easily in professional careers, because the bases of our technical skills are ever-changing. It is easy to forget that those skills tell a secondary story, that of our ability to learn and adapt and to keep delivering.
Is impostor syndrome just a result of looking at our tangible work and forgetting those abstract talents? I don't know--I certainly don't profess to be an expert in impostor syndrome. But I do know that I feel better for this reflection. I feel more "Hell yeah!" about my skills and less "oh, I've forgotten everything I ever knew".
Feels good. Might reflect again later.