Shortly after college, I interviewed for my first position as a web developer. I had a bit of experience writing desktop applications, but virtually no experience in web development. At the time I had a fascination with learning Ruby on Rails, so I started learning it for fun. This was around 2008 before Ruby on Rails was mainstream. My friend was trying to convince me to learn Python and PHP. He told me that what I was learning was completely unpractical, didn’t map to the real world.
I told him I didn’t really care.
I jumped in and built my first web application using the language. It was super cool to see my ideas become a reality. Shortly after, I graduated from school and set out to find a real programming job.
One Saturday morning, I went to my college library and started my job search. I found 100 job listings and applied to every single one of them. These jobs fell into a few different categories:
- Some used programming languages that I had gained experience with during school
- Some used programming languages I didn’t know at all
- Some used Ruby on Rails….which I was really excited about given my fascination with the language.
Over the next couple weeks, I started hearing back from companies and recruiters.
I lined up interviews via two recruiters and a couple of companies directly. One of the companies was a company that used Java, which I had used in school. I still remember it pretty well. When I went in for my interview, the hiring manager led me into a big room with a large desk. Two men were giving the interview. After we shook hands and introduced ourselves, we got into the meat of the interview.
To start off, one of the men asked me a question:
“How well do you know Java?”
I thought about it for a moment, then responded:
“Pretty well. I used it in college a bit, and I have some experience with C#, which is a pretty similar language.”
The man thought for a moment and asked me a follow-up question:
“So how will the JVM’s garbage collector deal with the following scenario….”
He continued by describing a scenario that I was honestly very unfamiliar with. I responded:
“I’m not really sure, to be honest. I generally focus on writing code and solving problems with the language, I don’t know how the JVM works under the hood.”
The man nodded. He then asked me a few other nuanced questions. I didn’t know the answers to any of them! I remember walking away dumbfounded. I was wondering why he expected me to have the answers to all of these questions.
The company decided not to move forward with me for the position.
I still had a number of other interviews
They all went better than the first interview. I felt really good about some of them…but still…none of them developed into an official job offer. But I kept coding, applying, and looking for the right position for me.
Eventually, I landed an interview for a position using Ruby on Rails. I was really excited, but nervous too. The position was focused on Rails, but it also required some coding in the Python language, which I hadn’t worked with before. I studied Python a bit beforehand to prepare.
The interview was very technical. At least 5 different team members came into the room and asked me in-depth technical questions.
The first interviewer, a man named Neal, was the head of the team. If it worked out, he would be my boss.
Neal told me a little about the company, the position, and his background. Then we got into the technical questions. I still remember the specific questions he asked me.
“Your resume says you know C.”
I responded with something like:
“Yup! It’s been a little while since I’ve used it, but I’m comfortable using that language.”
“Ken, can you reverse a string in C?”
He handed me a piece of paper and a pencil.
“Let me know when you’re finished.”
I remember being surprised by the format. Most interviewers ask candidates to code on a whiteboard. It was a little strange to do it using paper and pencil.
This was a relatively easy question…it involves doing pointer arithmetic in C. The question is designed to filter out anyone who doesn’t know the language. Luckily for me, I knew what I was doing.
I quickly wrote the solution and handed it to Neal. He studied my code, then asked a few questions about my background. I felt like everything was going pretty smoothly.
The next few interviewers were up.
They worked for different (but related) companies to the one Neal worked for. That’s because Neal was actually the only employee at his company at that time.
They talked a little about the position and asked me a few questions about databases. I came up with a viable solution to the question they proposed… but it wasn’t the correct or most elegant solution. They probed me and pushed me to solve it in a better way. I told them I wasn’t 100% sure how to do it the way they were suggesting.
They seemed to be ok with this. So we moved on from the problem and talked high level about Neal’s company and their role in related companies.
Overall, the interview went ok.
It didn’t go great. It didn’t go terribly.
I wasn’t sure what to expect, but I kept my head high. I stayed in contact with them over email. The next step was to talk to the Chairman of the Board of the company.
I spoke to him about a bunch of high-level things regarding the direction of the company, and it went well.
And things worked out! I got an offer and accepted it almost immediately.
On day 1 at my first job, a weird feeling hit me.
My boss gave me a brief overview of my responsibilities, told me to fill out some paperwork, and then asked me to get the app running on my computer.
I was really struggling to get things installed on my computer.
For some reason, I couldn’t get MySQL to install on my computer. I struggled for a couple of hours to get it installed.
“How is it coming?”
I shamefully explained that I was struggling to get MySQL installed. Neal gave me a couple of pointers, and I eventually got MySQL installed an hour or so later.
The experience horrified me a little bit. I struggled so hard to install simple programs. I had virtually no experience in web development, and I felt like I was in way over my head.
In this moment, I was convinced that I had tricked the team into hiring me.
I really didn’t want to get fired from my first full-time position, but I thought it was possible. So I did what any ambitious kid would do.
I stayed late. I worked long hours to compensate for not having any idea what I was doing. I shipped features and learned different tools and technologies that I needed to in order to accomplish the responsibilities that were expected of me.
One night I stayed until 2 in the morning… debugging an issue on the day we launched a new feature that was broken.
I volunteered to do things I had no idea how to do.
For example, I had absolutely no experience with server configuration. But my boss asked me to make some changes to our Apache configuration to make files load faster. Prior to this position, I didn’t even know what Apache was! I had no idea how to do it. But given the fact that I tricked my way into the position, I felt that it was something that I had to do.
I made some mistakes. But more importantly, I learned how to fix a lot of the mistakes. I also built up systems to make these types of mistakes easier to recover from, whether the mistake was my own or done by a different employee.
I sometimes asked for help. I tried to figure things out on my own, but sometimes I knew the only way to figure something out would be to ask for help. My coworkers were incredibly smart, so I used them as a valuable resource.
Over the course of the next 9 months, I accomplished more than I ever thought possible.
I overcame a serious case of imposter syndrome. I no longer felt like the junior web developer that I had been hired as. I stepped up and accomplished a lot.
My fake-it-until-you-make-it approach to my first job helped me learn all the things I needed to know in order to really excel.
If you think about it, that’s really what every developer should do on their first job.
If you land a job as a junior developer, it’s probably not because you tricked the team into hiring you. Instead, it’s because you have a base level of skills and showed that you have a willingness to learn and grow on the job.
So, do you want to get a job as a developer?
Gain the skills you need to convince someone to hire you, work really hard, and push yourself as far outside your comfort zone as possible.
Eventually, you’ll look back and realize that you didn’t fool anybody. You just proved that you’re willing to step up to the plate when the opportunity arrives.