How to grow from a student a software engineer?

Hello! My name is Denis Dovzhenko, and for several years I have been conducting technical interviews with candidates for the position of C / C ++ software engineer. If the main conversation with candidates for Senior SW Engineer positions and above is about work experience, then the selection of future interns and juniors is based on the knowledge acquired at the university and the ability to solve problems of the educational level. It is here that it turns out that even in leading technical universities they teach "not that" and "not so." And it would be nice to start preparing for the transition from the student state to the engineer state almost from the first days of training.

In this article, I will talk about how we at the Saint-Petersburg Development Center Dell Technologies help students prepare for successful advancement along the path of a software engineer.



Education, or Where and how to study?


At school, we are accustomed to the fact that every task has the only right solution. By the end of the baccalaureate, some students have a feeling that it may not be the only one, but the criteria for choosing the solution that is most suitable for the conditions of the problem are not yet understood. Anyway, in the bachelor’s head there is usually absolute confidence that a software engineer is nothing more than a trained monkey (codemonkey). After all, it is precisely such skills that are developed by laboratory work: to read the task diagonally and quickly fill up. But what kind of student will start making labs earlier than a week before the session? And all of a sudden, at the interview, evil uncles demand at least a minimal algorithmic culture from him, talk about some “development processes”, force them to solve intricate problems ... It turns out,that the junior step for the bachelor is too tall, and the master does not already seem to have enough status.

In my opinion, the problem is that even in IT specialties, programming teaching is divorced from real tasks. In the curriculum, the discipline may be called "Programming in the language ...", but in reality, in the classroom, the syntax with far-fetched examples is long and tedious, and the art of programming is almost not there. Often in university courses, the understanding that the code will be executed by a computer is not laid at all, but people will read it!

It often happens that "programming" is studied in isolation from the computer hardware, the software architecture is shifted to senior courses, and nobody bothers with the ability to read the technical task. There are, of course, exceptions, for example, the course “Industrial Programming in C ++”, which my colleague A.V. Martynov has been conducting at the St. Petersburg Polytechnic for several years.



As a result, during interviews, and even in the code written by the participants of student projects, I often noticed the reproduction of examples “from a textbook” when the author simply does not think about possible limitations. For example, in the case of C / C ++, most even senior students are not able to clearly explain the difference between static, dynamically allocated and stack memory, and questions about the relationship of language keywords with storage duration and linkage simply terrify them. At the interviews, I tried to give examples of analysis like the one below (note, as simple as possible), but now I do not do this. The explanation of why calling the f2 () function makes the program crash with SEGFAULT is for most students far beyond comprehension.

#include <iostream>

using namespace std;

extern void populate(int* data, unsigned long size);

const unsigned long ARRAY_SIZE = 2048 * 2048;

int d1 [ARRAY_SIZE];

long f1()
{
  populate(d1, ARRAY_SIZE);
  long ret = 0;
  for (unsigned long i = 0; i < ARRAY_SIZE; ++i) {
    ret += d1[i];
  }
  return ret;
}

long f2()
{
  int d2 [ARRAY_SIZE];
  populate(d2, ARRAY_SIZE);
  long ret = 0;
  for (unsigned long i = 0; i < ARRAY_SIZE; ++i) {
    ret += d2[i];
  }
  return ret;
}

int main()
{
  cout << f1() << endl;
  cout << f2() << endl;
  return 0;
}

I believe it is time for employers, students and university leaders to recognize that there is a conflict of interest. To greatly simplify the picture, it can be reduced to the following statements:

  • The student wants a minimum of effort to get a diploma and sees this as an inevitable step on the path to a well-paid job.
  • The educational institution wants by hook or by crook to achieve a high rating, which increases a variety of funds, including the wage fund of the faculty. And in the common methods for calculating the rating, for example, such , the indicator "student employment" is as much as 2% of the total.
  • The employer mentally shouts “yes, you finally begin to prepare normal graduates who do not need to retrain for several years, or even retrain, spending on this time employees of senior and higher levels”.

And these problems are visible even in leading technical universities, so what can we say about the less "promoted"?


Dell Technologies Day at the office of our St. Petersburg Development Center

At the recent forum " Find IT"An unexpectedly large number of students were drawn to the Dell Technologies booth, telling about the following story:" I did not score exorbitant points in the Unified State Examination, I was frightened by the high requirements of universities for applicants in IT specialties, and therefore went to the Zaborostroitelny Institute N. By the end of the second year, I suddenly realized that the construction of fences is not mine, take me to the programmers. " Thus, the plot of Isaac Asimov’s novel “Profession”, published more than half a century ago, is almost literally reproduced. From the perspective of a modern schoolchild or junior student, the depicted world of the future is almost perfect: there is no need to attend classes or lectures, to do homework. Just on a certain day you come to the training center, in a matter of minutes, information from the carrier is written directly to the brain (they are called “training tapes” in the story),and you can relax - the learning process is complete.

A fragment of the story "Profession"
– , , – . – . . , , , -. , . , , , , . ? , , - . .
– ? – . – , ? ?
– . - . . , , , , , . .
– ?
– , , , , , . , , . : « . , ». , : « , , ». , , , . , .

Since instantly investing skills in the student’s head is still fantastic, the student will have to make an effort on his own. Even if programming is taught “at the level” at the university, the course must be learned, not “listened”. And training at a fence-building institute can even help, because it does not create a false feeling of "they read it to us, I know everything."

For their part, companies interested in an influx of qualified personnel should also take responsibility for training students. In the second part of the article I will talk about several programs to support schoolchildren and students in building a professional career in IT using the example of the St. Petersburg R&D Dell Technologies Center.

How can companies “forge” personnel?


The popular wisdom says: "It is necessary to raise a child while he is lying across the bench." Based on this maxim, Dell Technologies has developed a multi-stage system for interacting with future engineers: from training high school students to the participation of Center engineers in commissions for the protection of undergraduate and graduate work.

Since 2018, we have been friends with the organizers of IT courses for Digital Banana students. Last year, our engineers helped to conduct a hackathon for schoolchildren, gave lectures and master classes at the Digital Jungle Festival. Another educational program for high school students, Student STAR, is supported internationally. The eighth year of our Development Center’s participation in this program has already gone: annually in June, about 30 graduates of the 10th grade of physics schools are immersed for a week in the world of Software Engineering. And if it is too early to talk about the measurable results of cooperation with Digital Banana, then we already see graduates of Student STAR of past years among students of leading technical universities.

The search for promising future engineers continues among freshmen. In collaboration with the Leonard Euler Foundation at six universities affiliated with the Dell Technologies affiliate network (Polytech, SPbSU, ITMO, LETI, SUAI, PSUPS), the first session is awarded to the best students with a personalized “Successful Freshman Scholarship”. And in the second year, fellows will have the opportunity to participate in a mentoring program. An article about it, by the way, was published on this blog on HabrĂ© several years ago . I can only add that in the photographs of recent years the same faces can be seen again - many of our mentee successfully graduated from university, became employees of Dell Technologies, and now returned to the mentoring program already in the role of mentors, teachers and curators.


, , .

The next stage is the “program of joint student projects”, which gives students the opportunity to participate in the R&D project directly at the university. And it is not at all necessary for all participants in such a project to be students of the same university; students of other - even conditional "fence-building" universities can join them. Tasks for joint projects are already taken from our real backlog, from those that I would like to do for the project, but there is a high probability of postponing "for later" under the pressure of more priority tasks. In a joint project, the role of team lead is performed by an employee of the university, and our engineers act as customers. Additional bonuses from participating in a joint student project are that well-performing students will be primarily considered as candidates for the intern’s position,and the results of joint projects can be used as material for term papers or dissertations.

The history of joint projects with universities has many certainly successful cases. For example, the development of one of the utilities for Unity storage began as a joint project with SUAI. There was also a curious case when the terms of reference for a joint project turned out to be too complicated for third-year students of ITMO (I try to push part of the responsibility off myself, as one of the curators of this project), but the participants who lasted until the final could demonstrate their ability to cope with difficulties and practically in full force became our interns. Now they are already full-fledged engineers.

Dell Technologies engineers who joined our team after a joint student project: Anastasia Zinner, Nikita Tyukachev, Vladislav Alekseev

Universities begin to stimulate students to participate in real projects in every possible way for third-fourth year undergraduate students (we remember that stimulus is a pointed stick that was used to drive harnessed bulls in ancient Rome). It was then in the head of the average student that the magic word “internship” pops up, which should instantly and automatically make the pupa turn into a student’s butterfly into an engineer. Another transition that does not require any additional efforts (besides applying for an internship) is as fantastic as described by Isaac Asimov. In real life, there are no instant transformations; internship is a long process. At Dell Technologies, interns actually play the role of juniors, and within six months to a year they grow in the role of intern before becoming a full-time employee of the company.

Obviously, participants in the mentoring program and joint student projects receive certain advantages when recruiting for an intern position. At a minimum, they are the first to receive information about open positions from their mentors or project curators. And in interviews, we see that participants in student programs usually turn out to be stronger candidates. On the other hand, we are not going to close the doors to candidates who have not passed the student project.

Out of the scope of this article, there are many other ways to interact with students. For example, lectures at student forums or regularly held “technology days” at our office, which anyone can attend. Given the current situation on the labor market, companies have to spend time and money on training personnel within or outside the company. I would like to believe that our actions not only allow us to prepare qualified specialists for ourselves, but also contribute to the growth of engineers and the development of the industry as a whole.

The author of the material is Denis Dovzhenko, Software Senior Principal Engineer.

All Articles