How to rock your computer science internship
Tags: computerscience, internship
Published: 2020-05-09 08:43:16

Internships are great first footsteps in the industry, after have been sitting to class, exams, student projects.
Even if teachers tried to explain you the basics of corporate life (which is by the way, an *'How to live in society'* like), you are feared by the unknown, as you have probably never been into those kind of strange places named **opened space**.

I graduated last year (2019) from an engineering school, after spent my two internships in a startup from South of France. Since, I've worked for few clients, and I have now the fresh experience in mind to tell you, students, how to rock an internship, and what to expect from this world.

## 1. Motivation
![Motivation](https://images.unsplash.com/photo-1494959764136-6be9eb3c261e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=3300&q=80)
Nothing comes without motivation. You are the only one who could make knowledge flowing into your head. Nobody can do it for you. You, and only you, have the responsibilities for your progression, whether at school, work and even in life. So the first question you have to ask to yourself is :

*Do I really want to step up ?*

If the answer is no, you can close this tab, and let your boss using your time to do boring stuff.

If the answer is yes, get prepared to overcome your own abilities, and be boosted by positive energy! You don't 'solve problems', you come with solutions. You don't fail, you're learning. You don't 'ask for help', you need experience, knowledge, you're no more a student, you're an engineer.

Have you ever wonder what it feels like to build a tool people **actually** use ? You should be excited by this idea :
Somebody out there, will get to his device, open a new tab, write something in Google, get redirected to an interface, and start using features **you** implemented. You have to feel the enjoyment of the user, to be in his head, at every moment of his passage through your tool. You should ask yourself : Why does  he clicks on this button ? How many steps does it requires to do *this* action ? Is it a pain to achieve that ?

You won't always be guided by an UX/UI design team who answer these questions before, sometimes, you will have to take a step back of what you're doing, and think about it.

*How I'm supposed to anticipate the user behaviour ?*

OK, I see you want some **concrete** actions to do, first day.

## 2. Learn to learn
![Learn to learn](https://images.unsplash.com/photo-1531403009284-440f080d1e12?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2100&q=80)
On your first day, **be on time**, and let your tutor guide you. You may receive a professional computer, or any stuff required to your job. If you don't already know the job they gave to you, they will finally talk about it. Be aware, this is the moment you have to be really focus. Capture **any** details. And, please,

**TAKE NOTES.**

**WITH A PEN.**

Write down the five W :
#### **Who** are the stakeholders ?
Every person or entities around the project. From users to developers, subcontractors, project manager, VCs...

#### **What** is the project ?
Is that a web application ? A software ? A plugin ? A bread toaster ? Which technologies are required ?

#### **Where** will it be used ?
Think about context here, and what it implies to your tool. At home (Understand probably peaceful environment) ? At a restaurant (No computer then, think mobile, lightness, smooth) ? At a party (Fun, network, jokes...) ? At work (performance, resilience, speed...) ?

#### **When** will it be release ?
Time is important, you can easily measure the scope size by the time planned to work on it. Years projects are mostly to become business software, whereas 1-2 months might be just a quick use tool, implemented over another software (like a plugin).

#### And finally, most important, **why** is this project alive ?
This is where you have to know every details. **Why ?** Why do anybody need this tool ? Why will they choose this over that ?

Once you are able to answer those questions, it's time to open yourself to your new environment. I hope your manager will present to you the team, their job, they are your main assets during this journey.

*What about me ?*

You don't know yet what you have to do ? Ask your manager ! You need access to code repository ? Ask your lead developer ! You are hungry ? Why didn't you eat this morning ?

## 3. From tests to complete feature
![My job, according to my company](https://images.unsplash.com/photo-1522071820081-009f0129c71c?ixlib=rb-1.2.1&auto=format&fit=crop&w=2100&q=80)
Don't expect your internship mission to be *'Land this rocket on the Moon'*. First, because you're not at NASA (And if you are, why are you even reading this ?) and second, because your company knows you're just a student. They don't want you to be a senior developer, they want you to dive into their process, and shape your mind for their needs. If you provide a good value, they'll give you a job, because they don't want raising talents for their concurrents.

In this context, there's 2 possibilities :
1. You applied to a startup, and they'll probably give you some small responsibilities, so they can scale over you. Not a bad thing if you're a hard worker, and like learning things by yourself. You may be ending your period being an essential piece of the system. As startups needs to grow fast, with few incomes, don't expect a big salary.

2. You applied to big company, and you will be running tests. At least at beginning. It's now in your hand to show what you are capable of, and free yourself, to finally have rights to push your first merge request. Understand that you will not have any responsibilities, as projects cost millions of dollars (I don't overestimate this), and will certainly not bet on you.

2 bis. You applied to big company, **but** they placed you on a 'dedicated to interns' project. Those projects are sold for a minimal budget to clients, as they accept it will be run (almost) only by juniors. In this particular case, you will feel like in a startup environment, but with larger process, and much more people. If you are here, refer to case #1, more then #2.

As you imagine, both cases have their ups and downs. Inertia of big companies leads to employees often formatted by process, but knowing where they have to go. Startups philosophy is driven by their values, more than academic consensual rules.

*Personal thoughts over this choice*
In my opinion, I'll choose startups if I need better/new skills, and big structures if I want to build a career path, especially if I wanted to divorce with tech, and go to management, commercial, human resources...

So, basically, if you're stuck into tests running, don't panic, and show you can code.

*I want to do it, but they won't let me, what shall I do ?*

Make **suggestions**. Propose some improvements where you think it will be good. By making those tests, you'll start to know, step by step, the entire codebase, how parts are related, and then you'll be able to propose yourself to write code, even if it's just refactoring it. By refactoring, your colleagues will see you can handle complexity, until finally, build your first feature. Don't forget to use the same methodologies as you commit your code!

## 4. Make mistakes, ask for help
![Make mistakes](https://images.unsplash.com/photo-1508935662753-629c6fae16e9?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2100&q=80)
Of course, not on purpose! You will make mistakes by trying new concepts, then fix it. I always keep this phrase in my head when I start a new project :

*A mistake once is finding out, twice is improvement, there's no third.*

This is 'learning by failure', and it's not a bad thing. It will show to your superiors your abilities to memorize, and keep a progression.

Again, don't forget to **take notes**. Write down every issues you have faced, and how you resolved it. If you encounter it again, you have the knowledge to overcome. In the end, your head will be full of tricks, that make you a better developer.

Sometimes, an issue is too complicated for you. And it's ok, you are not supposed to know everything! Ask for help. But first, have you tried to Google it ? There are several rules you should respect in order to make a good request to a senior. When you're facing a bug :
1. Log everything you can to spot the error (or use a debugger)
2. Google it if you don't understand it
3. Do **not** copy paste anything from Stack Overflow, **PLEASE**, it shows.
4. Ask your siblings (another intern, or a junior dev) *Have you experienced this error before ? Is it project specific ?*
5. Ask to a senior, and tell him/her you have done those steps. They hate to be disturb by a guy who can't Google something, like everybody else.

Some manager ask, during a daily meeting, for any issues blocking your progression. Do not wait for daily meeting to talk about it! You can't spend a day *just waiting* because you're stuck, you are waisting time, money and energy (managers don't like it, and honestly, who can blame them ?). In a contrary, tell them you've faced it, and resolved it, or that you have solutions in mind to try before declaring you stuck.

## Conclusion
Don't worry, even if I portrayed a kind of dark world, **companies don't make people, people make companies**. People with fears, expectations, insecurities, rules, just like you. You will not become a "2.0 slave". You ever have freedom to quit your job if you don't feel well about it, and opportunities to grow up, just the way you want. There's a plenty of really great companies out there, you just have to find the one which fits you the most. And if you don't have corporate mind, go freelance like me! Maybe I'll write another article on that topic.

Concerning your expectations, yes you will learn things, and probably much more than during your scholarship. Just because you won't become a great baker by watching YouTube tutorials. Talk to people, learn their story, their universe, and build yourself a network.

I hope you know now how to prepare yourself to beat this like a rockstar, because this is what I want you to be! Yeah!

Stay safe folks, hydrate yourself, and happy coding!

![Happiness](https://images.unsplash.com/photo-1452697620382-f6543ead73b5?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2100&q=80)