¿Cómo pasar de ser estudiante a ingeniero de software?

¡Hola! Mi nombre es Denis Dovzhenko, y durante varios años he estado realizando entrevistas técnicas con candidatos para el puesto de ingeniero de software C / C ++. Si la conversación principal con los candidatos para los puestos de Ingeniero Senior de SW y superior es sobre la experiencia laboral, entonces la selección de futuros pasantes y juniors se basa en el conocimiento adquirido en la universidad y la capacidad de resolver problemas del nivel educativo. Es aquí donde resulta que incluso en las principales universidades técnicas enseñan "no eso" y "no es así". Y sería bueno comenzar a prepararse para la transición del estado de estudiante al estado de ingeniero casi desde los primeros días de capacitación.

En este artículo, hablaré sobre cómo nosotros, en el Centro de Desarrollo de San Petersburgo, Dell Technologies, ayudamos a los estudiantes a prepararse para el avance exitoso en el camino de un ingeniero de software.



¿Educación o dónde y cómo estudiar?


En la escuela, estamos acostumbrados al hecho de que cada tarea tiene la única solución correcta. Al final del bachillerato, algunos estudiantes tienen la sensación de que puede no ser el único, pero los criterios para elegir la solución más adecuada para las condiciones del problema aún no se comprenden. De todos modos, en la cabeza del soltero suele haber una absoluta confianza en que un ingeniero de software no es más que un mono entrenado (codemonkey). Después de todo, son precisamente esas habilidades las que se desarrollan mediante el trabajo de laboratorio: leer la tarea en diagonal y completarla rápidamente. Pero, ¿qué tipo de estudiante comenzará a hacer laboratorios antes de una semana antes de la sesión? Y de repente, en la entrevista, los tíos malvados le exigen al menos una cultura algorítmica mínima, hablan sobre algunos "procesos de desarrollo", los obligan a resolver problemas complejos ... Resulta que,que el primer paso para el soltero es demasiado alto y que el maestro ya no parece tener suficiente estatus.

En mi opinión, el problema es que incluso en las especialidades de TI, la enseñanza de la programación está divorciada de las tareas reales. En el plan de estudios, la disciplina puede llamarse "Programación en el lenguaje ...", pero en realidad, en el aula, la sintaxis con ejemplos descabellados es larga y tediosa, y el arte de la programación casi no existe. A menudo, en los cursos universitarios, la comprensión de que el código será ejecutado por una computadora no se establece en absoluto, ¡pero la gente lo leerá!

A menudo sucede que la "programación" se estudia aisladamente del hardware de la computadora, la arquitectura del software se traslada a los cursos superiores y nadie se molesta con la capacidad de leer la tarea técnica. Existen, por supuesto, excepciones, por ejemplo, el curso "Programación industrial en C ++", que mi colega A.V. Martynov ha estado impartiendo en el Politécnico de San Petersburgo durante varios años.



Como resultado, durante las entrevistas, e incluso en el código escrito por los participantes de los proyectos de los estudiantes, a menudo noté la reproducción de ejemplos "de un libro de texto" cuando el autor simplemente no piensa en las posibles limitaciones. Por ejemplo, en el caso de C / C ++, la mayoría de los estudiantes de último año no pueden explicar claramente la diferencia entre memoria estática, asignada dinámicamente y apilar, y las preguntas sobre la relación de las palabras clave del lenguaje con la duración del almacenamiento y la vinculación simplemente las aterrorizan. En las entrevistas, traté de dar ejemplos de análisis como el siguiente (nota, lo más simple posible), pero ahora no hago esto. La explicación de por qué llamar a la función f2 () hace que el programa se bloquee con SEGFAULT es para la mayoría de los estudiantes más allá de la comprensión.

#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;
}

Creo que es hora de que empleadores, estudiantes y líderes universitarios reconozcan que existe un conflicto de intereses. Para simplificar enormemente la imagen, se puede reducir a las siguientes afirmaciones:

  • El estudiante quiere un mínimo esfuerzo para obtener un diploma y ve esto como un paso inevitable en el camino hacia un trabajo bien remunerado.
  • La institución educativa quiere, por las buenas o por las malas, lograr una calificación alta, lo que aumenta una variedad de fondos, incluido el fondo salarial de la facultad. Y en los métodos comunes para el cálculo de la calificación, por ejemplo, tal , el indicador de "empleo de los estudiantes" es tanto como el 2% del total.
  • El empleador grita mentalmente "sí, finalmente comienza a preparar a los graduados normales que no necesitan volver a capacitarse durante varios años, o incluso volver a capacitar, gastando en este tiempo a empleados de niveles superiores y superiores".

Y estos problemas son visibles incluso en las principales universidades técnicas, entonces, ¿qué podemos decir sobre los menos "promovidos"?


Dell Technologies Day en la oficina de nuestro Centro de Desarrollo de San Petersburgo

En el reciente foro " Find IT"Un número inesperadamente grande de estudiantes se sintieron atraídos por el stand de Dell Technologies, contando la siguiente historia:" No obtuve puntos exorbitantes en el Examen Estatal Unificado, me asustaron los altos requisitos de las universidades para los solicitantes de especialidades de TI y, por lo tanto, fui al Zaborostroitelny Institute N. Al final del segundo año, de repente me di cuenta que la construcción de cercas no es mía, llévame a los programadores ". Por lo tanto, la trama de la novela "Profesión" de Isaac Asimov, publicada hace más de medio siglo, se reproduce casi literalmente. Desde la perspectiva de un alumno moderno o estudiante junior, el mundo del futuro representado es casi perfecto: no hay necesidad de asistir a clases o conferencias, para hacer la tarea. Justo en un día determinado, usted llega al centro de capacitación, en cuestión de minutos, la información del transportista se escribe directamente en el cerebro (en la historia se les llama "cintas de capacitación").y puedes relajarte: el proceso de aprendizaje se ha completado.

Un fragmento de la historia "Profesión"
– , , – . – . . , , , -. , . , , , , . ? , , - . .
– ? – . – , ? ?
– . - . . , , , , , . .
– ?
– , , , , , . , , . : « . , ». , : « , , ». , , , . , .

Dado que invertir habilidades instantáneamente en la cabeza del alumno sigue siendo fantástico, el alumno tendrá que hacer un esfuerzo por su cuenta. Incluso si la programación se enseña "al nivel" en la universidad, el curso debe ser aprendido, no "escuchado". Y la capacitación en un instituto de construcción de cercas puede incluso ayudar, porque no crea un sentimiento falso de "nos lo leyeron, lo sé todo".

Por su parte, las empresas interesadas en una afluencia de personal calificado también deben asumir la responsabilidad de capacitar a los estudiantes. En la segunda parte del artículo, hablaré sobre varios programas para apoyar a los escolares y estudiantes en la construcción de una carrera profesional en TI utilizando el ejemplo del Centro de Tecnologías de I + D de San Petersburgo de Dell.

¿Cómo pueden las empresas "forjar" personal?


La sabiduría popular dice: "Es necesario criar a un niño mientras está recostado en el banco". En base a esta máxima, Dell Technologies ha desarrollado un sistema de etapas múltiples para interactuar con futuros ingenieros: desde la capacitación de estudiantes de secundaria hasta la participación de ingenieros del Centro en comisiones para la protección del trabajo de pregrado y posgrado.

Desde 2018, hemos sido amigos de los organizadores de cursos de TI para estudiantes de Digital Banana. El año pasado, nuestros ingenieros ayudaron a realizar un hackathon para escolares, dieron conferencias y clases magistrales en el Festival Digital Jungle. Otro programa educativo para estudiantes de secundaria, Student STAR, recibe apoyo internacional. El octavo año de participación de nuestro Centro de Desarrollo en este programa ya ha pasado: anualmente en junio, unos 30 graduados del décimo grado de las escuelas de física están inmersos durante una semana en el mundo de la Ingeniería del Software. Y si es demasiado pronto para hablar sobre los resultados medibles de la cooperación con Digital Banana, entonces ya vemos graduados de Student STAR de los últimos años entre estudiantes de universidades técnicas líderes.

La búsqueda de futuros ingenieros prometedores continúa entre los estudiantes de primer año. En colaboración con la Fundación Leonard Euler en seis universidades afiliadas a la red de afiliados de Dell Technologies (Polytech, SPbSU, ITMO, LETI, SUAI, PSUPS), la primera sesión se otorga a los mejores estudiantes con una "Beca de primer año exitosa" personalizada. Y en el segundo año, los becarios tendrán la oportunidad de participar en un programa de mentoría. Por cierto, un artículo al respecto fue publicado en este blog en Habré hace varios años . Solo puedo agregar que en las fotografías de los últimos años se pueden ver las mismas caras nuevamente: muchos de nuestros aprendices se graduaron con éxito de la universidad, se convirtieron en empleados de Dell Technologies y ahora volvieron al programa de mentoría como mentores, maestros y curadores.


, , .

La siguiente etapa es el "programa de proyectos conjuntos de estudiantes", que ofrece a los estudiantes la oportunidad de participar en el proyecto de I + D directamente en la universidad. Y no es del todo necesario que todos los participantes en un proyecto de este tipo sean estudiantes de la misma universidad; los estudiantes de otras universidades, incluso condicionalmente "constructoras de vallas" pueden unirse a ellos. Las tareas para proyectos conjuntos ya se han tomado de nuestra cartera de pedidos real, de las que me gustaría hacer para el proyecto, pero existe una alta probabilidad de posponer "para más adelante" bajo la presión de tareas más prioritarias. En un proyecto conjunto, el papel del líder del equipo lo desempeña un empleado de la universidad y nuestros ingenieros actúan como clientes. Las bonificaciones adicionales por participar en un proyecto conjunto de estudiantes son que los estudiantes con buen desempeño serán considerados principalmente como candidatos para el puesto de pasante,y los resultados de proyectos conjuntos se pueden utilizar como material para trabajos a término o disertaciones.

La historia de proyectos conjuntos con universidades tiene muchos casos ciertamente exitosos. Por ejemplo, el desarrollo de una de las utilidades para el almacenamiento de Unity comenzó como un proyecto conjunto con SUAI. También hubo un caso curioso cuando los términos de referencia para un proyecto conjunto resultaron ser demasiado complicados para los estudiantes de tercer año de ITMO (trato de quitarme parte de la responsabilidad, como uno de los curadores de este proyecto), pero los participantes que duraron hasta la final pudieron demostrar su capacidad para hacer frente a las dificultades y prácticamente con toda su fuerza se convirtieron en nuestros internos. Ahora ya son ingenieros de pleno derecho.

Ingenieros de Dell Technologies que se unieron a nuestro equipo después de un proyecto conjunto de estudiantes: Anastasia Zinner, Nikita Tyukachev, Vladislav Alekseev

Las universidades comienzan a estimular a los estudiantes a participar en proyectos reales de todas las formas posibles para estudiantes de pregrado de tercer y cuarto año (recordamos que el estímulo es un palo puntiagudo que se usó para conducir toros enjaezados en la antigua Roma). Fue entonces en la cabeza del estudiante promedio que aparece la palabra mágica "pasantía", que debería hacer que la pupa se convierta instantáneamente y automáticamente en la mariposa de un estudiante en un ingeniero. Otra transición que no requiere ningún esfuerzo adicional (además de solicitar una pasantía) es tan fantástica como la describe Isaac Asimov. En la vida real, no hay transformaciones instantáneas; la pasantía es un proceso largo. En Dell Technologies, los pasantes en realidad desempeñan el papel de juniors, y dentro de seis meses a un año crecen en el rol de pasantes antes de convertirse en empleados de tiempo completo de la empresa.

Obviamente, los participantes en el programa de tutoría y los proyectos conjuntos de estudiantes reciben ciertas ventajas al contratar para un puesto de interno. Como mínimo, son los primeros en recibir información sobre las vacantes de sus mentores o curadores de proyectos. Y en las entrevistas, vemos que los participantes en los programas para estudiantes generalmente resultan ser candidatos más fuertes. Por otro lado, no vamos a cerrar las puertas a los candidatos que no hayan aprobado el proyecto estudiantil.

Fuera del alcance de este artículo, hay muchas otras formas de interactuar con los estudiantes. Por ejemplo, conferencias en foros de estudiantes o celebrados regularmente "días de tecnología" en nuestra oficina, a los que cualquiera puede asistir. Dada la situación actual en el mercado laboral, las empresas deben gastar tiempo y dinero en capacitar al personal dentro o fuera de la empresa. Me gustaría creer que nuestras acciones no solo nos permiten preparar especialistas calificados para nosotros mismos, sino que también contribuyen al crecimiento de los ingenieros y al desarrollo de la industria en general.

El autor del material es Denis Dovzhenko, ingeniero principal sénior de software.

All Articles