Six months ago, the biggest dream of my past few years came true: I became a developer. Overall, it’s been great six months, and I never regret about my choice, but it was also very hard 6 months for me. In this post, I want to talk about my first six months of being a developer, mostly about challenges :)
The hardest thing was probably work from home. The company I work for switched to WFH mode since February. And what is “work from home” for a developer? On the one hand, nobody bothers you, nobody comes to your desk. But on the other hand, you also can’t come to anyone’s desk :). No face-to-face discussions with the team mates, no lunches together, no drawing on the white board, and when you have any dependencies (you have them always) you have to resolve them in chat.
Second challenge have been the amount of learning I need to do every day. I mentioned this previously in the article I wrote when I just became a developer. Now, after six months, the amount of learning is not getting any less yet. I can’t see I am going to stop learning any time soon. Unless I work only on a single project, and all I do is maintenance and no new features.
Past 6 months learning: Node.js, Golang, Java, TypeScript, Docker, Kubernetes, Pub/Sub, Google Cloud stuff (Cloud Functions, GCS, BigQuery), etc. Why I call it “challenge”, because I can’t take my sweet time learning new things, as there is job to be done. What is more, there is not always an expert around me, who I could ask when I have questions. Well, I was lucky with Kubernetes, one of my colleagues guided me a lot. I was lucky with Golang too, as my boss gave me a good book to read. But not always I am so lucky, still need to spend lots of time reading and watching online courses.
Another thing about learning is that there is no ultimate knowledge. Knowledge is elusive. Sometimes I feel like I know something. But then something happens (like production incident), and I realise that I do not know anything.
Third challenge for me is doubt. I constantly doubt my code: variable names, code structure, database structure, certain architectural decisions, etc. Even if I am satisfied with my code today, it does not mean I will be satisfied with it tomorrow. I am not sure if it is just me, because I am a relatively new developer, or “doubt” is something inherent to software development?
Another challenge is code reviews. Developer’s job is always under exposure. Every line of code developer writes is reviewed by other developers. Imagine if every email you write, or every presentation you do, or every call you join, is reviewed by someone else. And someone else telling you: “this paragraph in the email you should rewrite, because you already touched the same topic in the paragraph above, and btw you have typo in the line 22 of your email”.
Well, this is a good thing, you will learn how to write perfect emails and presentations (provided people who review your work give you valuable comments). But it also adds some mental pressure, knowing that your work will be scrutinized by someone, and that someone might have different opinion. Ok, so far I haven’t got any tough comments in my pull requests, it never happened that myself and reviewer completely disagreed about the approach. But still I have this “heart trembling” when sending my PRs for review :)
Last challenge I want to mention is “unsolvable problems”. In mathematics, there are hard problems that remain unsolved for years. In my team, there are some technical problems that are unsolved for a few months. Such problems are being treated by restarting servers or simply by ignoring them, because sometimes search for a solution might take days if not weeks, and there is not always a bandwidth for it. This is a really hard part for me, going to sleep and knowing that there is something not resolved. For example, since last Thursday one of our Node.js applications has been eating a large amount of CPU. No changes to the code, no changes to the infrastructure, and no ideas (yet) on how to resovle it. Sad by classic story…
But enough about challenges. If I met a few years younger version of myself, would I still recommend her to pursue a career of a software developer? Of course I would! Because all the challenges are forgotten when you see your code running in production. It’s like seeing people in the house you built, or seeing art piece you created in a museum, or seeing shadow of 100-year oak you planted. But even better.