├── Guide.md └── README.md /Guide.md: -------------------------------------------------------------------------------- 1 | # How I got 7 internships in 4 years 2 | ## About Me 3 | My name is Thomas Stansel. I have been programming since I was 14 years old and am a student studying CS at BYU in Utah. Attending a barely top 100 CS program I have learned a lot about how little the majority of CS programs do to inform students about how to get internships and why they are important. I was lucky enough early on to discover the cscareerquestions and csmajors subreddit where I learned about how getting internships would set up my career and I learned a bit about how to get these internships. 4 | 5 | Although having achieved the goals I set out to achieve, I have not found a single guide that had all of the relevant information that I used. Rather, I have found bits and pieces from talking with those in the industry, reddit posts, and personal experience. This book or guide will serve the purpose of compiling all of the information that I have found helpful and make the lives of those who read it easier. 6 | 7 | To establish that this guide will be helpful and that I have some idea as to what I am talking about, below is the time line of my 7 internships over the course of my 4 years at university giving me 1 year of full time experience and 13 months of part-time experience as a Software Engineer. 8 | 9 | **August 2019:** Start first semester as a CS student at BYU. 10 | 11 | **November 2019:** First software engineering internship with BYU’s Office of Information Technology (OIT). Here I worked on creating a mobile app in React-Native that would be used to help managers manage the on-call schedules of their direct reports. 12 | 13 | **January 2020:** Start second semester of first year at university, and got a pay raise of $4/hr at OIT. 14 | 15 | **June 2020:** Left the OIT internship to intern with Capital One. I was supposed to be located in Richmond, Virginia but due to COVID19 I was remote. For my internship with Capital One, I worked with 2 other interns to create software that analyzed AWS resources and found out if the attached security groups needed to be updated. The main technologies I used here were Python and AWS Lambdas. 16 | 17 | **August 2020:** Start of first semester of second year at university. I returned to OIT, where the app that I was working on was put on hold and my job became data entry. 18 | 19 | **January 2021:** Start of second semester of second year at university. Due to my job at OIT becoming data entry focused, I left and got a part-time internship at a local web hosting company named Bluehost. My main task was to work with two senior engineers to refactor legacy code and increase the unit test’s code coverage. I did have one solo project where I was able to create analytics for customer notifications. Here, the main technologies that I used were Perl, for all legacy code, and Python for the notification analytics. 20 | 21 | **June 2021:** End of internship with Bluehost and start of second internship with Capital One. This time with Capital One I was supposed to be based out of NYC, but again due to COVID19 I was remote. Over the course of this internship, I again worked in Python and with several new AWS tools. This internship consisted of two projects: first, two other interns and I worked to update how database credentials were fetched from an API and second, we worked to inject several new pieces of data into a machine learning model. 22 | 23 | **August 2021:** Start of first semester of third year at university. I started at a small local health tech company called Novarad. I was assigned to work on creating a machine learning modal, however after being onboarded I learned that my job would mostly consist of creating the data set that would be used rather than any actual coding. 24 | 25 | **November 2021:** Quit Novarad and joined a new tech Unicorn called Taxbit. Here I worked on the ingestion team to help ingest data from a variety of crypto exchanges. This customer data was run through a tax engine to help the customer determine the capital gains/losses on their crypto transactions. 26 | 27 | **January 2022:** Second semester of third year. With the start of the new year, I was given a project with another intern to work on. The idea was to save developers a few hours a week; by creating a tool that would extract failure data from a process with ~30,000 events a week and present the data in a helpful way. 28 | 29 | **June 2022:** Start of internship with Amazon in Seattle. I worked on a team that manages analytics for on-demand call centers in AWS. My project was to create the cloud architecture for a new ML endpoint to create new analytics. Here I worked in Kotlin and with CDK. 30 | 31 | **September 2022:** Start of internship with Lyft working remote. I worked on a team that is working to create a mapping system for Lyft. My project was to update a testing suite that compared the output from a stable version and a new version of the mapping system to ensure there were no unintended changes to the directions produced. 32 | 33 | **January 2023:** Start of final semester of university and start of new grad role at Lucid Software. My initial offer was for starting after graduation but because I only have a single class left I was able to start full time work in January. My team is working on creating a new product for Lucid. 34 | 35 | ## What to do if you are in High School? 36 | Being in High School and knowing you want to be a Software Engineer puts you light years ahead of the average student. Most college students change majors at least once, so knowing what you want to major in puts you ahead of the game. Even further, starting to learn the basics about programming will exponentially increase the distance between you and other students. 37 | 38 | Now you’ve decided you want to be a Software Engineer, what’s next? 39 | 40 | You may think getting work experience would be the best thing to do, and to be honest you would be right. However, while internships for high schoolers do exist they are extremely rare. In my opinion, the best thing to do as a high school student is to grow your passion. 41 | 42 | There will be many times in college that will make you question if Computer Science is really for you. Trust me, having to rebuild an already existing data structure in one class, self teaching yourself Calculus in another, while learning binary and assembly code will suck the life out of you. Being able to have some projects you have worked on to look back on or projects that you keep working on during these times will be extremely helpful. 43 | 44 | Discover what parts of software you are interested in. Do you like games? Make some mobile app games. Do you really like math? Make an advanced calculator or some kind of binary to hexadecimal converter. Find what is fun to you and program it. 45 | 46 | These projects will teach you many new things about programming. These new things you learn will continue to grow your skills, will keep your interest in CS piqued, and they will do wonders for your resume. 47 | 48 | ## What to do if you are in year X at university? 49 | Some people may say it is best to focus on projects in year 1 and year 2 and then focus on interview prep year 3 and year 4. 50 | 51 | I disagree. 52 | 53 | My advice below I believe applies no matter where you are in software engineering journey. The only caveat I will add to the advice that follows is, at some point you may have to have a honest conversation with yourself. A part of getting that first FANNG+ internship or getting a new grad offer there is luck, and sometimes you are just unlucky. 54 | 55 | Rather than just working on projects and preparing for interviews, it may best to accept a full time offer or internship that is not what your exact goal was initially. It may take you an extra year or two or three you finally get to that dream company of yours. It took me 3 summers before I got an internship with a big tech company, it may take you less it may take you more. You may never get an internship at a big tech company but then get a new grad offer. You may have to start somewhere else for new grad and switch into a big tech company a few years later. 56 | 57 | The point here is that just because you miss your goal, or you don't realize the amount of work it takes until your last year in university, you can still reach that goal if you extend the timeline a bit. 58 | 59 | ## How important is a top 10 Computer Science university? 60 | Here is the thing about top schools. Attending a top school will absolutely help you land internships at top companies, but probably not for the reason you think. The education will be better, but you will learn the same things at any school. The main difference between a state school and a top 10 school is the network. 61 | 62 | The career fair at my top 100 school was dim at best. There were no top tech companies at the fair, and the only companies there were local companies that no one outside of the area has heard of. From talking with friends at top 10 schools, career fairs at a top 10 school are a complete flip. All top tech companies send recruiters, often a team of recruiters, to the career fair. Often attending these schools can get you interviews just because of the school you attend. 63 | 64 | On top of the career fair, you get to meet extremely intelligent and successful alumni who come back and speak to students. Further, there are more alumni from these top tier schools at top tier companies who you can get referrals from. 65 | 66 | Is it possible to get into FANNG (top tier tech companies) at a not-so-good school? 67 | 68 | **ABSOLUTELY YES.** 69 | 70 | The path is harder, but it is still possible. 71 | 72 | When choosing a college, go to the best college that you can reasonably afford. Personally, I have tried to avoid debt as much as possible and while it is not possible for everyone to do so, the financial difference between attending a top 10 school compared to a school in your state is going to be great. 73 | 74 | Ultimately you will have to decide if the better network and experience is worth the extra cash compared to a state school. 75 | 76 | ## What kind of goals should you have? 77 | The most important thing to do above all is to set goals. 78 | 79 | Do you want to become a CS Professor? Do you want to become a Software Engineer at a top company? Do you want to start a tech company? 80 | 81 | You gotta know where you want to be before you can make a plan to get there. My goal was to get a software engineering job at a top tech company. If this is your goal, as it was for me, the following is the plan I followed. 82 | 83 | * Keep GPA above a 3.2 84 | * Create at least one side project a year 85 | * Have a tech related part-time job throughout the school year 86 | * Have a software engineering internship each summer 87 | 88 | This is not the only plan that will work, it is just the plan that I chose for me. Here’s why: 89 | 90 | #### 3.2 GPA 91 | Everything I read surrounding GPA is that most companies don’t care about GPA for new grad recruitment as long as it is above a 3.0 and no one cares after new grad. I chose to try to keep my GPA around 3.2 because I felt that provided some wiggle room for me down the road. 92 | 93 | Because of the wiggle room and being able to do well in my classes the first couple years, I chose to spend more time applying to internships or doing side projects instead of studying. I wouldn’t go as far as to say you should fail a class for these things, but I would argue the benefit for your career is worth going from an A to a B or a B to a C. 94 | 95 | #### One Side Project a Year 96 | Side projects are an important piece of your resume. I will explain further in the Resume Section, but essentially side projects are the first step in getting an internship or part time engineering job. 97 | 98 | I chose to create one a year, because I felt it reasonable enough to do. Most of the side projects I created started out as an idea I thought would be cool and then were kickstarted by attending a hackathon. From there I slowly worked on it over the semester. 99 | 100 | #### Part-Time Engineering Jobs 101 | Look at your school's IT department, local tech companies, or anywhere that has a website. 102 | 103 | I have been able to find these kinds of jobs through LinkedIn and googling Top Tech companies in . Most of these places don’t have open internship positions but I have had some success in sending an email to the general careers email asking about internships. 104 | 105 | You can always become a TA for one of your past CS classes, but I would recommend doing this only if you can’t find a part-time engineering job. Solely because the engineering job is more related to what you will be doing for internships and full time jobs. 106 | 107 | #### Summer Internships 108 | Internships are the closest thing to an actual full time software engineering job. Almost every internship has an opportunity for a return offer. This return offer could be for another internship with the company or a full time gig. Being able to have a return offer in hand when starting your final year of college will be a huge relief. From there you can of course still apply to other companies but you always have that return offer in your back pocket. 109 | 110 | ## The Internship/New Grad Search 111 | To get an internship or full-time role there are two steps: 112 | 1. Apply 113 | 2. Pass interviews 114 | 115 | I talk about each of these steps in detail below, but the TLDR is to put yourself in the best position possible to pass the interview and then apply to anything and everything. 116 | 117 | Freshman year, I spent around 15 minutes a day looking for, compiling links to, and submitting applications and around 30 minutes a day practicing super easy Leetcode problems. At the end of the first year, I applied to around 300+ internships. 300 applications led to 3 interviews, leading to 2 final rounds, and 1 offer. 118 | 119 | TLDR spend a little time each day applying for internships and preparing for the interviews. 120 | 121 | #### How to find Internships/Full-Time Jobs? 122 | There are some obvious places. LinkedIn (Handshake if your school has it) individual company career sites, and career fairs. 123 | 124 | There is also the [PittCS Github repo](https://github.com/pittcsc) (in their account they have an internship and new grad repo) that contains tons of applications and is updated throughout the recruiting season. 125 | 126 | The 15 minutes I would spend each day involved checking the PittCS repo for updates, sorting internships on LinkedIn for postings posted in the past 24 hours, and searching for new postings on my school’s Handshake. 127 | 128 | As I progressed through college I spent less and less time applying. Once I interned at Capital One there were only dozens, compared to hundreds, of companies that I wanted to intern at instead of Capital One. When you have one offer in hand, the only reason to apply to places you would not take over that offer is if you want more interview practice, otherwise you are just wasting your time. 129 | 130 | #### How to get interviews? 131 | Getting interviews may seem easy enough but the reality is you are competing against every other CS student across your country or region, and sometimes across the globe. The most ideal situation you can put yourself in is to have all of the following when you apply: 132 | * Referral from someone who works at the company you are applying to 133 | * Great resume (see below for what that looks like) 134 | * Experience with the tech the company is using 135 | 136 | Because these companies are receiving thousands if not tens of thousands of applications a month they often use an ATS (Applicant Tracking System). Often these systems have a way to automatically scan your resume and pull out information that is then used to decide to reject you or move you to the next round. Making your resume ATS readable is important to avoid auto rejection as much as possible. I have had the most success with this [resume template](https://www.overleaf.com/latex/templates/faangpath-simple-template/npsfpdqnxmbc). 137 | 138 | This is the most ideal, but is not realistic. It is impossible to know every piece of tech and get referrals at every company. However, the more of these you have the better spot you will be in. 139 | 140 | My process is to start months before I want to start applying by doing the following: 141 | 142 | 1. Fine tune resume (to match system below) 143 | 2. Compile possible referrals at companies I want to work 144 | 3. Start preparing for the interview 145 | 146 | #### What does a great resume look like? 147 | When writing your resume keep two things in mind: first, recruiters are going to spend 10 seconds max looking at it, and second, this document should be flawless. 148 | 149 | Many big tech companies have systems in place to scan your resume or have you re-enter the information so they can auto reject you if you don’t meet certain criteria. This could be because they are unable to hire international students, they only want students who are juniors or any number of other reasons. There is not much that can be done to get past these filters other than to have all the requirements they want. It can be infuriating to get emails from recruiters telling you that you are a fantastic candidate and exactly who they are looking for but that they can’t hire you because you are just a sophomore, but alas such is that company’s prerogative. 150 | 151 | After knowing the above, the most important thing to learn is how to organize your resume. 152 | 153 | I organize my resume in the following order of importance: 154 | * Name and contact info 155 | * Education with GPA 156 | * Paid Experience 157 | * Unpaid Experience 158 | * Side Projects 159 | * Extra-Curricular/Volunteer/Awards 160 | 161 | **Name and Contact Info** is the highest priority because it should be incredibly easy to find and discern. If you include a personal website, make sure the link you give is active and working correctly. Turn the color of the links black, a blue hyperlink just looks bad. 162 | 163 | **Education** is the next most important thing assuming you are a student. Recruiters need to know when you graduate to determine if you qualify for the job. If you don’t include an expected graduation date or your actual graduation date you are just delaying a rejection at worst or making recruiters do more work at best. Neither suits you well. 164 | 165 | I talked about GPA in another section but rule of thumb is if it is greater than a 3.0 put it on if not leave it off and provide it when asked. 166 | 167 | **Paid Experience** is the best thing to show recruiters that you are qualified outside of meeting the arbitrary list of requirements they have. Paid experience shows that someone else was willing to pay you because you were good enough to provide a service. 168 | 169 | **Unpaid Experience** is worse than paid experience but better than side projects because it shows that someone was willing to put time into you. 170 | 171 | Unpaid experience really shouldn’t exist in the world but it does and so here we are. In my opinion, only accept unpaid experience if you have no other options. If you go this route, see if you can at least get some school credit or something in return for these efforts. 172 | 173 | **Side Projects** are still good because they show that you are able to finish a project and that you like to learn. They are a really good place to start when you apply for your first job as it shows how passionate you are about the topic, but ultimately they are less important than experience. 174 | 175 | When working on your side projects, pick something that excites you so when you are talking about it on your resume and in an interview that passion and excitement shines through. 176 | 177 | #### What if you can't think of an idea for a projet? 178 | Most students I've talked to get stuck thinking they have to come up with the next Google for their side project. You don't. You can absolutely re-invent the wheel here or do something that will never make a doller. Remeber the goal here is not to make a startup but instead to gain experience for your resume. 179 | 180 | Hackathons are also extremely useful. (mlh.io)[https://mlh.io] is a good resource to find hackathons, but often clubs on campus will do them. Go with an idea or don't, the goal is to just kickstart that side project. Get a lot of progress done in a 24 or 36 hour period then make small peridotic updates throughout the semester. 181 | 182 | Lastly, if you absolutely cannot think of an idea, use one of mine. 183 | * Text To Art - Take in a string, section off 3 characters at a time, convert it to hexadecimal, and turn it into a pixel 184 | * Alexa CAPS - Make an Alexa skill that lets a student ask for their university's Counseling and Psychological Services phone number for them to call 185 | * TherAssist - Using a pre-trained machine learning model detect emotion in a human face to see if the user is replicating the emotion shown 186 | * Flappy Bird Clone - Android, iOS, or Web App of the famous Flappy Bird game 187 | 188 | The other thing to know, these ideas above may look daunting but break them down into pieces. For example, the Flappy Bird clone maybe just find a tutorial on line or for the Text To Art, the first thing you'll need to do is read in a String from the user, then split it into a list of 3 characters, etc. The goal is to identifiy the small pieces and then start there. 189 | 190 | There is a difference between following a Youtube demo and making a project, however you can follow a tutorial to a tee and then change it up a bit to make it your own. For example, I followed a tutorial to create a travel site to learn about React and then changed it and built some custom components to make it my own personal site. 191 | 192 | #### How to describe your contributions at a job? 193 | Bullet points should be front loaded with metrics. Do not say, I created a tool to view data. Instead say, Saved X hours a week by creating a tool to extract data from a 10,000 events per day api. 194 | 195 | Remember, recruiters who are non-technical are going to spend 10 seconds on your resume at most. Front loading your bullet points with metrics like this shows that you can create value and is eye catching to a recruiter or hiring manager. 196 | 197 | #### How to get referrals? 198 | Create a google sheet with the following information: 199 | * Name 200 | * Contact Info 201 | * Last point of contact 202 | * Any commitments you agreed to 203 | 204 | **Friends and Family** 205 | 206 | Start with people you know. Talk to friends, friends of parents, professors, anyone you know who works at or might know someone who works at a company you want to work at. 207 | 208 | **LinkedIn** 209 | 210 | Go to the search bar on LinkedIn, filter by company and by school. This should allow you to find alumni of your school that are working at the company you specify. 211 | 212 | Send them a message like the follow: 213 | 214 | Hi **their_first_name**, My name is **first_name** and I currently attend **school**. I saw that you work at **company** and was hoping to have a quick 5 minute chat (or even just messaging on here) about how I can best prepare myself for the interview process for a **job_you_want** there. 215 | 216 | Look forward to talking, **first_name** 217 | 218 | Before this chat takes place, come up with a few questions to ask. Below are some examples: 219 | 220 | * What do you recommend I do over the next months to be in the best position possible? 221 | * What do you wish you would have known when in my shoes? 222 | 223 | The goal of this chat is not to ask for a referral, it is to show you are serious about working at X company so when the time comes for you to apply you have a connection that knows you want to work there. 224 | 225 | **Blind** 226 | 227 | Blind is like if Reddit and LinkedIn had a baby. 228 | 229 | Go to the search bar, and search for "**company_name** referral", look for people soliciting referrals, dm the poster. People often solicit referrals there because if you get the job, they are given a bonus by their company–take advantage. 230 | 231 | Less important for Blind, but make sure you track every interaction with friends, family, and on LinkedIn and be sure to follow up. When it comes time to apply, send another message updating them on your progress and ask if they would be willing to refer you for the position you want. Include the link to the position when you ask, makes it much easier for them to see the qualifications and if you meet them. 232 | 233 | #### How to prepare for the interview? 234 | Interviews have two portions: a behavioral section and a technical portion. 235 | 236 | The behavior portion usually includes talking about why you applied for the internship, what you hope to gain, how to relate to the company’s core values, that you are generally a decent person, etc. 237 | 238 | The technical portion includes solving an algorithmic/data structure problem. My personal favorite place to practice these questions is on [Leetcode](https://leetcode.com), but [Hackerrank](https://www.hackerrank.com) and [CodeSignal](https://codesignal.com) are other good free places. Leetcode does have a premium subscription that gives you more content and access to a list of a company's top problems they ask in interviews. These premium subscriptions are absolutely worth it. Because you get access to commonly asked questions, you may do a problem and then get asked that same one in the interview or even if you don’t, you get exposed to the level of difficulty and type of problem that company asks. 239 | 240 | Another resource I used was [AlgoExperts.io](https://www.algoexpert.io/product). This resource is designed to allow users to practice problems and also have access to a video tutorial for that specific question after. I did find it useful, but I would also argue you could find these tutorials on YouTube although it may take a bit more of your time. 241 | 242 | Both sections should be practiced. Get some friends and practice interviewing each other. Ask each other questions such as, “Why do you want work for Google?”, “Talk about a time where you didn’t reach a goal and how you overcame it.”, or “One of our core values is **core_value**, can you talk about a time you showed **core_value**”. Sometimes companies have a list of possible questions on their career page, so take a look there too. 243 | 244 | For practicing technical questions, I have had the most success in just meeting with friends once a week to give each other problems and work on them together. 245 | 246 | The more practice you do the better off you will be for the interview, but remember to pass an interview you have to be as prepared as possible and you also have to be lucky. 247 | 248 | No matter how much preparation you do you will not be able to study every type of data structure and every type of algorithm. There is always a chance the interviewer gives you a kind of problem you have not practiced. Understanding this is a part of the game, and will allow you to deal with rejection much easier. 249 | 250 | #### How to deal with rejection? 251 | Rejection is a huge part of the recruitment search. Learn to let it roll off your back. Easier said than done, but the following has helped me. 252 | 253 | Understand that companies would much rather not hire a great candidate than hire a terrible one. What this means is that many candidates, who are qualified, get filtered out. Whether it is because of the automatic resume processor the company uses or getting unlucky and getting a technical problem you have not practiced, you will experience many rejections as you go throughout the recruitment process. 254 | 255 | Many newcomers to this game will point out and rage hell about how leetcode is terrible and how it is not a good way to determine programming skill. I wholeheartedly agree, yet given companies preference towards rooting out false positives I can see why companies do not care. Along this thread, a rejection email should have no weight on how you view your programming skill. The only weight a rejection should have is towards your algorithmic and data structure knowledge. Which just means you need more time to learn and practice those things. 256 | 257 | To further expunge yourself of any doubt here, think about how many algorithm and data structure classes you take in your 4 year degree. Personally, I had one data structure and one algorithm, while I had several programming or software engineering classes. The time you spend on data structures and algorithms is proportionality super low compared to time spent on software engineering. It would make absolute sense to be worse at data structures and algorithms than programming. 258 | 259 | ## Closing Advice 260 | I have found that most students are not confident in themselves and it makes sense. It is hard to go from being a new software engineer to trying to negotiate with massive multibillion dollar companies. The most important thing to remember is you are a valuable resource and the company needs you. I show whatever level of respect I am shown from a company. If they give me an offer and only a week or two to accept, I am more than happy to accept and renege later if I get a better offer. **Adopt the same attitude.** Companies are a dime a dozen, don't let them convince you otherwise. 261 | 262 | Have a brutally honest conversation with yourself and figure out what you need most from a job. Do you care about money, if feels like you are making an impact? Is learning the most important thing to you? Can you compromise work life balance if it means making more money? 263 | 264 | Identify what your top 3 incentives are and never compromise. It does not matter if this means quitting an internship halfway through or quitting a job on your second day—fight for your incentives. 265 | 266 | I don’t recommend quitting unless you have something else lined up. Internships and new grad roles where you do nothing are better for you resume than a blank slot but nothing is worth losing your mind from hating the hours of 9 to 5 each day. Each situation will be different but it is important to recognize that your incentives should be apart of that decision every time. 267 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Welcome to the Internship and New Grad Search Guide! 2 | 3 | Attending a university where internships are never talked about, I learned most of what I know now from reddit, linkedin, or talking with upperclassmen. I still have not found a single place with all the information that I used to get my internships so I decided to write a one. In this guide, you will learn everything you need to know about getting an internship or new grad role and how I was able to get 7 internships in 4 years. 4 | 5 | Please feel more than free to star, share with freinds, and suggest new sections by raising an issue or a pull request! 6 | 7 | If you enjoy the guide and want to send a few dollars my way, send them to [Code.org](https://code.org/about/donors) instead. 8 | --------------------------------------------------------------------------------