Si vous souhaitez insister avec insistance dans l'équipe de développement du compilateur ou dans le «monde de l'Ouest sauvage», n'hésitez pas à choisir et à apprendre le
meilleur langage de
programmation de TIOBE et mieux encore: au niveau de ses spécifications. Mais sérieusement, maintenant, dans l'industrie, tout est tellement confondu avec la logique et les conclusions, tant de marketing et d'eau, que la stratégie la plus gagnante est de faire preuve de cervelle et de réévaluer expressément les valeurs techniques auxquelles nous sommes si habitués. Dans le post, j'essaierai d'orienter le plus clairement possible les développeurs qui commencent leur carrière sur les risques de choisir des technologies et d'en tirer les bonnes et lointaines (lointaines) lointaines conclusions.
Avez-vous mûri ou pas encore?
Les enfants diffèrent des adultes dans leur compréhension du mot «responsabilité». Malheureusement, tous les enfants ne grandissent pas à temps et certains meurent dans la couche. Il n'y a rien de terrible ici - sauf pour une chose: les enfants de l'équipe de programmeurs font beaucoup souffrir les autres, surtout lorsque les délais sont proches et que la sortie est proche: soit ils se retrouvent soudainement au milieu de l'espace ouvert, soit ils ont besoin d'une tétine lors d'un brainstorming du sujet avec des représentants du client.

Les adultes diffèrent des enfants par la compréhension du principe clé de la gestion informatique: «la programmation est un privilège». Parmi les autres développeurs expérimentés et performants, les plus adéquats et bien codés et «font avancer l'entreprise» en même temps.
L'industrie informatique - devenue folle
Oui, nous sommes des gens et sujets aux émotions. Mais jusqu'à présent, personne ne sait comment programmer correctement, bien que plus de 50 ans se soient écoulés depuis l'invention de l'ordinateur. Personne! Tout le monde est juste hystérique et essaie d'attirer plus de supporters dans leur camp, tout en séduisant l'entreprise pour créer un projet par eux-mêmes :-) Je vais l'expliquer avec un exemple.

La vitesse du cerveau
Le fait est que les premiers ordinateurs étaient vraiment lents, très lents et très chers. Par conséquent, les premiers programmes ont été écrits dans des langages de très bas niveau, et parfois directement en code machine. De nos jours, de telles technologies «préhistoriques» sont parfois utilisées, mais de façon ponctuelle: pour créer des systèmes d'exploitation et leurs composants (proches du matériel), pour des moteurs de jeux, pour des bibliothèques et des
serveurs hautes performances, pour des
crypto -
monnaies et, bien sûr, pour créer
des langages de programmation .
Et si
C , malgré sa fuite totale et son danger élevé pour le développeur, s'est avéré être vraiment bon et a conquis le cœur des connaisseurs, alors
C ++ s'est avéré être une création extrêmement laide et contradictoire - mais que faire, c'est la vie. Peut-être que
Rust , avec les bonnes idées pour une gestion sûre de la mémoire, affectera la situation pour le mieux, mais en termes de laideur de syntaxe et d'illisibilité, il semble avoir laissé C ++ loin derrière.
La situation est encore aggravée par l'apparition de
Golang . D'une part - il n'y a rien de nouveau en lui, l'accord démobique du grand
Ken Thompson : seuls des restes misérables des fonctionnalités Java. D'un autre côté, il est devenu vraiment plus facile d'écrire des systèmes «relativement» et des logiciels multithreads, et c'est un fait que de
nombreuses entreprises ont noté :-)
Dans ce camp, vous trouverez principalement des technologies de bas niveau très bien informées et du matériel de «vrais» programmeurs barbus inconditionnels qui apprennent généralement un langage de programmation, mais ensuite ils s'endorment avec une spécification de compilateur au lieu d'une épouse. Vraiment, il y a des gens sympas dans ce camp. Et si vous ne savez pas quelles sont les commandes du processeur x86 qui
produisent la décomposition
en python , honte à vous et honte. Par conséquent, des conseils - évitez ce camp jusqu'à ce que vous lisiez jusqu'à la fin du message.
Mais il y a un revers à la médaille. Les projets ici se font non seulement depuis longtemps, mais ... depuis des
décennies . Les langages de programmation de bas niveau ne sont pas quelque chose qui aide, mais interférent plutôt. Les violations du travail avec la mémoire se produisent constamment, des dizaines et des centaines de testeurs sont nécessaires (ou vous pouvez le mettre sur github et nous testerons collectivement) et des milliers d'unités et d'autres types de tests pour le faire
décoller . De nombreux développeurs qui ont rejoint l'équipe au début des projets ne vivent pas pour voir la sortie et mourir de vieillesse, aidant les bêta-testeurs à leur dernier souffle. Mais ces gens courageux, avant de saigner des yeux, avant l'apparition des stigmates, font tout leur possible et ... des
chefs -
d'œuvre sont nés.

Architecture du cerveau et entreprise
Parce que personne ne sait encore programmer correctement, la méthode de "conception compétente et fiabilité" a été formée par sélection naturelle. Vous êtes fou de programmer dans des langages qui permettent des opérations de mémoire dangereuses via des pointeurs - vous pouvez aussi amener le monde à l'apocalypse: «défaut de segmentation dans le logiciel d'un réacteur nucléaire». Comment peut-on commencer à faire un projet sans supporter un typage fort dans la langue ?? Et ils sont venus avec les prochains langages de programmation corrects: Java et C #. Mais en Java, ils ont oublié les dangers des valeurs nulles et en C #, ils n'ont pas complètement pensé à la compatibilité descendante. Le résultat est un monde d'entreprise énorme, relativement sécurisé et relativement rétrocompatible. Dans ce monde, l'objectif est mesuré en lignes de code par jour (généralement pas plus de quelques dizaines, car les doigts sont frottés dans le sang) et en livres épais philosophiques et religieux sur les modèles de conception et, oh oui, j'ai presque oublié la façon de m'enterrer, le projet, le client et l'environnement le monde dans le code et s'y noyer, se souvenant dans l'agonie de la hiérarchie à 20 niveaux de l'héritage - à propos de la
POO . L'une des principales devises du camp est «pourquoi le faire simplement, si possible ... difficile et fiable, pendant longtemps, pendant des siècles!». De plus, certains d'entre eux peuvent écrire rapidement et avec élégance, se laver les mains dans le sang et collecter la structure du projet dans leur tête chaque matin, en regardant 3 écrans en même temps. Mais certains sont tellement dépendants qu'ils continuent de créer des hiérarchies de hiérarchies au sein de hiérarchies de hiérarchies à l'
infini - et l'objectif a longtemps été perdu, et les yeux continuent de brûler et les démangeaisons.
En fait, dans les domaines où le sujet s'est bien installé et s'inscrit dans des «objets avec statut et messages entre eux» - une approche similaire fonctionne très bien.

C'est particulièrement agréable quand il y a un typage statique «strict» (entre guillemets, car ce qui se passera ensuite avec haskell) (c'est lorsque les types d'entité sont connus à l'avance, ils sont vérifiés par le compilateur et vous ne pouvez pas ajouter une chaîne au nombre) facilité et plaisir lors de la refactorisation et amélioration du code et élevé si pour ne pas dire de grands
environnements de développement de qualité. Les collègues de ce camp sont souvent très éduqués en architecture logicielle, lisent beaucoup (le seuil d'entrée est élevé), comprennent les capacités de nombreuses bibliothèques de plates-formes, les modèles de conception, les techniques pour écrire des tonnes de documentation et créer des tests automatisés, teste ces tests et peut écrire une maquette pendant des mois, ce qui s'avère être inutile. Encore une fois - les projets sont souvent réalisés et lancés depuis très longtemps, par de grandes équipes, de nombreux testeurs sont nécessaires, mais la nature des erreurs est d'un ordre de grandeur moins fatal, ce qui inspire. Il est très difficile d'entrer dans cette «caste» du développement des entreprises. Si vous démontrez comment en PHP vous pouvez résoudre le problème à 5 lignes que vos collègues java vont résoudre en 5 jours, vous serez brûlé vif au micro-ondes :-)
Fiabilité du cerveau
Dans le milieu académique, un autre camp a été créé, très intéressant et recommandé pour la compréhension, et un ensemble de langages de programmation fonctionnels (Lisp, Haskell, Erlang et autres). Êtes-vous fou de programmer en utilisant des variables et des boucles - vous pouvez également faire beaucoup d'erreurs! Un programme est un ensemble d'appels de fonction, et au lieu de boucles, utilisez la récursivité, messieurs! OOP? Non, pas entendu - classes de types et types de données algébriques. Vous ne connaissez pas
les foncteurs applicatifs et n'avez pas feuilleté la théorie des catégories - oui, vous ne développez pas votre propre cerveau, mon ami.
En fait, à mon avis, pour entrer dans ce camp et comprendre ses valeurs, vous devez vraiment vous fatiguer énormément - pour les mathématiques, il y aura une mer et des concepts encore plus inattendus mais magnifiques. L'expérience acquise dans cette équipe sera inestimable et vous sera utile lorsque vous travaillerez avec d'autres langages de programmation. Ils disent que parfois les gens utilisent des langages fonctionnels dans des projets réels: compilateurs,
crypto -
monnaies - sans aucun doute, vos projets auront des ordres de grandeur moins d'erreurs logiques que le compilateur détectera, et la brièveté et la clarté et la concision du code dans Haskell, bien sûr, étonne - mais à l'époque de «sur les Louboutins!» étudier et comprendre cette beauté devient de moins en moins.

Le résultat et l'efficacité du «cerveau»
Au diable l'architecture et la POO, frère! Cthulhu vous aime, et la
frappe de canard est la clé du succès! Typage fort? Et qui, dans leur bon sens, attribuera une chaîne à un numéro ?? La saisie et la compilation statiques sont une perte de temps, car le code est écrit une fois, et si vous n'avez pas le temps de l'écrire pour publication, il sera jeté (et même jeté, mais un peu plus tard). Refactoring? Ecrivez bien :-) Encapsulation? Mettez un tiret devant le nom de la variable
et toutes choses . La POO est un reciblage inutile. Qu'est-ce que la compilation est F5 et vous voyez le résultat. Modèles de conception - non, vous n'en avez pas entendu parler: notre script est tout ... Voulez-vous de l'herbe?
La chose la plus intéressante est que lorsque vous vous plongez dans des langues avec une frappe dynamique (stricte en python, non stricte en php et javascript), vos yeux s'ouvrent progressivement à la vraie image des choses, car:
- le code devient très clair et concis et il n'est pas nécessaire de monter 20 classes (s'il ne concerne pas les bibliothèques système)
- vous pouvez rapidement vérifier l'idée via REPL
- les langues sont simples, souvent minimalistes, contiennent les primitives nécessaires et puissantes (listes, dictionnaires), qui, le plus important - tiennent dans votre tête!
- il y a un nuage de bibliothèques et vous pouvez toujours résoudre tout problème en 5 lignes
Et au diable avec ça, avec le refactoring :-) La vie est devenue plus amusante (j'espère que le développeur qui supporte mon code ne saura pas où j'habite). Dans ce camp, vous rencontrerez souvent de nombreuses personnes gaies de spécialités complètement différentes, à l'exception de la «programmation assembleur», qui sont néanmoins capables de résoudre très rapidement et efficacement des problèmes en 5 lignes et de soutenir des projets de code et web pendant longtemps et avec succès.
Regardez les dernières tendances de ce camp et imprégnez-vous de cette philosophie du bonheur. Un
environnement de programmation simple et compréhensible
dans le navigateur , eh bien, quoi de plus sexy?

Et est-il facile de créer un serveur Web non bloquant desservant des milliers de connexions en 10 lignes sur
node.js et la communauté grandit à pas de géant?
Et pas de "Eclipse XML Soap Entiny beans Enterprise OOP ..." - json et csv et un sourire (et l'odeur d'une plante inconnue). Et le code est lu et placé dans le cerveau, et donc il fonctionne joyeusement et longtemps et est maintenu avec la même facilité pendant de nombreuses années.
Et il s'avère que «cette façon» peut également être programmée avec succès et les années passées dans les «langages de programmation industriels» sont vécues en vain (mais les doigts se sont renforcés).
Sélection de technologies
Êtes-vous sous le choc? Moi aussi. Et imaginez à quel point les clients sont étonnés de choisir la technologie pour la mise en œuvre d'un projet d'entreprise! :-)
Je pense que vous comprenez très bien en ce moment que le monde informatique est vraiment devenu fou et s'est perdu (je plaisante). Certains langages de programmation, comme Scala, essaient de s'asseoir sur toutes les chaises, mais ils ne réussissent toujours pas vraiment - le code devient difficile à comprendre comme un simple mortel. Mais sérieusement, la concurrence des paradigmes de programmation ne fera que s'intensifier parce que ... les tâches dans les projets sont complètement différentes et c'est à partir des tâches qu'il faut "danser"! Dans un domaine établi (serveurs, bibliothèques),
la frappe nominale (C ++, Java, C # ...) est meilleure, quelque part elle sera meilleure avec
la frappe structurelle (Golang, Haskell ...), et dans les scripts web ou les tâches machine l'apprentissage apportera un vrai bonheur avec le
canard (python, php, javascript ...). Il n'est pas nécessaire de penser que
le typage statique , en particulier le
typage strict, est directement «indispensable» - vous échouerez aux délais et le code avec une pensée paranoïaque satisfaite des «erreurs possibles» sera jeté à la poubelle. Dans le Web, les scripts et l'apprentissage automatique, vous pouvez avancer en toute confiance à grande vitesse et avec la frappe dynamique de canard et php et python avec un grand nombre de
bibliothèques belles et
puissantes, c'est un bon exemple.
Par conséquent, oubliez «ce qu'il faut apprendre un langage de programmation en 2018» en enfer:
- Comprendre les paradigmes de programmation (la POO peut être une grave ou vous faire économiser un projet)
- comprendre les subtilités de la frappe et les risques et opportunités qui y sont associés (vous pouvez maudire la frappe dynamique dans une bibliothèque financière, ou vous pouvez sacrifier un programmeur java à Cthulhu et réécrire ses 100 classes sur 100 lignes dans un script qui est compréhensible même pour les enfants)
- au niveau de l'intuition, comprendre les algorithmes (vous devez faire la distinction entre la recherche et le tri, et un réseau neuronal de la régression logistique - et pour mieux comprendre, vous devez apprendre ... toute votre vie, mais ça vaut le coup)
- comprendre que les développeurs expérimentés (bien que personne ne sache où les trouver sur le marché) implémenteront le projet à temps sur pratiquement n'importe quelle technologie (même brainfuck) et le feront bien, mais les inexpérimentés devront choisir un langage de programmation avec le niveau d'entrée le plus confortable et les risques d'effondrement toujours super
Ensuite, sélectionnez le domaine de tâches qui vous intéressera, comme le Web ou l'apprentissage automatique, et:
- regardez ce que les gens résolvent ces problèmes
- répartir les risques et opportunités de chaque instrument selon les critères ci-dessus
- asseoir quelques week-ends avec 1-3 outils spécifiques, mais en aucun cas à la hauteur du fanatisme ou des spécifications
- se lancer plus rapidement dans les affaires et acquérir de l'expérience dans l'utilisation des outils dans la pratique - c'est la chose la plus importante
- vous n'avez pas besoin d'apprendre le langage de programmation «jusqu'à la fin» - il vaut mieux apprendre à résoudre votre problème dans les 5 outils les plus populaires en 10-15 lignes et vous agirez en fait de manière extrêmement adéquate!
Étude de cas - ML
Disons que vous êtes intéressé par l'apprentissage automatique ... Félicitations! D'une part, il y a une théorie académique - mais vous devez en tirer l'essence selon les statistiques et l'algèbre linéaire, et en aucun cas vous ne devriez traîner pendant plusieurs mois (allez, croyez-moi, fou si vous n'êtes pas un mathématicien, mais un humaniste - et c'est imperceptible pour vous-même) ) D'un autre côté, vous devez apprendre à écrire rapidement du code utile et à résoudre un problème en 5 à 15 lignes. Oui, vous pouvez tout écrire en C en 10 000 ans, alors regardez l'expérience de vos collègues et choisissez, correctement, python, dans lequel il y a beaucoup de bibliothèques et de solutions toutes faites sur ce sujet. Vous consacrez quelques jours de congé à l'étude du python - il n'y a plus rien à apprendre là-bas, la langue est très simple (et nous avons convenu de ne pas grimper dans la nature, car le temps c'est de l'argent).
De plus, lisez l'essence de numpy, pandas, scikit-learn et, si vos yeux sont droits, puis Keras et allez-y, faites des projets. Mais vous pouvez emprunter une autre voie, longue et difficile, menant à la sainteté personnelle et à la pauvreté sociale (après 3 ans, vous comprendrez l'essence de l'algorithme, vendre des journaux dans un train électrique, mais c'est peut-être une façon spéciale) - commencez à mettre en œuvre les algorithmes vous-même, avec une gestion manuelle de la mémoire, ou implémentez une solution
plus lourde et fouillez le code pendant des mois. Le mauvais outil - la clé des nuits blanches et du temps perdu - évite la complexité à tous points de vue.
Un outil mal choisi, même le plus populaire, même gratuitement en cadeau, même s'il est théoriquement capable de tout à long terme, peut ruiner votre projet en manquant à toutes les échéances. Minimisez ce risque comme vous pouvez et ne pouvez pas.
Conclusions
Au total, mes amis, nous nous sommes assurés que personne ne sait comment programmer correctement et avec succès, même nous les développeurs :-) La concurrence des paradigmes et des technologies de programmation s'intensifie, la tête gonfle et le temps libre diminue. Par conséquent, la stratégie la plus gagnante pour un développeur débutant sa carrière est de boire une canette de bière fraîche, de se détendre et de:
- éviter le collage et l'immersion dans des parties technologiques excessives, dont le nombre augmente de façon exponentielle
- choisissez un domaine de problèmes intéressant dans lequel vous souhaitez résoudre les problèmes des clients
- apprendre à extraire l'essence courte et érotique des outils et des langages de programmation
- écrivez le moins possible, mais clair et compréhensible pour vous et les personnes qui vous entourent
- apprendre à résoudre des problèmes en 5-15 lignes, pas en 20-50 classes
- si vous voulez aller ailleurs, que ce soit des choses fondamentales comme les mathématiques, haskell ou rfc par tcp / ip
- profitez de la programmation et réchauffez vos collègues avec!

Et rappelez-vous toujours que le temps, en particulier le temps libre, est une ressource précieuse et cela dépend de nous où l'investir. Bonne chance à tous et bonne humeur!