If you’ve read my self-teaching journey, you know that I was fortunate enough to land my dream job as my first job. I am working directly with and being mentored by a CTO at a small but rising startup. While your first position or your dream first position may differ, for me, this scenario is exactly what I hoped for as an introduction to the software industry. When I was grinding out projects by myself in the library, fantasizing about what life would be like as a professional developer helped me stay focused and motivated. I used to ask myself questions like: How would it differ from developing on my own? What don’t I know that I will need to know on a daily basis? How will I be looked at as self-taught programmer? What is the development lifecycle like at a real company? Will red tape like testing and code reviews ruin the fun of building projects when programming by myself? Everyone’s experience will differ, but I was very concerned with finding a company that didn’t strip away what made me fall in love with coding in the first place. With roughly six months of full-time work under my belt, I can now say that my first job has lived up to the fantasy in my head.

Criticism is Learning

You are going to take (hopefully constructive) criticism at your first job. Even if you are the most naturally gifted programmer in the world, you will be unfamiliar with the codebase and style choices used by your new co-workers, and it will take time to adapt. During this time it is vital to be in the right headspace. No matter what you think or what your boss says, they are not expecting you to come in and contribute independently right away. If they are, then it’s on the company for hiring for the wrong position. Not on you. What they should be expecting is potential for growth and the willingness to learn. Junior developers are an investment - both in time and in money. Your company is hiring you young and cheap, with the hope that you will turn into an asset for them. With time. Not right away.

Code Reviews

Computer programmers are notoriously awkward communicators. Your boss might not be the best at telling you what you’ve done wrong. They might struggle to keep their critiques constructive, or may respond to questions with condescension. Higher-level developers forget what it’s like to be inexperienced and not know everything they do now. Further, with increased rank comes increased responsibility within the company, and sometimes helping juniors isn’t the highest priority. Because of this, your mindset is the most important factor in your growth as a junior developer. I got absolutely flamed in my first few code reviews, but I did not cry myself to sleep about it. In my mind, those code reviews were each the best opportunities I had for learning to-date. While teaching myself, I developed patterns within my code that I had no way of knowing were bad. My boss purged these habits from me like a holy man exorcising demons. It wasn’t fun, but he hired me for my attitude toward learning, and respects me for not taking those reviews personally.

He still calls me out every single time he sees me copy pasting code, and I urge him to continue, knowing it’s the best way to break the habit.

Always Say Yes: Never Turn Down a Ticket - Accept it and Learn it

If your job is like mine, your supervisor will challenge you early and often by giving you tasks out of your comfort zone. You’re going to get that cold sweat and overwhelmed feeling - everyone does. For me, not a week goes by where I don’t receive a task that I don’t even how to even start. Think of this as leveling up skills and adding tools to your programming tool belt. The most valuable tool I’ve acquired in my young career is how to Google. With Google and perseverance, I feel like I can take anything passed my way and get it to work. Then in the code review, I learn the right way to program it.

Here is a rundown of things I had experience with before, compared to what I’ve done since becoming a full-stack developer:

Before After
Javascript Javascript
React PHP
Ruby MySQL
Rails Android Native
Google Analytics iOS Native
  React Native
  Bash scripting

But more important than the specific languages/frameworks/tools I’ve dealt with, it’s been about being dynamic. The ability to rapidly pick up whatever the day calls for is a much more valuable trait than experience in only one specific area. At least for my position as a full-stack generalist.

Check out Part 2