keys to improving your skills in tech
Getting your first “real world” software development job is hard. You are probably in school for computer science (or related) because you want to work as a software developer, but somehow being in school alone is not enough to land a technical internship. This article will hopefully give you some ideas for how you can approach beefing up your resume in ways that won’t suck the life out of you.
If you’re reading this, you’re probably a first or second year computer science or software engineering student who has yet to work their first software development-related internship. If you don’t fall into this category, this article may not be for you, but hopefully you’ll find something valuable here nonetheless.
Keep in mind that I’m throwing a bunch of ideas around; you don’t have to do all of them to be successful, instead pick the ones that interest you the most.
step one: identify your goals.
I know your goal is to get a job, but that’s a very big goal that needs to be broken down into a few smaller steps. Before you commit yourself to an activity, be sure to establish a goal for what you want to take away from the experience.
THREE KEY TYPES OF SKILLS
I break down key skills and experiences into three main categories: development, mentorship, and organizational.
- Development encompasses any technical skills you’d need directly in a technical internship, such as software engineering or design.
- Mentorship encompasses anything that has to do with you teaching another person how to do something.
- Organizational encompasses everything else that has to do with organizing and working with a team of people to accomplish a common goal.
Certain activities may fall into multiple categories, but I strongly recommend you have at least one recent experience in each of these three categories.
While you probably came here expecting to learn more about coding, soft-skills are just as important (if not more important) on your resume; it doesn’t matter how good of a programmer you are if you’re an asshole, no one will want to work with you. The best way to demonstrate that you can collaborate with other people is through mentorship and organizational experiences, so be sure to seek out a mixture of all three.
GO BIG AND LEARN A LOT
Okay, back to goal-setting. Before you commit yourself to an activity, whether that’s a side project, a club, or anything else, ask yourself what you want to get out of the experience. What skills do you want to learn or further develop? If you already have lots of evidence of a certain skill on your resume, will this experience demonstrate a new skill?
If you’re trying to learn a lot of different things quickly, commit yourself to the biggest thing you can for a short period of time. For example, you want to develop your leadership skills so you sign up to help organize a hackathon: throw yourself into a director role, learn as much as you can from the experience over the course of a semester, then move on to the next thing.
Aim for as senior of a role as you can, don’t worry about how much experience you already have. No one cares if you’re “just a first year” student; if you’re given the role, you deserve it.
I don’t recommend sticking around the same clubs year after year; while there is some satisfaction in climbing the ranks of a familiar organization, each year you will be working on about the same problems, and you will learn less and less each time. Do the thing for one semester, then take what you learned to a new organization, where you can take on new problems and meet new people.
step two: pick a thing and do it.
So on to the meat of this article. Assuming you’ve reflected on what you already know and what skills you want to develop, the following will be some ideas for what you can to further develop skills that would be valuable for a software development role.
First and foremost, prioritize opportunities that interest you. I subscribe to the belief that as long as you enjoy everything that you do, you won’t get burned out. As students, we don’t yet know what we like or what we want to do with our careers. Go after opportunities that interest you, and if you realize it wasn’t as great as you thought it would be, move on to something else.
You’ve probably already heard about doing side projects by now. If you want to do a side project but you don’t know where to start, I recommend following along with a tutorial online first.
Narrow down what you want to learn (example: how to build a simple video game in C++) then search for a tutorial online, there are plenty of websites and videos that will walk you through the basics. This serves two purposes.
- You’ll learn the basics of something you want to get better at. If you don’t know anything about game development (for example), how do you expect yourself to build a game from scratch? You have to start somewhere.
- You can still put this experience on your resume. It won’t be a particularly strong example of your coding ability, but you must have learned something while walking through the tutorial. Emphasize what you learned on your resume. As a bonus, try to add one novel thing to the final product, and flex your ability to contribute something new to existing code.
If you have an idea for a project you really want to pursue, I recommend finding a buddy who is equally excited by the idea. Having someone else to keep you accountable will mitigate the risk that the project ends up in the project graveyard of half-finished ideas. Your buddy will also be a helpful resource if you get stuck on the thing you’re trying to build; two minds tackling a bug are stronger than one.
Even if you don’t finish the project, you can still put it on your resume. If you learned something new, flex what you now know and focus on the parts of the project you actually finished.
WRITE ABOUT WHAT YOU KNOW
Read a textbook (or article, tutorial, etc.), then write about what you learned. This summer I read the book 99 Bottles of OOP by Sandi Metz, then wrote an article summarizing the lessons I learned and shared this with my LinkedIn network. This serves two purposes.
- You learn something new by reading a textbook, then writing about what you learned solidifies this in your brain. You’ve probably already heard that teaching someone else is the best way to learn something yourself; the same principle applies here.
- This demonstrates your ability to pick something up quickly then teach this to other people. Being able to express technical concepts effectively is difficult, so doing this well is impressive.
You’d be surprised who will end up reading your article. Publicizing everything you learned is a great way to get your name out into the world and attract the eye of other developers. You can also publicize something you learned in school or a problem you tackled in a side project.
Everything is worth writing about! Your article might help younger developers who haven’t yet learned this thing you’re trying to share.
CLUBS AND COMMUNITIES
Clubs are groups of people actively working towards a common goal, like organizing a hackathon or conference. By contrast, communities are large groups of people with similar interests.
Join both clubs and communities. Both provide networking opportunity, and knowing a lot of people will help you in your career. People like to share opportunities, so the more people you know, the more opportunities will come your way.
Join clubs that will develop your leadership and communication skills, even if these clubs have nothing to do with tech. Leadership and communication are extremely valuable soft-skills in tech. Joining a hackathon or conference organizing team is a great place to start; you learn a lot from organizing an event and it’s a fantastic experience to pull from in an interview.
Plenty of companies offer programs that you can bring to your school. For example, Google Student Developer Clubs and Github’s Campus Experts provide resources for you to run technical workshops on campus. Some companies also offer ambassador programs, where you represent the company and run events on their behalf. By starting clubs like this, you dip into all three skill categories, so they’re ideal if you’re trying to build a breadth of skill in a short period of time.
If you want something to exist, for example, you want to get better at design but there’s no design community at your school, create it. There’s literally no one stopping you, and it’s free. Give it a name, create a place to convene (for example: slack or a facebook group), and tell people that it exists. People who are interested will join. Now you have a space to develop the skill you want to develop alongside other people who also want to develop this skill, and you have the benefit of many people sharing ideas, resources, and feedback with each other. You learn faster when you learn alongside other people.
Don’t limit yourself to communities within your city or school. Some places to start include intern.club, ladder, rewriting the code (if you identify as a women in tech), and design buddies (if you’re interested in design).
Once you join these communities, people will share more specific resources that you can use to dive deeper into particular topics that interest you more. For example, someone might share a link to a community of people interested in artificial intelligence. If you can’t find anything related to your specific interest, make a post and ask people if this thing exists. Maybe it does, or maybe you can create it.
If you’re even slightly enticed by the idea of researching, try it. There are some undergraduate research grants that you can apply for, such at the NSERC Undergraduate Student Research Awards. Carleton University also offers the Dean’s Summer Research Internship for first year science students; other universities may offer something similar. These are paid opportunities for undergraduate students to research alongside a professor at their university.
If you’re not too committed to research but it’s something you want to try, many professors are happy to take volunteers to shadow and assist in their lab. Some will also take students who don’t attend the university they research at. Look into what kinds of research you’d like to do, find a professor that specializes in this research and is working on a project that interests you, and email them.
Let them know you are an undergraduate student interested in their field of work and that you’d appreciate the opportunity to shadow them. Try to demonstrate any relevant knowledge you have of the field, like “I took your class in data structures and algorithms last term and I’d like to learn more about research in theoretical computer science”.
Worst case, they say no or they never respond. Otherwise, they’ll say yes, and you’ll get to explore this field of study. Either you’ll love it, and now you have some experience to help you start in academia, or you’ll hate it, but now you know you hate it and you still have the experience to show on your resume.
Beyond an actual internship, which is the ultimate goal we’re working towards here, there are plenty of other ways to get industry experience or exposure to software development.
Many companies offer special programs or internships targeted to first and second year students. Some examples include Square’s Code Camp, TwitterU’s Diversity Programs, Bloomberg’s Women in Technology Insights Program, Google’s STEP, CSSI, and Summer of Code programs, Microsoft’s Explore, Garage, and New Technologists programs, Amazon’s Future Engineer, and Deloitte Pioneer.
Fellowship programs are other good ways to get technical experience with mentorship. CodeLabs matches you with a group of other students and an industry mentor to work on a technical project over the summer. MLH has a fellowship program that does something similar. Keep an eye out for other fellowship programs; if you’re accepted, they’re great opportunities to network and attend exclusive workshops.
CodePath offers a variety of free courses every term from mobile development to security engineering. Facebook and CodePath both offer summer interview prep courses, which is a great way to get guided studying done when internship hunting season starts in the fall.
Keep an eye out on LinkedIn and student community groups for more opportunities like this. Be open to opportunities from companies you’re not familiar with; experience is experience, and every opportunity you take will get you one step closer to figuring out what you enjoy.
so that was a lot.
I’m sure there were a lot of ideas that I missed, but hopefully what I covered at least offered something new. If there is anything you take away from this article, I hope it’s this:
- Don’t yet let your lack of experience or knowledge be a barrier to going after opportunities you want. I know this is easier said than done, but don’t rule yourself out of opportunities before you genuinely tried going after them. Aim for the biggest thing you can, and more often than not, it will work out in your favour.
- There are a ton of resources available to you online, don’t be afraid to get creative. Everyone has different interests, knows different things, and has different goals. Don’t just do whatever everyone else seems to be doing just because it works for them. Analyze what you already know and what you want to achieve, and come up with creative ways to get there. You can always create new opportunities for yourself.
- Go after opportunities that fulfill you. If you realize that something isn’t as fun or as interesting as you thought it was, there’s nothing wrong with you! That doesn’t mean you’re not cut out for software development, you just haven’t found your niche yet. Keep exploring, and eventually you’ll find something that drives you.
If you have any other ideas for opportunities early developers can take advantage of, please share them in the comments! If you want to chat more one-on-one, come connect with me on LinkedIn.
I hope this was helpful :-)