Cómo sacar el máximo provecho de un título en Ciencias de la Computación

La mayoría de los programadores modernos obtuvieron su educación en universidades. Con el tiempo, esto cambiará, pero en la actualidad la situación es tal que los buenos talentos en las empresas de TI siguen viniendo de las universidades. En esta publicación, Stanislav Protasov, director de Acronis para relaciones con universidades, comparte su visión sobre las características de la formación universitaria de los futuros programadores. Los profesores, estudiantes y quienes los contratan pueden incluso encontrar un par de consejos útiles más abajo.

Cómo sacar el máximo provecho de un título en Ciencias de la Computación

Durante los últimos 10 años he enseñado matemáticas, algoritmos, lenguajes de programación y aprendizaje automático en diversas universidades. Hoy, además de mi puesto en Acronis, también soy vicerrector del departamento de informática teórica y aplicada en el MIPT. A partir de mi experiencia en buenas universidades rusas (y no solo) he sacado algunas observaciones sobre la preparación de los estudiantes en disciplinas informáticas.

La regla de los 30 segundos ya no funciona.

Estoy seguro de que te has encontrado con la regla de los 30 segundos, que dice que un programador debe entender el propósito de una función después de una rápida mirada a su código. Se ideó hace mucho tiempo, desde entonces ha habido una multitud de sistemas operativos, lenguajes, hardware y algoritmos. Llevo escribiendo código durante 12 años, pero relativamente recientemente vi el código fuente de un producto que, a primera vista, me pareció un hechizo mágico. Hoy en día, si no estás inmerso en el área temática, la regla de los 30 segundos deja de funcionar. De lo contrario, no solo te faltarían 30, sino que incluso 300 segundos para entender qué es qué.

Por ejemplo, si quieres escribir controladores, tendrás que sumergirte en ese campo y leer miles de líneas de código específico. Con ese enfoque para aprender sobre el tema, el especialista adquiere una "sensación de flujo". Como en el rap, cuando la sensación de buena rima y ritmo adecuado aparece sin una racionalización especial. De la misma manera, un programador bien preparado puede identificar fácilmente código ineficiente o simplemente malo sin profundizar en el estudio detallado de dónde ocurrió la violación del estilo o se empleó un enfoque no óptimo (aunque resulta muy difícil explicar esa sensación).

La especialización y la creciente complejidad hacen que una licenciatura ya no brinde la oportunidad de estudiar todas las áreas en profundidad. Pero es precisamente en este nivel educativo donde se debe adquirir una perspectiva amplia. Después, en la maestría o en el trabajo, será necesario dedicar un tiempo a profundizar en la problemática y la especificidad del campo, estudiar la jerga, los lenguajes de programación y el código de los colegas, leer artículos y libros. Creo que solo así, a través de la universidad, se puede "fortalecer la barra" para el futuro. especialistas en forma de T.

¿Qué lenguaje de programación es mejor enseñar en la universidad?

Cómo sacar el máximo provecho de un título en Ciencias de la Computación
Para mi alegría, los profesores universitarios ya han renunciado a buscar la respuesta correcta a la pregunta: "¿Con qué es mejor programar?" Las discusiones sobre si es mejor C# o Java, Delphi o C++ han prácticamente desaparecido. La aparición de muchos nuevos lenguajes de programación y la acumulación de experiencia pedagógica han llevado a que en el ámbito académico se haya establecido la comprensión de que cada lenguaje tiene su nicho.

La cuestión de la enseñanza utilizando un lenguaje de programación u otro ha dejado de ser prioritaria. No importa en qué lenguaje se imparta el curso. Lo más importante es la suficiente expresividad del lenguaje. El libro "The Art of Multiprocessor Programming" es una buena ilustración de esta observación. En esta publicación que ya se ha convertido en clásica, todos los ejemplos están en Java, un lenguaje sin punteros, pero con Garbage Collector. Dudo que alguien dispute que Java está lejos de ser la elección óptima al escribir código paralelo de alto rendimiento. Pero para explicar los conceptos expuestos en el libro, el lenguaje resultó ser adecuado. Otro ejemplo es el curso clásico de aprendizaje automático de Andrew Ng, enseñado en el lenguaje Matlab en el entorno Octave. Hoy en día se podría elegir otro lenguaje de programación, pero, ¿cuál es la verdadera diferencia, si lo que importa son las ideas y los enfoques?

Es más práctico y se acerca más a la realidad.

A lo largo de los últimos años, el número de profesionales en las universidades ha aumentado notablemente. Si antes se criticaban las programas universitarias rusas por estar desconectadas de la realidad, hoy no se puede decir lo mismo sobre la educación en TI. Hace 10 años, casi no había docentes con experiencia real en la industria. Ahora, cada vez más, las clases en los departamentos especializados son impartidas por profesionales de TI en lugar de docentes a tiempo completo, quienes enseñan solo 1 o 2 cursos en su tiempo libre. Este enfoque se justifica en términos de una mejor formación, actualización de los cursos y, por supuesto, en la búsqueda de potenciales empleados para las empresas. No creo que esté revelando un secreto al decir que apoyamos la cátedra básica en MIPT y estamos estableciendo relaciones con otras universidades para preparar a estudiantes que puedan comenzar su carrera en Acronis.

¿Matemático o programador?

Cómo sacar el máximo provecho de un título en Ciencias de la Computación
Los debates que antes se centraban en los lenguajes de programación han evolucionado a un ámbito filosófico. Ahora, los llamados “programadores” y “matemáticos” discuten entre sí. En principio, estas escuelas podrían diferenciarse en dos programas educativos, pero la industria aún no distingue bien tales matices, y de universidad a universidad, tenemos una educación similar con un enfoque ligeramente diferente. Esto significa que tanto el estudiante como la empresa en la que trabajará tendrán que complementar el rompecabezas de conocimientos con las piezas que faltan.

La incorporación de profesionales en las universidades, que escriben código industrial en diferentes lenguajes, proporciona a los estudiantes habilidades de desarrollo de mayor calidad. Al estar bien familiarizados con las implementaciones de bibliotecas estándar, marcos de trabajo y técnicas de programación, los programadores en práctica fomentan en los estudiantes el deseo de escribir código de calidad, haciéndolo de manera rápida y eficaz.

Sin embargo, esta habilidad útil a veces lleva a la aparición de estudiantes que inventan la rueda. Los estudiantes programadores piensan así: “¿Qué me cuesta escribir otras 200 líneas de buen código que resuelvan directamente el problema planteado?”.

Los profesores con formación matemática clásica (por ejemplo, de facultades de matemáticas o matemáticas aplicadas) suelen trabajar en entornos cercanos a la ciencia, o en el área de modelado y análisis de datos. Los “matemáticos” ven los problemas en el ámbito de la informática de manera diferente. Ellos operan principalmente no con código, sino con algoritmos, teoremas y modelos formales. Una de las grandes ventajas del enfoque matemático es la clara comprensión fundamental de lo que se puede y no se puede resolver, así como de cómo hacerlo.

Por lo tanto, los educadores matemáticos abordan la programación con un enfoque teórico. Los estudiantes que vienen “de los matemáticos” suelen proponer soluciones bien pensadas y teóricamente más perfectas, pero, por lo general, son subóptimas desde el punto de vista del lenguaje y, a menudo, simplemente están mal escritas. Este tipo de estudiante considera que su objetivo principal es demostrar su habilidad para resolver este tipo de problemas en principio. Sin embargo, la implementación puede ser deficiente.

Los chicos que fueron educados por programadores en la escuela o en los primeros años de carrera traen consigo una “bicicleta muy bonita” que, sin embargo, normalmente no funciona de manera muy eficiente asintóticamente. Ellos, por el contrario, no se proponen teorizar profundamente ni buscar en libros de texto soluciones óptimas, prefiriendo un código bello.

En diferentes universidades, en las entrevistas a estudiantes, usualmente veo qué “escuela” subyace a su educación. Y casi nunca me he encontrado con un equilibrio perfecto en la formación básica. En mi infancia, en mi ciudad se podía preparar para la olimpiada de matemáticas, pero no había clubes de programación. Sin embargo, ahora los niños aprenden a programar en lenguajes “de moda” como Go y Python. Por lo tanto, ya en el nivel de ingreso a las universidades hay discrepancias en los enfoques. Considero que en la universidad es importante mantener ambas habilidades, de lo contrario, la empresa recibirá a un especialista con una base teórica insuficiente o a una persona que no ha aprendido ni desea escribir un buen código.

¿Cómo “entrenar la barra” para futuros profesionales T-shaped?

Cómo sacar el máximo provecho de un título en Ciencias de la Computación
Es evidente que en tales condiciones, el estudiante simplemente elige lo que más le gusta. El docente, por su parte, solo transmite el punto de vista que le resulta más cercano. Pero todos saldrán ganando si el código también se escribe de manera estética, y desde el punto de vista algorítmico, todo es claro, fundamentado y eficiente.

  • Perspectiva IT. Un graduado de una licenciatura en Computer Science es ya un especialista preparado con un panorama técnico desarrollado, que probablemente ha elegido su perfil. Pero en los cursos iniciales no sabemos en qué se dedicará. Puede que se vaya a la ciencia o al análisis, o, por el contrario, escribir una gran cantidad de código todos los días. Por lo tanto, es necesario mostrar al estudiante todos los aspectos del trabajo en el campo de IT e introducirlo a todas las herramientas. Idealmente, los profesores de los cursos teóricos deberían mostrar la conexión con la práctica (y viceversa).
  • Punto de crecimiento. No permitir caer en extremos es en interés del propio estudiante. Entender quién eres — "matemático" o "programador" — no es complicado. Basta con prestar atención al primer impulso al resolver un problema: ¿qué te apetece hacer, buscar en un libro la mejor aproximación o escribir un par de funciones que seguro te serán útiles más adelante? A partir de esto, se puede construir una trayectoria complementaria en su aprendizaje.
  • Fuentes alternativas de conocimiento. A veces la programación está bien equilibrada, pero "Programación de sistemas" y "Algoritmos" son impartidos por personas completamente diferentes, y a algunos estudiantes les resulta más cercano el primer profesor, mientras que a otros el segundo. Pero aunque no te guste un profesor, eso no es motivo para descuidar algunas asignaturas en favor de otras. Los propios estudiantes de licenciatura están interesados en encontrar la voluntad de trabajar con fuentes de conocimiento y, bajo ninguna circunstancia, confiar en opiniones radicales, como "las matemáticas son la reina de las ciencias, lo principal es conocer los algoritmos" o "un buen código compensa todo lo demás".

Profundizar en la teoría se puede haciendo referencia a literatura especializada y cursos en línea. Se pueden mejorar las habilidades en lenguajes de programación en Coursera, Udacity o Stepik, donde se presentan muchos cursos diferentes. Además, los estudiantes a menudo comienzan a ver cursos avanzados de lenguajes si sienten que el profesor de algoritmos tiene un buen conocimiento de matemáticas, pero no puede responder preguntas complejas sobre implementación. No todos estarán de acuerdo conmigo, pero en mi experiencia ha funcionado bien. la especialización en C++ de Yandex, en la cual se analizan sucesivamente cada vez más características complejas del lenguaje. En general, elige un curso con altas calificaciones, de empresas o universidades reconocidas.

Habilidades blandas

Cómo sacar el máximo provecho de un título en Ciencias de la Computación
Al salir de la universidad para trabajar en cualquier empresa, desde una startup hasta una gran corporación, los estudiantes de universidades de prestigio a menudo se encuentran mal adaptados al entorno laboral real. Esto se debe a que hoy en día las universidades cuidan mucho a los estudiantes. Incluso habiendo perdido muchas clases, sin prepararse a tiempo para los exámenes y dictámenes, habiéndose dormido o llegando tarde al examen, cualquiera puede aprobar y volver a aprobar, y al final obtener su diploma.

Sin embargo, hoy en día existen todas las condiciones para preparar a los estudiantes para la vida adulta y la actividad profesional independiente. No solo tendrán que programar, sino también comunicarse. Y esto también debe enseñarse. En las universidades hay diferentes formatos para desarrollar estas habilidades, pero, lamentablemente, a menudo no se les presta suficiente atención. No obstante, tenemos muchas oportunidades para adquirir habilidades efectivas de trabajo en equipo.

  • Comunicación empresarial escrita. Desafortunadamente, la mayoría de los especialistas que salen de la universidad no tienen idea del protocolo de correspondencia. La especificidad de la comunicación en mensajeros en el intercambio de mensajes durante la noche y el día y el uso de un estilo conversacional y lenguaje coloquial. Sin embargo, se podría practicar la escritura al comunicarse el estudiante con el departamento y la universidad.

    En la práctica, los gerentes a menudo se enfrentan a la necesidad de descomponer un gran proyecto en tareas pequeñas. Para ello, es necesario describir bien cada tarea y sus componentes, para que los desarrolladores junior comprendan lo que se espera de ellos. Una tarea mal planteada a menudo lleva a la necesidad de rehacer algo, y por lo tanto, la experiencia en comunicación escrita ayuda a los graduados a trabajar en equipos distribuidos.

  • Presentación escrita de los resultados de su trabajo. Para presentar sus proyectos académicos, los estudiantes de último año pueden escribir publicaciones en Habr, artículos científicos y también informes sencillos. Existen muchas oportunidades para esto; ya a partir del segundo año, en algunas universidades comienzan los trabajos de curso. También se puede utilizar el ensayo como forma de evaluación; generalmente se asemeja más a un artículo de opinión. Este enfoque ya se ha implementado en la Universidad Nacional de Investigación de la Escuela Superior de Economía (NIU HSE).

    Si una empresa practica un enfoque ágil en el desarrollo, los resultados de su trabajo deben presentarse en porciones más pequeñas, pero con mayor frecuencia. Por ello, es importante saber comunicar de manera concisa el resultado del trabajo de un especialista o de todo un equipo. Además, muchas empresas realizan hoy en día “revisiones” —anuales o semestrales. Los empleados discuten los resultados y las perspectivas de trabajo. Una revisión exitosa es la principal razón del crecimiento profesional, los bonos, por ejemplo, en Microsoft, Acronis o Yandex. Sí, puedes programar bien, pero “sentado en una esquina”, incluso un especialista excepcional siempre perderá frente a alguien que sabe presentar bien su éxito.

  • Escritura Académica. Es importante destacar la escritura académica. A los estudiantes les resulta útil familiarizarse con las reglas de redacción de textos científicos, el uso de argumentos, la búsqueda de información en diversas fuentes y la citación de estas fuentes. Es recomendable hacerlo en inglés, ya que en la comunidad académica internacional hay muchos más textos de calidad, y ya existen plantillas establecidas para presentar resultados científicos en diversas disciplinas. Por supuesto, las habilidades de redacción académica también son necesarias al preparar publicaciones en ruso, pero hay muchos menos ejemplos de buenos artículos contemporáneos en inglés. Se pueden adquirir estas habilidades a través de un curso adecuado, que actualmente forma parte de muchos programas educativos.
  • Conducción de reuniones. La mayoría de los estudiantes no sabe cómo prepararse para las reuniones, llevar actas y procesar datos. Pero si fomentamos esta habilidad en la universidad, por ejemplo, participando en proyectos grupales, podremos evitar pérdidas de tiempo en el lugar de trabajo. Para esto, se necesita un control sobre el trabajo de proyectos de los estudiantes, para enseñarles a llevar a cabo reuniones de manera efectiva. En la práctica, esto le cuesta a cada corporación mucho dinero, ya que si varias personas, que reciben un alto salario, pasan una hora de su tiempo laboral en una reunión, se espera que obtengan un retorno correspondiente.
  • Discurso público. Muchos estudiantes solo se enfrentan a la necesidad de hablar en público durante la defensa de su trabajo de graduación. Y no todos están preparados para ello. He visto a muchos estudiantes que:
    • se dan la vuelta a los oyentes,
    • se balancean, tratando de llevar a la comisión a un estado de trance,
    • rompen bolígrafos, lápices y punteros,
    • pasean en círculos,
    • miran hacia el suelo.

    Es normal que una persona se sienta nerviosa al hablar por primera vez. Pero es necesario comenzar a trabajar en este estrés antes, desde la defensa de trabajos de curso en un ambiente amigable, entre compañeros.

    Además, la práctica estándar en las corporaciones es dar la oportunidad al empleado de proponer una idea, obtener financiamiento, una posición o un proyecto asignado. Pero, si lo pensamos, es una defensa de un trabajo de curso, solo que a un nivel más alto. ¿Por qué no entrenar estas habilidades profesionales útiles durante los estudios?

¿Qué he pasado por alto?

Uno de los motivos para escribir este post fue un artículo, publicado en el sitio web de TyumGU. El autor del artículo se centra solo en los defectos de los estudiantes rusos, que han sido notados por profesores extranjeros. La práctica de mi enseñanza en diferentes universidades indica que la educación escolar y superior rusa proporciona una buena base. Los estudiantes rusos están bien capacitados en matemáticas y algoritmos, es más fácil construir una comunicación profesional con ellos.

En el caso de los estudiantes extranjeros, las expectativas del profesor ruso a veces pueden ser demasiado altas. Por ejemplo, en el nivel básico de matemáticas, los estudiantes indios que he conocido son similares a los rusos. Sin embargo, a menudo carecen de conocimientos específicos al terminar la licenciatura. Los buenos estudiantes europeos probablemente tendrán una formación matemática más débil a nivel escolar.

Y si estudias o trabajas en una universidad, ya puedes empezar a desarrollar tus habilidades comunicativas (las tuyas o las de tus estudiantes), ampliar tu base fundamental y practicar la programación. Para ello, el sistema educativo ruso ofrece todas las oportunidades: solo necesitas saber cómo aprovecharlas correctamente.

Estaré encantado si en los comentarios de la publicación compartes tus enlaces a cursos y métodos que ayudan a equilibrar la educación, así como otras maneras de mejorar las habilidades blandas durante los estudios en la universidad.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster