La plupart des programmeurs modernes sont diplômés des universités. Au fil du temps, cela va changer, mais maintenant les choses sont telles que le bon personnel des entreprises informatiques vient toujours des universités. Dans ce billet, Stanislav Protasov, directeur des relations avec Acronis University, parle de sa vision des caractéristiques de la formation universitaire pour les futurs programmeurs. Les enseignants, les étudiants et ceux qui les embauchent peuvent même trouver quelques conseils utiles sous la coupe.

Depuis 10 ans, j'enseigne les mathématiques, les algorithmes, les langages de programmation et l'apprentissage automatique dans diverses universités. Aujourd'hui, en plus de mon poste chez Acronis, je suis également chef adjoint du département d'informatique théorique et appliquée au MIPT. Fort de mon expérience dans de bonnes universités russes (et pas seulement), j'ai fait quelques observations sur la formation des étudiants en informatique.
La règle des 30 secondes ne fonctionne plus
Je suis sûr que vous avez rencontré une règle de 30 secondes, qui stipule qu'un programmeur doit comprendre le but d'une fonction après un rapide coup d'œil à son code. Il a été inventé depuis longtemps, depuis lors, il y a eu de nombreux systèmes d'exploitation, langages, matériels et algorithmes. J'écris du code depuis 12 ans, mais relativement récemment, j'ai vu le code source d'un produit, qui à première vue me semblait être des sorts magiques. Aujourd'hui, si vous n'êtes pas immergé dans le sujet, la règle des 30 secondes cesse de fonctionner. Sinon, vous n'aurez pas seulement 30, mais aussi 300 secondes pour comprendre ce qui est quoi.
Par exemple, si vous voulez écrire des pilotes, vous devrez vous plonger dans cette zone, lire des milliers de lignes de code spécifique. Avec cette approche de l'étude du sujet, le spécialiste a un «sens de l'écoulement». Comme dans le rap, quand une sensation de bonne rime et de bon rythme apparaît sans rationalisation particulière. Un programmeur bien formé peut également facilement reconnaître le code inefficace ou simplement mauvais sans entrer dans une étude détaillée de l'endroit où une violation de style s'est produite ou une approche sous-optimale a été utilisée (mais expliquer ce sentiment peut être très difficile).
La spécialisation et la complexité croissante conduisent au fait que la formation d'un baccalauréat n'offre plus la possibilité d'étudier tous les domaines suffisamment en profondeur. Mais juste à ce niveau d'éducation, vous devez gagner des horizons. Après cela, dans une magistrature ou au travail, vous devrez passer un peu de temps à plonger dans les problèmes et les spécificités du domaine, étudier l'argot, les langages de programmation et le code des collègues, lire des articles et des livres. Il me semble que c'est le seul moyen avec l'aide de l'université de «gonfler la barre transversale» pour les futurs
spécialistes en forme de T.Quel langage de programmation est le mieux enseigné à l'université?

À ma grande joie, les professeurs d'université ont déjà refusé de trouver la bonne réponse à la question: «Quoi de mieux à programmer?». Le débat sur ce qui est le mieux - C # ou Java, Delphi ou C ++ - a en fait échoué. L'émergence de nombreux nouveaux langages de programmation et l'accumulation d'expérience pédagogique ont conduit au fait qu'une compréhension s'est établie dans le milieu académique: chaque langue a sa propre niche.
Le problème de l'enseignement à l'aide de l'un ou l'autre langage de programmation a cessé d'être une priorité. Peu importe la langue dans laquelle le cours est enseigné. L'essentiel est l'expressivité suffisante de la langue. Le livre «
L'art de la programmation multiprocesseur » illustre bien cette observation. Dans cette édition déjà classique, tous les exemples sont en Java, un langage sans pointeurs, mais avec Garbage Collector. Il est peu probable que quiconque soutienne que Java est loin d'être le meilleur choix lors de l'écriture de code parallèle hautes performances. Mais pour expliquer les concepts décrits dans le livre, le langage s'est avéré approprié. Un autre exemple est le cours
classique d'apprentissage automatique d' Andrew Eun enseigné dans la langue Matlab dans l'environnement Octave. Aujourd'hui, on pourrait choisir un langage de programmation différent, mais quelle est, en substance, la différence si les idées et les approches sont importantes?
Plus pratique et plus proche de la réalité
Parallèlement, ces dernières années, de nombreux praticiens sont devenus des universités. Si les programmes universitaires russes antérieurs ont été activement critiqués pour leur dissociation de la réalité, il n'est plus possible aujourd'hui de le dire à propos de l'enseignement informatique. Il y a 10 ans, il n'y avait presque pas d'enseignants dans les universités ayant une réelle expérience dans l'industrie. De plus en plus souvent au département spécialisé, les cours sont dispensés non pas par des professeurs d'informatique à plein temps, mais par des informaticiens praticiens qui ne lisent que 1-2 cours pendant leur temps libre de leur travail principal. Cette approche se justifie en termes de formation de qualité, de mise à jour des cours et, bien sûr, de recherche de collaborateurs potentiels dans l'entreprise. Je ne pense pas que je vais dire un secret en disant que nous soutenons le département de base du MIPT et établissons des relations avec d'autres universités, notamment pour préparer les étudiants qui pourraient commencer leur carrière dans Acronis.
Mathématicien ou programmeur?

Holivars, qui avait l'habitude de changer les langages de programmation, est entré dans la direction philosophique. Désormais, les «programmeurs» conditionnels et les «mathématiciens» se disputent. En principe, ces écoles pourraient se démarquer dans deux programmes éducatifs, mais l'industrie ne partage toujours pas bien ces subtilités, et d'une université à l'autre, nous avons une éducation similaire avec un biais légèrement différent. Cela signifie que l'étudiant et l'entreprise dans laquelle il continuera à travailler devront compléter le puzzle de la connaissance avec les pièces manquantes.
L'apparition dans les universités de praticiens qui écrivent du code industriel dans différentes langues donne aux étudiants une meilleure compétence de développement. Connaissant la mise en œuvre de bibliothèques, de frameworks et de techniques de programmation standard, les programmeurs pratiques inculquent aux étudiants le désir d'écrire du bon code, de le faire rapidement et efficacement.
Cette compétence utile, cependant, conduit parfois à l'avènement des fans de réinventer la roue. Les étudiants en informatique pensent ainsi: «que dois-je écrire 200 autres lignes de bon code qui résoudront le problème sur le front?».
Les enseignants qui ont reçu une formation mathématique classique (par exemple, matfak ou mathématiques appliquées) sont plus susceptibles de travailler dans un environnement quasi scientifique ou dans le domaine de la modélisation et de l'analyse des données. Les «mathématiciens» voient les problèmes en informatique différemment. Ils fonctionnent principalement non pas avec du code, mais avec des algorithmes, des théorèmes, des modèles formels. Un avantage important de l'approche mathématique est une compréhension fondamentale claire de ce qui peut et ne peut pas être résolu. Et comment le résoudre.
En conséquence, les professeurs de mathématiques parlent de programmation avec un parti pris pour la théorie. Les étudiants qui viennent «de mathématiciens» proposent plus souvent des solutions réfléchies et théoriquement meilleures, mais, en règle générale, ne sont pas optimales du point de vue de la langue et, souvent, sont tout simplement inexactes. Un tel étudiant estime que son objectif principal est de démontrer la capacité de résoudre de tels problèmes en principe. Mais la mise en œuvre peut être boiteuse.
Les gars qui ont été élevés par des programmeurs à l'école ou lors de leurs premiers cours apportent avec eux un «très beau vélo» qui, cependant, ne fonctionne généralement pas de manière très asymptotique. Au contraire, ils ne se sont pas donné pour tâche de théoriser profondément et de se tourner vers les manuels à la recherche de solutions optimales, en privilégiant le beau code.
Dans diverses universités, lors des entretiens avec les étudiants, je vois généralement quelle «école» sous-tend son éducation. Et je n'ai presque pas trouvé l'équilibre parfait dans l'éducation de base. Enfant, il était possible de se préparer aux mathématiques olympiades dans ma ville, mais il n'y avait pas de cercles de programmation. Maintenant, dans les cercles, les enfants apprennent à programmer dans le Go et Python «tendance». Par conséquent, déjà au niveau de l'admission dans les universités, il existe des différences dans les approches. Je crois qu'il est important de soutenir les deux compétences à l'université, sinon un spécialiste avec une base théorique insuffisante ou une personne qui n'a pas appris et ne veut pas écrire un bon code viendra travailler dans l'entreprise.
Comment «gonfler la barre transversale» pour les futurs spécialistes en T?

Il est clair que dans de telles circonstances, l'étudiant choisit simplement ce qu'il préfère. L'enseignant diffuse simplement un point de vue plus proche de lui. Mais tout le monde en bénéficiera si le code est magnifiquement écrit, et du point de vue des algorithmes, tout sera clair, raisonnable et efficace.
- Horizons informatiques . Un diplômé d'un baccalauréat en informatique est un spécialiste tout prêt avec une perspective technique développée, qui a probablement choisi son profil. Mais dans les plus jeunes, nous ne savons pas ce qu'il fera. Peut aller à la science ou à l'analytique, ou peut-être, au contraire, écrire une énorme quantité de code chaque jour. Par conséquent, l'étudiant doit montrer tous les aspects du travail dans le domaine informatique, pour se familiariser avec tous les outils. Idéalement, les enseignants des cours théoriques montreront un lien avec la pratique (et vice versa).
- Point de croissance . Évitez de rouler à l'extrême - dans l'intérêt de l'élève lui-même. Comprendre qui vous êtes, «mathématicien» ou «programmeur», n'est pas difficile. Il suffit d'écouter la première impulsion lors de la résolution du problème: que voulez-vous faire - regarder dans le manuel à la recherche de la meilleure approche ou écrire quelques fonctions qui vous seront certainement utiles plus tard? Sur cette base, vous pouvez construire une autre trajectoire complémentaire de votre apprentissage.
- Sources alternatives de connaissances . Il arrive que le programme soit bien équilibré, mais la «programmation système» et les «algorithmes» sont des personnes complètement différentes, et le premier enseignant est plus proche de certains élèves, et le second est plus proche des autres. Mais même si vous n'aimez pas le professeur, ce n'est pas une raison pour marteler certains sujets en faveur d'autres. Les bacheliers eux-mêmes sont intéressés à trouver la volonté de travailler avec des sources de connaissances et en aucun cas à faire confiance à des opinions radicales, telles que «les mathématiques sont la reine des sciences, l'essentiel est de connaître les algorithmes» ou «un bon code compense tout le reste».
Vous pouvez approfondir vos connaissances théoriques en vous référant à la littérature spécialisée et aux cours en ligne. Vous pouvez améliorer votre capacité à utiliser des langages de programmation sur Coursera, Udacity ou Stepik, où de nombreux cours différents sont présentés. De plus, les étudiants commencent souvent à regarder des cours de langue hardcore s'ils estiment que le professeur d'algorithme connaît bien les mathématiques, mais ne peut pas répondre à des questions complexes dans le domaine de la mise en œuvre. Tout le monde ne sera pas d'accord avec moi, mais dans ma pratique, la
spécialisation en C ++ de Yandex a fait ses preuves, dans laquelle les puces de langage de plus en plus complexes sont triées séquentiellement. En général, choisissez un cours avec des notes élevées dans des entreprises ou des universités réputées.
Compétences générales

Venant d'une université pour travailler dans n'importe quelle entreprise, d'une start-up à une grande entreprise, les étudiants, même les meilleures universités sont mal adaptés à l'environnement de travail réel. Le fait est qu'aujourd'hui, les universités «soignent» beaucoup d'étudiants. Même après avoir manqué beaucoup de cours, pas préparé à temps pour le contrôle et les tests, avoir trop dormi, être en retard à l'examen, tout le monde peut réussir et reprendre - et finalement obtenir un diplôme de toute façon.
Néanmoins, il y a aujourd'hui toutes les conditions pour que les étudiants soient préparés à l'âge adulte et à une activité professionnelle indépendante. Ils devront non seulement programmer, mais aussi communiquer. Et cela doit également être enseigné. Dans les universités, il existe différents formats pour pomper ces compétences, mais, hélas, elles ne reçoivent souvent pas assez d'attention. Néanmoins, dans notre arsenal, il existe de nombreuses opportunités d'acquérir des compétences de travail d'équipe efficaces.
- Communication commerciale écrite . Malheureusement, la plupart des spécialistes qui quittent l'université n'ont aucune idée de l'étiquette de la correspondance. Les spécificités de la communication dans les messageries instantanées dans la messagerie de nuit et l'après-midi et l'utilisation du style conversationnel et du vocabulaire informel. Cependant, il serait possible de former la langue écrite à la communication de l’étudiant avec le département et l’université.
Dans la pratique, les gestionnaires sont souvent confrontés à la nécessité de décomposer un grand projet en petites tâches. Pour ce faire, vous devez bien décrire chaque tâche et ses composants, afin que les développeurs juniors comprennent ce qui leur est demandé. Une tâche mal définie conduit souvent à la nécessité de refaire quelque chose, et donc l'expérience en communication écrite aide les diplômés à travailler en équipes réparties. - Présentation écrite des résultats de leur travail . Pour la présentation de leurs projets éducatifs, les étudiants seniors peuvent rédiger des articles sur Habr, des articles scientifiques et aussi des rapports. Il existe de nombreuses opportunités pour cela - dès la deuxième année, les articles de semestre commencent dans certaines universités. Vous pouvez également utiliser les essais comme une forme de contrôle - ils sont généralement plus proches sous la forme d'un article journalistique. Cette approche a déjà été mise en œuvre à la Higher School of Economics.
Si une entreprise pratique une approche flexible du développement, il est nécessaire de présenter les résultats de son travail en plus petites portions, mais plus souvent. Pour cela, il est important de pouvoir transmettre brièvement le résultat du travail d'un spécialiste ou de toute l'équipe. De plus, de nombreuses entreprises effectuent aujourd'hui des "revues" - annuelles ou semestrielles. Les employés discutent des résultats et des perspectives de travail. Un examen réussi est la principale raison de la croissance de carrière, des primes, par exemple, chez Microsoft, Acronis ou Yandex. Oui, vous pouvez bien programmer, mais «assis dans le coin», même un spécialiste exigeant perdra toujours face à quelqu'un qui sait bien présenter son succès. - Écriture académique . Séparément, il convient de souligner l'écriture académique. Il est utile pour les étudiants de se familiariser avec les règles de rédaction de textes scientifiques, d’utilisation d’arguments, de recherche d’informations dans diverses sources et de liens vers ces sources. Il est conseillé de le faire en anglais, car la communauté universitaire internationale a beaucoup plus de bons textes, et pour diverses disciplines, il existe déjà des modèles bien établis pour présenter les résultats scientifiques. Bien sûr, des compétences en rédaction académique sont également nécessaires dans la préparation de publications en russe, mais il existe beaucoup plus d'exemples de bons articles modernes en anglais. Vous pouvez acquérir ces compétences dans le cadre du cours correspondant, qui est désormais inclus dans de nombreux programmes éducatifs.
- Diriger des réunions . La plupart des étudiants ne savent pas comment se préparer aux réunions, conserver un protocole et traiter les données. Mais si nous développons cette compétence dans une université, par exemple, en participant à des projets collectifs, nous pouvons éviter de perdre du temps sur le lieu de travail. Pour ce faire, nous avons besoin de contrôler le travail de conception des étudiants afin de leur apprendre à mener efficacement les réunions. En pratique, cela coûte beaucoup d'argent à chaque entreprise - parce que si plusieurs personnes qui reçoivent un gros salaire passent une heure de travail lors d'un rassemblement, je veux qu'elles obtiennent le rendement correspondant.
- Prise de parole en public . De nombreux étudiants sont confrontés à la nécessité de parler en public uniquement pour défendre leur thèse. Et tout le monde n'est pas prêt pour cela. J'ai vu de nombreux étudiants qui:
- dos au public
- balancer, essayer d'introduire une commission de transe,
- casse stylos, crayons et pointeurs,
- marcher en rond
- regardez le sol.
C'est normal quand une personne parle pour la première fois. Mais avec ce stress, vous devez commencer à travailler plus tôt - avec la protection des cours dans une atmosphère amicale entre camarades de classe.
De plus, la pratique courante dans les entreprises est de permettre à un employé de proposer une idée, de recevoir un financement, un poste ou un projet dédié. Mais, si vous y réfléchissez - c'est la même défense du terme papier, juste à un niveau supérieur. Pourquoi ne pas former de telles compétences professionnelles utiles tout en étudiant?
Qu'est-ce qui me manque?
L'une des raisons de la rédaction de cet article était un article
publié sur le site Web de l'Université d'État de Tyumen . L'auteur de l'article se concentre uniquement sur les lacunes des étudiants russes constatées par les enseignants étrangers. La pratique de mon enseignement dans différentes universités indique que l'école russe et l'enseignement supérieur constituent une bonne base. Les étudiants russes sont avertis en mathématiques et en algorithmes, il est plus facile de nouer des relations professionnelles avec eux.
Dans le cas des étudiants étrangers, en revanche, les attentes d'un enseignant russe peuvent parfois être surestimées. Par exemple, au niveau de la formation de base en mathématiques, les étudiants indiens que j'ai rencontrés sont similaires aux étudiants russes. Cependant, ils manquent parfois de connaissances particulières à la sortie des études de premier cycle. Les bons élèves européens sont plus susceptibles d'avoir des mathématiques moins solides au niveau de l'école.
Et si vous étudiez ou travaillez dans une université, vous pouvez désormais développer vos compétences en communication (les vôtres ou celles de vos étudiants), élargir la base et pratiquer la programmation. À cette fin, toutes les possibilités sont prévues dans le système éducatif russe - il vous suffit de les utiliser correctement.
Je serai heureux si, dans les commentaires de l'article, vous partagez vos liens vers des cours et des méthodes qui aident à équilibrer l'équilibre dans l'éducation, ainsi que d'autres façons de pomper les compétences générales tout en étudiant à l'université.