Où commence la programmation?

image


Il était une fois, nous avons développé une plateforme de haut niveau pour développer des applications métier lsFusion . Il ne restait plus qu'à trouver celui qui écrirait dessus. Il a été décidé d'afficher un emploi sur les sites de recherche d'emploi. Mais la question se pose: que faut-il indiquer comme poste ou profession.

En termes de complexité, le langage de la plate-forme ne diffère pas beaucoup de SQL, qui a été créé à l'origine non pas pour les programmeurs, mais pour les utilisateurs professionnels. Par conséquent, nous avons également décidé d'indiquer «Business Analyst» comme poste.

Nous avons proposé aux candidats de résoudre une tâche de test relativement simple, dans laquelle il fallait affiner un peu un exemple simple. Certaines personnes l'ont fait, mais des lettres de colère sont venues de beaucoup d'indignation comme: "Recherchez-vous un programmeur ou un analyste commercial?"

En conséquence, nous avons trouvé les personnes dont nous avions besoin, mais en analysant cette expérience, je me suis involontairement demandé: où finit l'analyse commerciale et où commence la programmation?

Quand je venais de terminer mes études universitaires, j'avais un ami qui travaillait déjà comme programmeur dans une grande entreprise d'impartition. Tout était adulte - en plus des programmeurs, il y avait des analystes commerciaux et des testeurs. Ensuite, j'ai été très intéressé par la façon dont ils ont tout construit là-bas, en particulier, ce que font les analystes commerciaux. À la question de savoir comment il a interagi avec eux, la réponse suivante a été reçue approximativement: «Ils m'envoient des diagrammes là-bas, toutes sortes de documents. Je ne les lis pas de toute façon et je les supprime immédiatement. " Il est clair qu'il était un peu malhonnête et qu'il regardait quelque chose.

Maintenant, en lisant un grand nombre de tâches et de spécifications techniques diverses, je comprends le problème principal d'une telle «analyse commerciale»: le papier supportera tout. C'est la principale différence entre l'analyse et la programmation. Sur papier, vous pouvez écrire des conditions complètement contradictoires, indiquer des exigences absolument abstraites comme «Je veux que ce soit bon», les rendre belles et supposer que le travail est fait. En programmation, une telle astuce ne fonctionne pas - tout doit être clair. Pour cette raison, le développeur peut souvent repousser la mise en œuvre de toute fonctionnalité par le client, simplement en soulignant constamment les contradictions et en exigeant une clarification des exigences. Et le client ne peut le faire que s'il fait, en fait, le travail d'un programmeur.

Les programmeurs semblent devoir écrire des programmes. Qu'est-ce qui peut être considéré comme un programme? L'un des formalismes utilisés en théorie est la machine de Turing. Il s'agit de l'ordinateur le plus simple avec lequel vous pouvez décrire les algorithmes. Ceci, à son tour, suggère qu'une des propriétés d'un programme est impérative. Le programme a un état et un processus d'exécution. L'une des principales caractéristiques de SQL était sa nature déclarative. On supposait que les gens ordinaires l'utiliseraient, car ils n'auraient pas à écrire un «programme», mais à décrire en SQL ce qu'ils veulent obtenir.

Enfant, j'ai eu la chance de jouer aux échecs. Maintenant je comprends que je n'ai absolument pas compris les principes de base du jeu de position. Cependant, j'ai pu bien calculer la position de nombreux pas en avant. J'ai toujours essayé «d'ouvrir» le jeu et j'ai encore gagné simplement en raison de diverses combinaisons, où l'adversaire me considérait comme pire. En fait, je venais d'avoir un débogueur travaillant dans ma tête qui pouvait faire des mouvements et représenter dans les montres la position actuelle sur le tableau. En réalité, je jouais comme un simple ordinateur. Néanmoins, en première année de classe, j'ai réussi à terminer le premier rang adulte et à entrer dans les trois premiers au championnat biélorusse à mon âge. C'est drôle, mais les échecs utilisent les mêmes compétences que la programmation. Un jeu de position est la conception de l'architecture. Jeu tactique - débogage du programme.

En enseignant la programmation des personnes dans lsFusion, je suis arrivé à la conclusion que la logique impérative est plus difficile à percevoir pour une personne ordinaire que déclarative. Calculer la situation de nombreuses avancées n'est pas une compétence de base utilisée par une personne dans la vie de tous les jours. Il doit garder à l'esprit un état et pouvoir le changer à chaque étape. En même temps, chacun doit formuler régulièrement ce qu'il veut, qui est une sorte de «programmation déclarative».

Le déclaratif est présent dans d'autres outils. Par exemple, dans Excel, vous pouvez créer une certaine logique à l'aide de formules. J'ai eu l'occasion de voir des systèmes d'information presque entiers écrits sous forme de formules Excel, légèrement aromatisés avec un code Visual Basic impératif. S'agit-il de programmeurs ou de veille stratégique avancée?

Si nous considérons la pile de langages et de technologies actuellement utilisés dans le développement, elle peut être divisée en plusieurs niveaux (tout comme la pile de protocoles réseau). Sur chacun d'eux, quelque chose de nouveau a été ajouté:

  1. Assembleur. Langage orienté machine.
  2. C. Langage procédural.
  3. C ++. Programmation orientée objet.
  4. Java / C # / Python et autres. Machines virtuelles et mémoire gérée.
  5. 1C / Access / SAP NetWeaver, etc. Ici, les tracas du développeur ont supprimé la gestion de la mémoire, du disque, du réseau et d'autres détails. Vous devez penser exclusivement à la logique métier. C'est quelque part à ce niveau que lsFusion se situe en tant que plateforme.

Chaque technologie suivante est écrite sur la base d'une technologie d'un niveau inférieur. Théoriquement, il s'ensuit que ceux qui écrivent à un niveau inférieur pourront écrire à un niveau supérieur. Bien sûr, cela ne signifie pas qu'ils le feront aussi efficacement que possible. Les ingénieurs qui créent des voitures ne seront pas les meilleurs coureurs du monde, mais ils doivent pouvoir les conduire d'une manière ou d'une autre. En sens inverse, cela ne fonctionne pas.

En grande partie pour cette raison, en règle générale, les développeurs respectent toujours ceux qui utilisent des technologies de niveau inférieur et méprisent ceux qui écrivent sur des technologies de niveau supérieur. Je ne suis pas assez vieux pour rattraper ces moments où les développeurs assembleurs détestaient les ouvreurs. Mais je me souviens aussi de Sishnikov qui croyait que le C ++ venait du mal. Certains développeurs C ++ considèrent toujours les développeurs Java comme des sous-programmeurs, car ils ne peuvent pas vraiment gérer la mémoire, et les programmes Java nécessitent beaucoup de mémoire supplémentaire à cause de cela. Eh bien, tous les développeurs des quatre premiers niveaux, bien sûr, méprisent les programmeurs 1C, ce qui se reflète mieux dans l'anecdote barbu:

image


Cependant, cela peut être dû au fait que les technologies de cinquième niveau, contrairement aux quatre premiers et à lsFusion, sont fermées et payantes. Ils sont utilisés dans une entreprise sanglante, où c'est dans l'ordre des choses. En conséquence, ils n'aiment pas tout l'écosystème, mais en même temps les développeurs.

Il convient de noter que c'est au cinquième niveau qu'il existe des langages déclaratifs de haut niveau tels que SQL et HTML + CSS. Soit dit en passant, les développeurs de SQL sont beaucoup plus fidèles aux développeurs SQL. Très probablement, du fait qu'ils travaillent avec eux conjointement, résolvant un bloc de tâches distinct, contrairement aux mêmes programmeurs 1C qui traitent la base de données, le backend et le frontend en même temps.

En toute justice, une situation similaire existe non seulement dans la programmation. Par exemple, il y a un certain nombre de personnes qui conduisent exclusivement sur une boîte de vitesses mécanique, extrêmement négativement en ce qui concerne une transmission automatique. Ils croient que la machine ne change pas de vitesse efficacement et manuellement, ils peuvent faire mieux (ce qui est généralement vrai). Une autre chose est que la plupart sont toujours prêts à sacrifier l'efficacité, la fiabilité et l'augmentation de la consommation de carburant dans un souci de commodité courante. Et tout comme dans la programmation, il y a des gens qui ne peuvent pas conduire du tout de mécanique, car ils n'ont pas assez de coordination pour changer rapidement de vitesse et appuyer sur les pédales nécessaires.

Il est vrai de noter que le conducteur avec une transmission automatique a la possibilité de passer en mode manuel. De même, vous pouvez incorporer du code assembleur en C, ou descendre d'un niveau dans lsFusion et écrire du code Java.

Plus le niveau de technologie est élevé, plus il est déclaratif et moins impératif. Vous pouvez considérer ces niveaux comme une échelle, où «machine» sera en bas et «utilisateur» ou «entreprise» en haut. À mesure que vous vous déplacez de bas en haut, on pense que la programmation devient de moins en moins. Et peut-être quelque part sur cette ligne, il y a un moment où la programmation devient une analyse commerciale.

Pourquoi n'avons-nous pas cherché des programmeurs déjà terminés? Il y a au moins quelques raisons à cela.

Premièrement, ils ont déjà une sorte de pile technologique avec laquelle ils travaillent. Malgré l'industrie relativement innovante, la plupart des programmeurs sont conservateurs (mais certainement pas tous). Ils n'apprendront pas une technologie inconnue sans battage médiatique, pour lequel il n'y a pas de demande (même temporaire). Lorsqu'une personne change de sphère dans laquelle elle travaille, elle «perd automatiquement de la valeur». Par conséquent, il est psychologiquement difficile d'abandonner ce que vous savez et de commencer à apprendre quelque chose de nouveau.

Deuxièmement, le développement sur la plate-forme lsFusion, ainsi que le développement sur 1C, est vraiment plus proche de l'analyse commerciale que le développement sur des plates-formes de niveau inférieur comme Java, .Net et Python. Il existe d'autres tâches, problèmes et approches.

Mais l'une des principales raisons est d'ordre économique. Au Bélarus, les gens ne cherchent pas à devenir des fonctionnaires et des responsables de la sécurité. Ici, vous ne pouvez pas, en tant que ministre, transporter des chiens dans votre avion personnel vers des expositions ou vous enivrer dans la direction opposée. L'habillage des fenêtres est loin d'être le bienvenu, et de nombreux fonctionnaires sont parfois emprisonnés, puis relâchés pour diriger des fermes collectives. Nous n'avons pas non plus d'entreprises qui vivent des ressources naturelles, donc nos rêves de devenir pétrolier ne sont pas non plus destinés à se réaliser. Presque tous les marchés sont suffisamment petits et déjà, en règle générale, divisés. Par conséquent, il y a aussi peu de place pour les nouveaux hommes d'affaires.

Dans ce contexte, la sphère informatique se distingue. Cela se voit mieux dans l'image suivante:

image

Si nous excluons les très petites zones de pilotes et certains consultants financiers, il s'avère qu'en moyenne, les programmeurs gagnent trois fois et demie plus que les employés des autres zones les mieux rémunérées. Si nous comparons avec les employés de l'État, la différence sera sept fois.

Un autre avantage du travail d'un programmeur au Bélarus est la stabilité. Le marché local étant très petit, la plupart des entreprises opèrent sur le marché occidental. Par conséquent, en règle générale, tous les salaires des programmeurs sont libellés en devises étrangères. C'est pourquoi en juin, il y a une baisse par rapport au premier semestre - le rouble s'est apprécié. Dans un pays où la monnaie locale est constamment dévaluée par rapport à la monnaie mondiale, les salaires en dollars et en euros sont considérés comme la clé de la stabilité et de la tranquillité. Les gens dans le pays sont considérés par beaucoup comme des «maîtres de la vie». Ils sont les principaux consommateurs du segment cher sur la plupart des marchés. De nombreux parents envoient leurs enfants dans les cercles de programmation, et la compétition la plus élevée pour les départements concernés.

Il n'est pas surprenant que la tendance «Enter IT» soit florissante au Bélarus. Nous avons décidé d'en profiter et d'essayer d'embaucher des personnes d'autres professions, en leur apprenant à se développer sur lsFusion. Soit dit en passant, nous avons maintenant des développeurs lsFusion qui travaillent pour d'anciens directeurs des ventes, administrateurs système, économistes, consultants pour les systèmes ERP, etc.

Nous avons placé une annonce payante sur la page principale de la plus grande ressource d'information du Bélarus. Il a pris en compte l'erreur du site d'emploi et a indiqué que nous ne recherchons pas de l'intelligence d'affaires, mais un développeur sans expérience de travail. Pour la meilleure motivation, ils ont explicitement indiqué une fiche de rémunération potentielle correspondant à l'industrie informatique.

Étant donné que nous avions besoin d'un très petit nombre de personnes et qu'il y en aurait beaucoup qui le souhaitaient, nous avons compris que les candidats devraient être éliminés d'une manière ou d'une autre. Nous avons choisi le schéma le plus simple: vous devez prendre un exemple de classement et l'affiner afin que pour un match, le score ne soit pas déterminé manuellement, mais sur la base des buts marqués que l'utilisateur doit entrer. Afin de ne pas se soucier de chaque candidat individuellement et de ne pas perdre son temps, nous avons indiqué directement dans l'annonce qu'une solution à ce problème était nécessaire.

Pour résoudre le problème, il était nécessaire de télécharger et d'installer la plate-forme (l'installateur était sur le site), de connecter le code de l'exemple là-bas et de le corriger dans l'IDE. Cela prendra environ 15 minutes à n'importe lequel de nos développeurs lsFusion. Il faudrait un programmeur typique pour comprendre l'exemple, télécharger, exécuter et résoudre pendant un maximum de 3 heures, car la solution ne nécessite pas de connaissance supplémentaire de la plate-forme. Tout y était fait par analogie avec la logique existante.

Selon les statistiques, l'annonce a été ouverte et lue par plusieurs dizaines de milliers de personnes. La tâche de test elle-même (elle était sur un lien séparé) a été lue par plusieurs milliers de personnes. Environ 400 personnes ont téléchargé la plate-forme (puis c'était un fichier de 1,5 Go, qui comprenait IDEA, Java et PostgreSQL). Quarante personnes ont envoyé quelque chose. Parmi ceux-ci, une dizaine de personnes avaient une solution adéquate. Parmi ces personnes, nous avons choisi celles que nous embaucherons.

Ce que je ne pouvais pas comprendre dans cette histoire, c'était ce qui manquait aux gens: la motivation ou la capacité. Après tout, si quelqu'un travaille sur un travail peu rémunéré, ce qui ne lui fait pas plaisir, alors ce qui l'empêche de passer même quelques heures pour comprendre le problème et le résoudre. Dès le départ, nous avons offert un salaire élevé, qui est loin d'être payé à tous les développeurs juniors dans d'autres langues. Peut-être que beaucoup de gens agissent selon le principe «Je voudrais aller voir des programmeurs, laissez-moi vous apprendre.» En fait, dans notre pays, nous avons déjà beaucoup de toutes sortes de cours rémunérés que beaucoup de gens suivent, sans comprendre l'importance de l'auto-éducation dans la programmation.

Mais le problème réside peut-être dans les capacités. Pour commencer la programmation, une compétence de base est nécessaire: la pensée analytique. J'entends par là la capacité de distinguer du privé le général (induction) et vice versa (déduction). Cette capacité est développée chez un nombre relativement restreint de personnes, mais sans elle, hélas, pas un bon programmeur. De plus, si vous mesurez en quelque sorte la pensée analytique et construisez un graphique de la dépendance du nombre de personnes avec cette compétence, vous obtenez une hyperbole. C'est-à-dire que plus le seuil d'entrée dans la technologie est bas, plus les gens peuvent le surmonter.

Le problème de la pensée analytique est qu'elle ne s'apprend pas. Il se forme quelque part à un âge précoce et un adulte n'est plus en mesure de changer quelque chose. Nous avons passé un stage probatoire en sciences techniques. Cependant, il n'a pas pu implémenter une logique de domaine simple. L'homme a essayé, travaillé à la maison le soir, mais chaque fois qu'on lui a confié une tâche dans laquelle il devait simplement être fait par analogie, il ne pouvait pas y faire face. Comment il a pu défendre le candidat, ce n'est pas clair. Cependant, cela montre plutôt que la pensée analytique n'est pas nécessaire dans la vie quotidienne. Et il existe un certain nombre de professions dans lesquelles cette compétence n'est pas particulièrement requise.

Quand ils me demandent avec quelle technologie commencer le chemin de la programmation, je réponds: commencez avec SQL. Dans tous les cas, sa connaissance ne fera pas de mal, et il ne faut pas plus d'un jour pour apprendre les fonctionnalités de base (SELECT / JOIN / UNION). Ensuite, vous devez essayer de résoudre les problèmes sur Internet. Cela ne fonctionne pas - vous ne devriez donc pas commencer du tout avec la programmation. Si quelque chose peut être résolu, au moins 1C ou lsFusion peut devenir programmeur. Et puis, comment ça se passe.

Conclusion


Bien sûr, la question du titre de l'article est rhétorique. Le concept de programmation est subjectif et dépend des opinions d'une personne en particulier. Toutes les personnes à un degré ou à un autre participent à la programmation. Par exemple, lorsqu'ils définissent simplement les paramètres dans le thermostat d'un plancher chaud ou créent des tableaux avec des formules dans Google Docs. Cependant, la technologie à différents niveaux a un seuil d'entrée différent. Plus le niveau de technologie est élevé, plus je peux programmer de personnes dessus. La véritable programmation dans ce processus devient vraiment plus petite. Je voulais juste que cela ne devienne pas un sujet de mépris pour certains développeurs par d'autres.

Source: https://habr.com/ru/post/fr471378/


All Articles