On October 15th I started a new job as Front End developer. Starting anything in life can be a bit challenging at the beginning, a new job is not the exception. You don't know the people, you don't know how projects work (should I create a branch or are we doing trunk-based development? do we have tests?), you don't even know how to work the Coffee Machine. Well, at least in this Corona times that is the least of the worries, but the point is a lot of things are new, and for someone like me, also new to the industry, is extra crazy.
As a beginner programmer, my focus was never on learning multiple languages or technologies, but to know few but well. Besides some basic C I use for Arduino, Javascript is mainly my thing. This was because I believe in learning the basics, but also because I want to make sure that if I have to work on something, that I understand what I'm doing. I'm reducing chances, I quickly learned that that is not always possible.
When I had one of my first tasks at my new job, I was trying to make sense of the codebase until I figured it would be better if I understood the framework first. I tried but was quickly discouraged by the fact that the framework was in-house built, and not super documented. Damn, how am I going to understand this then? No other way but asking my teammates and banging my head, did I figure out everything I needed and wanted? No, but I understood enough to be able to finish my ticket, and on to the next one.
This process continued with different tasks as the time went on, we were using some templating engine I've never heard of, the way data was being accessed didn't make sense to me (I saw no imports), but I had to build things so I just had to observe and check the documentation for things that I didn't know. I had to style some things and never used SCSS before but looked at how other files worked and quickly picked up some of the features, like nesting elements, setting default variables, and other goodies.
With all these experiences I quickly learned that you don't always have to master some technology to be able to use it. Sure, it would be much better, and one has to always work towards understanding better what you are using, but before I always thought about mastering stuff and not moving from there, I thought that after dwelling enough with JS that I should get very good at React so I can work using React as "React Developer" (whatever that means), therefore reducing risks of not knowing things and reducing anxiety, but now I work where React is nowhere to be found, and I have to adapt and make things happen.
One of my coding mentors once told me he saw knowledge not as a straight line but as a spiral that goes deeper. I have felt a bit like that recently, at the beginning I knew enough to "edit" already existing code, change some things here and there, later I grew more comfortable and building new features, and so on. A working knowledge, as opposed to a deep understanding, is not the goal, but sometimes it can be enough to get the ball rolling while we are moving to the center of the spiral.
There are tons of technologies that I'm not an expert on that I currently use, a lot of AWS services I understand just mildly, but I understand enough to do things, as I learn more I will able to do more but is ok if I don't learn everything I know at the beginning before I do something, I don't need a CS degree to write Hello World in HTML.
Don't get me wrong, we should always aim to learn and use better the technologies we work with, that will make for improved code and practices, but life doesn't always give you the time or opportunity of finishing that 40 hrs course on X technology before you touch the ticket you were assigned at your job.
So at the start of my job I was petrified about all the things I didn't know that I should and wondered when I will understand all of it. Truth is, I won't, there will be gaps, but gladly we usually work on teams, and as my gaps can be helped by a teammate, I might have something to help them with their gap, there is just a lot to understand and learn in this job and that is partly what makes it so non-anxiety friendly but also so interesting.
As for myself, I will make my best to move deeper in the spiral, learn better the tools and technologies that I have to use, but not over attaching to them, as I see that tech stacks come and go, and what was nice and hot eight years ago, today nobody wants to touch. I have to keep myself adaptable, learning, and trying to look deeper and extracting what is essential and what is accidental, what underlying principles linger, and what current syntax or approach is replaceable.
We need to navigate with good wind and clear skies, but also when fog is around the ship.