IT Internships for Students—How We Make Them the Most Effective
Hello! I am Denis Alexandrov, and in addition to working as an Android developer, I have been training interns in various companies and conducting student internships for more than seven years. I had to work personally with promising students and conduct group internships with dropout. I have collected the most important and useful subtle aspects of conducting student internships, thanks to which our internships are as useful and effective as possible for all the participants.
When to intern
Every employer wants an applicant to be an employee who is ready to start the vigorous working activity tomorrow. But practically, even experienced developers need time for ‘acclimatization’. Naturally, students or fresh graduates need this time too. Therefore, in the case of recruiting students, there is a choice:
- Not to take students but wait for their graduation hopping that graduates will be better prepared for work.
- To cooperate with students but give them a possibility to successfully complete their studies.
- To recruit students without taking into account their educational activities.
We try to follow the second approach, and there are several reasons for it.
First, the campaign to get the right candidates begins at the university. It is extremely rare to find talented but undervalued students who did not manage to find a job during their studies.
Secondly, even the most talented students undertake an internship first. They have yet to compare theoretical knowledge and real work. Thirdly, many students cannot understand at once what they want to do after graduation. It is very important to connect with such students as early as possible, and you would better to be the first in general. This first work experience largely determines the fate of an IT specialist (the so-called baby duck syndrome).
Students rarely choose one of the paths (to study or to have an internship) deliberately. Most of them want to get both a diploma and a job offer. Of course, there are situations when you have to choose, but in fact, most interns manage to combine work and study over several years. I support this choice and I try to prepare student internships with further employment.
I have been teaching for over 11 years, and now the guys whom I have prepared for their exams work in big companies. I sometimes meet my former students at hackathons and academic competitions, and do mental notes ‘here is a student who has traveled the expected path of development; it would be nice to see how he/she can apply the experience to the project where I work now.’ Of course, this is a long-term and vague way in terms of results, but the game is worth the candle.
We work with students following 3 main stages:
- Communication at a University. In order to get the most promising students interested, we begin not with advertising our own blog or group on social networks, but with online and offline communication at a university. It includes lectures, seminars, participation in university events.
- Student Apprenticeship. This is an obligatory part of studying at the university, the purpose of which is to solidify their theoretical knowledge. Each student must ‘find’ an apprenticeship and report on it, so there is always a ‘demand’ from the students. But business is interested in attracting the most talented and motivated people, and to achieve this we work so hard at stage 1.
- Internship. This is not an obligatory part of studying, which we offer only to those who have performed well at stage 2. We bring a student on board of the company and pay him/her a salary.
Cooperation with Universities
Here is what we do to find and attract the best students:
- Participation in university hackathons, academic competitions and graduation thesis as experts.
- Teaching at universities.
- Open classes and seminars at universities.
- Student apprenticeship.
The ultimate goals of any university and private companies tend to be different. Despite this, I believe that both parties can benefit from this collaboration.
It is believed that a university should fully prepare students for work. But it is not so. On the Android development side, I can say that the relevance of existing technologies will be revised even before today's freshmen manage to graduate. And even if you teach students the most trendy technologies, this does not guarantee that they will be demanded in 5 years, because it is impossible to guess the requirements for a developer that will be essential in 4 years. However, this is not necessary.
At a university, a student should be taught basic things like the C++ programming language, the principles of assembly and compilation, the methods of organizing memory at the ‘hardware’ level, etc. Of course, you won’t find these on the list of requirements for an Android candidate. Probably, you won’t even find these in 98% of other job vacancies. The university provides the theoretical basis that allows, for example, to see the leaky abstractions (according to Joel Spolsky, who coined the Law of Leaky Abstractions).
But the requirements that our students will find in job vacancies when they become candidates are constantly changing. Every year there are new technologies, frameworks, versions of programming languages, etc. Programmers are constantly learning, and for this a broad basic technical profile is much more important than knowledge of trendy frameworks. It is much easier to independently study the platform API and the documentation for the framework than to make up for gaps in knowledge of atomic and bitwise operations.
From the side of industrial development, I can say for sure that no matter how complete the requirements for the developer are, you still have to learn. In general, self-education for a developer is, in my opinion, the most important skill. Almost all the necessary knowledge is accessible in a couple of clicks. And it is vital for us to be able to find and apply this knowledge.
But the necessary theoretical basis, which the university provides, must still be ‘tied’ to real life. And this can be seen only where the development of real projects is taking place, i.e. in commercial companies. Even before the start of student apprenticeships and internships, we help the university with expertise and university activities. Here a business perspective is very useful.
Many student projects suffer not so much from a low degree of technical elaboration (as if we can’t face it in big business!) but from a general lack of understanding of why and for whom the object of a research is intended. It is always hard for students to learn frameworks, development processes and other ‘everyday’ stuff of IT development. It is difficult do digest such information with no practice. We try to help students understand these processes. We explain where the use of the framework will help save precious hackathon time, we conduct game sessions with an analysis of the roles in the development team and in business processes.
Last year I gave a course of lectures on software development tools and technologies for the final year students of the software development department at the Southern Federal University. As practical examples, I always discuss the most applied problems, i.e. the problems that I personally have to deal with. Six months later, some of the students came to our company to have an apprenticeship. And a common understanding of our work activities helped me a lot to organize learning process for the students.
It is important not to go too far, because a student project may be not well planned and rather sloppy. It is much more important to show the basic principles of project and code requirements formation: why it is important to understand the end user, how to make the system flexible and adaptable to changing requirements, how to take into account legal details when working with data, etc.
In general, investment in communication with universities is one of the most controversial points for business in terms of results. A lot will depend on the interest of the teaching and management staff and the bureaucracy, which is increasingly absorbing educational processes. This is a long-term investment, the results of which can only be seen after many years. However, if your company is rather stable and you plan to recruit employees for many more years, communication with universities will be very useful.
I have come across many ways of conducting student apprenticeships from ‘bring your diploma for signing on the last day’ to ‘here’s a business feature for you in a real project, you have two weeks, it should be enough.
We have group student working. During the apprenticeship, students develop a joint project under the supervision of a practicing specialist.
A couple of times a week, we have classes where we analyze the current progress or study the necessary information, i.e. application architecture, platform or language features, and other similar issues.
We do not state the time and minimum hours a student is required to spend in office. It is also not necessary to attend classes; you can study the information yourself (although it is very difficult).
The time of apprenticeship depends on a student’s year of education and may last from 2 to 10 weeks. But besides this, we regularly conduct extended apprenticeships with the possibility of further internship. In this case, an apprenticeship will last an average of 6-10 weeks. Students can complete their apprenticeship just in time regulated by the university, get the necessary documents and return to their studies. If a student successfully completes our extended apprenticeship and shows good results, we can offer him/her a further internship.
There is a way to ‘skip’ an apprenticeship. If a student already has a good project, portfolio or some internship experience in another company, we are ready to consider the option of ‘transfer’ the results of the apprenticeship.
An additional motivation to undertake an apprenticeship is that students can add a new project to their portfolio and get personal recommendations from mentors upon completion. We do not issue diplomas or certificates. We only consider real results of work and personal feedback.
For me, the main criterion for a person’s readiness for an internship is the ability to learn quickly and to the necessary extent. One way or another, an internship is a process of integration into real projects and company processes. In this case, you just need to learn to study. If a student demonstrates all the necessary qualities, we offer him/her an internship.
So, if a student has done well, we can offer him/her an internship. In our understanding, a student internship is a process of learning the necessary processes and technologies to participate in the ‘battlefield’ tasks. It is very important to give a freshman developer proper knowledge of the work, teach him/her to understand the code, master the libraries.
We have formulated several reasons why it is worth postponing as much as possible the involvement of recent graduates in ‘battlefield’ projects:
- First you need to give the opportunity to make mistakes. Mistakes are an integral part of a freshman developer life and a possibility to start once again is vital.
- Staged involvement into processes. It is hard to understand all the features of working in IT at once. An internship is one of the ways of staged involvement into company.
- It is necessary to teach the developer to understand the problem deeply. Sometimes there is not enough time for it in the ‘battlefield’.
- Students sometimes have an examination period, and at that moment it is better to let them pass it. In the case of real projects, it is far from always possible to do this painlessly .
Internship and Stress
Interns inevitably find themselves in a stressful situation: they need to go to work and remember about their studies. Since the employer is a direct participant of this situation, he/she can both facilitate and aggravate the state of a student.
What we do to support a student:
- Assistance in writing a graduation thesis. We try to choose the topic of a graduation thesis and internship in such a way that the time spent in our company would help in writing and defending the thesis.
- Free schedule, which is made up by a student himself/herself. It is not very convenient for mentors, but pushing a student into an impossible time frame is perhaps the worst decision.
- A brake for an examination period. As we consider an internship primarily as an educational process, we try not to involve interns in commercial development. This will allow a student to take a leave and pass exams.
- Ability to smoothly increase the pace. There is only the minimum required number of hours, the upper limit is agreed upon readiness with the intern himself/herself.
Internship and Salary
In most cases, internships are paid. An internship is a process of preparing an employee for work, i.e. training, getting to know a company and a team, etc. Of course, the main interest of the company is to get an employee who can cope with the ‘battlefield’ tasks.
All positions of our interns are paid. In addition, all interns have fixed working hours and number of hours per week (in accordance with the accepted rate). Even if an employee is not immediately involved into ‘battlefield’ projects, the work process is still followed, i.e. code review, teamwork and work with a manager.
I believe that no payment for the work of interns means that an employer does not take an intern seriously, or simply exploit him/her. If a company prepares a good employee, in any case, there must be compensation for time expenditure.
What Is a Successful Completion of an Internship
First of all, full involvement into the company’s processes. Fortunately, students in most cases easily join a new team.
The second, but no less important, criterion is self-study. The most important quality of a Junior developer is an ability to independently find, study and apply technology. The developer’s job is directly related to this. At the next iteration to the Middle level, a developer will learn to filter the necessary information on his/her own, but for now the search is enough.
Thirdly, it is the ability to independently review your own code. Programmers can’t write a perfect code. And even a good code has to be rewritten several times. Self-criticism is essential for further growth.
And finally, it is the readiness (primarily in relation to time) to work on a real project. In this case, it is important to have enough time for work, as well as an ability to participate in scheduled calls and meetings.
As for the final testing of interns, which is widespread in many companies, I strongly disapprove various tests for knowledge of programming languages. I have met applicants who literally learned the most popular questions about development. Unfortunately, this has practically nothing to do with real programming skills.
Finally, after all the criteria are met, we can offer an intern a developer position.
What is next?
And then comes a ‘battlefield’ project. At this point a freshman developer faces the harsh everyday life of a programmer. For example, he/she learns that the code is not always written according to the canons. Learns about duct tapes. Understands why refactoring is a necessary thing, but rarely doable. In general, he/she continues to study, because in my opinion the best thing in development is eternal learning.
In addition, the student takes part in the review of other developers (simply code review). I believe that it is extremely important to involve specialists of different levels to conduct a review. In this case, it is easier to find some amateurish mistakes (experienced developers often miss them), and it is easier for a development team to grow. After all, a Junior developer also needs to understand someone else’s code, and it's better to start doing this at the code review stage.
Instead of conclusions
I believe that the key and decisive factor of a successful internship is the motivation and assiduity of an intern. Nevertheless, as an organizer, I can support this motivation and ensure that the tasks assigned to an intern are completed on time.
In order for these factors to take shape, it is very important at the planning stage to understand what each party wants to get and how to achieve these results. The technical details are almost always changed during an internship.
In April 2020, we were forced to completely change the format of an apprenticeship and internship to online. Of course, this created a whole bunch of problem from the provision of equipment to the conclusion of internship contracts.
Nevertheless, we helped a group of students fulfill their academic commitments and explore the world of commercial development. And we have got a new intern.