Un mix sur la programmation et sur

Le siècle de la galanterie passe. Il est remplacé
l'âge des sophistes, des économistes et des calculateurs; La gloire
L'Europe disparaîtra à jamais.
E. Beck (Angleterre, 1792)

Pourquoi?


N'ayant pas vécu une courte vie en tant que programmeur, je me demande: "Y avait-il quelque chose d'intéressant dans la programmation, et si oui, qu'est-ce qui a frappé et est resté le plus en mémoire?" Selon le talent littéraire, la réponse pourrait déboucher sur un roman, un traité philosophique, un poème ou une blague. Avec le talent de Tchekhov, on pourrait écrire toute une série d'histoires sur la vie grise / vibrante de programmeurs ordinaires avec lesquels la vie virtuelle tue / donne naissance à une vraie. Mais où est Tchekhov le programmeur?

Au mieux de mes capacités, je me limite à un mélange d'essais dans le style de «méditation sur canapé». Et bien que le texte principal depuis de nombreuses années, je le risque toujours ...

La scène est Minsk.

Comment je suis devenu programmeur


Commencez . Après avoir obtenu leur diplôme de BSU, ils ne nous ont pas donné de diplôme, mais sont partis étudier en sixième année sur le thème de l'AEC. Le pays avait besoin d'asushnikami. Imaginez la vie paradisiaque d'un étudiant qui sait qu'il a un diplôme et d'étudier encore six mois.

La programmation a commencé avec le cours CCK - le système de codage symbolique pour la machine Minsk-32. Et au début, il y avait un registre de base mystérieux. Beaucoup plus tard, j'ai fait une bonne programmation en assembleur, mais imaginez une personne qui ne connaît rien à la programmation et qui a commencé à apprendre la programmation par Assembleur, et non par un manuel, mais par une description technique. Après un système harmonieux de physique, c'était une sorte de non-sens (je soupçonne que c'était vraiment un non-sens). L'âme d'un physicien ne pouvait accepter ce sujet. Et puis des difficultés quotidiennes sont tombées sur moi et je suis à peine allé en cours. En général, je ne connaissais absolument pas SSK. Mais maintenant, il est temps de passer l'examen. Tous les cinq ans avant cet examen, je me suis honnêtement bien préparé pour l'examen. Que faire maintenant? Et ici, je rencontre un ami du shabbat sibérien (je me souviens de lui avec sa disposition joyeuse et que les trois jours de notre voyage en Sibérie, des blagues racontaient des histoires jour et nuit). Il a partagé son chagrin autour d'une bière. La solution a été trouvée rapidement et hardiment - il passe un examen pour moi pour une bouteille de vodka (l'affaire a été facilitée par l'absence de notes supplémentaires). Tout est allé à O'key.

Une tentative de trouver des excuses. "Je ne suis pas le seul à blâmer." Coupable et enseignants. La qualité de l'enseignement était à bien des égards dégoûtante. Un enseignant, comme avantage de l'ordinateur Minsk-32 par rapport à IBM avec le système OS / 360, a indiqué qu'IBM ne fonctionne qu'avec 8 bits (octets) et que Minsk-32 est quatre fois plus grand - 32 (mot). Et, il semble, il s'ensuit que Minsk-32 est quatre fois meilleur que les ordinateurs IBM. Il s'est avéré que cela ne s'appliquait qu'à l'adressage. Tout cela a changé exactement le contraire.

Cependant, la situation décrite n'était pas seulement caractéristique de la programmation. Au cours de la quatrième année du Département de physique BSU, la discipline «Théorie quantique des champs» a été enseignée pendant un an. Et pendant une année entière, nous n'avons rien entendu d'elle, mais nous avons présenté nos propres résultats d'un enseignant-académicien liés à sa paramétrisation originale du groupe Lorentz. Cela peut être important, mais où est la théorie quantique des champs de l'appareil de base de la physique fondamentale? Soit dit en passant, tout groupe peut, comme il me semble, être paramétré par un nombre infini de façons et chacune d'elles aura certains avantages. Pouvez-vous imaginer combien de dissertations vous pouvez écrire! Étant donné qu'il existe plusieurs universités en République du Bélarus, je doute encore plus de la qualité de leur enseignement. S'il n'y avait pas assez d'enseignants pour un, alors où ils ont été répartis en plusieurs n'est pas clair. Avec la «qualité» des spécialistes devaient se rencontrer plus tard. Par exemple, dans l'ONG Agat. Un docteur en sciences a ainsi amélioré nos qualifications: lui, en supposant que «... le vecteur a est supérieur au vecteur b ...» a tiré de grandes conclusions. Mais les vecteurs sont désordonnés: personne n'a déterminé le rapport plus / moins pour eux. Le second a implicitement utilisé le mauvais ratio «la somme des produits est égale au produit de la somme: $ inline $ ∑_i∏_ja (i, j) = ∏_j∑_ia (i, j) $ inline $ . De cela, il a reçu beaucoup de conséquences. Et bien qu'il ait admis l'erreur, pour une raison quelconque, il a considéré que les conséquences étaient correctes ("J'en ai besoin, donc c'est juste"). Et le cas suivant est généralement pathologique. L'ingénieur radio envisageait le vecteur électrique du champ électromagnétique. D'une manière générale, il tourne. Se souvenant de la mécanique newtonienne, l'ingénieur radio a introduit une force centrifuge agissant sur la fin du vecteur de champ électrique et a développé toute une théorie à partir d'ici, réfutant certains Gonorovsky - apparemment une autorité dans le domaine de l'ingénierie radio.

Pour en revenir à la programmation, je n'ai tout de même pas aimé la programmation, mais j'ai été imprégnée de respect pour elle. Mais c'est le mérite du meilleur enseignant - la vie.

À suivre . Mais la vie se venge de nous pour des tours. Je me suis réparti à l'Institut de physique et j'ai commencé à m'efforcer dans le domaine de la théorie des champs quantiques axiomatiques (Wow!). Mais il s'est vite rendu compte que, recevant 86 roubles dans ses mains et en donnant 30 pour un appartement, la théorie axiomatique du champ quantique ne se prête pas beaucoup, et le problème «Comment vivre?» Se pose de plus en plus. Conclusion: "Vous ne pouvez pas vivre comme ça." Soit dit en passant, mon camarade de classe, un enfant de trois ans, travaillant comme ajusteur sur Integral, a reçu trois fois plus que moi avec un diplôme BSU. Alors comment vivez-vous? Et là encore, une chope de bière aide. Lors d'une réunion avec mes copines, je fais la connaissance du directeur de l'Institut central de recherche scientifique des télécommunications et de l'informatique - sous les dames, nos hommes parlent de travail. Et donc il me dit ce qu'il fait et il me semble que je peux être un bon gestionnaire de tâches. Après tout, se fixer des objectifs, ce n'est pas les résoudre, n'est-ce pas? Et me voici à l'Institut central de recherche scientifique et technologique. Bien que, hélas, pas un réalisateur, mais un programmeur novice. Mais qu'en est-il de la physique «haute»? Je me suis consolé que je serais engagé dans une programmation «haute» - toutes sortes de calculs scientifiques. L'essentiel est loin de tous les débits et crédits de comptabilité. La comptabilité et les banques étaient un symbole d'ennui et voulaient rester loin d'eux. Mais la vie pousse obstinément notre snobisme dans la réalité. Et en réalité, c'était précisément le débit et le crédit qui devaient être traités plus tard. Voici une évolution des quarks vers la programmation comptable. Oui, c'était la comptabilité qui devait être programmée. Après tout, «le socialisme, c'est la comptabilité et le contrôle». Eh bien, comme le lieu de contrôle était déjà pris (le parti contrôlait tout dans notre pays), nous devions nous occuper de la comptabilité.

Moralité. Nous n'aimons pas seulement les sciences que nous ne comprenons pas. Il faut voir les fondements, le respect du sujet passe par la compréhension des fondamentaux, si ce sont bien sûr les fondamentaux.

Qu'est-ce que la programmation et le principal problème des mathématiques


Il y a un tel ennui - demander "Qu'est-ce que la programmation?", "Qu'est-ce que la physique?", "Qu'est-ce que les mathématiques?". Il ne peut y avoir de réponse exacte à ces questions. La nature ne divise pas le monde en physique, chimie, ... Par conséquent, les frontières entre les sciences sont arbitraires. Ils ont été délivrés non pas par la nature, mais par des personnes. Soit dit en passant, il semble qu'Engels ait dit qu'en fin de compte, il y aura deux sciences - la physique et la psychologie (matière et conscience). Un physicien, en colère, à la question "Alors qu'est-ce que la physique?" il a répondu de cette façon: "La physique est ce que font les physiciens." Et c'est complètement sérieux.

Alors que font les programmeurs? Quelle est l'essence de leurs activités? Il me semble que la principale occupation du programmeur est de présenter le gros problème non résolu comme une composition des petits résolus. Cette composition est le chemin de la mise en scène à la solution. Écrit dans un langage formel donné, ce chemin est appelé programme. Ensuite, la composition doit être du texte dans une langue formelle donnée - c'est le programme. Le mode de réalisation formel-textuel de l'algorithme est la programmation et diffère des autres disciplines constructives. Il y a donc deux fonctionnalités de programmation: 1) constructivité extrême 2) cadre syntaxique strict .

La programmation étant une discipline constructive, il n'est pas tellement intéressant pour lui de savoir s'il existe une solution, mais la solution elle-même. En mathématiques, il existe de nombreux théorèmes de l'existence qui prétendent qu'il existe une solution, mais ne disent rien sur la façon de la trouver. Le physicien Nobel Landau a proposé d'expulser du cours de mathématiques pour les physiciens toute mention de théorèmes d'existence. À quoi sert un physicien pour savoir qu'une équation différentielle a une solution. Vous devez connaître la solution, pas ce qu'elle est. Juste sur le sujet "y a-t-il une solution?" il y a une histoire tellement intéressante sur Landau. Lorsque les physiciens se rendaient quelque part pour une fête, ils étaient divertis le long de la route car, en observant le numéro à quatre chiffres devant la voiture devant, il était nécessaire de saisir le motif dans le numéro le plus rapidement possible, en utilisant uniquement l'élémentaire (actions scolaires) sans réorganiser les numéros et en les utilisant une seule fois . Par exemple, pour le nombre 73-85, nous avons 7-3 = 8-5, pour le nombre 38-53, nous avons 8 = 5 - 3 . Landau était une grande autorité en la matière. La question s'est posée de savoir si un nombre peut être trouvé un motif - c'est la question du théorème de l'existence. Landau a répondu: "Non, pas pour personne." "Pourquoi, Landau, avez-vous prouvé le théorème de non-existence!?" "Eh bien, non, simplement parce que moi, Landau, je n'ai trouvé ce schéma pour aucun chiffre. Par exemple, pour le numéro 75-65 ”. Ingénieux. Mais l'un des jeunes mathématiciens a pris le théorème de l'existence absolument au sérieux et a prouvé que tout entier peut être «assimilé» à un autre, car il existe une formule pour réduire N + 1 à N: (N+1)=sec(arctg(N))
Hélas, après la preuve du théorème d'existence, le jeu a perdu de sa netteté. Le voici: " Plus il y a de connaissances, plus il y a de tristesse . "

La solution de conception distingue deux étapes:

  1. Algorithmique. Algorithmisation du problème - réduction de la composition des opérations standard que les gens comprennent. C'est la partie la plus importante. Après tout, les programmes sont écrits pour les gens.
  2. Codage. Réduction de l 'algorithme à une composition d' opérations données élémentaires et de phrases de données dans un langage de programmation. Cependant, l'écriture du plus petit programme passe par sa phase de microalgorithmisation.

Exemples de problèmes constructifs privés


L'ensemble des opérations acceptables est les opérations scolaires effectuées par une boussole et une règle: construire une ligne reliant deux points donnés, diviser la ligne en deux, construire une perpendiculaire, extraire la racine carrée ...

Voici les problèmes de construction classiques:

Le carré du cercle . Étant donné un cercle, vous devez utiliser un nombre fini des opérations ci-dessus pour construire un carré avec une aire égale à l'aire d'un cercle donné.

Trisection de l'angle . Un angle donné doit être divisé en trois parties égales en utilisant un nombre fini des opérations ci-dessus

Ici donc, l'approche «à la ligne du théorème de l'existence - donnez-nous une solution tout de suite» donne un raté. En supposant qu'il existe une solution, elle est recherchée depuis de nombreux siècles. Mais il s'est avéré qu'il n'y avait pas de solution.

De nombreux mathématiciens et amateurs se sont débattus sur ces tâches (et enfant, j'ai proposé ma solution pour la quadrature du cercle, qui s'est avérée être approximative avec une précision d'environ 10% - mais cela est déjà devenu clair dans ma jeunesse). De nombreuses solutions ont été proposées, mais elles se sont toutes avérées approximatives. Au 19e siècle, il a été prouvé que les tâches n'ont pas de solution. Pour la trisection de l'angle, cela peut maintenant être montré à l'élève (voir, par exemple, le livre de Courant et Robbins «What is Mathematics»), et pour la quadrature du cercle à l'élève. De plus, la situation est telle qu'il est possible de trouver l'approximation arbitrairement exacte, mais il ne peut y avoir de solution exacte. Le résultat, si vous y réfléchissez, est étrange. Comme si devant la place souhaitée, il y avait un mur qui ne pouvait pas être surmonté. Mais cela vaut également la peine de permettre d'autres opérations, car la solution devient élémentaire. Cela a été fait par Archimède en relation avec la trisection de l'angle.

Formalisation du concept d'algorithme


Ce qui est un algorithme était intuitivement clair. Mais les mathématiciens ne seraient pas des mathématiciens s'ils ne formalisaient pas le concept d'un algorithme. L'intuition a échoué à plusieurs reprises. Il était donc impossible de croire qu'il existe des fonctions continues qui n'ont de dérivé nulle part - où que vous touchiez la courbe - partout où il y a des épines. L'intuition ne le permet pas.

Plusieurs formulations d'apprentissage du concept d'algorithme (ou d'explication scientifique) ont été proposées: fonctions récursives, substitutions alphabétiques markoviennes, Post machine, Turing machine. L'équivalence de ces formulations a été progressivement prouvée. En fin de compte, les mathématiciens ont pris comme axiome que ces formulations sont adéquates au concept d'un algorithme - c'est la thèse de Church. La machine de Turing dans ses termes se rapproche des vraies machines informatiques. Il est élémentaire de le simuler, mais ces modèles ne sont pas nécessaires en raison de leur primitivité et donc de leur lenteur. Mais en tant qu'appareil théorique, il est indispensable. Par exemple, il a été possible de formaliser le concept de complexité algorithmique. Et là encore, des choses incroyables sont apparues. Ainsi, l'intuition du programmeur suggère que la multiplication est plus difficile que la multiplication. Multiplier le nombre a par le nombre n signifie faire n additions. Il semble donc que la multiplication soit plusieurs fois plus compliquée. Et que donne la théorie?

Supposons qu'il existe deux nombres à n bits et que la machine de Turing les multiplie par U (n) et l'addition par S (n). L'intuition suggère alors que U (n)) / (S (n) → ∞. Mais l'analyse théorique a montré que pour tout ε arbitrairement petit, nous avons $ en ligne $ U (n)) / [S (n) (S (n)) ^ ε] → 0 $ en ligne $ . Et cela suggère que plus proche que la multiplication de l'addition, il n'y a déjà rien - ils sont proches en complexité.

Tout problème constructif peut être représenté comme la programmation d'une machine de Turing universelle. La question se pose: est- il possible de trouver un algorithme universel pour tout problème constructif ? Et ici, le problème est déjà radicalement différent de l'énoncé du type de quadrature du cercle. Là, il a été possible d'ajouter une nouvelle opération constructive autorisée et le problème a été résolu. Il n'y a rien à ajouter à la machine universelle de Turing - c'est la machine la plus générale, elle peut implémenter n'importe quel algorithme. Et il s'est avéré que même ici, le créateur a mis des obstacles. On trouve de nombreux problèmes constructifs qui n'ont pas d'algorithme commun pour leur solution. Par exemple, en logique mathématique, ils ont longtemps cherché à trouver un algorithme permettant de déterminer si une expression logique est déductible d'une autre. Il s'est avéré que le problème n'a pas de solution.

Nous avons une situation similaire dans le grand théorème de Fermat: l'équation xn+yn=zn n'a pas de solution en nombres entiers pour n> 2.

On peut donner à cette déclaration un caractère tel que je veux dire: «Cela ne peut pas être».
En divisant par le côté droit, on passe aux nombres rationnels: l'équation pn+qn=1 n'a pas de solution en nombres rationnels <> 0.

De plus, nous nous limitons à même n. Pour eux, nous avons une photo:



La figure montre les courbes de Fermat pour n = 2 (cercle) et n = infini (carré). Pour n = 2k> 2, toutes les autres courbes se situent entre le cercle et le carré, et à mesure que n augmente, elles se rapprochent de plus en plus du carré. Et, si vous prenez toutes ces courbes, elles rempliront de plus en plus l'espace autour du carré. Et il y a une infinité de points avec des coordonnées rationnelles de sorte que si tous les points rationnels sont peints en couleur sombre, tout l'espace du carré sera noir - l'ensemble des points avec des coordonnées rationnelles est partout dense. Et pourtant, aucune des courbes de Fermat ne passe par des points rationnels. Il semblerait que pour cela, vous devez faire une boucle folle. Cependant, le théorème de Fermat dit qu'une courbe parfaitement lisse ne passe par aucun point rationnel. Eh bien, c'est impossible à croire. Quelque chose ne va pas ici.
Une situation similaire existe dans toutes les mathématiques. Ce serait bien pour les problèmes mathématiques et l'approche mathématique. Par exemple, imaginez trouver une solution au problème mathématique «Si A, alors B» comme un mouvement dans un certain espace d'objets mathématiques des données originales aux données requises. Voici un exemple de chemin constructif de A à B:



Lorsque vous vous déplacez le long d'un chemin, seuls les axiomes de l'arithmétique sont utilisés.

Ce serait pour tout théorème «Si A, alors B», on pourrait construire par des méthodes constructives la trajectoire menant de A à B. Ce serait un triomphe des mathématiques. Cela peut-il être fait? Existe-t-il une telle trajectoire?

Le grand mathématicien Hilbert (considéré par beaucoup comme le plus grand du 20e siècle) a commencé avec enthousiasme à mettre en œuvre le programme Leibniz - pour formaliser, algorithmiser tout problème mathématique. Ce programme a été appelé la formalisation des mathématiques - pour apporter une base axiomatique à toutes les mathématiques, exprimer tous les problèmes mathématiques dans un langage formel comme conséquence des axiomes et dériver tous les théorèmes selon les règles de la logique mathématique. Un énorme travail a été fait pour formaliser pleinement les mathématiques. Ceux qui le souhaitent peuvent voir deux volumes épais des Fondations mathématiques de Hilbert et Bernays. Mais au milieu du travail est apparu le travail de Kurt Gödel, qui, entre autres, a prouvé que dans toute théorie formelle contenant de l'arithmétique, on peut énoncer un théorème significatif qui ne sera pas déductible. Et elle (ou, avec pas moins de justification, son déni) peut être prise pour un nouvel axiome. Nous attirons l'attention sur le mot «formel». Pour une théorie informelle, vous pouvez toujours dire quelque chose comme "il est évident que ..." et toutes sortes d'obstacles seront supprimés. Par conséquent, toutes les applications du théorème de Godel aux théories informelles sont incorrectes. Cela est particulièrement vrai pour la philosophie, qui aime spéculer sur ce sujet.

Ainsi, le format des mathématiques est considérablement incomplet et ne sera jamais complet. Cela la rend liée à la physique, qui n'a jamais revendiqué la formalisation en raison de sa position naturelle (et, de plus, l'esprit de formalisation est étranger à la physique, qui est habituée au fait que tous les axiomes sont temporaires).

Il semblerait que l'on puisse sortir de la situation en prenant le théorème irréductible (ou sa négation) comme axiome, l'ajouter au système original des axiomes et dériver les théorèmes corollaires de ce système formel étendu. Mais le théorème de Gödel est applicable à ce système formel étendu. Nous obtenons un processus sans fin. Ce n'est que dans un système infini que l'on peut trouver l'universalité. Mais comment travailler avec un ensemble infini d'axiomes? La question est compliquée par le fait que l'axiome le plus inoffensif peut avoir des conséquences complètement inattendues. Par exemple, prenons l'axiome de choix: si un ensemble d'ensembles disjoints est donné, alors à partir de chaque ensemble on peut sélectionner un élément et les assembler en un ensemble. Il semblerait qu'il y ait quelque chose à discuter. Mais en utilisant l'axiome de choix, Banach et Tarski ont prouvéque deux sphères S1 et S2 de rayons différents peuvent être divisées en le même nombre fini d'ensembles disjoints par paires:

S1 = A1 + A2 + ... + An et S2 = B1 + B2 + ... Bn de

sorte que pour tout i: Ai = Bi. Ainsi, les sphères inégales ont été divisées en parties identiques. Qu'est-ce que c'est que ça? Mais tout est logique: que croire, que rejeter? En ajoutant une à la fois, nous obtenons une sphère et une autre - une grande.

John von Neumann, en utilisant l'axiome de choix, a prouvé qu'un segment A d'une ligne à partition finie est inférieur à un segment B d'une ligne plus courte que sa longueur. Croyez donc en ces mathématiques. Si nous acceptons l'axiome inoffensif du choix (et ce qui pourrait être plus évident que le fait qu'un élève peut être sélectionné dans la première classe, un élève dans la seconde, etc.), alors des conséquences complètement paradoxales sont obtenues.

Soit dit en passant, von Neumann s'est également distingué dans la programmation - il a prouvé la possibilité d'auto-reproduction des automates et l'architecture informatique de von Neumann est venue de lui; Il s'est distingué en mathématiques et en physique quantique - il a construit l'appareil mathématique de la physique quantique basé sur le concept d'espace de Hilbert et a essayé de prouver l'impossibilité des paramètres cachés sur lesquels Einstein s'appuyait, arguant que la théorie quantique est incomplète.

Donc, revenant au dessin supérieur, nous regrettons de ne pas pouvoir construire la trajectoire universelle indiquée par des moyens constructifs. Hélas !!! Cela signifie que les mathématiques sont encore plus compliquées qu'il n'y paraît. Vous pouvez vous promener dans la solution arbitrairement proche, mais ne jamais y arriver. Il s'agit ici de la «quadrature» du problème mathématique général. Mais, contrairement à la quadrature d'un cercle,dans toute expansion de l'ensemble des opérations constructives, il n'a pas de solution . Vous ne pouvez programmer que des tâches assez privées. Le problème le plus courant n'a pas de solution constructive. En outre, même de nombreux problèmes particuliers n'ont pas de solution constructive commune et, par conséquent, ils doivent être divisés en problèmes encore plus particuliers, qui, peut-être, ont une solution constructive.

Revenant au théorème de Godel, nous notons qu'un langage de programmation est un système formel. Vous pouvez donc écrire un programme pour lequel aucun programme ne prouve son exactitude ou son inexactitude. En est-il vraiment ainsi? Un programme écrit ou sa négation peut être pris pour l'axiome de la programmation.

Il ne peut donc pas y avoir de vérification universelle des programmes. Et il ne peut y avoir de programme universel. Eh bien, bien qu'il soit impossible d'avoir un programme universel en général, mais au moins en obtenir un universel pour un domaine spécifique.
Voici une image de programme typique:



L'inconvénient de cette approche est qu'elle est accentuée par une fonction spécifique. Bien sûr, vous pouvez le paramétrer. Avec ce paramétrage, le type de la fonction ne change pas, mais seuls ses paramètres d'argument changent. Mais je voudrais que les paramètres puissent changer le type de fonction. Oui, vous pouvez passer une fonction en paramètre - un programme d'intégration de fonction, par exemple. Mais cela ne va pas au-delà de l'intégration. En bref - il serait bien de donner une description complète du sujet en tant que paramètre . C'est-à-direVoici ce que j'aimerais:



Ba! - Mais c'est un programme sur Prologe. Prolog lui-même agit comme la fonction paramétrique susmentionnée. Description du domaine - Texte prologue encodant le domaine. L'objectif est un paramètre.

J'ai été agréablement surpris lorsque j'ai essayé de mettre en œuvre des tâches de recherche sur de nombreuses relations sur Prolog. Cette recherche a été implémentée d'abord dans Delphi puis en C #. Ainsi, ce qui a été implémenté par plusieurs programmes assez gros dans Delphi (C #), sur Prologe, s'inscrit dans une description compacte des relations et des fonctions sur eux. Et puis une variété de demandes cibles pourrait être demandée pour cette description. Certes, je ne peux rien dire sur les performances comparatives. Mais sur quelques exemples spécifiques, je n'ai pas remarqué de différence significative. Cependant, Delphi a encore dessiné de beaux graphiques des relations cibles. Je ne l'ai pas fait sur Prologe. Mais à chacun le sien. La logique doit être implémentée par un langage logique, présentations - langage de présentation, rapports - langage de rapport, entrée - langue d'entrée, communication - langage de communication, interaction de service - langage de distribution,interaction et orchestration des services.

Classique


Anciens classiques


"Les classiques ont besoin de connaître et d'honorer." Inutile de penser que tout a été inventé au cours de notre siècle. "Rien de nouveau sous la lune." Cela vaut pour la programmation et ses concepts de base. Soit dit en passant, le terme «algorithme» lui-même est enraciné au IXe siècle et vient du nom du mathématicien al-Khwarizmi. De nombreuses constructions algorithmiques d'Euclide. Donc, son algorithme pour trouver le plus grand diviseur commun est toujours vivant. Lully (les musulmans lui ont jeté des pierres - c'est le rôle «progressif» de la religion) au 13ème siècle est venu à l'idée d'une machine logique fonctionnant avec des symboles. Dans les manuscrits de Léonard de Vinci, des dessins d'un appareil informatique à treize chiffres ont été trouvés. (Cependant, il n'y en a eu que tant dans ses manuscrits que certains érudits affirment sérieusement que Da Vinci n'était pas un homme, mais un étranger.)

En 1623, Schickard, professeur de langues (!!) à l'Université de Thuringe, conçoit un ordinateur. Le grand Pascal avait une idée claire d'un ordinateur mécanique et construisait des arithmomètres mécaniques. Le grand Leibniz a avancé l’idée d’arithmétiser les déclarations afin de réduire le différend à un calcul. »« Pour discuter, asseyons-nous et trouvons qui a raison. » si je pouvais utiliser une machine en même temps », a déclaré Leibniz, et a fait un ordinateur et rêvé d'une machine universelle qui pourrait tout calculer.

Au XIXe siècle, Bebbage a conçu et commencé à construire une machine mécanique universelle programmable . Ce fut le premier ordinateur universel. Babbage est quelque peu oublié à juste titre, donc je ne peux pas résister, et je vais citer quelques faits intéressants à son sujet.

"Nous pensons que l'existence de tels dispositifs, en plus d'économiser du travail lors de l'exécution d'opérations arithmétiques, rendra cela réalisable, ce qui, étant faisable, est trop proche des limites des capacités humaines", a déclaré le rapport de la British Association for the Advancement of Science for the Study of the Babbage Analytical Machine.

Si vous suivez la terminologie moderne - Babbage «physicien». Il n’aimait pas la musique. À l'opéra, il a proposé de la musique en couleur. À propos des poèmes de Tennyson

"Chaque minute, un homme meurt,
Mais chaque minute un homme naît »

Babbage a écrit à l'auteur ce qui suit: «Je dois vous indiquer sérieusement que ces calculs conduisent à la conclusion que la population totale est dans un état d'équilibre constant. Dans le même temps, il est bien connu que le montant mentionné est en constante augmentation. Par conséquent, je me permets de supposer que dans la prochaine édition de votre excellent poème, les calculs erronés que j'ai signalés seront corrigés comme suit:

À chaque instant, une personne décède
Mais 1,16 personnes sont nées ...

Je peux vous dire un chiffre plus précis - 1,167, mais cela, bien sûr, devrait violer le rythme du verset ... »

Malgré cela (et peut-être grâce à cela), Babbage avait l'intention d'étudier la nature de l'humour. Il est un générateur typique d'idées. En raison d'un excès d'idées, il n'a pas mené à terme ses nombreuses propositions et projets. Inventé le compteur de vitesse, créé des machines à raboter, tourner, tourner, tourner, tourner, proposer une méthode de gravure sur bois. En général, c'est l'anglais Leonardo da Vinci. En 1832, il a écrit un livre, «L'économie des machines et de la production», dans lequel il anticipait l'analyse des systèmes, la recherche opérationnelle et l'organisation scientifique du travail. Marx connaissait bien ce livre et l'a cité dans Capital, Keynes en a parlé avec admiration. Mais l'invention la plus importante est une machine analytique, qui est un ordinateur mécanique programmable universel. Il n'y avait pas assez d'argent de l'État et Babbage dépense son argent pour construire une voiture. A la recherche d'argent trouve toutes sortes de sources. Avec son partenaire, Ada Lovelace propose un «système gagnant-gagnant» pour les courses de chevaux. Le système a conduit au fait que la dame devait payer avec des perles familiales. Ensuite, Babbage prévoit d'écrire un roman pour l'année et de dépenser le produit de la vente en voiture. Dissuadé son ami de cette aventure. Puis l'infatigable Babbage prévoit d'inonder le pays de machines à tic-tac-toe et, encore une fois, de mettre le produit dans la voiture. Mais il fallait de l'argent pour cela.

Des musiciens de rue ont interféré avec ses performances. Babbage par la presse, le parlement, la police les combat. En réponse, chaque ivrogne jugeait de son devoir de crier sous les fenêtres de Babbage, les musiciens sont déjà de loin pour s'amuser sous ses fenêtres. Après la mort de Babbage, la nécrologie dans le Times a les lignes "... un homme qui a vécu jusqu'à près de 80 ans, malgré la persécution des musiciens de rue." Je me demande quelles années il aurait vécu maintenant, quand les musiciens de rue modernes sont armés de décibels beaucoup plus gros?

Une fois que Babbage a élaboré un plan pour lutter efficacement contre les incendies, mais a déclaré: "Je ne le publierai pas, ils seront tous perdus, que toutes leurs maisons soient incendiées." Je détestais la piété. Quand il a vu une pompe à eau en Italie avec une inscription disant que le propriétaire l'a construite au nom de l'amour pour Dieu et son pays, afin que le vagabond fatigué puisse étancher sa soif, Babbage était prudent, a examiné la pompe à eau et a constaté que chaque fois qu'un voyageur l'eau pompée, la plupart tombait dans la maison d'un pieux maître. Après cet épisode, Babbage a ajouté: " Il n'y a qu'une seule chose que je déteste plus que la piété, c'est le patriotisme. "

La première programmeuse de la machine analytique Babbage était la fille du poète Byron, Ada. Voici quelques-unes de ses déclarations.

«La machine analytique peut être définie comme l'incarnation matérielle de toute fonction indéfinie ayant un degré de généralité ou de complexité » !!!
"Lorsque nous envisageons une nouvelle invention, nous rencontrons souvent des tentatives de surestimer ce que nous pensions déjà être intéressant ou même exceptionnel, et d'autre part de sous-estimer la véritable situation lorsque nous constatons que nos nouvelles idées supplantent celles que nous considérions comme inébranlables."

Ada a inventé les termes «cellules de travail», «cycle». Le langage de programmation «Ada» utilisé dans le Pentagone porte donc un nom digne.

Babbage était plus un physicien qu'un mathématicien. Il a été attiré par l'incarnation pratique d'une calculatrice universelle. Lorsque les mathématiciens se sont mis au travail, ils ont, comme toujours, voulu formaliser le concept d'une calculatrice universelle. Après tout, le concept informel d'une machine est une chose, et le concept exact en est une autre. Au final, comme nous l'avons vu, l'intuition et le formalisme divergent. Church, Markov ont été les premiers à formaliser le concept d'un algorithme. Le premier comme fonction récursive, le second comme un ensemble de permutations dans l'alphabet, c'est-à-dire comme une grammaire. Turing formalise le concept d'un algorithme en termes presque techniques - c'est une machine de Turing.

Une machine de Turing universelle est l'équivalent théorique d'une machine informatique universelle - un ordinateur. Il s'avère qu'il y a suffisamment de langage de deux caractères (| et un espace), quatre commandes et une mémoire externe infinie - et tout algorithme peut être programmé sur une machine de Turing universelle. Il est prouvé que les trois définitions ci-dessus de l'algorithme sont équivalentes - ce qui est exprimé dans une définition sera exprimé dans d'autres définitions. Les mérites de Turing se reflètent dans l'existence du prix Turing de la meilleure programmation. Soit dit en passant, Turing a mis en avant le soi-disant test de Turing - un test pour distinguer une personne d'un ordinateur. Il s'agit d'un test purement fonctionnel sans substances mystiques telles que l'âme humaine . Si une personne est assise dans une pièce et qu'une machine communique avec elle dans une autre via l'écran, et pendant longtemps, nous ne pouvons pas décider où se trouve la personne et où la machine signifie, cette machine est intellectuellement équivalente à cette personne et il n'est pas nécessaire de discuter fait et comment. Ce n'est pas indispensable.

Le von Neumann déjà mentionné a prouvé purement théoriquement la possibilité d'auto-reproduction des automates. Soit dit en passant, cette fonctionnalité est implémentée dans la pratique.

Littérature classique


Le texte est placé sur l'une des tablettes babyloniennes: «Les temps sont durs, les dieux se sont mis en colère, les enfants n'obéissent plus à leurs parents et tout le monde cherche à écrire un livre.» Un grand nombre de livres ont été lus, à moitié lus. Mais peu d'entre eux étaient cruciaux pour moi. Lesquels? A l'aube de mes activités informatiques, ce sont:

Brooks Comment les systèmes logiciels sont conçus et programmés
Un classique sur les problèmes rencontrés par les grands projets.
Dahl, Dijkstra, Hoor. Programmation structurelle .
Il marque le début d'une nouvelle ère dans la programmation. Vous êtes surpris de voir à quel point vous pouvez regarder les programmes ordinaires de manière inattendue et profonde. Il contient beaucoup de remarques philosophiques.
Dijkstra. La discipline de la programmation.
Livre absolument génial. Dans ma jeunesse, j'y ai passé deux vacances. Hélas, je ne peux pas m'assurer que j'ai tout compris. Quand j'ai rencontré des programmeurs essayant de briller avec leur intellect, je les ai laissés lire ce livre. Ils l'ont rendue embarrassée. Une réaction similaire a été donnée au «Rapport révisé sur Algol-68» (comme l'a dit l'une des autorités à propos d'Algol-68 - «c'est un langage pour les programmeurs et les poètes»)
Wirth. Programmation systématique.
Le premier livre lu, qui montrait qu'un tutoriel de programmation pouvait être bon.
Yodan. Programmation structurelle .
L'essentiel est à noter sur un sujet à la mode. Mais ici, c'était hors de propos.
Gris. Science de la programmation
«Si l'on considère le livre crucial de la révélation intellectuelle de Dijkstra (la discipline de la programmation), le livre de Gris est un acte apostolique» (Ershov).
Aho, Hopcroft, Ullman. Construction et analyse d'algorithmes de calcul
Le contrepoids aux livres modernes d'un jour comme «C- + en 21 secondes, une minute, ...» contient une exposition d'algorithmes rapides importants qui ne mourront pas longtemps.
Tours. Méthodologie de programmation
Il y a beaucoup de notes intéressantes sur la programmation dans le petit et la programmation dans le grand.
Kushnirenko. Programmation pour mathématiciens
Grand tutoriel avec un haut niveau de présentation.

Pendant ma programmation active, très peu de choses pouvaient être ajoutées à cette liste. Beaucoup de temps s'est écoulé depuis lors. Mais même aujourd'hui, la technologie de programmation n'a pas de base fondamentale telle que la physique comme base pour la technologie technique. La situation ressemble à l'état de la technologie médiévale, alors qu'elle n'avait pas de base scientifique sous forme de physique. Ensuite, les projets de la machine à mouvement perpétuel apparaissent.

Divers


Mythes


Tout le monde peut programmer . Sur ce compte, au lieu de citation de Shakespeare: " Je peux invoquer des esprits de l'abîme, Et je peux et tout le monde peut, La seule question est de savoir s'ils vont à l'appel ." Comme pour toute activité professionnelle, la programmation nécessite une inclinaison et des capacités. Il me semble que tous les programmeurs ne peuvent pas programmer. Il est possible de connaître Windows NT à un bitick et d'être impuissant avant de résoudre vous-même une tâche d'application élémentaire.

Tout le monde peut écrire dans sa langue maternelle, mais il n'y a pas tant de bons écrivains. Cela s'applique également à l'écriture dans un langage de programmation.

La tâche de la comptabilité est facile à écrire et sans intérêt, mais la création d'une page Web est difficile et intéressante.

Le premier et le second peuvent être modifiés. L'essentiel: la tâche quotidienne, disent-ils, est facile à mettre en œuvre et vous ne devriez pas y travailler particulièrement. Seules toutes sortes de kunshtyuki méritent l'attention. Mais donc, à mon avis, seuls les programmeurs disent, sans créer un seul projet décent. C'est comme une idée de la musique comme des écouteurs à la mode - et beaucoup d'amateurs de musique dans les écouteurs errent, et avec une sorte d'implication particulière dans une sorte d'ésotérisme. J'ai moi-même rendu hommage au snobisme des programmeurs. Apparemment, tout programmeur passe par l'étape «Je sais tout et je peux tout faire». Mais pour la plupart, cela ne dure pas longtemps.

Ce genre d'humeur peut être du côté "haut". Dans une entreprise, je rencontre un programmeur venu de Fiztekh, qui a déjà programmé un vol de missile balistique. Nous entamons une conversation sur l'utilisation des mathématiques dans le secteur bancaire. Il m'apporte immédiatement beaucoup de pages avec un modèle mathématique d'un fragment de l'activité de la banque - équations différentielles avec retard (!!) (le retard provenait des intérêts - le prêt émis aujourd'hui fait un profit après un certain temps - c'est le retard). Il s'avère qu'il part du profit fonctionnel de la banque et applique ensuite les méthodes mathématiques bien connues. Mais la tâche consiste alors à trouver cette fonctionnalité. Mais il a semblé au mathématicien-programmeur que c'était une bagatelle avec laquelle n'importe quel banquier ferait face, mais le banquier ne serait pas en mesure de rassembler davantage un tas de formules. La seconde est vraie, mais la première ne l'est pas. Et c'est le point. Ce qui est nécessaire, ce n'est pas seulement les mathématiques, mais les mathématiques de travail. Sinon, ce n'est qu'une scolastique des formules. Soit dit en passant, la fonction de profit sera sûrement une fonction discontinue (presque tous les indicateurs économiques sont discontinus, le taux de change par exemple) et donc les méthodes classiques continues ne lui sont pas applicables - le principe de Pontryagin maximum, par exemple.

Donnez-moi un ordinateur assez solide et je casserai tout code . Il y a beaucoup de programmeurs qui assureront de manière rauque que tout code peut être piraté. Ne donnez qu'un ordinateur suffisamment solide. À mon avis, c'est l'ignorance des bases de la théorie de l'information énoncées par Shannon. Et tout est assez simple. Considérez le bruit comme un message codé. Tout peut être extrait du bruit. Il ne peut en aucun cas être décodé - pour extraire quelque chose d'utile. Sinon, ce n'est pas du bruit. Le bruit superposé au message donne un bruit. Alors, mettons un bruit sur le message: Bruit (W) + Message (C) = Bruit1 (1). Le bruit 1 ne peut pas être déchiffré. Bien sûr, par une recherche exhaustive, vous pouvez accéder au bas du message. Mais comment savez-vous que c'est le bon message. Faisons passer le message «Petya est un imbécile». Une recherche complète extraira ce message, mais il en extraira également: «Petya est un gars intelligent» et «Vasya est un imbécile», etc. Alors lequel prendre?

Mais vous pouvez toujours extraire le message. Pour ce faire, vous devez connaître le bruit et la méthode de superposition. Alors = 1-. Mais cela n'a pas besoin d'un supercalculateur, mais vous devez connaître le bruit.

Par ailleurs, un schéma similaire semble être appliqué dans les conversations entre les présidents américain et russe.

Les programmeurs n'ont pas besoin de mathématiques

Autour de la programmation, les humanités-esthètes ont commencé à lutter. Eh bien, comment un programmeur peut-il dessiner une belle page Web sans esthète et comment s'entendre sans esthète avec une interface graphique. Et des greffes apparaissent. Et il semble que ce sont des programmeurs.

Il me semble qu'en tant que physicien, il est misérable sans mathématiques, tout comme un programmeur et misérable et ridicule sans connaissance des mathématiques. Au mieux, c'est un artisan. Vous pouvez connaître chaque option du système d'exploitation, comment installer toutes sortes de pilotes et ne pas pouvoir développer un projet élémentaire. En technologie, c'est une situation familière. Il y a des ingénieurs et des travailleurs. Vous pouvez être un excellent concepteur de voitures et la conduire mal, ou vous pouvez être un pilote de voiture de course et pas une putain de chose à comprendre dans les principes de construction de moteurs.

Principes


Quelles dispositions générales vous ont impressionné?

Diviser et conquérir

Le principe le plus utile. Toute tâche doit pouvoir être divisée en plusieurs tâches plus simples afin que les sous-tâches puissent être résolues et combinées afin d'obtenir une solution au problème d'origine. Par rapport aux sous-tâches obtenues, on peut faire de même. Et ainsi de suite. L'art de la division est à bien des égards l'art de trouver un algorithme. Les exemples manquent de nombres: le tri rapide divise l'ensemble trié en deux, la recherche binaire divise l'ensemble de recherche en deux.

Laissé laid mais uniforme

Ne créez pas de variété inutile. Cela ne fait qu'augmenter l'entropie. Acceptez la norme unificatrice et respectez-la sans réserve. Cela s'applique aux noms, abréviations et style de codage.

À cet égard, il est surprenant qu'il n'y ait pas de constructions linguistiques nécessaires qui poussent le système. Et les outils les plus avancés pour développer des applications SGBD elles-mêmes sont basés sur des approches de fichiers. Et comment serait-il plus pratique de présenter le projet sous forme de base de données et d'y appliquer l'appareil de recherche et de sélection ...

Le langage définit la pensée

En nous limitant à certaines constructions syntaxiques, nous ne soupçonnons même pas comment nous limitons notre pensée. Que serait un calcul différentiel sans symbolisme mathématique? Quelle serait la syntaxe d'un langage de programmation sans le formalisme Backus-Naur ou équivalent?

Programme = algorithme + données

Dans une approche orientée objet, cette position s'étend aux constructions élémentaires - objets constitués de données et de méthodes. La programmation s'est d'abord développée sous le signe des algorithmes, puis des données. Le SGBD sujet est entièrement classé sous la rubrique «données». Mais les algorithmes s'y glissaient aussi - méthodes de recherche, méthodes d'indexation.

Modéliser un domaine

Le modèle verbal génère une idée du sujet, accessible au spécialiste informatique et contenant l'essentiel. Un modèle d'information de type «entité - communication» génère une base de données. Le modèle fonctionnel «module M reçoit en entrée In et le convertit en Out» définit l'architecture des programmes. Un modèle d'objet représente un domaine comme un ensemble d'objets en interaction. Le modèle d'événement aide à décrire le mouvement du système comme un changement en réponse à certains événements.

Quelques tâches


Quelques tâches qui m'ont impressionné. Je ne cite, bien sûr, que de petites tâches. Il est difficile de parler brièvement des grandes tâches, de s'en tenir au genre.

Problème des grains de café

La banque dispose d'un nombre connu de grains de café noir et blanc et d'un approvisionnement gratuit en grains. Sélectionnez au hasard deux grains dans la boîte. S'ils sont de la même couleur, mettez-les en stock et mettez du grain noir dans la banque. S'ils sont de couleurs différentes, retournez le grain blanc et mettez le noir en stock. Continuez le processus jusqu'à ce qu'un grain soit dans la banque. De quelle couleur sera-t-il?

Solution.
Le processus est clairement cyclique: l'action «retirer et mettre» se répète
L'invariant du cycle est la parité du nombre de grains blancs. Donc, si le nombre initial de grains blancs est pair, alors le dernier grain sera noir, et s'il est impair, alors blanc. Le

manuel

contient trois très longs fichiers: les travailleurs r, les étudiants s, les chômeurs b. Ils sont classés par nom. On sait qu'il y a des étudiants voyous qui travaillent et sont inscrits sur les listes des chômeurs et, par conséquent, reçoivent des allocations de chômage. Écrivez un programme qui trouve le premier de ces voyous - celui dont le nom est le premier dans l'ordre alphabétique.

Solution.
Soit i, j, k les coordonnées des fichiers r, s, b
I, j, k: = 0,0,0; - partir du début
Jusqu'ici (r (i) <> s (j) et s (j) <> b (k) et b (k) <> r (i)) répéter le
début
Si r (i) <s (j ) alors i: = i + 1;
Si s (i) <b (j) alors j: = j + 1;
Si b (i) <r (j) alors k: = k + 1;
end

i, j, k contiennent des coordonnées non fiables dans leurs fichiers.

Mais comme il a l'air élégant dans la notation de Dijkstra:

i, j, k: = 0,0,0;
faire
 R (i) <S (j) i: = i + 1;
 S (j) <B (k) j: = j + 1;
 B (k) <R (i) k: = k + 1;
od
{i, j, k est les coordonnées souhaitées}
Où le symbole  identifie le soi-disant gardien (R (i) <S (j), etc.)
Il est dommage que cette notation n'ait pas entré les langues.

La parabole des toilettes dans les trains

Il était une fois un pays où chaque voiture était faite de toilettes. Mais un économiste est apparu et a décidé d'économiser en fournissant à la moitié des wagons des toilettes. Alors ils ont commencé à faire. Mais ils ont oublié d'avertir de ces stations de tri, où va le train. En conséquence, certains trains se sont retrouvés sans toilettes. Pour corriger la situation, chaque voiture a reçu une inscription indiquant s'il y avait des toilettes à l'intérieur et a demandé aux attelages: "Il devrait y avoir environ la moitié des toilettes dans le train." Bien que cela ait compliqué la vie des remorques, elles ont honnêtement suivi les instructions. Cependant, certains se sont plaints que les toilettes se trouvaient parfois dans la moitié du train. Pour résoudre le problème, ils ont publié une nouvelle instruction: "Lors de l'attelage, alterner les wagons avec des toilettes et sans eux." Cela a ajouté du travail aux remorques, mais elles, en grommelant, ont commencé à suivre honnêtement les instructions. Cependant, certains se sont plaints queque pour une voiture sans toilettes, en outre, les toilettes n'étaient pas au début d'au moins une voiture voisine, mais aux extrémités des deux. Terrible injustice pour un pays démocratique. Que faire Après réflexion, les autorités ont émis une instruction supplémentaire: «Fournir à chaque wagon des toilettes avec une flèche indiquant où se trouvent les toilettes. Lors du couplage, toutes les flèches des wagons doivent être dirigées dans une seule direction. » Les remorques, bien qu'elles n'aient pas eu suffisamment de platines, se sont tendues et ont commencé à le faire. Cependant - oh horreur! - les passagers ont commencé à s'inquiéter du fait que, même si les toilettes les plus proches n'étaient pas plus qu'une voiture, on ne savait pas de quel côté se trouvaient les toilettes. Des instructions supplémentaires sont sorties: «Dans chaque voiture sans toilettes, dessinez la flèche« Toilettes »et verrouillez les voitures de sorte que cette flèche pointe vers les toilettes les plus proches.» Les caravanes hurlaient: elles n'avaient pas le temps.Et puis il y avait un homme qui a remarqué ce qui suit: si vous accrochez la voiture avec les toilettes et sans elle de sorte que les toilettes soient au milieu de la paire et ne détache jamais la paire, alors la station de tri traitera à la place des voitures orientées N avec N / 2 paires symétriques (non orientées) wagons. Ensuite, tous les problèmes de tri ont disparu. Certes, les trains doivent contenir un nombre pair de wagons. Mais vous pouvez le supporter. Alors ils l'ont fait.

Les classiques affirment que bien que les ordinateurs ne soient pas encore connus dans ce pays, celui qui a trouvé la solution était un vrai programmeur.

Tri rapide

Après le tri et le tri des bulles, Shell est une révélation. Bel algorithme et le résultat le plus rapide.

Un programme qui imprime le texte de lui-même.

C'est un programme dont le résultat est l'impression de son propre texte. J'ai été agréablement surpris de voir comment un jeune programmeur a écrit ce programme en Pascal en un quart d'heure.

Échecs sur plusieurs lignes

J'ai été frappé par le programme, d'une cinquantaine de lignes en do, qui jouait aux échecs décemment. Il peut y avoir plusieurs déclarations dans une ligne.

Étuis


Entrée polonaise


C'était il y a longtemps. Nous développons un projet au Belpromstroibank Exhibition Center pour maintenir les données sur les projets de construction dans la république. Le générateur de rapport est tracé. Chaque graphique peut être défini par n'importe quelle formule arithmétique. Comment le calculer? La décision est prise que l'utilisateur doit remplir un formulaire spécial dans lequel il réduit lui-même la formule à élémentaire. Par exemple, la formule r = (a + b) / (cd) est décomposée comme suit: 1) x = a + b, 2) y = cd, 3) r = x / y. Alors ils l'ont fait. Nous courons. Le projet est en cours de réalisation. Chaque jour, des dizaines de rapports sont imprimés sur des dizaines de kilogrammes de papier finlandais perforé. Le patron réfléchit à la poursuite du développement du projet. Progressivement, il a eu l'idée que la décomposition de n'importe quelle formule pouvait être effectuée par la machine elle-même. Ainsi, l'utilisateur se débarrasse du mauvais travail - décomposition de la formule (la décomposer en une séquence de simples).L'idée de promouvoir une formule dans un enregistrement sans parenthèse apparaît. Vient ensuite l'idée d'une pile. Et puis je me souviens avoir lu quelque part sur le dossier polonais de l'expression. Je trouve un livre et je vois que mon patron lui-même a eu l'idée d'un disque polonais (ou, en d'autres termes, d'un postfix) et d'une pile. Tout cela aurait été délicieux sans l'invention du vélo. Après tout, tout cela qu'un programmeur devrait savoir. Mais lui et moi étions des amateurs - des étrangers d'autres professions ... Hélas, il s'est avéré que nos pros (diplômés du BSF matfak et travaillant à l'Institut de recherche informatique) ne le savaient pas. Alors là, c'est encore plus triste.Après tout, tout cela qu'un programmeur devrait savoir. Mais lui et moi étions des amateurs - des étrangers d'autres professions ... Hélas, il s'est avéré que nos pros (diplômés du BSF matfak et travaillant à l'Institut de recherche informatique) ne le savaient pas. Alors là, c'est encore plus triste.Après tout, tout cela qu'un programmeur devrait savoir. Mais lui et moi étions des amateurs - des étrangers d'autres professions ... Hélas, il s'est avéré que nos pros (diplômés du BSF matfak et travaillant à l'Institut de recherche informatique) ne le savaient pas. Alors là, c'est encore plus triste.

Hélas, il me semble que cette situation n'est pas seulement en programmation. Nous sommes traités par des médecins à trois voies, des constructeurs à trois voies construisent et des enseignants à trois voies enseignent. Nous avons «l'étudiant qui n'étudie pas, mais seulement les ennuyeux apprennent». Et puis des experts amateurs sortent. En conséquence, nous avons beaucoup de fous sans instruction, beaucoup de fous instruits, beaucoup de gens intelligents sans éducation, mais très peu de gens intelligents et instruits.

Un peu plus sur l'amateurisme. Après être venu travailler pour nous, le chef (nous l'appellerons A.M.) a décidé de changer la tête des programmeurs. Je suis donc considéré comme un concurrent. Il semble qu'une belle interview soit en cours, mais les tests sont en cours. Et donc on me pose la question "Comment la fin du fichier est-elle physiquement déterminée?" Hélas, je ne le savais pas et réponds qu'ils disent, pourquoi devrais-je savoir si la langue me donne une situation EOF et peu importe comment elle est mise en œuvre. Comme l'a dit K. Prutkov: "... Kostaki a raison, j'ai raison." Mais en tant que responsable des programmeurs, j'ai été piraté. Cependant, on m'a proposé de diriger les réalisateurs. (Revenant au début de l'histoire et, rappelant les classiques, nous pouvons dire - «le rêve de l'idiot s'est réalisé»). "Tenir compte de la large vision du monde" comme l'a dit A.M. Les moutons ont donc été séparés des chèvres - des généralistes des spécialistes. Et plus loin A.M. Habilement traité avec le personnel.Donc, mon approche du problème «du haut vers le bas - du problème à la machine» a dominé et domine, et mon collègue avait l'opposé «du bas vers le haut - de la machine au problème». A.M. nous a immédiatement conduit à différents pôles. Un collègue a commencé à travailler sur les pilotes de périphériques d'entrée de données sur les chantiers de construction, et je travaillais sur un modèle mathématique pour recevoir des rapports sur l'état des chantiers de construction. Dans d'autres projets, j'ai rencontré l'opposé avec d'autres managers. En conséquence, l'un parle de bits, et le second d'intégrales et ne se comprend pas.Dans d'autres projets, j'ai rencontré l'opposé avec d'autres managers. En conséquence, l'un parle de bits, et le second d'intégrales et ne se comprend pas.Dans d'autres projets, j'ai rencontré l'opposé avec d'autres managers. En conséquence, l'un parle de bits, et le second d'intégrales et ne se comprend pas.

Je suis donc devenu directeur des administrateurs. Et programmé, bien sûr. Et les programmeurs étaient dirigés par une autre personne, un pro. Nous sommes devenus de bons amis. Et j'ai reçu de lui la caractérisation flatteuse et ironique d'un «spécialiste des problèmes incertains» reconnaissant le fait que je pouvais apporter le problème le plus banal à la base mathématique et lui donner de la solidité, même si en substance ce pouvait être un bluff. L'héritage d'un physicien théorique affecté.

Sur l'exemple d'A.M. J'ai vu qu'un projet est le produit de moins d'intelligence que de volonté .
Imprégnés de respect pour le chef, nous avons même rassemblé ses phrases.

Exemples:

« De et vers » - il n'y a rien à penser seulement à votre plaie, vous devez voir tout le processus.
« À Bitik » - une approche hackeuse et superficielle ne fonctionnera pas ici.
« Retroussez vos manches » - il n'y a rien à libérer, travaillez sans filet.
« Est-ce vrai? "- Tu parles de bêtises, frère?

Ces enregistrements ont été répétés quotidiennement avec lui. Mais c'était à A.M. et des propriétés plus désagréables. Il aimait beaucoup le brainstorming en vacances. Vacances. L'arrangement de la table est terminé, le champagne est débouché - puis attendez l'appel du matin. C'est vrai, la cloche. - «Ensuite, j'ai eu quelques idées. Je propose d'en discuter. » Et - au revoir vacances.

Un serpent remplissant tout l'espace

Dès l'apparition des écrans, des jeux visuels sont apparus. L'un des premiers est un serpent attrapant sa queue. Le serpent devait être conduit, en évitant les obstacles aléatoires, en donnant des ordres à gauche / droite. Le serpent s'allongeait tout le temps, de sorte qu'il restait moins d'espace. Et puis j'ai eu une tâche. Est-il possible de choisir un itinéraire de serpent afin qu'il remplisse tout l'espace de l'écran. Après avoir réfléchi quelques heures, j'ai trouvé la bonne route. Allons déjeuner. J'attache la tâche à mon collègue. Et à ma grande surprise, nous n'avons pas eu le temps de verser le premier, car il a résolu le problème (bien que les lignes soient longues, mais pas pendant quelques heures). Après avoir pensé à ce cas, j'ai commencé à me consoler du fait que, apparemment, le désir de manger stimule l'intellect.

Phrases classiques


Certaines phrases moyennes de classiques coûtent des volumes de médiocrité. Voici quelques déclarations qui ont défini des domaines entiers de programmation.

Brooks :

  • Derrière la maîtrise se cache l'ingéniosité, grâce à laquelle apparaissent des programmes économiques et rapides. Il s'agit presque toujours du résultat d'une percée stratégique et non d'une compétence tactique. Parfois, une telle percée stratégique est un algorithme, comme, par exemple, la transformée de Fourier rapide proposée par Cooley et Tukey, ou un remplacementn2comparaisons sur n * log (n) lors du tri.

    Plus souvent, une percée stratégique se produit à la suite de la présentation de données ou de tableaux. Le cœur du programme est ici. Montrez-moi les organigrammes sans montrer les tableaux, et je resterai égaré. Montrez-moi vos tableaux, et les organigrammes ne seront probablement pas nécessaires: ils seront évidents .

  • La présentation des données est l'essence même de la programmation.
  • S'habituer aux exigences d'une parfaite précision est, à mon avis, le plus difficile dans le processus d'apprentissage de la programmation.
  • Une fois le projet finalement adopté, il devient obsolète au sens de ses concepts.

Wirth :

  • Programme = algorithme + données.
  • () , , .
  • . , .
  • , , .
  • , (, ), . , .
  • , , , , . , . , . .
  • ( ) ; , . , .
  • , , . , :

    1. ,
    2. la décomposition choisie vous permet d'obtenir des instructions dans un certain sens plus proches de la langue dans laquelle le programme sera finalement formulé.

SUN :

Un réseau est un ordinateur.

Excellente idée.Par conséquent, idéalement, un programme distribué, considéré au niveau d'un langage de développement, ne devrait pas différer d'un langage unitaire. La base distribuée au niveau d'utilisation ne doit pas différer de celle non allouée. La distribution doit être mise en œuvre par le système d'exploitation. La distribution et l'orchestration des services ne devraient pas non plus être la préoccupation d'un programmeur d'application.

Dijkstra :

  • - , ( , , , ).
  • -: – .
  • ? : “ : . , , , – , ,
    … , . , , , “” . – … , ,
    – ”.


  • 1/106104 . . , -, .
  • .

    , , , , , , . , , , . , , , . , , , . , , . , – , . , , , , .
  • … . : “” ? : ””, , ; : ””, — . , , – – , . , , , . : , .
  • , .
  • , , « » — ! — « ». - ,
    , : « , , , , «» , ?» , , -, ." , , , , .
  • , , ( ), , « ». ; , , , « », . . , ,
    .

Ne sais pas_à :

le langage de programmation le plus important est le langage natif. Un programme dans une langue officielle est une traduction d'idées formulées dans la langue maternelle. Par conséquent, ceux qui présentent sombrement dans leur langue maternelle s'assombriront également dans le formel.

Marketing et programmeurs


J'ai préparé du matériel promotionnel pour l'exposition sur mon projet. Les spécialistes du marketing de mon entreprise ont attaqué mon matériel publicitaire avec de telles attaques:

  • Le matériau a de nombreux points négatifs (une description des lacunes des projets existants), ce qui porte une énergie négative
  • Les tailles des dépliants ne correspondaient pas au nombre d'or.

Et autre chose comme ça.

Mais ces commerçants n'ont pas remarqué l'absence de téléphones, d'adresses et d'informations sur l'entreprise dans les brochures, ce que mon ancien patron a aimablement attiré l'attention lorsque j'ai pris connaissance de mes documents lors de l'exposition. J'ai commencé à cogner: messieurs, je vous donne une description technique du produit, et vous, spécialistes du marketing, donnez-lui une description du marché. Là où. Ils acceptent seulement de critiquer. En conséquence, il est venu à la tête de l'entreprise. Il m'a dit: obéissez à l'agent de commercialisation, après tout, elle est diplômée des économies avec mention. Moi: et je suis diplômé de BSU avec mention. Puis le chef dit: "Vous, excellents élèves, vous vous comprenez, et je n'entrerai pas dans vos querelles."

J'ai été impressionné par cela dans le marketing (en général, et non dans le marketing d'une entreprise). C'est la magie des noms. Chacun doit donner au moins un fait significatif à un nom et éventuellement à une abréviation sonore. Cela garantit déjà que vous n'avez pas ignoré ce fait lui-même. Et puis vous devez faire correspondre le nom. Le nom est l'application du principe de «Diviser pour régner». Lorsque nous donnons un nom, nous mettons ainsi en évidence le sujet. Combien de réclamations de copyright étaient comme: "nous avons vu ceci, mais nous n'avons pas mis en évidence ce fait et ne lui avons pas donné de nom." C'est juste le point! Ensuite, j'ai compris le tourbillon de OLE -> OCX -> ActiveX -> COM ->?; Et le site -> portail ->? .. Eh bien, que pouvons-nous dire sur l'interaction entre entreprises, mais quand nous disons B2B (Business to Business) - c'est le terme et, par conséquent, il y a quelque chose derrière, bien qu'en fait en fait, il n'y a peut-être rien, mais simplement une désignation.Dès que l'abréviation ERP est apparue, de nombreux développeurs ont commencé à présenter leurs développements comme ERP ... La mode pour les termes est une chose puissante.

À cet égard, il est rappelé ce qui suit. Lorsque le parti a autorisé la cybernétique, un débat a commencé sur ce qu'il convenait d'appeler ce qui est maintenant appelé «ordinateur». "Calculatrice", "TsAM", "Ordinateur" ... - tout ne tournait pas. Le grand et puissant langage de la nôtre a sauvé "l'ordinateur" avant l'américanisme. À mon avis, c'est une manifestation du complexe d'infériorité en Occident. Et, je dois dire, hélas, un complexe parfaitement justifié.

À propos de l'intégration


J'ai vu de nombreuses implémentations de systèmes bancaires et, presque toujours, elles étaient présentées comme des systèmes intégrés. Mais vraiment, ils n'ont jamais été comme ça. Je pense qu'un système vraiment intégré reste à venir. Un tel système devrait avoir un modèle d'information unique, un modèle d'objet unique, un modèle fonctionnel unique, un concept et une architecture uniques: l'intégration devrait être réalisée sur des données, des objets, des fonctions, des événements, des interfaces. Je n'ai pas vu ça.

Le plus


La tâche la plus intéressante


Il s'agit d'un projet d'analyse commerciale. Ce qui peut amuser la fierté comme une prise de conscience du fait que TK s'est déterminé lui-même, a fait la production lui-même, le modèle d'information lui-même, le modèle objet lui-même, et en plus vous programmez aussi. La tâche est intéressante par sa nouveauté et son ampleur. Ses bordures ne sont pas visibles.

Le plus grand défi


Le plus grand projet collectif est le passeport de construction de toute la Biélorussie. Le projet a été mis en œuvre sur un assembleur d'ordinateurs de l'UE. Domaine - données sur tous les projets de construction au Bélarus. L'utilisateur a lui-même défini la structure et le contenu du rapport de construction.

Le plus grand projet individuel est la Business Intelligence. Domaine - analyse de l'état passé, actuel, prévu et prévu de l'entreprise. Outils: décomposeurs, comparateurs, scénarios de simulation, séries chronologiques, hypothèses statistiques. Langages: Delphi, C #.

Le défi le plus frappant


Ceci est la première introduction à la récursivité. J'ai été très impressionné par la solution du problème de la tour de Hanoi en utilisant la récursivité - réduction au même problème, mais d'une dimension inférieure, donc la solution est évidente pour les petites dimensions. Le problème des huit reines était également très impressionnant.

Le livre le plus marquant


Dahl, Dijkstra, Hoar. Programmation structurelle.
Dijkstra. La discipline de la programmation.

Les cas les plus ridicules


Nous avons développé un projet sur Kobol pour l'EC-1020. Je suis programmeur débutant. Il y avait un besoin pour un programme de répartiteur qui appelle certains programmes, selon la situation. Les programmes sur Kobol n'ont pas pu être téléchargés par d'autres (ou je ne savais pas comment faire). Il fallait soit écrire en assembleur (que nous ne connaissions pas), soit faire autre chose. Et puis ils ont trouvé cela différent - c'est le langage de gestion des travaux (JCL) du système d'exploitation DOS.

Il y avait une chose telle que SYSIN (périphérique d'entrée logique), SYSRDRR (périphérique d'entrée de directive logique JCL), etc. Ils pourraient être réaffectés lors de l'exécution. Par conséquent, après avoir préparé un tas de SYSRDR pour chaque branche possible, vous pouvez, en principe, terminer la tâche. Et nous avons consacré beaucoup d'efforts à cela. Et tout cela, bien sûr, en vain. Après avoir étudié Assembler, nous avons tout obtenu, et après avoir dépensé beaucoup d'efforts avec JCL, même après avoir obtenu le résultat, nous n'avons rien obtenu de nouveau. Vous devez choisir non pas ce qui est le plus proche, mais ce qui apportera plus d'avantages en général. Soit dit en passant, DOS a été remplacé par OS / 360 et le JCL appartient au passé. Mais est venu encore plus séduisant, mais une telle erreur n'a pas été répétée. Il est difficile de fabriquer une arme à feu avec une fronde.

Le plus drôle


Au début du «taraudage», le produit a été mis en fonctionnement d'essai à l'aide d'un exemple de test. Un cas de test est un test global compilé par des économistes. Le résultat d'une exécution de produit était généralement des tabulogrammes - des rapports sur l'état du problème en cours de résolution, à différentes étapes de sa solution. Les tabulagrammes ont été vérifiés par rapport à un exemple de contrôle et s'ils coïncidaient, le produit a alors été accepté pour un essai. Mais le projet n'est pas prêt. Que faire La solution est simple. Des programmes sont écrits qui produisent des tabulagrammes sur le front. À la livraison, ils commencent. Et un client inexpérimenté (et qui était alors expérimenté?) Signe un certificat d'acceptation pour une opération d'essai.

"Si vous pouvez le dire, alors pourquoi montrer" - un cher programmeur a répondu avec une telle phrase quand, après une émission passionnante du programme qu'il a créé, ce dernier est tombé au tout début du spectacle et il est passé de montrer à raconter.

Le plus étrange


Un projet est en cours d'élaboration - «Business Intelligence». Il a été développé sous NT. Et maintenant, nous devons de toute urgence démontrer le système à la banque. Nous décidons de le faire sur un ordinateur portable. Windows 98 était déjà là. Nous mettons, recompilons, exécutons - tout va bien, sauf un: le début de la période est établi en 1898. Nous commençons à soupçonner que le contexte contenant les dates a été mal extrait. Le contexte est récupéré par le code utilisateur, qui est récupéré en appelant la fonction GetUserName de l'API Windows. Nous commençons à soupçonner que cette fonction ne fonctionne pas correctement. Nous définissons le point indiscret et exécutons le débogueur. Tout va bien et le programme fonctionne bien et les dates sont normales. Ils ont tout annulé par hasard. C'était le soir, et nous, ravis, rentrions chez nous. Demain à la banque. Le lendemain matin, nous allumons - encore une fois la même situation avec les dates. Nous activons l'analyseur dans le débogueur - tout va bien.Eh bien, la situation en mécanique quantique est simple: quand ils n'espionnent pas une particule, ils interfèrent avec les ondes, et quand ils les espionnent, ce sont des particules. Nous n'avons donc pas reçu de réponse. Et pour que tout se passe bien, nous avons «saisi» les données correctes et la démonstration a réussi.

Eh bien, et un autre cas de diabolique. Nous avons développé le projet d'analyse ensemble et avons donc utilisé les outils pour soutenir le travail d'équipe sur le projet - MS SourceSafe. Ce produit prend en charge plusieurs versions historiques. Et ici, j'ai constaté à plusieurs reprises que, après avoir corrigé une branche importante, après un certain temps, je remarque que l'ancienne version est là, mais il n'y a pas de corrections. Et donc cela a été répété plusieurs fois. J'ai tout attribué à l'analphabétisme. Mais, quel genre de produit qui est si impitoyable pour les analphabètes?

Presque la philosophie


Comment décrire les capacités intellectuelles d'un programme, d'un ordinateur à mémoire fixe? Il est clair qu'ils ne peuvent même pas se souvenir d'un nombre suffisamment important. Alors quoi - nous aussi, nous ne pouvons pas nous souvenir et écrire un nombre suffisamment grand. Mais nous ne nous considérons pas comme des êtres
non intellectuels. Où est donc la définition formelle de l'intelligence? Je pense que c'est l'un des problèmes fondamentaux. Comment décrire une mesure de l'intelligence d'un système avec des paramètres externes donnés - la mémoire? Comment un programme peut-il se comprendre - les limites de la connaissance de soi? L'utilisation de macros - des programmes qui se modifient, soulèvent des questions: un programme peut-il devenir plus sage?, Où sont les limites de l'intelligence?

Comme auparavant, la vision du monde était déterminée par les sciences naturelles, alors maintenant elle est de plus en plus déterminée par l'informatique.Je ne parle pas de programmation primitive, mais de la science de la programmation. Un grand nombre des problèmes philosophiques les plus abstraits deviennent complètement concrets lorsqu'ils sont vus d'un point de vue informatique. Considérez cet exemple. Après tout, les programmes de créatures intelligentes peuvent être simulés sur un ordinateur. Vous pouvez simuler la reproduction, la sélection, l'hérédité, l'espace, le temps ... Le résultat est un monde intra-informatique. Et ici les créatures intra-informatiques (softhomo) y vivent, se battent pour un morceau de pain, parlent, philosophaient et tôt ou tard pensent: y a-t-il un dieu dans le monde? Qu'est-ce qui est primaire: la matière ou la conscience? Y a-t-il des choses en vous? Connaissez-vous le monde? Il y a un solipsiste et déclare: "le monde entier n'existe que dans mon imagination". Les matérialistes locaux ont lancé un hurlement à cet égard. Qui a raison? Du point de vue de leur monde, les matérialistes ont raison, et du point de vue de notre monde, extérieur à eux, le solipsiste a raison. La preuve de cela éteint l'ordinateur.

Et dans notre monde, l'idée a longtemps été exprimée que les matérialistes et les idéalistes ont raison. En physique, la pensée dichotomique primitive telle que «soit la particule soit l'onde» - «Et la particule et l'onde» est depuis longtemps dépassée. C'est donc en philosophie. Lorsqu'on lui a demandé ce qu'est la vérité profonde, Bora a répondu: "La vérité profonde est une telle vérité, dont le déni est également une vérité profonde." Le déni de la vérité 2 * 2 = 4 n'est pas profond, ce qui signifie que cette vérité elle-même n'est pas profonde. Mais le déni de la vérité «la matière est primordiale» est profond, comme le dit tout le développement de la philosophie, lorsque les matérialistes-léninistes ne critiquaient que les innovations idéalistes, sans avancer quoi que ce soit de nouveau: ils disent «Oui, eux-mêmes ne comprennent pas ce qu'ils ont trouvé. Mais dès que nous lui donnerons une interprétation matérialiste, alors tout deviendra vraiment scientifique. »Exemple - cybernétique, sémiotique, interprétation de Copenhague de la mécanique quantique, etc.

Et voici quoi: peu importe ce que les softhomes inventent, peu importe la force de l'intellect, ils ne verront et n'entendront jamais notre monde en dehors d'eux - le programmeur, par exemple (si le programmeur n'ouvre pas le dialogue explicitement). Et pour eux, le programmeur est un dieu, et notre monde est une chose pour eux en eux-mêmes, et rien de notre monde n'est inconnaissable pour eux, et leur remplissage intellectuel fait par le programmeur est une connaissance a priori. Il semble que Kant, qui a parlé de tout cela dans sa philosophie, en savait vraiment beaucoup. Les concepts les plus abstraits de Kant de la «chose en soi», du «transcendantal», du «transcendantal», de la «connaissance synthétique a priori» reçoivent des choses tout à fait compréhensibles dans cette interprétation. Pour le monde indiqué, notre monde entier est des choses en soi, la connaissance synthétique a priori est tout ce qu'un programmeur a mis dans l'intellect du monde intra-informatique, la connaissance transcendantale pour lui est la connaissance decomment un programmeur a créé ce monde informatique.

Dans ce cas, vous pouvez vous demander: Ou peut-être pour certains d'entre nous, nous sommes le monde informatique et Dieu est un programmeur? Soit dit en passant, le principe dit anthropique est formulé en physique. Il s'avère que toutes les lois de la physique sont arrangées de telle manière qu'elles les auraient un peu modifiées et qu'une personne ne serait pas apparue. Modifiez un peu la constante gravitationnelle, ou la charge de l'électron, ou la constante de Planck, et tout fonctionnera pour que le Soleil ne s'allume pas ou qu'il soit trop chaud. Autrement dit, tout est fait pour qu'une personne apparaisse. Certes, beaucoup disent que cela va de soi: des mondes différents peuvent surgir des millions de fois sans personne, mais si une personne est déjà apparue, alors, naturellement, le monde dans lequel elle est apparue est conçu pour apparaître. Une fois que le tracteur quitte le convoyeur, il est naturel que le convoyeur soit conçu pour que le tracteur apparaisse. Mais encore, encore ...

Ainsi, la programmation vous permet de jeter un regard neuf sur les problèmes de vision du monde. Cela peut changer fondamentalement la vision du monde elle-même.

Dernier


De tout le voyage de ma vie, j'ai retiré la sagesse banale: " Un seul esprit ne suffit pas pour agir intelligemment ." Combien de femmes intelligentes étaient sur notre parcours - beaucoup. O are sont-ils? Que faut-il d'autre pour réussir? Mais Dieu le connaît. Et la chance, et l'argent, et l'arrogance mondaine. Hélas, les trois dirigeants impudents gouvernent tout. Les hommes intelligents doutent eux aussi. Ils ont assez d'intelligence, mais pas assez de volonté.

La plainte des anciens Babyloniens "Les temps difficiles sont venus, les dieux étaient en colère, les enfants n'obéissent plus aux parents et tout le monde veut écrire un livre" La modernité a été modifiée: " Les temps difficiles sont venus, les dieux sont en colère, les enfants n'obéissent plus aux parents et tout le monde veut écrire un livre, et, malheur, tout le monde le fou veut créer son propre site / portail / blog sur Internet . »

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


All Articles