I’m currently interviewing at several companies – more to come on that front, as things develop – but it has me reflecting on my path so far, mistakes made, lessons learned, and so on, etc. Follow me down the rabbit hole!
But first, a soundtrack, of course:
The first thing that comes to mind is this: there seems to be a huge gap between the things I learned as I needed for web development, and the things that we nebulously refer to as “computer science” (e.g. trees, graphs, sorting algorithms…) – this should have been obvious, but it was what you’d call an “unknown unknown”, something I didn’t know that I didn’t know.
And of course, that opens up a world of questions! What else don’t I know? (Hint: the answer space is huge here) It’s not like I never learned about binary search trees. It’s simply that I never had to use them in practice.
Of course, as I approach systems programming, embedded systems, and the like, and as I’m interviewing at some of these companies (to be named in a future post, once the dust settles), I’m going to be put to the test regarding several dozen of these CS topics.
I can’t say I’m wholly unprepared – I probably know more about infra, CS, low-level programming, and what actually goes on under the hood, than the average web dev – but I am starting to freak out a little. I mean, I’m interviewing with some seriously talented teams – it’s not quite nerve-wracking, but the nerves are certainly present.
I’m actually more worried about coding problems, actually implementing the sorting and searching algorithms and data structures, than I am about any CS trivia. You can ask anyone I’ve worked with: I’m like a vacuum for CS trivia.
But high-pressure problem solving? I could use some practice.
Taking a breath for a moment, I’m also looking at patterns throughout my career, reflecting on choices I’ve made, or choices that have made me, rather.
I’ve noticed a few recurring themes. For example, I dive in headfirst, often without fully surveying the landscape. This can be a problem. I need to slow down a bit – “slow is smooth and smooth is fast”.
I also skim like nobody’s business when I read tech docs. To me, I often feel like saying “show me the code!” rather than patiently reading a thorough description of a solution or algorithm or API or what have you.
When I write, too, I tend to ramble. To put it a bit nicer, I go depth-first, rather than breadth-first, as is necessary sometimes! Naturally, this can be an issue, so I have to watch out for that.
I also have to remember my strengths, though…I love to learn. I love to help people, especially a fellow dev who’s having a problem or needs to learn about something I know! That’s always fun, really. And I like to think, over the course of 10 working years, I’ve picked up a fair amount of useful knowledge, especially regarding the web.
I highlighted, to several companies, my web “expertise” – what does this even mean? Am I like Kent C. Dodds? Yeah, right! Am I the “John Carmack of the web”? Hell no!
Aside: speaking of infinity, how many web frameworks are there now? If I counted one git repo every second, would I get to the end before the heat death of the universe?
My point is, there’s so much to learn that no one person can cram it all in their head. I’m trying here to come to terms with that fact before my next round of interviews comes.
By then, I’m hoping to be in good enough practice that my interviewers can do their job: evaluate how likely it is that I’m a good dev. I think I have a fair chance of success! If I didn’t, I wouldn’t be here.
But I still need practice, so until those interviews come, I’m going to have my nose so far into the books you’ll have to pull me out by my ankles.