This is an honest story of a junior programmer, who dreamed a lot, was hit hard by reality, and found a peace of mind afterwards. By sharing this story I want to show other junior (or maybe even more experienced) developers, that life as a programmer is not always fun and games, that it is okay to struggle, and that there are ways out!
Origins of this story
My journey began exactly 5 months ago. It was my first day at work. All excited I am walking around the gorgeous office, getting to know my future colleagues, looking into the meeting rooms, and of course, getting to know the placement of a coffee machine, the existential need for a developer to function properly. I remember it as one of my happiest days - I've dreamed, I've worked hard to get here, it paid off and now I am in a place of my dreams. Little did I know that that will be a beginning of a new, unexpected chapter of my life.
Origins of a mess in my head
Let's get back a few months before this story began. I have completed quite a big project in the university with .NET language, however I had to use many more technologies than just C#. I have had to get familiar with Python, command line usage, deployment to Heroku, Xamarin, Image Recognition and even some machine learning algorithms. Yet I enjoyed every minute of that and did not find it difficult or overwhelming at all. So I applied to a .NET position, naively expecting to working only with it. Oh boy were I wrong... What seemed as a huge project back then, turned out to be a light walk down the street before having to run a marathon.
First of all, let's talk about bugs. Debugging was a new discovery for me. And I have discovered it just a month before my job interview. Another important thing was that I've tried to debug only on a small scope of my project, mostly in one class, not across multiple services at once. So when I had to do just that, I felt overwhelmed and frustrated not being able to find a bug,just to find out later that the issue was way way further.
It was nice seeing my beloved C# code. I did not really have much struggle with a language itself though not knowing how to navigate around the codebase effectively made things even more difficult. My first navigation was searching through files to find the right class only to forget about it in a couple of moments.
When I said that I was wrong that I expected to work only with C#, I meant it :D Beside the C# I had to work with: SQL (this one is kind of obvious and not new for me), Python, NodeJS, Docker, and more. However, having a solid background in programming before, and having eagerness to learn made it an enjoyable experience, so can't complain much about that.
Yet another Unknown language
It was the second day of my work. I was supposed to fly to meet my other half of the colleagues. Not even having all of my credentials properly set up, I was bombarded with lots of business slang. It was probably the most difficult part for me. It was very hard for me to get started with a task not knowing what is "this term", and "that term". Sometimes I even though that I weaker, not worthy, because it took me sooooo long to start understanding what people are talking about, what I am required to do and how code is interconnected with business language.
and the most important thing...
Constant fear or failure
I was constantly afraid to push my code because it could break stuff. I was double-checking, triple-checking my code, nitpicking before finally hitting that "Create new pull request" button. I was afraid to test my code, I was afraid to do something other than
git add/commit/push, because, you've guessed it, it could break stuff.
Organizing the mess
All those things added up creating a huge mess in my head, and sparked some serious thoughts like: Dude, you got the job you wanted, you just can't give up at the beginning of your journey. And I didn't. Instead, I though of ways on how to solve my problems. And I have decided to share them with you, addressing every problem I've mentioned above.
Learn the context!
It is hard to debug without a context. Spend some time getting to know your code base. It really helps to find an entrance point of your problem, be it a HTTP endpoint, a
Main method of your program or the beginning of a function. Look at the code surrounding it. Look at your infrastructure. Get to know the communication between code parts or services. Only then look at your problem. Yes, a few times it will be difficult, but later on you will know more and more reasons of why your code can fail, and you will spend less and less time identifying the potential problem
Get to know your tools!
We are lucky to live in the age of super fancy IDEs. Utilize them! Learn debugging, formatting, commenting, searching key bindings of your preferred IDE or code editor. It will speed up your workflow exponentially! In my particular case, Resharper helped tremendously dealing with code analysis in .NET
Face the unknown!
I really liked what my course mate said:
"I've learned that I know much, yet at the same time I've learned that I don't know even more"
That's why programming is a unique profession. You have to constantly learn. The more you learn, the more confident you grow, but then while learning, you discover, that there are even more things to conquer now with your new knowledge. Be eager to learn new stuff, read A LOT (whether it's documentation of your language/framework, StackOverflow, or Dev.to), and make it fun, because you will have to learn A LOT during your career.
Gather the knowledge!
When I was facing a problem of not knowing things, I though that it is a good idea to document my findings. And the best way to do that, at least for me, was taking notes. I've tried many tools, but I ended up with Boostnote which supports Markdown, however later on I enjoyed using Visual Studio Code as my note app, since it gave me a degree of freedom to organize and synchronize my notes.
I took notes on everything: business language, new feature of my programming language, ways to test and debug, hardships, basically - everything. I've questioned a lot my mentor, most of my questions were in fact stupid, but at the end THINGS FINALLY STARTED TO MAKE SENSE. I learned the connection between business language and code, and after that, I've finally felt like a part of a team!
Don't be afraid to spend a lot of time on that, because it will help you in the future.
It is okay to fail. We will all inevitably fail. And we will fail multiple times. Though every fail is a lesson to be learned. Experiment freely, as long as it complies to your company rules of course, learn from your mistakes and thus grow.
Some personal bonus tips
Customize your editor with fonts, themes, colors, and icons. Having familiar and neat environment gives me confidence and somehow I feel joyful to code with my personal setup.
We, programmers, spend most of our day sitting in front of a computer. Start moving - going to the gym, taking short walks, etc. This will not only keep you fit, but will clear your mind.
Take a break!
Don't be afraid to take a break if you feel overwhelmed! It is not worth it to spend countless hours looking at your monitor hopelessly. Take a nap, go for a stroll, have a snack or do something that will distract you for a moment. Don't force a solution from yourself :)
That was my story and my tips, hope you have liked at least some of them, or even found it useful! I would love to hear your personal tips on how you deal with difficulties at work!