I was a freshman and began self-studying programming around January - February. In May, I got my internship offer at a well-known company.
What I can say is getting a software engineering internship is hard nowadays. You have to go through the whole process of applying, studying for technical interviews and getting ghosted over and over. I understand the struggle, as I applied to over 700 companies to get my offer.
However, it is totally possible to get into the industry by self-study if you are rigorous and study the right way.
Below is a rough step by step guideline with the important steps I have taken, and a walkthrough of what I did in particular.
Step 1: Learning the Basics
They both offer explanations in the simplest way possible and teach you the absolute basics of what you have to know in order to break into the industry. I recommend starting out with CodeCademy to learn the syntax of the language of your choice.
Note: It is important to know which roles you want to apply to in order to study effectively. For example, if you are aiming for a front-end internship, the web development course on freeCodeCamp will be particularly useful. This guide will mainly focus on the front-end side.
What I did:
HTML and CSS are relatively easier to learn. I moved on to freeCodeCamp’s complete course on web design. It is one of the best free resource available. If you get through the whole course, you would know more than the basics of web development.
When you feel like you know the basics, I highly recommend to keep learning with the Front-end developer’s handbook. It provides a complete list of resource for more advanced learners, both paid and free. It contains thousands of hours of reading and will teach you all the tricks a master web developer should know.
Step 2: Creating Projects
After a few weeks, you should be ready to commit to creating a small project. Projects are huge on your resume when you don’t have a lot of experience. Again, freeCodeCamp offers very good project ideas. Start with something small.
If you are struggling on finding project ideas, you can Google “100 project ideas in X language” and it usually does the trick. Also, take a look at other GitHub repos and learn from their code.
When you are done, test it and put the source code on Github. This is crucial, as it is the only way companies can validate your skills without prior work experience. Put good quality code with documentation when you can.
What I did:
When I got my offer, I had made 4 - 5 projects. I started with a small typing game web app forked from another student’s GitHub and learned a lot from their code, then added my own. I gradually moved towards more complicated projects. Here is a list of all the projects I made before getting my internship, their descriptions and the stacks I used:
- Various other small games like Minesweeper, all made with React and styled with CSS.
- A working React Native app to let users showcase their best pictures, with the backend implemented in Node.js and Mongoose, hosted on Heroku.
Step 3: Applying for Jobs
I have the most experience in this area as I have applied to so many jobs. The best tips I have, regarding the job search and interview process, are:
- LinkedIn, Glassdoor and Indeed Easy Apply are not your friends. With those type of postings, the recruiter receives so many applications they usually use an ATS (Application Tracking System) to filter out all the resumes. If you don’t have any previous experience or impressive projects, the chances that you will get through the filter are very slim.
- A cover letter is a double-edged sword. When done right, it can really differentiate you from the rest of the candidates. However, when done wrong, it can worsen your situation. My advice if you were to write one is to tailor, tailor, tailor it. Target your cover letter specifically to the company you are applying for. DO NOT send the same generic cover letter to every company, as recruiters know you have sent 100 of them already. Lastly, please make sure there are no grammatical errors. One typo is enough for the recruiter to reject you.
- I had the most success either applying directly on the company’s website or through cold emailing recruiters (or even the CEO if the company is rather small). If the company does not have a public e-mail, you can usually guess as it is almost always in the form
hello at companyname dot com. They have a MUCH higher chance of looking at your resume than if you submitted it via Indeed/Glassdoor. You can have a template and change slightly the wording for different companies.
- Have thick skin. Companies reject you for all sort of random reasons and recruiters ghost you all the time. It is normal. If you have a less attractive resume, you stand a smaller chance of getting an interview. Keep applying and do not give up. It is never over until you stop trying.
Step 4: Interviewing
When you finally land that sweet Interview, be sure to prepare for it. There are numerous resources online teaching you how to ace a technical interview. If you haven’t read it already, Cracking the Coding Interview is a very good read.
Technical interviews are very stressful. There’s no workaround for them - you have to grind algorithm questions. Leetcode offers tons of good questions for practice.
However, since they are so widely known, it is very unlikely you will get the exact same question you practiced on an interview. The interviewer usually has a bank of random questions that are not posted online. Still, the basic idea remains the same. For instance, it is always good to know your data structures and Big O thoroughly.
Another thing to note: companies I interviewed with often brought up my projects and asked me technical questions about the implementation. It is their way of testing if you have lied on your projects, so be prepared for it.
What I did:
To start off: it is ok to suck at interviews. I completely messed up my first ones. It is embarrassing to remember.
I realized I was not prepared enough for the technical questions. I started doing Leetcode 2 - 3 hours a day. The most important thing is not to spend too long on a single problem. You do not have unlimited time on your interview. Instead, put a timer, say 10 minutes for an easy question and 20 minutes for a medium one (you mostly won’t get Leetcode hard questions on your interviews if you are applying for an entry-level position or an internship).
If you cannot solve it in time, that’s completely ok. Look at the solution and try to understand it. Mark the question you cannot solve and try again in a week.
Since interviews also test your communication skills, you can prepare by saying your thoughts out loud when you do practice questions. Trust me, it may sound weird at first but it makes a huge difference in interviews when you are used to speaking up.
Resources: where to find entry-level jobs and internships
My 2 cents: I realized how dreadful it was to try and find internships openings. There’s no easy and fast way to find a complete list of companies with their internship listings. freeCodeCamp’s community is awesome and helped me a lot during my job, and I’d like to contribute back.
I came up with this app after my internship as my side project, to compile a list of companies and their internships/entry level jobs, filterable by location, tags, school term, etc. I will elaborate on it in the next section.
Finding your first job/internship can be a long, frustrating and tedious process. However, the experience you gain from the actual workplace makes it totally worth it.
Here is a comparison of the project I made after my internship and one of my first projects ever.
Quite a difference, right?
This is why I think the time spent during my internship was totally worth it. I would never have been able to make my last project without all the guidance and experience I gained at my internship. The project is a platform and a job board to discover internships and entry level positions for students, self-taught developers and new grads. You can view it here.
I strive to improve, and any feedback is welcome. I’d like to write my next article as a step-by-step guide on how I designed and structured the app, so let me know if you are interested. I’d also love to help others that are just starting out, as I understand the struggle. If you have any questions, do not hesitate to send me a message (you can highlight this and click the message icon on the popup).
Good luck everyone!