A couple of years ago, after another stressful marketing campaign in the agency I used to work for, I knew I had it. I had been doing digital marketing for almost 4 years and I still felt like I was going nowhere. First, I got into the field because I thought working in digital marketing was going to be like a 21st century Mad Men type of thing. I was wrong. That’s when I started to seriously consider the advice a friend of mine gave me - getting into software development. Surely, he only tried to sell me on the idea that I was going to make a lot of money which, at the time, seemed ok but wasn’t my first concern. After that infamous marketing campaign, I started to look into the whole software self-taught engineering thing.
Soon, I got sucked into the programming world. I finally understood that development was more than just money. It was about creating new things, facing challenging problems, and getting creative. After a while, I was already learning to code online and, after 8 months, I felt like I was ready to work on my first real programming job.
Getting my first job wasn’t precisely difficult (not because I was a wonder, mind you, but because my friend recommended me for an open junior position at the company she was developing software for). When I got to the office on my first day, I was ready to take over the development world. Of course, I didn’t expect that the software development world had other things in store for me.
First and foremost, my first week was somewhat of a bore. I had to set my computer up with the necessary software, read tons of onboarding documentation, and learn how the team worked. None of that resembled what I had pictured: sitting on my desktop coding away for hours and hours.
During the first days of actual work, the team started sending some fairly easy tickets my way, just to get me started. Reality started to sink in. Unlike the coding exercises I taught myself (mostly centered in web development), these included lines of codes I’d never seen before. And though I wanted to start writing my own, there was another reality check: as a junior developer, I was going to spend a lot of time with code written by others.
If you spoke to me after the first couple of weeks, you’d have met a very disheartened individual. Nothing was what I expected, the job seemed impossible, and I felt like an impostor. But after spending some more time with my colleagues and the project leader, it all started to feel in place. I survived. And if my experience serves, you will too. So, if you’re a self-taught software self-taught engineer, here’s some advice I’d have loved when I landed my first job.
This was a feeling I got after I finished setting up my computer. Once my boss started talking to me about projects, deadlines, workflows, and more, I immediately felt like an impostor. It all made me feel like I was far in over my head and that everything I learned during my self-taught lessons wasn’t going to amount to anything.
I tried to avoid asking questions because I didn’t want everyone to notice how little I knew about everything. It was only after a couple of weeks that I found myself trapped with a bug I didn’t know how to fix. I talked to a colleague that was friendly with me from the start and asked for help. After he walked me through it, I felt like quitting because I was a massive impostor.
He immediately noticed it. After I confessed how I felt, he shrugged it off and said that all the software self-taught engineers he knew saw themselves as impostors at one point or another. Even he thought the same about himself whenever he had to google for a way to overcome an issue! My take on that is simple - no one in the development world knows it all, so no one expects you to know everything. You aren’t an impostor even if you feel like one. During your first weeks, you’ll feel like that a lot of times but don’t sweat it - you’ll be fine.
I’ll say it again because it bears repeating - no one working in this world knows everything there’s to know in programming. Which, naturally, isn’t an argument in defense of ignorance. Quite the contrary, it’s something that should give you enough peace of mind to do your work without beating yourself about not knowing something.
It also means, though, that you’ll be constantly learning new things regardless of the level of experience you may have. You’d think that, as a newcomer to the programming world, you’ll do much of the learning early on and you’ll cruise on that knowledge for the rest of your career. That way of thinking is wrong on two levels. The first is that there are so many things that could happen when coding, that’s practically impossible to know them all.
The second level is that programming as a discipline is in constant evolution. That will have you reading about new technologies and frameworks, practicing with new languages, and keeping an eye on the latest developments to always be up to date.
As a self-taught developer, I had a routine to learn new things about web development each day. It implied that I read, practiced, and read some more each and every day. It also meant that I did it all on my own, googling what I didn’t know, reading articles, forums, and whatever source I could find online.
That led me to believe that coding was a lonely activity (well, that and the many Hollywood movies I watched about programming geniuses and hackers). However, once I got working with a team of software development service providers, I noticed that everyone around me talked about their issues and routinely collaborated with each other.
At first, I was wary of asking for help because I felt that the others would call me out and that I was going to be exposed for the fraud I felt I was. After the incident I mentioned above, I opened up a lot more and understood one key of development work - you’ll work as a part of a team most of the time. So, it’s fine to ask for help when you can’t find a way out of an issue. Talking to another can bring creative solutions or new paths to take while also creating stronger bonds with the people you work with.
Finally, there’ll be a lot of things that will significantly differ between what you did on your own while learning and what you’ll have to do as a part of a development team. Even if you read about some things while teaching yourself about programming, chances are you won’t focus on them enough, even when you’ll need them when working for a software company.
Take security, for instance. When you’re working on your practice projects, you can neglect them without any consequences whatsoever. But when working for a client, security features and practices will be among your top concerns. You could say the same about things like testing or working your way through blockers.
For me, the biggest difference was commenting and documenting my code. Even when I’ve read about its importance, I never gave it a second thought when learning. However, when working in real life, my boss was crystal-clear about how important those things were. So, I had to implement them in my work routine, which was challenging and demanding enough. I’m not saying you should learn all about this on your own, but be prepared to embrace the differences and learn about them.
Learning the development trade takes more than what you can do on your own. There’s a reason why so many software development companies are looking for candidates with good soft skills - a lot of the time, it’s better to have good communication abilities than to be a genius coder. So, you’ll have to be open to keep learning new things even after landing your first job.
Additionally, you’ll have to get used to frustration, to feeling like an impostor, and to getting help constantly. All of those are feelings most developers (if not all) have experienced at some point during their professional lives. The important thing you have to remember to survive your first programming job (and your second, third, and so on) is to be patient and never lose your faith in what you know. You’ll evolve as you keep working and you’ll see yourself in places you’ve never considered before.