Em&m
Published in

Em&m

No Internship? You Can Still Build Software Engineering Skills From Home

How to become a better software engineer and build your resume without an internship.

Photo by Christopher Gower on Unsplash

College students and even high school students nowadays face a lot of pressure to land internships for the summer — especially those in tech-related fields.

However, many computer science students come into college with hardly any programming experience. Moreover, landing a tech internship is not easy — especially if you’re a freshman or sophomore in college.

Adding onto the already difficult process of landing an internship, COVID-19 has swept the earth and many people have been left with rescinded offers, hiring freezes, and no summer internship.

What I want to emphasize in this article is, however, that it’s totally OK to not have a summer internship.

In fact, most people don’t get their first internship until their junior or senior year because that’s simply what most companies are looking for.

Nonetheless, many people are left with no internships — more so this summer than ever. If you’re relatively new to programming or have never had an internship before, this can be very daunting.

Regardless of who you are, this article is meant to show you how you can make the best of this summer and prepare yourself to land your next internship — and be successful at it. If you’ve never had an internship or haven’t done many projects in the past, this is a perfect way to start building your resume and gain practical experiences that you’ll need years down the road.

In this article, I’ve outlined tips and insights on building skills based on my experiences prior to landing my first internship as a freshman in college.

Before we get started, there are two things you need to think about before diving in.

Photo by Markus Winkler on Unsplash

1. Figure out what you need

Think about what you want to get out of this summer. Obviously you want to become a better software engineer, but let’s get a little bit more specific.

Here are some things you might think of:

  • Acing the next coding interview
  • Learn a new tech stack / technology
  • Getting started on a project
  • Practical industry skills

There are many more, and you can certainly get even more specific into the examples above.

It’s important to have an idea of what your goals and expectations are so that you can narrow down the steps to achieve them.

2. Find something that interests you

Let me just say this: doing things that you have no passion nor interest for is not sustainable.

Especially in this situation where we aren’t held accountable by deadlines or external expectations except for our own motivation, it’s crucial to pick something that you’re truly interested in doing.

Moreover, don’t be afraid to jump into new things. It’s scary to dive into something you’ve never done before. Unfortunately, this commonly felt in CS and I feel that a lot of people are held back by fear of failure and imposter syndrome.

It’s important to remember that everyone started somewhere and that the only way to get better is to try.

The great thing about programming is that the internet is full of resources for you to learn literally anything you set your mind to. One thing I’ve come to realize is that it is never impossible to learn something so long as you have to motivation to do so.

With those two things in mind, it’s time to jump into how you can accomplish these goals.

I’ve divided this part into multiple sections to better organize the resources and insights I’m about to present to you. I believe these topics should cover the essentials of becoming a better software engineer. Feel free to skip to whichever topics are relevant to you.

Learn something new

Looking to learn a new programming language? A new framework? Wanting to learn about AWS or getting int artificial intelligence? I’ve got you.

Well…more like the internet’s got you.

As I mentioned earlier, the internet has an abundance of resources for you to learn almost anything — and that’s the beauty of CS.

Here are some things you could check out:

  • ReactJS: A javascript framework that’s great for making dynamic front-end web applications.
  • React Native: A javascript framework for building mobile apps.
  • Swift: A programming language developed by Apple for making iOS applications.
  • AWS: A powerful cloud computing platform by Amazon.
  • Python: Very useful programming language, commonly used in artificial intelligence.

Go to the official website

If you’re aiming to master a language or framework, definitely visit its official website.

Typically these websites will have starter projects or tutorials that teach you about setup and the basics. Definitely look out for APIs and documentation — those are really useful when learning to use new technology and will be an important reference for you when working with it in your projects.

If you’re not used to learning from documentation, that’s totally ok. You can learn from tutorials or online lessons.

Look for online tutorials

Sometimes, the best way to learn is to jump right into a starter project. If you google search “[what you want to learn] tutorial”, you’ll most likely find tons of sites and videos to help you with that.

I often look out for Youtube videos from well-known channels such as freeCodeCamp or crash courses that have a lot of views and lots of likes.

Take an online course

There are a lot of great online courses available to us from top universities such as MIT and Harvard.

If you go to edX or Coursera, you’ll find hundreds of great courses from these schools that you can audit for free or get an official certificate on completion if you pay.

Online courses aren’t for everyone, but I highly recommend giving them a go especially for more theoretical areas, for example, algorithms or artificial intelligence.

Personally, I really like courses on edX. I’ve heard great things about MIT’s intro to computer science in python course and Harvard’s CS50 classes.

I’m currently taking the CS50 AI class in python and am loving it so far.

Photo by Daniel Korpai on Unsplash

Start your own project

Projects are crucial to building a resume and getting attention from recruiters. Not only that, but they’re a great way to gain experience and put your skills to good use.

Self-doubt and fear of failure often prevent us from diving into new areas that we may be interested in because we simply think we can’t do it. But again, everyone starts somewhere. The best way to learn is to dive in.

Also, learning how to learn is a really, really important skill. Often times when you get hired, you’re required to learn a new tech stack. And with technology changing so rapidly, it is crucial for software engineers to be able to dive into new things and learn quickly. You won’t get anywhere if you’re afraid to try something new.

Important steps to creating your own project:

  1. Idea
  2. Plan
  3. Scope
  4. Code

It’s really important to spend a good chunk of time planning and researching before you write any code. You don’t want to realize midway through that this wasn’t the intended direction for your project.

Also don’t be afraid when you get stuck or run into bugs — it's completely normal and what you learn solving bugs are very valuable skills.

If this is your first project and you have no idea where to start, I recommend building a website or an app. They’re relatively intuitive and easy to learn and a great platform for almost any project idea.

Learn Git/Github

Version control is a must-have skill in the industry. It’s how all software engineers save their code and work collaboratively with others on the same project.

Github is a very commonly used software that uses Git and is a platform for many software engineers.

It’ll definitely be worth your time to learn how to use git with your project — plus it’ll be helpful if you ever want to revert to an older version of your code or you somehow lost your code.

Try out open source projects

Open source is a great way to dive head first into something completely new. To be honest, it’s pretty scary…and no easy task. However, it will surely give you a strong idea of what it’d be like jumping into an internship.

If you don’t already know, open source software is available for the public to use and contribute to. Many well known software are actually open source, for example, Android, React, and Virtual Studio Code.

This is a great opportunity to pick out an already pre-existing project that really interests you and learn more about it.

How it usually works is you find their repository on Github, pick out an issue, and clone the repo. There are usually instructions and overviews in the README.md file where you’ll learn about how you can contribute.

If you’re new to open source, I recommend checking out issues labeled good first issue. Those are typically smaller bugs that are “easier” to fix.

You’ll then enter their codebase, which can be very large, make the necessary changes, test, and make a pull request when you’re done. Hopefully, if you did well, your PR will get merged.

What’s great about open source is that there are guidelines for writing code. Unlike personal projects where no one will complain if your code is messy or poorly written, these are legitimate code bases and it’s crucial that you maintain proper coding style. This is really similar to what you’ll have to face in an internship.

In addition, open source forces you to into an already well-developed, complicated code base and you’ll be forced to learn how to navigate it — even if you don’t know half of what’s going on. Again, this is definitely something you’ll face working at a company.

You’ll certainly gain lots of practical, software engineering skills getting into open source, and it’s definitely something that looks great on a resume.

If this is something interesting to you, check out this list of beginner-friendly open source software.

Improving coding ability / Acing the technical interview

A solid coding foundation is a must, and you can’t go wrong if you spend an hour or two per week brushing up your problem solving and programming skills.

In my experience, practice is key. There are tons of resources out there that provide great algorithmic problems that you can use to better your coding skills and help prepare for those daunting interviews.

Here are some of my favorites:

Screenshot from www.leetcode.com

Leetcode

If you’ve looked into coding practice at all, you’ve probably already heard of Leetcode.

It’s a huge database on all kinds of programming problems that you might face in technical interviews and is a great way to improve your coding skills.

Even if you just do one problem a day, you’ll find that your skills will improve greatly by the end of the summer and you’ll be ready to face interviews as internship season rolls around in the fall.

What I really like about Leetcode is that it shows you how your solution compares to all the other submissions in terms of time complexity and memory usage. Not only that but for each problem, there is a forum where users discuss their thought processes and solutions.

It’s important to be able to get a working solution, but it’s also great to see other solutions and how you might improve your thought processes.

If you’re up for a challenge, try using a language that you’re interested in learning or not as comfortable in.

Screenshot from hackerrank.com

HackerRank

Similar to Leetcode, HackerRank is a platform full of problems of all kinds. The one main difference I’ve noticed is that HackerRank categorizes their problems into different purposes such as interview prep or problem solving.

You’ll also find language-specific training rather than pure coding problems that you’d find on Leetcode.

Many companies actually use HackerRank to give out initial online screenings, so you can definitely use this as a way to familiarize yours with the platform.

Screenshot from https://projecteuler.net/

Project Euler

Project Euler is another site full of problems for you to practice. It’s definitely more mathematical compared to Leetcode and HackerRank, which are more algorithm-based.

Project Euler problems generally give you a mathematical concept or an idea and have you write a program that can find the correct solution to the specific question asked.

This is different from HackerRank and Leetcode whose problems are more computer science related, and always have you pass multiple tests to check the correctness of your program on multiple cases rather than just one.

While the other sites are probably better if you’re training for interviews, I find Project Euler to be very fun and I highly recommend it if you enjoy problem solving.

Image from amazon

Cracking the Coding Interview

Many software engineers swear by this book. If you have time over the summer and are looking to better your coding and interview skills, it is definitely worth reading it.

I personally did not read the entire book, rather, I focused on sections that I needed improvement in or wasn’t familiar with. It’s very well organized and there are tons of practice problems in there as well so there’s definitely something in there for everyone.

The book walks through problems with the reader as well, breaking them down and showing the entire thought process: from designing the algorithm to writing it.

Conclusion

There are a lot of things to keep yourself busy this summer even if you don’t have an internship.

Keep in mind, however, that there is no pressure to push yourself and stress yourself out over getting work done to replace the internship you don’t have.

Take this opportunity to rest and think about what you want your career path to look like and what goals you want to accomplish. Most importantly, have some fun.

Just remember to not let your lack of experience or internship set you back from becoming a better software engineer from the comfort of your own home.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store