Published on

Essential Skills to Learn before a Summer Internship in Tech

Table of Contents

Regardless of whether you have prior experience, the following skills are vital in ensuring that you are ready for your summer internship. These topics are not going to be about languages or technology that changes depending on your role but general principles that will apply to all Software Engineering. I will cover Git, Refactoring, and Design Patterns. Hopefully, with the following skills, you will be successful during your internship and secure a return offer.

Advanced Git

git

More often than not, computer science curriculum at university introduces students briefly to Git, prioritizing more theoretical and dense coursework. This makes complete sense as Git is a technology that can be learned on the job, it is important to familiarize yourself with some of the advanced git topics to ensure that you can contribute to your repos without causing a mess.

When working with others on a codebase, there are important considerations that you have to take as everyone will be working on a different working copy of the code and pushing updates without their progress being saved on your branch of the code. Thus, it is important to learn some advanced git topics such as bisect and rebasing.

Code Refactoring

Refactoring

Have you ever had to read someone's codebase and been left utterly confused by what their code does? This is an example of what can happen if a developer does not use Clean Code principles and refactor their code for production.

Code refactoring is the process of restructuring computer code without changing or adding to its external behavior and functionality. Code refactoring aims to turn dirty code into clean code, reducing a project’s overall technical debt. Technical debt describes what results when development teams take actions to expedite the delivery of a piece of functionality or a project which later needs to be refactored.

When you write a piece of code, there should not be any need for someone else to clean it in the future, that would be a waste of time and resources. Thus, taking some time to refactor your code before you push it for production is a great idea. Some great resources to learn this are at the website Refactoring Guru and the book Refactoring.

Design Patterns

In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern isn't a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations

Often, the solution that you are coding up has already been accomplished. Although personally, you would not have to worry about support for additional features integration with other portions of the codebase, it is essential to keep these considerations when writing code so that your contributions will last at scale. Understanding some basic design patterns can take your contributions a long way and allow you to solve your problem more efficiently and robustly.

Some great resources to learn about Design Patterns are Refactoring Guru and Source Making.