La plupart des programmeurs modernes ont été formés dans des universités. Avec le temps, cela changera, mais pour l'instant, la situation est telle que de bons talents dans les entreprises informatiques proviennent toujours des universités. Dans cet article, Stanislav Protasov, directeur des relations universitaires chez Acronis, partage sa vision des spécificités de la formation universitaire des futurs programmeurs. Les enseignants, les étudiants et ceux qui les recrutent peuvent même trouver quelques conseils utiles sous le coup.
Depuis 10 ans, j'enseigne les mathématiques, les algorithmes, les langages de programmation et l'apprentissage machine dans diverses universités. Aujourd'hui, en plus de mon poste chez Acronis, je suis également le vice-président du département d'informatique théorique et appliquée à MIPT. De mon expérience dans de bonnes universités russes (et d'ailleurs), j'ai tiré certaines observations sur la formation des étudiants dans les disciplines informatiques.
La règle des 30 secondes ne fonctionne plus.
Je suis sûr que vous avez déjà entendu parler de la règle des 30 secondes, qui stipule qu'un programmeur doit comprendre la fonction d'un code après un coup d'œil rapide. Cette règle a été conçue il y a longtemps, depuis, de nombreux systèmes d'exploitation, langages, matériel et algorithmes ont vu le jour. J'écris du code depuis 12 ans, mais récemment, j'ai vu le code source d'un produit qui, à première vue, m'a semblé magique. Aujourd'hui, si vous n'êtes pas immergé dans le domaine, la règle des 30 secondes cesse de fonctionner. Sinon, vous n'aurez pas seulement besoin de 30, mais même de 300 secondes pour comprendre ce qui se passe.
Par exemple, si vous voulez écrire des pilotes, vous devrez plonger dans ce domaine et lire des milliers de lignes de code spécifique. Avec cette approche d'apprentissage, un spécialiste acquiert un "sentiment de flow". Comme dans le rap, où la sensation d'une bonne rime et d'un bon rythme se manifeste sans rationalisation spéciale. De la même manière, un programmeur bien formé peut facilement reconnaître un code inefficace ou simplement mauvais, sans entrer dans les détails sur l'endroit où le style a été violé ou où une approche non optimale a été utilisée (expliquer ce sentiment peut être très difficile).
La spécialisation et la complexité croissante font que le diplôme de licence ne permet plus d'explorer suffisamment en profondeur tous les domaines. Mais c’est justement à ce niveau d’enseignement qu’il faut acquérir une culture générale. Plus tard, en master ou au travail, il faudra consacrer du temps à comprendre les problématiques et les spécificités du domaine, à étudier le jargon, les langages de programmation et le code des collègues, à lire des articles et des livres. Il me semble que c’est ainsi, grâce à l'université, que l'on peut "muscler la barre" pour le futur. .
Quel langage de programmation est le mieux à enseigner à l'université ?

À ma grande joie, les enseignants des universités ont déjà renoncé à chercher la bonne réponse à la question : "Sur quoi vaut-il mieux programmer ?" Les débats sur ce qui est mieux — C# ou Java, Delphi ou C++ — ont pratiquement disparu. L'émergence de nombreux nouveaux langages de programmation et l'accumulation d'expériences pédagogiques ont conduit à la compréhension dans le milieu académique que chaque langage a sa propre niche.
Le problème de l'enseignement en utilisant un langage de programmation spécifique n'est plus une priorité. Peu importe le langage utilisé pour le cours. L'essentiel est l'expressivité suffisante du langage. Le livre "" est une bonne illustration de cette observation. Dans ce livre déjà devenu classique, tous les exemples sont donnés en Java — un langage sans pointeurs, mais avec un Garbage Collector. Il est peu probable que quelqu'un dispute que Java est loin d'être le choix optimal pour écrire du code parallèle hautes performances. Mais pour expliquer les concepts exposés dans le livre, le langage s'est révélé approprié. Un autre exemple est le " d'Andrew Ng, enseigné en langage Matlab dans l'environnement Octave. Aujourd'hui, on pourrait choisir un autre langage de programmation, mais quelle est véritablement la différence, si ce qui compte ce sont les idées et les approches ?
C'est plus pratique et plus proche de la réalité.
Au cours des dernières années, le nombre de praticiens dans les universités a considérablement augmenté. Alors qu'auparavant, les programmes universitaires russes étaient souvent critiqués pour leur déconnexion avec la réalité, aujourd'hui, il en va autrement pour l'enseignement de l'informatique. Il y a dix ans, il y avait presque aucun enseignant avec une expérience réelle de travail dans l'industrie. De nos jours, ce sont de plus en plus souvent des spécialistes en informatique qui donnent cours dans les départements concernés, n'enseignant qu'un ou deux cours pendant leur temps libre, en plus de leur emploi principal. Cette approche s'avère efficace en termes de formation de qualité, de mise à jour des cursus et, bien sûr, de recherche de futurs employés pour les entreprises. Je ne pense pas révéler un secret en disant que nous soutenons le département de base à l'Université de l'École d'Économie de Moscou et établissons des relations avec d'autres universités notamment pour former des étudiants qui pourraient commencer leur carrière chez Acronis.
Mathématicien ou programmeur?

Les débats qui auparavant tournaient autour des langages de programmation sont devenus philosophiques. Désormais, ce sont des "programmeurs" et des "mathématiciens" qui se disputent. En principe, ces écoles pourraient être distinguées en deux programmes éducatifs, mais l'industrie a encore du mal à séparer de telles subtilités, et d'une université à l'autre, l'éducation ressemble beaucoup avec des orientations légèrement différentes. Cela signifie que tant pour l'étudiant que pour l'entreprise dans laquelle il travaillera par la suite, il faudra compléter le puzzle des connaissances avec les morceaux manquants.
L'apparition de praticiens dans les universités, qui écrivent du code industriel dans différents langages, offre aux étudiants des compétences en développement de meilleure qualité. Bien familiarisés avec les implémentations des bibliothèques standard, les frameworks et les techniques de programmation, ces programmeurs pratiquants inculquent aux étudiants le désir d'écrire un code de qualité, de le faire rapidement et efficacement.
Cependant, cette compétence utile conduit parfois à la création de passionnés d'inventions de vélo. Les étudiants programmateurs se disent : "Qu'est-ce que cela me coûte d'écrire encore 200 lignes de bon code qui résoudra directement le problème posé ?".
Les enseignants ayant une formation mathématique classique (par exemple, en mathématiques pures ou appliquées) travaillent généralement dans des milieux proches de la recherche ou dans le domaine de la modélisation et de l'analyse des données. Les "mathématiciens" perçoivent différemment les problèmes dans le domaine de l'informatique. Ils utilisent avant tout des algorithmes, des théorèmes et des modèles formels, plutôt que du code. Un des principaux avantages de l'approche mathématique est une compréhension claire des problèmes résolubles et des méthodes de résolution.
En conséquence, les enseignants de mathématiques abordent la programmation avec un accent sur la théorie. Les étudiants qui viennent de ce milieu proposent souvent des solutions bien pensées et théoriquement plus abouties, mais généralement non optimales d'un point de vue lexical, et souvent tout simplement mal écrites. Cet étudiant pense que son objectif principal est de démontrer sa capacité à résoudre de tels problèmes en principe. Cependant, la mise en œuvre peut être défaillante.
Les jeunes issus d'écoles où des programmeurs enseignent apportent avec eux un "vélo très élégant" qui, cependant, fonctionne généralement de manière asymptotiquement peu efficace. Ils n'ont pas pour but de théoriser en profondeur et de chercher des solutions optimales dans des manuels, préférant un code esthétique.
Dans différentes universités, lors des entretiens avec les étudiants, je constate souvent quelle "école" a guidé leur éducation. Je n'ai presque jamais été confronté à un équilibre parfait dans la formation de base. Enfance, dans ma ville, il était possible de se préparer à des olympiades mathématiques, mais il n'y avait pas de clubs de programmation. Maintenant, les enfants apprennent à programmer dans des clubs avec les langages "tendance" Go et Python. Ainsi, dès l'admission à l'université, il y a des divergences dans les approches. Je considère qu'il est important de maintenir les deux compétences à l'université, sinon l'entreprise recevra soit un spécialiste avec une base théorique insuffisante, soit une personne qui n'a pas appris ou ne souhaite pas écrire un bon code.
Comment "muscler les barres" pour former des

Il est évident que dans de telles conditions, l'étudiant choisit simplement ce qu'il préfère. L'enseignant, quant à lui, transmet un point de vue qui lui est plus proche. Mais tout le monde en bénéficiera si le code est bien écrit et que, du point de vue des algorithmes, tout est clair, justifié et efficace.
- Horizon IT. Un diplômé de la licence en informatique est déjà un professionnel avec une vue d'ensemble technique développée, qui a probablement choisi sa spécialité. Cependant, pendant les premières années, nous ne savons pas ce qu'il ou elle va faire. Il peut se tourner vers la science ou l'analyse, ou peut-être, au contraire, rédiger une quantité énorme de code chaque jour. Par conséquent, l'étudiant doit se voir présenter tous les aspects du travail dans le domaine de l'informatique et se familiariser avec tous les outils. Idéalement, les enseignants des cours théoriques devraient montrer le lien avec la pratique (et vice versa).
- Point de croissance. Il est essentiel de ne pas tomber dans les extrêmes, dans l'intérêt même de l'étudiant. 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 d'un problème : que souhaitez-vous faire ? Consulter un manuel à la recherche de la méthode optimale ou écrire quelques fonctions qui seront sûrement utiles par la suite ? À partir de cela, vous pouvez construire la trajectoire complémentaire de votre apprentissage.
- Sources de connaissances alternatives. Il arrive que le programme soit bien équilibré, mais que "Programmation système" et "Algorithmes" soient enseignés par des personnes totalement différentes, et certains étudiants se sentent plus proches du premier enseignant tandis que d'autres préfèrent le second. Mais même si vous n'aimez pas le professeur, cela ne doit pas être une raison pour négliger certains sujets au profit d'autres. Les étudiants en licence sont eux-mêmes motivé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, il est essentiel de connaître les algorithmes" ou "un bon code compense tout le reste".
Approfondir ses connaissances en théorie peut se faire en se tournant vers des ouvrages spécialisés et des cours en ligne. Améliorer ses compétences en programmation peut se faire sur Coursera, Udacity ou Stepik, qui proposent une grande variété de cours. De plus, les étudiants commencent souvent à suivre des cours poussés en langages de programmation lorsqu'ils sentent que le professeur en algorithmique maîtrise bien les mathématiques, mais ne peut pas répondre à des questions difficiles sur l'implémentation. Tout le monde ne sera pas d'accord avec moi, mais dans ma pratique, cela a bien fonctionné. , où toutes les fonctionnalités du langage sont progressivement explorées. En général, choisissez un cours avec de bonnes évaluations, proposé par des entreprises ou des universités de renom.
Compétences interpersonnelles

À leur sortie de l'université, les étudiants, même ceux des meilleures facultés, se retrouvent mal adaptés à l'environnement de travail réel, que ce soit dans une startup ou une grande entreprise. En effet, aujourd'hui, les universités prennent beaucoup de temps pour accompagner les étudiants. Même en ayant manqué de nombreux cours, en n'étant pas préparés à temps pour les examens et en ayant dormi ou arrivé en retard à l'examen, chacun peut réussir un examen et même le repasser, et au final obtenir son diplôme.
Néanmoins, aujourd'hui, toutes les conditions sont réunies pour préparer les étudiants à la vie adulte et à l'activité professionnelle autonome. Ils devront non seulement programmer, mais aussi communiquer. Et cela doit également être enseigné. Les universités proposent divers formats pour développer ces compétences, mais hélas, ils ne reçoivent souvent pas une attention suffisante. Pourtant, nous disposons de nombreuses opportunités pour acquérir des compétences de travail en équipe efficaces.
- Communication écrite professionnelle. Malheureusement, la plupart des spécialistes qui sortent de l'université n'ont aucune notion d'étiquette de correspondance. La spécificité de la communication dans les messageries, l'échange de messages le jour et la nuit, et l'utilisation d'un style conversationnel et de vocabulaire informel. Cependant, la pratique de l'écriture pourrait être améliorée par la communication entre les étudiants et 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 tâches plus petites. Pour cela, il est important de bien décrire chaque tâche et ses composants, afin que les développeurs juniors comprennent ce qui est attendu d'eux. Une tâche mal formulée entraîne souvent la nécessité de tout refaire, aussi l'expérience en communication écrite aide les diplômés à travailler dans des équipes distribuées.
- Présentation écrite des résultats de son travail. Pour présenter leurs projets académiques, les étudiants de dernière année peuvent rédiger des articles sur Habr, des articles scientifiques, ainsi que des rapports. Il existe de nombreuses possibilités — dès la deuxième année, dans certaines universités, les travaux de semestre commencent. On peut également utiliser des essais comme forme de contrôle — généralement, ils ressemblent davantage à des articles de presse. Cette approche est déjà mise en œuvre à la HSE.
Si une entreprise pratique une approche agile dans le développement, il est nécessaire de présenter les résultats de son travail en portions plus petites, mais plus fréquemment. Pour cela, il est important de savoir communiquer brièvement les résultats d'un spécialiste ou de toute une équipe. De plus, dans de nombreuses entreprises aujourd'hui, des « revues » sont organisées — annuelles ou semestrielles. Les employés discutent des résultats et des perspectives de travail. Une revue réussie est la principale raison de l'avancement professionnel, des primes, par exemple chez Microsoft, Acronis ou Yandex. Oui, vous pouvez bien programmer, mais « être dans un coin » même un spécialiste talentueux perdra toujours face à quelqu'un qui sait bien présenter son succès.
- Rédaction académique. Il est important de souligner la rédaction académique. Il est utile pour les étudiants de se familiariser avec les règles de rédaction de textes scientifiques, l'utilisation d'arguments, la recherche d'informations dans diverses sources et la citation de ces sources. Il est souhaitable de le faire en anglais, car il existe beaucoup plus de bons textes dans la communauté académique internationale, et pour diverses disciplines, il existe déjà des modèles bien établis pour présenter les résultats scientifiques. Bien sûr, les compétences en rédaction académique sont également nécessaires pour la préparation de publications en russe, mais il y a beaucoup moins d'exemples d'articles modernes de qualité en anglais. Ces compétences peuvent être acquises dans le cadre d'un cours approprié, qui fait maintenant partie de nombreux programmes éducatifs.
- Conduite de réunions. La plupart des étudiants ne savent pas se préparer pour des réunions, tenir un procès-verbal et traiter des données. Mais si l'on développe cette compétence à l'université, par exemple en participant à des projets collectifs, nous pourrons éviter de perdre du temps au travail. Pour cela, il est nécessaire de contrôler le travail projet des étudiants pour les apprendre à mener des réunions efficacement. En pratique, cela coûte beaucoup d'argent à chaque entreprise — en effet, si plusieurs personnes, recevant un bon salaire, passent une heure en réunion, on espère en tirer un certain retour.
- Prise de parole en public. Beaucoup d'étudiants sont confrontés à la nécessité de parler en public uniquement lors de la soutenance de leur mémoire. Et peu d'entre eux sont vraiment prêts pour cela. J'ai vu de nombreux étudiants qui :
- se tiennent dos aux auditeurs,
- se balancent, tentant de plonger le jury dans un transe,
- cassent des stylos, des crayons et des pointeurs,
- marchent en rond,
- regardent le sol.
C'est normal qu'une personne se sente stressée lors de sa première intervention. Mais il est important de commencer à travailler sur ce stress plus tôt — lors de la soutenance de travaux pratiques dans une atmosphère amicale, parmi ses camarades.
De plus, la pratique standard dans les entreprises est de donner à un employé la possibilité de proposer une idée, d'obtenir un financement pour cela, un poste ou un projet dédié. Pourtant, si l'on y pense — c'est la même chose qu'une soutenance de mémoire, juste à un niveau plus élevé. Pourquoi ne pas entraîner de telles compétences utiles pour la carrière pendant les études ?
Qu'ai-je manqué ?
L'un des motifs pour rédiger ce post est un article, . L'auteur de l'article se concentre uniquement sur les défauts des étudiants russes, relevés par des enseignants étrangers. L'expérience de mon enseignement dans différentes universités montre que l'éducation scolaire et supérieure en Russie offre une bonne base. Les étudiants russes sont bien formés en mathématiques et en algorithmes, il est plus facile de construire une communication professionnelle avec eux.
Dans le cas des étudiants internationaux, au contraire, les attentes des enseignants russes peuvent parfois être exagérées. Par exemple, au niveau de la formation de base en mathématiques, les étudiants indiens que j'ai rencontrés ressemblent aux russes. Cependant, ils manquent parfois de connaissances spécifiques à la sortie du baccalauréat. De bons étudiants européens auront plutôt une préparation mathématique moins solide au niveau scolaire.
Et si vous étudiez ou travaillez dans une université, vous pouvez déjà commencer à développer vos compétences en communication (ou celles des étudiants), élargir votre base fondamentale et pratiquer la programmation. Le système éducatif russe offre toutes les possibilités à cet égard — il suffit de les utiliser correctement.
Je serais ravi si, dans les commentaires à ce post, vous partagiez vos liens vers des cours et des méthodes qui aident à équilibrer l'éducation, ainsi que d'autres moyens d'améliorer les compétences relationnelles pendant vos études à l'université.
Source : habr.com
