The goal of FirstDevJob is to collect advice from engineers throughout the industry in order to help others that are trying to break into the industry. The site is currently under development, but you can see my article published on his site here.
Keep in mind that the following advice comes from the small amount experience that I do have. Not everything will apply to your circumstance. Instead of just repeating what worked for me, try to take away just a few pieces that you can apply to your own life.
“Advice is Autobiography” — James Altucher
What motivated you to pick up development?
As a kid in high school I always dreamed of building an iPhone app, but I had no idea where to start. The world of programming seemed very overwhelming and I was busy with plenty of other things, so I kind of just forgot about it.
At Bucknell University (where I go to school), I study Chemical Engineering. I wasn’t quite sure what I wanted to study coming in as a freshmen, and only 10 weeks into my first semester I was forced to declare my major. Luckily, I randomly took an introductory programming class and became mildly interested in programming. Then I took another class in the Computer Science Department in the following semester. Around this point I became obsessed. It started out as just a genuine joy for programming, and then I slowly became fascinated with the tech industry as a whole and where technology is taking us.
My major is still Chemical Engineering but I have continued to supplement it with Computer Science classes along the way. Programming has now become a major hobby that I do during a lot of my free time outside of class.
What in your opinion is the best way to learn development? What worked for you? Any resources you would like to recommend?
I don’t think there is one “best” way. Everyone’s situation is different and there are tradeoffs to everything. That being said, I can share a few tips that I believe have helped me get to where I am now (I still have a lot to learn):
Eliminate Distractions: This is related to the point above. While you’re coding, try to be 100% focused. Block email and distracting social media websites. Try using a website like YouTubeOnRepeat to play one song on repeat. All of these things can help you get into a flow state which will help make coding more enjoyable and allow you to accomplish more in a shorter period of time.
Map out your journey: FreeCodeCamp does this for you. I’ve heard great things about the Odin Project as well. If you don’t want to do web development, that’s fine. Instead just take the time to figure out what you don’t know. I guarantee you that there are amazingly helpful guides for it somewhere on the internet.
Follow your map: Set up a consistent schedule for yourself and do whatever it takes to follow it. If you are serious about getting better, try to write code every day (or at least 5 days a week). I have found having a really clear vision in my head for why I want to learn development helps sticking to this when you are tired, or want to relax, etc.
Build things: You have to constantly be building and applying everything you are learning in order to truly understand it. Theory is extremely important, but building something with this theory is absolutely essential.
Podcasts are also amazing for staying up to date with the industry. Software Engineering Daily is my favorite.
How much time did your internship search take?
I started applying at the end of August and I did not accept an offer until the end of October (~2 months). I applied to ~50 companies, got interviews with 8. I went to 2 onsites and got offers from both.
Most of the people learning development are not sure when to start applying for a job. At which point in your journey you felt that it was the time to start applying?
For me it was easier because I was applying for summer internships. I knew from my sophomore year that it’s extremely important to start applying early. Essentially I had a date in my mind when I knew I was going to start applying and I did everything I could in the 9 months before that to make myself a competitive applicant.
I think self-taught developers could benefit from this strategy as well. Choose a date 6 months, 1 year, 18 months (or however long you want) in advance by which time you will force yourself to start applying to jobs. You might find out that you’re not quite ready by that date, but you can continue learning more while applying to a few jobs everyday.
Since many first timers don’t get past resume screening, what is something that you think helped you clear that stage?
Get your resume checked and reviewed by other people that know what they’re talking about. /r/cscareerquestions/ is a great resource for this.
Build more sophisticated projects. It could be you just haven’t built a sufficient skill set yet. Get ‘so good they can’t ignore you’.
Apply to more companies. If you are actually good and just can’t get past the resume screening, all you need is a few interviews. Once you blow them out of the water and get an offer, you can use this as leverage to get interviews with more competitive companies. Cold email recruiters or reach out to them on LinkedIn. This is more effective after you’ve gotten at least one offer.
Network. Go to meetups, help other people, build your brand by writing on Medium or a personal blog. Don’t be afraid to tell people you are currently in the process of job searching, although don’t be obnoxious about it either. If you are providing value to people before you start looking for a job, they will naturally want to help you.
Sometimes job openings for junior developers list too many requirements. What is your advice to deal with such openings? Any tips on choosing the right companies to apply to?
In general, don’t worry about the requirements listed on each application. Most companies really just want you to be able to write good, clean, readable code and solve hard problems. Especially for entry level positions, they don’t expect you to have every skill on the list. In general, you want to focus on a certain area during your learning process.
As far as choosing companies, I’d recommend applying to more places than you think you need to. I would personally start by applying to around 20 companies per week until you start getting interviews. After a few weeks you can adjust this number up or down depending on the number of interviews you are receiving.
For the majority of companies, just send your resume (no cover letter). In this industry, a lot of cover letters simply do not get read. During my job search I sent exactly 0 cover letters and I don’t believe that it negatively impacted my ability to get interviews. If you do have a few “dream” companies, it might be worth spending a little extra time to write a personalized cover letter just for those companies. If you are applying to mostly smaller companies, it’s probably worth crafting a few cover letters or reaching out to someone from the company on a more personal level.
What are the common mistakes that you see juniors make when trying to get their first job? And how do you think they can improve their chances?
Not getting good enough.
Sure, there is a lot of randomness in the interview process. Sometimes it’s hard to get an interview and sometimes you crush it and still get rejected. That being said, a lot of people have talked about this idea of “So good they can’t ignore you”. I truly believe that if you put in the work and get to a level where you can provide a lot of value to a company, you will land a job fairly quickly. Build a fantastic portfolio and grind through as many problems on CTCI (Cracking the Coding Interview) and LeetCode as you can and you will be prepared to crush every technical interview.
I realize this is controversial advice, especially in a field where imposter syndrome is very present. People have a tendency to think they are never good enough. That being said, I believe that people need to stop accepting that imposter syndrome is a natural thing that they will never get over. This might be true on some level, but having a good understanding of how your skills compare to others in the industry is extremely important. If you feel like you aren’t good enough, spend a little bit of time to figure out how your skills actually compare to those working in the industry and then evaluate. Maybe you just aren’t good enough yet.
Use the fact that you are trying to break into the tech industry as an advantage. Daymond John talks about this mindset in his book “The Power of Broke”. When I was trying to break in as an outsider, I knew I would have to be disproportionately better than everyone else just to get an interview. I was hungry for a job in tech. My disadvantage (not majoring in a directly related field) turned out to be a massive advantage because it motivated me to outwork everyone else applying for the same positions. How you can turn your disadvantages into an advantage? Put in the hours to hone your craft and I almost guarantee you will win.
If you could go back in time, what is one thing that you would tell your younger self searching for his first developer job/internship?
Enjoy the process. It’s cliche advice, but that’s because it’s true. Interviewing can be overwhelming, stressful, and exhausting. By the time you’re interviewing you’ve already put in the work. Try to relax, have fun and stay healthy. Don’t worry about landing the “perfect” job. It doesn’t exist. If you are trying to break into the industry, your first job is really just the beginning of your journey. Dan Abramov worked at companies most people have never heard of before going on to create Redux. Now he works at Facebook.
Any books/people blogs that you followed that helped you greatly? Something that you think every developer should follow?
Not all of these resources are directly programming related, but I do believe they were helpful in getting to where I am today.
- Books: Give And Take by Adam Grant, Choose Yourself by James Altucher, Deep Work by Cal Newport, Tools of Titans by Tim Ferriss.
- Podcasts: Software Engineering Daily, Scale Your Code, AskGaryVee Show, Tim Ferriss Show, The James Altucher Show, Developer Tea, CS75 Harvard Lectures.
- Websites: FreeCodeCamp, Pramp, LeetCode, Haseebq