Que doit pouvoir faire un programmeur en plus de la programmation ?
Tôt ou tard, dans toute activité professionnelle, arrive le stade des résultats intermédiaires, lorsqu'une personne réfléchit aux perspectives et répond à de nombreuses questions importantes sur l'avenir de la profession et l'orientation souhaitable de son développement ultérieur. Où aller ? Qu'est-ce qui nous attend ensuite ?
Mon point de vue est le suivant : dans un avenir proche, des compétences en matière de programmation seront nécessaires pour pratiquement toute activité. Ainsi que la compétence de l'administration élémentaire (j'insiste sur - élémentaire, c'est-à-dire installer, supprimer, mettre en place des tâches programmées, configurer le réseau et l'Internet). Pour les esthètes du genre - sertissage de câble et assemblage d'un ordinateur. Regardez les appareils techniques avancés : micro-ondes - vous devez programmer, boulanger - vous devez programmer, téléphone (smartphone) - pour programmer et administrer. Et le nombre de ces dispositifs ne fera qu'augmenter, ainsi que la complexité des scénarios de leur utilisation. Je pense que tout le monde peut penser aux mythes concernant les machines à café avec accès à Internet. Oui, j'ai complètement oublié les voitures et les aspirateurs.
Aujourd'hui, chacun de nous qui peut résoudre des tâches informatiques de base (il y a quelques années, le terme "informaticien" était à la mode, ce qui signifiait une sorte de vague symbiose d'administrateur et de programmeur) est engagé par des connaissances (pour qui ces activités s'apparentent à de la magie1) pour effectuer ces tâches très élémentaires. Je prédis que dans quelques années, ces tâches seront standardisées et qu'elles seront toutes résolues avec beaucoup moins d'efforts.
Le parallèle avec l'art de la lecture et de l'écriture est évident pour moi. Ressentez-vous la proximité des termes "art de l'écriture" et "art de la programmation "2 ? Dans le passé, lorsque les compétences en lecture et en écriture ne faisaient pas partie de l'ensemble des compétences générales, les personnes sachant écrire étaient invitées par leurs connaissances à effectuer les mêmes tâches de lecture et d'écriture moyennant une rémunération. L'écriture était très estimée, les scribes étaient bien payés, la capacité de bien écrire, de belle manière, c'est-à-dire la calligraphie, était appréciée. Ressentez-vous cette similitude ? Je peux vous donner une suggestion inverse pour ceux qui ne le ressentent pas : qu'est-ce qu'un... coprocode ?
Où sont les scribes maintenant ? Où sont les calligraphies ? Avec l'avènement de l'impression de livres et de l'éducation universelle, les scribes (ainsi que la calligraphie) font partie du passé. Oui, beaucoup d'entre eux pourraient écrire la même chose de façon beaucoup plus belle, mais à quel prix ? Imaginez n'importe quel document, mais rédigé par un calligraphe qualifié (ou simplement un scribe), de surcroît sur un papier fait main. Le temps et le budget sont au-delà du bien et du mal. Faut-il écrire vite et pas cher (mais comparativement moins bien), ou long et cher, mais plus beau et mieux ?
Oui, même maintenant, il y a des demandes de calligraphie. Mais en règle générale, à des fins artistiques et similaires "non appliquées". Inscriptions commémoratives, "à l'ancienne", etc.
Je le prédis à nouveau : il y aura un moment où "l'art de la programmation" sera valorisé au même titre que "l'art de l'écriture". C'est alors que la question se posera : "êtes-vous un programmeur ? Que pouvez-vous faire d'autre ?
Je voudrais terminer par quelques mots qui semblent très bien correspondre au sujet de ce fil de discussion :
"Tout le monde devrait pouvoir changer des couches, planifier des invasions, abattre des porcs, construire des bâtiments, faire naviguer des navires, écrire des sonnets, faire de la comptabilité, construire des murs, poser des os, soulager la mort, exécuter des ordres, donner des ordres, coopérer, agir de manière indépendante, résoudre des équations, analyser de nouveaux problèmes, appliquer des engrais, programmer des ordinateurs, cuisiner délicieusement, bien se battre, mourir avec dignité. La spécialisation est le lot des insectes."
Robert A. Heinlein
Conclusion
Dans un avenir proche, la programmation sera de plus en plus demandée. La variante des événements décrite est probablement suffisamment éloignée du moment présent pour qu'il ne soit pas nécessaire de prendre d'urgence des décisions radicales. Des programmeurs sont nécessaires et le seront encore longtemps. Cependant, n'oubliez pas - cela peut changer.
A quoi ressemblera la programmation dans 20 ou 30 ans ?
Le site de questions-réponses Quora aborde différents sujets. Par exemple, l'un des utilisateurs propose de spéculer sur ce que sera la programmation dans 20 ou 30 ans à l'avenir ?
La réponse a recueilli les réactions les plus positives de Michael O. Church. Il poursuit en disant que prédire l'avenir est une tâche ingrate. Par exemple, comment voyions-nous l'avenir il y a 20 ou 30 ans ? Il était clair que l'Internet était l'avenir. Mais en même temps, nous avons pensé que le progrès technologique rendra les gens plus libres, que nous travaillerons 20 heures par semaine et que nous disposerons de tout le nécessaire. Par exemple, les robots fonctionneraient.
Rien de tout cela ne s'est concrétisé (enfin, à l'exception d'Internet).
Cependant, l'évolution de l'humanité va dans cette direction : nous continuons à évoluer vers une société sans argent, même si ce n'est pas aussi vite que nous le souhaiterions.
Les ordinateurs portables, comme prévu dans les années 90, sont apparus et sont devenus très populaires.
Mais là où les progrès ont été minimes, c'est en termes socio-économiques. La nature humaine ne peut être réparée aussi rapidement, et tous les vices tels que la cupidité et l'orgueil ne peuvent être éliminés d'un seul coup. C'est donc à cause de ces vices que la pauvreté est encore présente dans la société. L'amélioration de la moralité humaine est trop lente.
Si l'on parle des programmeurs, Michael Church pense que cette profession sera encore plus demandée qu'aujourd'hui, et que les programmeurs gagneront plus. Selon lui, le salaire normal d'un programmeur serait d'environ 29 000 dollars par mois (en monnaie actuelle, hors taxes) au milieu de sa carrière, c'est-à-dire à environ 40 ans.
Le problème, c'est que l'argent va attirer beaucoup de charlatans qui ne connaissent pas vraiment la programmation. Nous voyons déjà que dans la Silicon Valley, où les gens viennent pour de l'argent et ne rêvent pas vraiment de progrès technologique et de changer l'avenir, ils veulent juste gagner plus d'argent. Nous allons devoir trouver des moyens de lutter contre cela.
Eh bien, la base technologique du travail ne changera pas trop. Les langages de programmation continueront à évoluer et les idées de Lisp et Haskell continueront à se répandre dans l'usage quotidien, mais il est peu probable que dans 20 ans la programmation soit radicalement différente de ce qu'elle est aujourd'hui. La programmation sera toujours un défi, mais ce sera toujours une activité amusante lorsque vous pourrez créer de nouvelles choses avec une logique pure.
Les métiers de la programmation qui peuvent être considérés comme des métiers d'avenir
Programmeur-éducateur
Tout d'abord, je voudrais mettre l'accent sur cette même profession. Un programmeur-éducateur est quelqu'un qui n'est pas tant un programmeur de réseaux neuronaux ou d'autres systèmes d'apprentissage machine complexes, que quelqu'un qui sait comment les enseigner.
Ici, ce n'est pas la capacité à écrire un code à partir de zéro qui est mise en avant, mais la compréhension de ce que fait un code écrit par quelqu'un d'autre et la capacité à le modifier pour l'adapter à ses propres besoins. L'essentiel est de construire correctement le processus d'apprentissage du maillage. Il s'agit d'une compétence distincte qui n'est enseignée nulle part de nos jours. Plus précisément, presque nulle part. Il existe d'agréables exceptions : Fiztech, SHAD, FKN HSE et quelques autres endroits.
Un tel spécialiste est demandé pour diverses tâches commerciales. Quelqu'un, en raison de la polyvalence de l'application de l'apprentissage machine, devra former le même réseau sur le DataSet du Combinat sidérurgique de Magnitogorsk pour prédire certains résultats de la fusion métallurgique ou autre, et d'autre part, sur les utilisateurs de données du Monde des Réservoirs et prédire leur sortie.
La personne qui sait comment former le réseau pour qu'il prévoie efficacement aujourd'hui comment changer les paramètres de la fonderie d'acier, et demain - comment changer les plans tarifaires du joueur dans World of Tanks, et il y a un programmeur du futur. Il est clair que lorsque des milliers d'entreprises, et pas seulement quelques-unes, commenceront à utiliser l'apprentissage profond et les réseaux de neurones dans leur travail quotidien, elles auront besoin de programmeurs qui savent comment apprendre ces réseaux, et non les écrire.
Ces spécialistes seront recherchés dans l'industrie, auprès des banques, par tous les services d'abonnement, des opérateurs de téléphonie mobile aux jeux informatiques. Ce sont seulement les zones qui se trouvent à la surface.
Expert en logiciels libres
Le deuxième métier du futur est à l'intersection du management et de l'informatique. Cette personne, au lieu d'écrire la tâche de développer quelque chose à partir de zéro, sait où et quel code source ouvert peut être adapté rapidement, ou où et quelles API peuvent être accessibles.
En ce moment, un grand nombre d'équipes sont occupées à "réinventer les vélos", et dès qu'elles montreront le code qu'elles ont créé, le client saura qu'il existe déjà avec quelqu'un d'autre (par exemple dans le dépôt de Google). Vous aurez besoin de spécialistes qui sont des experts de l'open source et qui comprennent ce que les vélos ne doivent pas réinventer. Au contraire, ils prendront des pièces toutes faites qui traînent, les assembleront rapidement - peut-être la même bicyclette, mais la leur à partir de pièces toutes faites - et n'augmenteront pas la production de roues, de pneus, etc.
Un exemple simple. Auparavant, un bon algorithme distribué capable de reconnaître des images était disponible pour cinq grandes entreprises et trois grandes universités. Aujourd'hui, n'importe quel écolier peut le trouver, car il y a du Tenzor Flow dans le domaine public. Je connais de bons écoliers qui peuvent le comprendre. Mais je connais aussi une personne qui va commencer à écrire quelque chose de similaire à partir de rien, parce qu'elle est peu au courant de ce qui se passe sur GitHub.
Un spécialiste de ce métier doit être un programmeur, comprendre et bien lire le code, mais pas nécessairement brillant pour l'écrire.
Spécialiste en programmation d'interfaces
De plus en plus de choses deviennent non pas des programmes autonomes, mais des programmes qui fournissent deux interfaces logicielles l'une à l'autre. Ce qui nous est donné dans le nuage n'est généralement pas des données statiques, mais une interface de travail, et vous devez y connecter une sorte d'interface qui vous est propre.
Vous devez être capable de travailler avec l'API des services en nuage, connaître ces services, être capable de les relier rapidement et, en général, comprendre ce qui peut être relié à quoi. Il ne s'agit pas de tout écrire à partir de zéro, mais de tirer le meilleur parti de ce qui est déjà disponible et écrit par d'autres. Ces compétences sont particulièrement utiles pour les applications lourdes - tout ce qui concerne la cartographie ou la recherche.
Par exemple, vous pourriez combiner un réseau social et des cartes de Google ou de Yandex pour créer une grille permettant de trouver un ami dans votre quartier. Ce serait une application cool, et seule une personne folle oserait écrire son propre système d'autorisation et son propre système de cartes. Ici, il ne s'agit pas de prendre du code standard et de le mettre sur vos serveurs, mais de faire interagir votre code avec les interfaces de Google, Facebook, Yandex, etc.
Ce genre de professionnel sait ce qui se passe dans le monde, quelles nouvelles interfaces s'ouvrent et où, et il sait comment bien travailler avec ces interfaces.
Voici un exemple de la manière dont ces professions peuvent se concurrencer. La tâche consiste à reconnaître la voix d'une personne dans le cadre d'un service. Il est maintenant résolu à l'aide de réseaux neuronaux. Vous pouvez aller acheter les ressources nécessaires sur Amazon, télécharger le code de Tenzor Flow, et commencer à former cette grille.
Il faudra pour cela les deux personnes que nous avons mentionnées. Un spécialiste du code des autres comprend comment faire monter Tenzor Flow sur le nuage d'Amazon. Quand il a fait cela, la personne que nous avons appelée le programmeur-éducateur prend le produit fini entre ses mains. Et il entraîne la grille, comprend quels DataSets et avec quelles voix s'embourber pour que la grille commence à reconnaître les noms de rues en chinois.
Mais un expert en programmation d'interfaces peut venir et dire : les gars, il y a le Speech Kit ou le logiciel de reconnaissance vocale de Nuance, nous n'avons pas besoin d'adapter le code et de louer l'heure du serveur, il y a juste une API toute faite - vous y mettez l'enregistrement sonore, et ils vous renvoient un fichier texte en temps réel. De cette façon, il peut simplement les mettre en faillite.
Pourquoi Prisma a-t-il décollé ? Les gars n'ont pas écrit le code à partir de zéro, ils savaient où l'obtenir, comment le modifier, où louer des serveurs moins chers. Il s'agissait d'utiliser les compétences des professions de chacun des trois groupes que j'ai mentionnés.
Quelles professions, au contraire, sont destinées à mourir
Je ne poserais pas la question comme ça. Un bon programmeur sait comment apprendre. Le métier de programmeur lui-même va être modifié, il utilise déjà aujourd'hui des outils et des langages complètement différents de ceux d'il y a 20 ans. Et il faut dire que ceux qui les ont appris il y a 20 ans n'ont pas disparu, ils sont simplement devenus des programmeurs travaillant dans un environnement différent. Il en sera de même à partir de maintenant. Certaines compétences particulières d'un programmeur ou un environnement particulier dans lequel il travaille changeront sans aucun doute.
On pourrait dire que les personnes qui sont aujourd'hui des programmeurs web vont devenir des programmeurs pour d'autres appareils, car l'importance des services web diminue à mesure que les appareils portables ou l'internet des choses se développent. Oui, de nouveaux langages de programmation comme Swift ou Go apparaissent pour la même raison. Mais ils sont favorablement acceptés par les programmeurs.
En général, les programmeurs resteront sans doute, ils travailleront simplement dans un environnement modifié, auquel ils ne sont pas habitués.