Working as a junior

There are plenty of articles around the web that write about teaching yourself programming, preparing for interviews, and getting a job in the IT sector — and that’s pretty cool! But getting a job is just the first step in the process. Being a noob and working in a professional environment (where most everyone has more experience than you) can be a struggle, and I wanted to write about the challanges that beginner devs face after having landed a position.

As a disclaimer, I want to emphasize that IT is a great career path, and developers are (generally speaking) spoilt in terms of opportunities, working hours, benefits, work environment and salary. Still, there are some challanges that I come accross every day. Here is a list of them.

  • Lack of confidence due to a certain number of factors, and the feeling that “I am not a coder, I am a fake, a phony”. I started learning in my late 20s, though most coders have mastered a few languages by then. But even if you have started in your teens, there will be always somebody who started coding earlier — so it’s no use to have those metrics. Instead, I just try to get better in my own pace, with baby steps, day by day. And the impostor syndrome does have its basis — sometimes I don’t know basic stuff and then feel like a fraud. But hey, they hired me, so I should just go on with that gentle lie.

  • You can be temporarily inhibited due to negative feedback — “last time I pushed code I did a major fuckup, it took me a day to refactor, how could I be accepting new tasks after this?” You tend to feel overwhelmed, and with a reason. Programming is not really something where you can just wing it… and while I am getting better at not taking feedback personally, I occasionally have these negetive loops when I am in doubt that I can be of any value to my employer at all.

  • Lack of random tech skills that everyone seems to have. Most people around me seem to have born with advanced Linux skills, while a year ago I might not have been able to come up with 5 unique commands if my life depended on it.

  • Unfamiliar social environment: folks with BSc, MSc or PhD degrees in CS from technical universities who are a bit intimidating when you talk shop with them. At times you just try to avoid getting caught in a technical conversation.

  • Unfamiliar tech environment, like the company tech stack itself — using frameworks and packages you never heard of, plus the enterprise environment is a highly complex infrastructure with quite a few different databases, several locations, a few types of OS, task schedulers, authentication providers, and 60k+ servers… while I can barely set up a home router. But that’s the point of being a dev… you have to figure out how to use those. And that’s part of the fun.

  • Poor integration to the company — this might be mostly my fault, for I tend to just have a break at my desk, with a coffee - I am probably not socializing enough.

  • Relatively mundane tasks — compared to the ever-exciting thrill of constantly creating something new when you are learning on your own, fixing a bug in the backend of a large corporate webiste is not very tempting. But you still benefit from it by learning (and it pays the bills very well).

  • Lack of confidence due to patchy background knowledge, for instance, anything hardware. The culminating point of my hardware studies was probably when I tried to read up about RAM.

  • Working in a 9-6 schedule — does it mean I literally have to write code for 8 hours straight? Or at least be productive in those hours? How many lines of code do I have to write per day — 5? 50? 500? (I think my record low is about 3 lines of code with about 5 hours of genuine work…and I still considered that OK, because at least it worked).

  • Interruptions — context-switching and the cost of it. “Hey, can you help me later with that one thing we talked about?” “Sure thing, right after I finish this piece of code.” Hm, I might as well bring a coffee now that I have been interrupted. And go to the loo. Probably check my phone as well. Hey, what was the name of the fourth teenage mutant ninja turtle again?

  • Open-office difficulties: I didn’t know it was this hard to focus when people are chatting around me, even though they are usually considerate and they don’t talk too loud. But you instinctively try to pay attention when somebody is talking near you, and it’s an obstacle in getting stuff done.

  • Thinking that you should get more stuff done, and more quickly (work-wise), learn more (languages, frameworks, design patters, infrastructure…), practice more and innovate more. Art is long, life is short…

  • Version control — getting stuck dealing with conflicting commits is a sobering experience, especially for the first time.

  • Using design patterns (like factory, bridge, facade, gateway, etc) — this is quite new for me, and I suck at it.

  • Language barrier — I think my English is alright, but it’s just different through an imperfect phoneline and a mono headset, while others are talking around you.

  • Lack of time and energy to work on side-projects that would mean something to you (or, if you want to work on side-projects, lack of time and energy for everything else in life).

I could go on for some time, but you get it — it’s not like you get a job and everything automatically will be just fine. I think my point is that I still have to constantly learn, tech and non-tech skills equally. My plan for growing as a developer is to try to deliver my best, but not stress out when something goes wrong, ask more at work, try to understand the big picture (architecture, security, performance, design patterns) and to keep myself motivated by writing short, feasible side-projects.

Written on July 8, 2017

If you notice anything wrong with this post (factual error, rude tone, bad grammar, typo, etc.), and you feel like giving feedback, please do so by contacting me at samubalogh@gmail.com. Thank you!