Learn Semantics over Syntax.
As a sophomore you will be moving on from introductory programming classes. You will probably be learning about basic data structures and object-oriented design, although you may not be taking many electives yet. Remember that your toolbox of coding concepts is language agnostic. This means that mastery in a single language can be much more valuable than mediocrity in many languages. The former allows you to learn the semantics of programming and more advanced concepts. The latter limits you to memorizing syntax. You will undoubtedly be exposed to multiple languages and develop preferences for some above others, but do not trade mastery for a longer list of languages on your resume. I’ve never been asked how many programming languages I know in an interview, but I have been asked detailed questions about what I listed as my preferred language.
Be active, not passive, as you build your resume.
You may not have had the opportunity to do an internship or other work experience freshman year. Now is the time to make that happen. Regardless of what you choose to do with your degree, an internship this year will be a good experience. Not only will it boost your resume, you’ll learn valuable skills, make some cash, and be exposed to what daily work is like in your field. If you have an idea of what role you want to have after you graduate, try to find an internship within that role. Learning new skills and changing responsibilities is relatively easy within computer science, but if your resume repeatedly says, “web developer”, “quality assurance”, “front end”, or another role you may be typecast.
For example, at my first job fair the only technical role I’d held was that of web developer. More than once I was told, “sorry we’re not looking for web developers.” Luckily, I was able to verbally explain that I was also familiar with object-oriented programming, and I ended up getting an internship in software engineering. Take the time to find roles you are interested in and apply to those as a freshman or sophomore. Otherwise, if you always jump at the first opportunity that comes along, all your decisions will be made for you.
Use personal projects and a homepage to boost your resume.
Before you start applying for internships, you’ll need to prepare your resume. Keep it simple and don’t be wordy. Important and impressive information should be further left and closer to the top. Personally, I started listing my work experience above education as soon as I had semi-relevant work experience, but some people insist on putting education first during school. The decision is mostly arbitrary, so do whichever you prefer. Make sure to leave whitespace on the page. Resumes are for skimming, and no one has time to study your resume like a textbook.
The best way to make up for little work experience is with personal projects. By now, you should have enough experience programming to create something on your own even if it’s not the next Google or Facebook. Be creative! It doesn’t need to be a user-friendly application or even anything useful. You could create a command line tool for solving algebra equations or tracking your DnD character sheets! It doesn’t need to have a GUI, although visual projects are usually more memorable.
List these projects on your resume, but also post them online somewhere. Using GitHub is great, but it’s always a good idea to have a personal homepage as well. GitHub provides a URL to all its users that can be used to host a homepage. Think of your homepage as an extended resume. You should include everything that’s on your resume and more. Give some background on yourself and keep it up to date. Include the link to your homepage on your resume.
You don’t need to master programming to get an internship.
I attended my first job / internship fair without any hope of getting an internship. I went anyway, introduced myself to several companies, and left them each with my resume. I received two invitations for an interview. The first told me to apply again next year, but the second offered me a part time position during the semester that went full time in the summer. Job fairs like this are a great way to distribute your resume quickly. A quick google search may also come up with local opportunities.
Large tech companies also hire interns every year. They usually have a regular window in which they accept applications. This method requires some luck because of the large amount of resumes they receive. If you know anyone who has worked at one of these companies make sure to ask them first if they can recommend you through a referral program or put you in touch with their recruiter. If you have an opportunity to meet a company recruiter on campus or elsewhere, introduce yourself and ask if you can send them your resume. If they aren’t taking resumes at the time or you don’t get an interview, stay in contact with that recruiter. It’ll be easier to get an interview in the future if you can reach out to a recruiter directly rather than applying online. All these methods make it more likely for you to get an interview but have little effect on the final decision of whether you get the job.
Interviews are about the process, not the solution.
Your interview is where you need to show that you are the best candidate for the job. That is not the same thing as knowing the most. Employers are looking for team players who can learn quickly. This is an internship after all. You’ll probably have to complete a coding interview in which you are asked to solve problems on a whiteboard with pseudo code. More than your knowledge, this is supposed to test your problem-solving abilities.
You can practice for interviews, but don’t try to memorize interview questions because that will defeat the purpose of the interview. During the interview, talk through your thinking process and ask clarifying questions. This lets the interviews know that you understand the problem before you start solving it. They may prompt you with hints for coming up with better solutions, so be prepared to go through a few iterations of the problem. Also, know how to calculate the space and time complexity of your solution because you will likely be asked. If you get the job, congrats! Work hard and make a good impression on your manager. It will affect your chance of being hired at that and other companies.
Consider doing a Research Experience for Undergraduates (REU).
Internships are still helpful for those targeting grad school or interested in research. You should be looking for opportunities to work in a research lab in your department during the semester so that you can have your summers free for other experiences. There are summer research internships at companies, but they are usually looking for grad students. Professors at other universities sometimes hire visiting researchers for the summer. You can ask around and do some googling to find out. However, the easiest way to find summer research opportunities at other universities is through the NSF Research Experience for Undergraduates (REU) programs. You can find their site with a google search and use it to look through the different universities that host the program. Apply to all of them that interest you. They are competitive programs.
I personally did a software internship my sophomore year and research at another university my Junior year. I recommend doing both. I liked being a visiting researcher after I was more experienced in research but participating in an REU as a sophomore would be a valuable learning experience for a new researcher. Internship recruiting usually happens before REU application deadlines, so consider doing an REU if you were unable to land an internship.
During your sophomore year focus on developing your programming skills. The easiest way to do this is through working on personal projects that you care about and will see through to the end. If you wait until next year to start thinking about internships, you’ve waited too long. Start now! Having internships and other experience as a sophomore will set you apart. You should have the skills to be hired if you work hard and apply everywhere you can.