This book is for informational purposes only. Except when an external source is cited, everything in the book is the author’s opinion. The author makes no guarantee about the correctness or accuracy of any content in this book. Furthermore, you may disagree with and/or find certain content offensive.
Read at your own risk. Do not continue reading if you do not accept full responsibility for all actions you take as a result of reading this book. The author is not liable for any damages including, but not limited to, academic failures, career path mistakes, financial loss, feeling upset, and physical/mental injury.
Welcome to college: new world, new classes, new friends, new freedom. For most students, freshman year is the time to start a new chapter of life and get settled into a new world away from home. Have fun, explore, and learn on your own, but don’t get too carried away.
Although senior year and graduation seem far away, it’s never too early to focus on the ultimate goal: getting a well-paying job when you graduate. Getting a head start and doing things right your freshman year will give an immediate boost to your later years of college. In this chapter, we’ll lay out exactly what you should do in your freshman year to set yourself up for success later.
If you’ve read up to this point, then you should be fairly certain you’re going to study computer science as your major. Your first action should be to plan out your four years of computer science coursework and declare for the computer science major as soon as you are eligible. Research all your degree requirements, and list out which courses you’ll take and which semester you’ll take them. If you’re not sure what courses to take, read the descriptions, do some online research, and pick out what seems interesting to you. You can always come back and revise if you change your mind in the future. After you’ve built your plan of study, review and make sure your courses match all your degree requirements. You can also have an advisor in the computer science department review your plan and offer suggestions.
Prioritize computer science courses over everything else because the sooner you learn the fundamentals, the sooner you can apply for internships that boost your full-time job prospects.
Unless you test out of it, take Intro to Computer Science your first semester. Your first CS course should be taught in the Python programming language for beginner-friendliness. Another acceptable language is Java. Unless you have prior programming experience, do not start with other languages. C and C++ lack guardrails for beginners and lead to unnecessary headaches. MATLAB, R, Scheme, and Lisp are esoteric and difficult to wrap your head around. Many people quit the CS major because they take the wrong intro course and get intimidated by languages such as C++ and MATLAB; stick with Python or Java for a gentle introduction.
In the second semester, take your first data structures and algorithms course. The course is typically taught in Java or C++ and you’ll learn important CS fundamentals. Make sure you pay attention to all concepts in this course because data structures and algorithms play an integral role in your job interviews. Dedicate sufficient time to the programming projects to gain proper coding and debugging skills.
Although people will tell you not to worry about GPA, you should still focus on getting the highest possible grades in your freshman year CS classes because these are the fundamentals. Give your undivided attention in lecture and focus on understanding the intuition behind concepts. Anytime you solve a problem incorrectly, make sure you understand your mistakes. When you struggle, don’t be afraid to seek help and find friends in class to work with. Start your programming projects early so that you don’t end up cutting corners under time pressure. You need to master the fundamentals because if you don’t lay a solid foundation, then you will struggle in both advanced coursework and the job search later on. Take your classes seriously and by the end of your freshman year, you will have acquired basic proficiency with data structures, algorithms, and coding.
Consider supplementing your coursework with personal projects. Introductory courses contain standard, self-contained programming exercises. Your professor tells you all the program inputs and outputs. Your teaching assistants help you debug if you get stuck. Automated grading software runs and scores your code and instantly tells you if your code works. Nobody does this for you during a real job and coursework falls short of preparing you for real-world programming. Pursuing your own personal projects makes up for these shortcomings.
Real-world programming is complex and open-ended; simulate the experience via personal projects. You have to define your own problems, you have to debug on your own when you get stuck, and you have to test your own code. Brainstorm and search online for ideas of personal projects. At the beginner level, you don’t have to revolutionize the world with your creation and you can always copy existing ideas that are cool. Here are some examples:
Once you settle on an idea, simply start coding. You’ll make lots of mistakes and have to rewrite code, but that doesn’t matter. The more mistakes you make, the more you learn. If you get stuck, use Google to search for help, or post your question on Stackoverflow. Learn git and back up your code on Github in case you accidentally delete it. Design your application however you see fit and add whatever features you like. Test your product to ensure it works correctly. One thousand lines of code is a good size target for freshman-year projects. With every personal project, you get more practice, gain more programming experience and learn more intuition beyond what’s taught in class.
As you pick up new CS skills in your freshman year, seek out work opportunities. You should obtain a freshman year summer internship. Although getting a job offer with little or no experience seems impossible, many freshmen do find work opportunities. You can get an internship as a freshman if you do all the steps correctly, and there are four major parts to a successful internship search: resume, networking skills, interviewing skills, and choice of companies.
Everyone needs a resume to apply for a job. A resume is simply a list of bullet points describing your experiences. It tells a recruiter what you’ve done in the past and what skills you bring to the table if hired. To make the resume easier to scan, bullet points are ordered thoughtfully and separated by headings. There are two components to a resume that we’ll discuss next: layout and content.
Layout is how you organize and format the text on your resume. Many people, especially freshmen, have improper resume layouts because they don’t understand the nuances behind formatting technical documents. CareerCup’s resume format is a safe choice to follow: https://www.careercup.com/resume. People rarely give you bonus points for a cool-looking resume, so stick with something ordinary and standard instead of taking a risk.
Content involves how you describe your experiences. Many people, especially freshmen, also fall short here because they don’t embellish their experiences. Suppose you are reviewing two candidates, Al and Bob, who both worked as cashiers and now want a software engineering internship. Al’s resume says “fill orders, count change, attend to cash register” while Bob’s resume says “converse with customers to discover their needs and pain points, maintain highest possible customer satisfaction.” Bob describes his cashier experience with stronger words, which makes him a stronger candidate compared to Al. Embellishing with strong adjectives improves your character strength as perceived through your resume.
When you apply for your first job, you have few technical experiences and can’t meet all the job requirements; make up for these requirements with personal projects. People always complain about “the chicken and egg problem:” you need a job to get experience and all jobs require experience. In computer science, this concern is moot because anyone can manufacture experience by completing personal projects during free time. If you need more experience, do more personal projects, list them on your resume, and provide a link to your code on Github. Even if your project is awful and doesn’t work, post it with confidence because few recruiters will read or run your code. Don’t forget to embellish the success of your projects. Many software companies factor in experience you gain from personal projects so use them to pad an otherwise sparse resume.
In addition to completing personal projects, boost your resume with powerful subjective traits. Brainstorm what attributes you want to convey to the recruiter through your resume. Suppose a summer internship requires one year of Python experience, but you only just started learning Python in your Intro to Computer Science course. Since you don’t have the necessary Python experience, you could instead demonstrate you are a fast learner and will pick up Python by the time your internship starts. For example, a theoretical candidate could say
Although these bullets fall short of “one year of Python experience”, they still convey that the candidate learns quickly and lack of current Python experience may not be a huge problem. When you don’t meet a hard technical requirement, pad your resume with soft, subjective qualities to help cover your shortcoming.
If you are afraid to embellish your resume, review the chapter 6 content on lies about semi-verifiable facts. Even if you failed your tests in CS-101, you can still call your scores “outstanding.” The recruiter will not email your professor to confirm your grades. Even if you barely understand Tkinter, you can still say you self-studied it. Recite some random Tkinter information and any interviewer will be convinced you spent “a few weeks” learning it. Even if you don’t plan to take data structures and algorithms, you can still say you “expect to” if there’s another semester left. Nobody can read your mind. Companies want to hire the best interns; give them what they want by presenting yourself in the best light possible.
In addition to a solid resume, networking is the second component you need in your internship search. Networking involves building connections with other professionals and skipping ahead of other internship applicants because you received a referral from someone at the company. You could be the most talented engineer in the world, but if nobody knows you, you’ll be buried among the millions of internship applications recruiters receive yearly. On the other hand, you could be a poor candidate and still get an interview because your friend at the company submitted your resume as a referral. Having someone add their personal touch to your application brings you miles closer to scoring an interview, so let’s go over networking techniques from most effective to least effective.
Referrals from friends and people close to you are the easiest to come by. If you know someone well and they work at a company where you’re interested in interning, then just ask them if they can refer you. It doesn’t matter if they are an intern, a junior engineer, or a senior engineer — all referrals greatly boost your chances of getting noticed by the company. Furthermore, pretty much everyone will agree and put in some positive words on your behalf even if they can’t speak directly to your abilities. Very few people backstab their friends.
Always do your referrer a favor and provide them details about your experience. If you meet certain job requirements, explain why. If you can’t meet certain job requirements, provide some soft skills that help make up your shortcomings. Your descriptions will give your referrer something to enter into their internal referral system when asked about you, the candidate. Finally, if you get the job, send your referrer a thank-you note and/or a modest gift.
Acquaintances and friends of friends are also great sources of referrals. Just ask them to refer you and most people will agree, so long as you aren’t pestering them every year during intern application season. As with friends and close connections, you should be considerate and explain to them why you’re a great candidate for the position. Your referrer should not have to do any hard work; they should just have to enter what you tell them into their internal system.
Focus on expanding your personal connections because they are the best way to obtain referrals. You can meet people through a variety of events and activities: classes, clubs, social events, and more. Career fairs, in particular, are the best place to network and you should attend all of them. Find informal, conversational events with a lot of people in the software field, put yourself out there, and talk to recruiters.
Although your ultimate goal is to expand your network and leverage it for referrals later on, make sure you socialize and have fun. When you meet someone, start with small talk. If you struggle, consider applying advice from books such as How to Talk to Anyone by Leil Lowndes. You might struggle initially, but small talk with strangers becomes easier with practice. Engaging in small talk gives you sufficient time to make a memorable impression on the other party.
Once you get the conversation started with small talk, transition to more substance by asking about internship roles and selling your skills. Remember: recruiters are looking for talent. Give them what they’re looking for by putting yourself in the best light. Talk about personal projects you’ve done, any work experience you’ve had even if it wasn’t software-related, and mention you’ve been doing well in your coursework. Highlight your ambition and connect your skills to the internship positions the recruiter is trying to fill. Leave the recruiter with a positive impression: that you’re confident in your abilities, but not arrogant.
After you’ve had a substantial conversation with someone and the other party remembers you, you generally become their acquaintance. Before you part ways, get their contact info. In the future, reaching out and asking for a referral is straightforward. Here’s an example:
Hi Beth, this is Alice. We talked a lot about your company and our shared passion for soccer back at the University of Foobar career fair in September. I know you’re at ABC Corp and I’m actually interested in working there. Is there any chance you could refer me for the software engineering internship? I have a fair amount of experience with Python: I completed the intro course at school and finished a personal calculator project. Although I’m a freshman, I have a solid foundation in Python and am a fast learner. I’ve picked up a lot of Python concepts outside of class, such as Tkinter user interfaces. I’ll also expect to finish my data structures and algorithms course by the time I start an internship this summer. I think these skills could come in handy for ABC Corp and I could definitely make an impact down the line as a software engineer. I’ve attached my resume and thank you in advance for your consideration!
There are three important components in Alice’s message. First, she references her earlier interaction with Beth by bringing up the what, where, and when of their conversation. Second, she explicitly asks for an internship referral. Third, Alice provides a short snippet about her strengths and how being a “fast learner” helps address her shortcoming of being relatively inexperienced as a freshman. Upon reading Alice’s message, Beth is likely to remember the interaction. So long as Alice’s background isn’t ridiculously below the internship hiring bar, Beth has no reason not to enter Alice into ABC Corp’s referral system.
When you can’t find anyone for a referral, you have to apply online. There are many ways to do so and you should focus on school job sites and email lists. Many schools offer an internal job site, such as Handshake, where you can browse internship postings and apply. Recruiters usually scan through Handshake applications at their target schools, so there is a decent chance they will see your resume there. You should also join job mailing lists. For example, the computer science department and various academic clubs might have mailing lists to which recruiters send their job postings. Respond to the emails, talk about your skills, express your interest in the job posting, and attach your resume. You will definitely be seen and considered for an interview.
If you can’t connect in-person, you can cold message a recruiter via LinkedIn or email. LinkedIn lets you search for people at a particular company. Then, you can send a LinkedIn member a short message inviting them to connect. There is a 300 character limit and here is an example:
Hi Carl, my name is Dave. I’ve heard a lot about DEF corp and see you’re a recruiter there. I’m looking for an internship and could totally see myself working at DEF corp in the long term. Would you be open to connecting and I can introduce myself further?
If they accept your connection request, you can start a longer conversation. Similar to real-life conversations, you should talk about your experiences and ask questions about the company before finally asking if they’d be willing to put you into their system to be considered for an internship. If you obtain a recruiter’s email address, you can also do this process via email. Unlike an in-person networking event where people will talk to you if you approach, some people will ignore your LinkedIn messages or emails for any number of reasons. Perhaps they missed your message, or they weren’t active, or they just didn’t like your profile picture. Cold messaging can sometimes be effective, but only do so if you can’t reach someone in person.
Applying online through a company’s website should be your last resort because too many other applicants go through that route. You’re unlikely to be seen and even if you are, many companies fill all their internship positions with candidates going through the previous channels. For large companies with thousands of employees, you’ll probably get an automated email response thanking you for your application and then a rejection email months later saying they’ve moved forward with other candidates. Smaller companies may spend more time sifting through online applications, but don’t count on it. Applying online through the company’s website should be your last resort and don’t expect much success.
After you utilize your network to grab recruiters’ attention and make a strong impression with your resume, then you will receive an interview opportunity. There are two types of interviews: technical and behavioral. Technical interviews involve programming questions and will be discussed in the upcoming chapter on sophomore year of college. Behavioral interviews involve soft, subjective questions for evaluating your character. Since you may not have much programming ability your freshman year to qualify through technical interviews, it is important to score well on behavioral interviews.
Behavioral interview questions typically consist of generic prompts such as the following:
There’s never a best answer, but there are plenty of bad responses that weed out candidates. Your goal should be to come up with engaging, unique responses, but at the very least provide a generic answer that doesn’t immediately raise any red flags.
As with any interview, prepare ahead of time. First, reflect on your life experiences and brainstorm a list of topics you can bring up in your responses. Examples of topics could be
Once you’ve familiarized yourself with those topics, search for as many behavioral interview questions you can find and practice answering them aloud, as if you were in an actual interview.
Use the STAR method for answering behavioral interview questions. STAR stands for Situation, Task, Action, and Result and STAR responses follow the typical storytelling guidelines. Begin by describing Situation: who was involved? What were the circumstances? Then describe the Task: what was the conflict you had to address? Next, describe the Action: how did you go about resolving your problem? Were your actions challenging to execute? Finally, describe the Result: were you successful? Are there metrics to quantify your success? For more details, there are countless online resources and examples of the STAR method.
As with resumes, embellish your responses and skew subjective adjectives in your favor. For example, if you organized an event that was just a “success,” instead say “it was a massive success and everyone loved it.” Take care not to embellish descriptions of yourself. Saying “I am a massively successful programmer” comes off as arrogant. People appear confident and competent when they use stronger adjectives to describe their experiences.
Occasionally, you will get curveball questions such as
These are all legitimate questions designed to see how you respond to unexpected events. The key to navigating curveball questions is to reduce them to normal interview questions. For example, all the previous examples can be reduced to “what are your best qualities?” If you were a reliable person, you could begin your responses with
The specific tree, cereal, or activity you choose doesn’t matter for these curveball questions. What matters is if you stay calm and if you answer the implied question “what are your best qualities?”
After your interviewer is done asking you questions, they will ask if you have any questions for them. This is never optional, so make sure you have a long list of questions prepared in advance. Here are some examples:
Also research the company beforehand and ask questions specific to the business:
Asking company-specific questions help you appear insightful and serious about the role.
Finally, assume your interviewer is unprepared and asks you “tell me about yourself” and nothing else — this actually happens sometimes. Make sure you have enough questions to fill up the rest of the allotted interview time.
Practice makes perfect, so rehearse frequently. Write down answers to various questions and recite your STAR responses in a natural-sounding tone to the wall. Record yourself, listen to your responses, and fix any issues you observe. Or, ask a friend to give you a mock interview and encourage them to ask a random curveball question. Memorize a long list of questions for your interviewer to fill up any extra interview time. Your behavioral interview is a performance and your interviewer is the audience; with proper preparation, you’ll do great.
You can have the perfect resume, networking, and interviewing ability, but you still need to pick the right companies to apply to. Don’t bother applying to positions where you’re missing a deal-breaking requirement and focus on companies that are willing to invest in a freshman intern.
Most companies prefer juniors, so freshmen candidates are unappealing. If a company lists junior standing as a requirement, or if you haven’t heard of freshmen interning at a particular company, consider passing. On the other hand, if a company is open to sophomores or doesn’t list an academic seniority requirement, then they’re probably willing to consider freshmen. And if a company explicitly says they are open to freshmen, then definitely apply.
Big-name companies have programs dedicated for freshmen and sophomores. Examples include the Microsoft Explore program, Facebook University, and the Google Engineering Practicum (renamed to STEP). The applications center around open-ended essays rather than technical expertise, so you can apply without much programming background. Furthermore, these programs highly encourage underrepresented groups to apply. If you fit in that category, play to all your advantages and emphasize that in your essays. The intern positions fill on a rolling basis and get swamped with competitive applications quickly. Make sure you apply as soon as the applications open, typically in early Fall.
Startups are also great places to check for freshman-year internships. Small firms have little bureaucracy and don’t care much about academic seniority. Furthermore, their positions have less competition than big-name companies because they aren’t as well-known. Fast-growing startups also give you the opportunity to work on high-impact projects because they have enormous engineering needs.
In summary, check the big companies, check the small companies, and everything in between. Read the job descriptions to gauge if they’ll be open to considering freshmen for internships. If they are willing to consider you, then make your case as best as you can!
Apply, apply, apply! Ignore the job requirements you’re missing. Ignore the rejections. Ignore the number of recruiters who don’t respond to you. Freshmen often apply to tens if not hundreds of positions before they finally get an internship. Don’t let the setbacks deter you. If you have a solid resume, networking, and interviewing skills and if you apply for reasonable positions within your league, you’ll get an internship offer eventually. Number of rejections doesn’t mean anything when your ultimate goal is just one freshman summer internship.
Here are some common problems during the freshman year internship search and what they mean:
I’m not getting interview requests after submitting my resume. Try to get more referrals and better connections.
I’m not getting any interview requests despite referrals. Your resume is too weak or the jobs you applied to are way “out of your league.” Complete more personal projects or focus on using stronger words on your resume. Also try applying to smaller, less well-known companies, or apply for internships specifically for freshmen and sophomores.
I’m getting rejected after interviews. Practice your behavioral interviewing skills. If there are technical interviews, study the technical interviewing section in the next chapter. If you find yourself struggling with technical problems, consider applying at smaller, less well-known companies, as the technical bar will be lower.
Some students don’t find internships by the time freshman summer rolls around; don’t fret if you fall into this category because you can pursue summer research opportunities. Most universities have professors who could always use another research assistant. Research assistant positions are easier to obtain than internships and you can think of them as a fallback to a traditional internship.
By the time April rolls around, if you haven’t received an internship yet, then search online for professors in your department and see what kinds of research projects they do. If any research interests you, reach out to the professor and ask them about research positions in their lab. Make sure to send them your resume and thank them for their consideration. Unlike companies, professors at your university will respond to your emails and most will give you an “interview” opportunity where you can chat with them. If you do well in the interview and demonstrate strong potential, they’ll hire you. As with internships, don’t give up and keep trying.
If you can’t get a summer research position either, then take summer classes. Make sure to focus on CS courses to get ahead of your peers in the Fall. Work on a large, summer-long personal project outside of class to manufacture more technical experience. Reflect on what didn’t work for your freshman year job search and aim to avoid the same mistakes your sophomore year.
With all the academics and job search going on, make sure to have fun with your friends at school. Building a healthy social life is important for your mental wellbeing during college. Friends will be with you to celebrate your successes, to help you get through the rough times, and to make life interesting in an otherwise monotonous school year.
The first few weeks of freshman year is the optimal time to make new friends and find people you feel comfortable around. Other freshmen are in the same situation as you and looking to meet new people so put yourself out there. Sit next to others in your classes and work on assignments with them, or join study groups. Go up to people in your dormitory, introduce yourself, and find something fun to do. You could explore the campus, play a sport, grab some food, or attend a welcome event hosted by your university. If you don’t feel comfortable around some people, that’s okay; follow your instinct, let them know it was great hanging out, and move on. Eventually you’ll find your group.
Most universities have extracurricular club fairs early in the school year so you should browse through the different booths and see if anything interests you. During the school year, clubs are a great way to take a break from academics. Join a few clubs because people get along best with similar people, and everyone in a club automatically shares interest in some activity.
If you feel comfortable, go to some house parties. College house parties are like bars and nightclubs, except you don’t need to be 21 years old to enter. They’re great places for meeting people. Walk around, introduce yourself, and find common ground to chat about. There’ll be plenty of food, drinks, music, and socializing. Though they may be tempting, alcohol and drugs are not requirements for socializing, so do not consume them. Make sure you go with a few trustworthy people as well, in case you happen to go overboard and aren’t able to get home on your own.
Finally, if you’re struggling on the social aspect, try to identify the challenge: are you afraid of going up to people? Are you having trouble relating to others? Is smalltalk not your thing? Research these questions online, read a bestselling book that addresses your issue, or talk to someone about it. Don’t struggle to discover a solution on your own when someone else can point you in the right direction.
There are countless ways for making friends and having fun in your social life: classes, extracurricular clubs, sports, house parties, and more. Find the activities that you enjoy and make sure to have some fun throughout all the tough academics and job searching in your freshman year.
As discussed in Part III, never neglect your physical health. Build a healthy sleep schedule and incorporate plenty of exercise into your routine. Get into the habit of 8 hours of sleep per day and 3-5 hours of vigorous exercise per week. If you build these habits freshman year, they’ll persist through the duration of college.
Get an unlimited meal plan. You are studying computer science, not culinary arts. You should not be focusing on cooking unless you enjoy it. Eat at the dining hall and dedicate the mental effort you would spend on cooking to your academics. In the dining hall, maintain a balanced diet: eat lots of vegetables and lean meats, and consume a modest amount of grains. For vegetables, the salad bar is your friend, but don’t overdo the dressing. Fish and chicken are great for lean meats. The yogurt bar is also a great option. Do not eat burgers, pizza, fries, chicken tenders, cookies, ice cream, or other desserts. One, these are cheap and you’re not getting your money’s worth. Two, they’re horrible for your health and make you sleepy and unable to focus on work. Treat yourself now and then to some sweets, fried foods, or red meat, but don’t eat them regularly.
Finally, never consume drugs or alcohol. People consume substances to feel a certain way. They are dangerous and a waste of money. As discussed in Part II, you can supervise your brain for free. You don’t have to blow money, damage your body, and risk becoming dependent on drugs and alcohol to change your feelings.
Focus on balancing time spent on academics, mental health, physical health, and your internship search. Towards the beginning of your freshman year, you may not balance your time well. That’s okay — if you notice yourself losing sleep, or not having enough time to socialize, or not being able to complete all your work, you can rebalance your activities. Identify how you’re spending your time and create a table listing hours spent on each activity. Get rid of activities that aren’t effective. The following are some common sources of inefficiency that can be trimmed.
All-day socializing. Some people spend their entire Saturday having fun. It could be watching sporting events, attending house parties, or just lounging around the dormitory. You do not have to socialize for an entire day to maintain your social health. You are better off redirecting that time to academics.
Overloading on classes. Some people overload on classes. If you’re taking more than the average recommended load, then drop some classes. You can only ingest so much knowledge at a time. When you overwork yourself, you retain less material from each class. You aren’t doing yourself any favors by overworking; drop courses until you get back to the average load.
Varsity sports. Some people participate in a varsity sport, which requires traveling to compete, and lots of practice. While it’s great for exercise, remember that you are attending college to study computer science — not to become an olympic athlete. Drop the sport if it’s impeding your academics or social life.
If you do get a full scholarship for playing a varsity sport, then consider taking a below-average course load. If you’re not paying for college, then take your time. The primary drawback is if you take an extra year to graduate, then you lose a year’s worth of salary. Compare the year’s worth of salary versus how much you’d have to pay for college without scholarship money.
Finally, a reminder on finances: you are investing time and money into college. If you’re going to earn $100,000 or more per year with a software job after graduating, then saving $1,000 today is insignificant in the long run. Don’t be stingy and damage your future job prospects for a little money. Dedicate all your energy to your college experience and wherever possible, defer money problems until after you graduate and have a well-paying software job.
Academics
Job Search
Social
Physical Health