Je suis en train de terminer ma maîtrise en informatique. Je suis intéressé par les langages de programmation, en particulier dans les systèmes de types. Je me suis intéressé à la recherche dans ce domaine et le semestre prochain, je commencerai un doctorat sur le sujet.
Maintenant, voici la vraie question: comment puis-je expliquer ce que je veux (faire) à des personnes qui n’ont aucune connaissance préalable en informatique ou dans des domaines connexes?
Le titre vient des faits que je ne suis même pas capable d'expliquer à mes parents, mes amis, etc., ce que je fais. Oui, je peux dire "le but est d'aider les développeurs de logiciels à écrire de meilleurs logiciels" , mais je ne pense pas que cela soit vraiment utile: ils ne sont pas conscients de la "programmation", ils n'ont aucune idée de ce que cela signifie. C'est comme si je disais que je suis un mécanicien automobile pour quelqu'un du Moyen Âge: ils ne savent tout simplement pas de quoi je parle et encore moins comment l'améliorer.
Est-ce que quelqu'un a de bonnes analogies avec le monde réel? Des exemples éclairants provoquant des moments "a-ha"? Dois-je réellement montrer un extrait de code court et simple à des personnes âgées de plus de 60 ans sans expérience en informatique (ni universitaire)? Si oui, quelle langue devrais-je utiliser? Quelqu'un at-il rencontré ici des problèmes similaires?
Réponses:
Si vous avez quelques minutes, la plupart des gens savent comment ajouter et multiplier deux nombres à trois chiffres sur papier. Demandez - leur de le faire, (ou d'admettre qu'ils pouvaient, si elles devaient) et leur demander de reconnaître qu'ils font cette tâche méthodiquement: si ce nombre est supérieur à 9, puis ajouter un report, et ainsi de suite. Cette description qu'ils ont juste donnée sur ce qu'il faut faire est un exemple d' algorithme .
C’est ainsi que j’enseigne aux gens l’algorithme des mots et, selon mon expérience, c’est le meilleur exemple. Vous pouvez ensuite expliquer qu’on peut imaginer que les ordinateurs doivent effectuer des tâches plus complexes et qu’il est donc nécessaire de disposer d’un langage non ambigu pour alimenter ces algorithmes. Il y a donc eu une prolifération de langages de programmation parce que les gens expriment leurs pensées différemment, et vous cherchez des moyens de concevoir ces langages de sorte qu'il soit plus difficile de faire des erreurs.
C'est une situation très reconnaissable. La plupart des gens n'ont aucune idée que les ordinateurs qu'ils utilisent utilisent des programmes, ou que ces programmes sont du code source écrit par l'homme, ou qu'un ordinateur pourrait «lire» le code source, ou que le calcul, qu'ils associent à l'arithmétique, est la seule chose que les ordinateurs faire (et le mouvement des données, et la mise en réseau, peut-être).
Mes recherches portent sur l'informatique quantique, alors quand les gens me demandent ce que je fais, je n'essaye pas de l'expliquer. Au lieu de cela, j'essaie d'expliquer que la physique quantique existe (ils ont généralement entendu parler du chat de Schrödinger et de choses qui se trouvent à deux endroits à la fois), et qu'en raison de cette physique étrange, des calculs plus rapides pourraient être possibles.
Mon objectif est de laisser la personne se sentir un peu plus informée qu'elle ne l’a fait, excitée par un monde qu’elle ne connaissait pas, mais avec laquelle vous la familiarisez maintenant. Je trouve que c'est beaucoup plus utile que d'expliquer mes questions de recherche particulières.
la source
Je voudrais essayer quelque chose comme ça:
J'utilise une explication dans un style similaire pour mon domaine (langages spécifiques à un domaine), et je peux dire que cela m'a souvent aidé à surmonter le "oh tu es un informaticien, je ne pourrais jamais le faire qui me laisse partir et arrête de parler à vous "question. La clé semble être de tirer les deux premières phrases jusqu'à ce que l'une d'elles atteigne un exemple auquel l'autre personne peut s'identifier, comme les documents Word dans ce cas. Des points bonus pour cas particuliers à l'exemple, comme Excel pour les comptables ou Powerpoint pour les patrons ou les jeux informatiques pour les joueurs, les navigateurs Web ou autres.
Notez que vous ne devez pas rester à ce niveau superficiel. Si vous (et l'autre personne!) Le souhaitez, vous pouvez vous plonger dans les détails de ce que vous faites exactement à partir de là. Par exemple, "dans mon projet actuel, j'essaie de prouver mathématiquement que ce que j'ai inventé l'année dernière fonctionne réellement. Cela signifie que je dois définir très soigneusement ce que signifie réellement un programme, et ce que mon invention suppose qu'un programme signifie", puis Je peux montrer que la prédiction est en fait juste ".
la source
La plupart des gens comprennent les recettes. Si vous suivez les instructions, vous aurez un bon repas. Parfois, cependant, les instructions peuvent être difficiles à suivre. Par exemple, lorsque vous créez des pérogies, vous trouverez des instructions telles que celle-ci, prise mot pour mot des pérogies polonais de grand-mère :
Beurk. Passons en revue les bons conseils de grand-mère à nous. Déposez-les un à la fois ... afin qu'ils aient tous une durée différente dans le pot. Je l'ai. Ils sont terminés quand ils flottent au sommet . Eh bien combien sont-ils? Est-ce que je les attrape au fur et à mesure? Est-ce que j'attends que 80% flottent au sommet et les récupère ensuite? C'est fou imprécis. Ne faites pas bouillir trop longtemps, sinon ils seront détrempés! Comment puis-je mesurer quand ils sont sur le point de devenir détrempés pour qu'ils ne restent pas trop longtemps? Si cinq arrivent au sommet en même temps, aurai-je le temps de les avoir tous?
Et croyez-moi, j'ai gâché beaucoup de pérogies dans ma journée. C'est un problème grave que tout cuisinier au pérogie a déjà rencontré. Malgré ces problèmes, même après l'analyse la plus élémentaire, les gens sont encore capables de faire des pérogies en utilisant exactement la même méthode. Mais pouvons-nous faire quelque chose pour que plus de lots de pérogies soient réussis et que moins de lots de pérogies échouent?
Ne serait-il pas formidable de voir quelqu'un de spécialisé dans la fiabilité des recettes? Quelqu'un qui a dit "nous pouvons canaliser les pérogies afin qu'ils apparaissent et sortent de l'eau!" ou "nous pouvons ajouter un colorant spécial au perogie, sûr à manger, qui leur donne différentes nuances et nous savons comment éliminer les plus sombres en premier, car ils risquent davantage de devenir détrempés". Nous voulons un expert capable de prendre cette recette et d’y remédier. La vie des cuisiniers pérogiés à travers le monde sera plus facile et moins de morceaux de pâtes et de pommes de terre détrempées seront nourris à un chien.
Les programmeurs suivent aussi les recettes tout le temps. Mais parfois, l'équipement qu'ils utilisent, les instructions qu'ils utilisent et les interprétations qu'ils utilisent ne se combinent pas pour préparer le repas somptueux qu'ils voulaient. Heureusement, il y a des gens qui consacrent leur carrière à rendre la vie d'un programmeur plus productive. Dans votre cas, vous vous êtes spécialisé dans l’un des outils utilisés par un programmeur, le langage, pour essayer de les améliorer.
la source
Voici comment j'essayerais d'expliquer cela à ma mère:
Les gens utilisent les langages de programmation pour donner des instructions à un ordinateur. Tout ce qu'un ordinateur fait est fait à l'aide d'un code informatique écrit dans un langage de programmation par un programmeur.
Ainsi, si, par exemple, nous souhaitons que la chaîne de télévision change lorsque nous appuyons sur un bouton, il nous faut alors écrire du code dans un langage de programmation. Il en va de même pour tout ce qui se passe avec un ordinateur portable, un smartphone et tout ce dont le fonctionnement implique un ordinateur.
Il pourrait sembler qu'il existe un seul langage de programmation que les programmeurs pourraient utiliser pour écrire tous les programmes. Mais ce n'est tout simplement pas le cas. Différents langages de programmation existent pour tous les types d'applications.
Certains sont utilisés pour créer des sites Web, d'autres pour créer des applications pour ordinateur portable (comme Microsoft Word).
L'une des raisons pour lesquelles il existe de nombreux langages de programmation tient au fait que certains conviennent mieux à certaines tâches qu'à d'autres. Une autre raison est que certaines langues sont conçues pour être utilisées avec différents ordinateurs. Donc, vous ne pouvez pas toujours prendre le code écrit pour un smartphone et l'exécuter sur un ordinateur portable. Et, alors que certains programmeurs peuvent programmer dans de nombreuses langues et que beaucoup sont capables ou apprennent rapidement de nouvelles langues, tout programmeur va connaître certaines langues mieux que d’autres, et certaines pas du tout.
Les langages de programmation sont donc l’une des technologies clés qui font fonctionner les ordinateurs. Des langages de programmation bien conçus peuvent considérablement augmenter la productivité des programmeurs. Ils peuvent également améliorer la sécurité et réduire les erreurs de programmation, les bugs et les défauts.
En gros, voici ce que j’étudie: Comment différentes parties des langages de programmation affectent-elles la productivité des programmeurs? Quelles parties d’une langue en particulier le rendent mieux pour écrire du code pour un site Web? Pourquoi certaines langues sont-elles plus populaires que d'autres?
Bien qu’il puisse sembler que ces questions soient ésotériques et très éloignées de la vie quotidienne du citoyen moyen, l’inverse est vrai. L'étude des langages de programmation est essentielle pour tout produit ou service utilisant un ordinateur. Et aujourd'hui, cela signifie à peu près tout;)
la source
Votre meilleur pari peut être de former des analogies avec les langues humaines.
Les langages de programmation sont utilisés pour fournir des instructions aux ordinateurs. Les langues humaines sont utilisées pour communiquer des idées à d'autres personnes et pour aider à former nos propres pensées. L' hypothèse de Sapir-Whorf dit que le langage que vous utilisez influence votre pensée. (On discute du degré auquel l'hypothèse Sapir-Whorf est vraie, mais on peut simplement l'accepter quand on parle de langages de programmation. Autrement, vous pourriez aussi renoncer à votre doctorat.)
Il existe une grande variété de langages humains, certains avec des caractéristiques que nous considérons comme exotiques. Par exemple:
Existe-t-il une meilleure langue, objectivement? La réponse pourrait dépendre de ce que vous essayez de faire.
En fin de compte, tout ce qui se trouve sur un ordinateur est traduit en langage machine, mais choisir le bon langage pour le travail peut considérablement affecter la productivité, la fiabilité, les performances et l'agilité de votre logiciel. Nous choisissons des langages de camisole de force tels que Ada ou Java pour les projets "sérieux", et Ruby ou Perl pour un maximum de stabilité . Pour interroger une base de données, SQL est le langage habituel; écrire votre propre code C serait idiot.
Sur la base de ces analogies, je suis sûr que vous pouvez exposer des idées comme la programmation fonctionnelle, la sécurité de type, l’inférence de type, etc. pendant quelques heures.
la source
les langages informatiques se rapportent plus ou moins aux langages humains. ils utilisent des mots standards / communs / partagés. considérez qu'il existe des milliers de langues humaines, certaines disparues, d'autres actives, et que leur vocabulaire et leur usage évoluent continuellement au fil du temps. Certaines personnes créent de nouveaux mots utiles pour exprimer des concepts qui n'étaient auparavant pas exprimables. La grammaire est un autre aspect du langage informatique et du langage humain qui se chevauchent . certaines langues, par exemple l'anglais, ont une grammaire très complexe. considérez tous les temps et les règles complexes qui les régissent. les autres langues n'ont pas le même temps . une autre corrélation est avec des parties du discourscatégories, par exemple nom, verbe, adverbe, adjectif, etc., elles fonctionnent un peu comme des types dans les langages informatiques. imaginez créer de nouvelles langues avec différentes parties des catégories de discours qui n’ont pas encore été considérées, ou avec de nouvelles combinaisons de parties de la parole provenant de langues différentes, etc. Il convient donc de noter que la linguistique a un lien avec l’informatique, par exemple dans la théorie de la langue chomskienne.
les logiciels et le matériel sont souvent liés aux moteurs et aux machines et portent même le nom suivant. Il existe une vieille analogie logicielle voulant que modifier un système de production complexe 24 heures sur 24 et 7 jours sur 7 équivaut à changer les moteurs d'un avion en vol . Notez également que les réacteurs sont très complexes et impliquent des spécifications massives et précises de pièces interchangeableset ici il y a une certaine analogie avec les langages informatiques qui contrôlent le matériel. imaginez toute la complexité des documents qui décrivent exactement comment construire des réacteurs: toutes les pièces, comment elles sont construites, comment elles s’assemblent, comment elles sont assemblées, etc. ils sont créés / compilés par des ingénieurs en utilisant un format / structure / règles conventionnelles précis; le logiciel est un peu analogue à cela.
re machines, toute personne sans formation scientifique ou mathématique ou même un enfant peut comprendre le concept de base et de nombreux aspects d’une machine de Turing! une création merveilleuse. on soupçonne que Turing a été inspiré par des machines à écrire et / ou des machines de télétype. on pourrait décrire la table d'état et leur montrer un exemple de table d'état qui calcule la multiplication, et quelqu'un regarder une animation youtube d'une machine de Turing calculer un calcul de base comme une multiplication. dites-leur que la table d'état peut calculer ou décider littéralement d' une langue et que les entrées sont littéralement appelées mots . en fait, les machines de Turing acceptent les mots en languesetc. puis dites-leur qu'il existe deux tables d'état qui calculent la multiplication, mais que l'une est beaucoup plus rapide ou plus efficace que l'autre et que votre recherche implique de trouver de meilleurs concepts de table d'état. Pour construire efficacement des tables d'état, utilisez des langages de programmation qui résument le contenu de grandes tables d'état! un compilateur convertit le code écrit dans un langage de programmation en une grande table d'états.
Les algorithmes de tri sont une excellente métaphore d’entrée de gamme en informatique. on peut regarder les différentes listes d'instructions aka algorithme pour chaque sorte. on peut apprendre ce qu'est une sorte de bulle par rapport à une sorte d'insertion, on peut utiliser un jeu de cartes. Concentrez-vous maintenant sur les différents ensembles d’instructions et considérez qu’elles doivent être écrites dans un langage très précis, aussi précis que les énoncés mathématiques, dont la syntaxe est stricte , etc. et qui présente des points communs / structures de base: logique conditionnelle, boucles, variables, etc. , et expliquez que l’art de cette spécification précise concerne les langages informatiques, et que certaines langues différentes peuvent donner les mêmes algorithmes, mais qu’il existe de subtiles variations stylistiques dans ces langues qui sont étudiées très en profondeur, etc.
la source
Vous dites simplement "j'aide les gars qui enseignent l'informatique au travail"
L'idée est que les programmeurs apprennent à l'ordinateur à utiliser des programmes et que vous les aidez. Je pense que cela fonctionnera en supposant qu'ils en savent déjà un peu sur les ordinateurs.
la source
Si vous ne voulez pas utiliser de comparaisons, bien que je pense que "l'algorithme" que Lieuwe a évoqué est très agréable à transmettre l'idée, vous pourriez dire que vous voulez réduire les malentendus entre les humains et les ordinateurs. Après tout, vous avez affaire à des langues et c’est quelque chose de très fondamental pour les humains, je suppose. Alors pourquoi ne pas prétendre que l'ordinateur n'est qu'un autre esprit auquel vous voulez parler?
Les humains ont créé des ordinateurs, nous savons donc comment fonctionne leur esprit. Mais l'ordinateur ne sait généralement pas comment fonctionne notre esprit. (Ou ce que notre intention réelle était quand nous écrivons un bogue complexe et finement conçu qui vit heureusement dans les ronces de notre code pendant de nombreux cycles;)) Ainsi, il nous appartient de raffiner le langage que nous utilisons pour communiquer avec eux, et réduire les risques de malentendus. Et c'est ce que tu fais. Des analogies telles que la vérification orthographique ou la grammaire sont évidemment les bienvenues dans ce contexte.
la source
Voici deux analogies que vous pourriez trouver utiles:
Mon travail est un peu comme explorer de nouvelles approches de la notation musicale. ( exemple ) Bien que les systèmes de notation prédominants soient assez sophistiqués, il est utile d’explorer des solutions de rechange qui réduisent le temps / les efforts / les erreurs pour le compositeur, pour l’interprète ou permettent aux choses qui sont maladroites ou impossibles à exprimer dans le système prédominant, ou même simplement promouvoir différents types de pensée et conduire ainsi à de nouvelles compositions. (Il est donc facile de comprendre que l’un des défis consiste à convaincre les gens d’adopter les nouveaux éléments.)
J'aide à concevoir de meilleurs outils pour les personnes de mon secteur. Tout comme les industries manufacturières sont aidées par des innovations telles que les perceuses sans fil, les découpeuses au laser et les imprimantes 3D (qui n'existaient pas il y a 60 ans), les personnes travaillant dans l'industrie du développement logiciel bénéficient de technologies plus puissantes, plus précises, plus robustes ou plus performantes. langages de programmation plus faciles à utiliser et leurs fonctionnalités.
la source
Eh bien, très probablement, vous avez une raison pour étudier les langues - utilisez cette raison. Par exemple:
Si c'est quelque chose qui attire leur attention, n'hésitez pas à aller un peu plus loin, mais n'oubliez pas de distance inférentielle - la plupart des gens ont énormément de difficulté à expliquer quelque chose qui est trop éloigné de l'expérience et des connaissances de l'élève.
Les langues sont au bas de l'échelle informatique. Les personnes à qui vous essayez d'expliquer ne savent probablement pas ce qu'est un algorithme , encore moins qu'il existe différentes manières de représenter ledit algorithme qui sont plus ou moins utiles. Vous pouvez tout expliquer si vous y allez assez doucement, mais préparez-vous à passer par plusieurs couches si vous voulez expliquer quelque chose d'aussi "profond" que de "langage de programmation RnD". Cela aide si les personnes que vous expliquez maîtrisent déjà bien les mathématiques, mais c'est aussi rare que des connaissances en informatique :)
Allez-y doucement sur les analogies. On dirait qu'ils aident, mais d'après mon expérience, ils ajoutent généralement à la confusion, même si vous pensez qu'ils sont d'une grande aide. Les langages de programmation sont un peu comme les juristes parlent ... mais ce n'est pas très utile pour les personnes qui ne comprennent pas déjà la programmation et les avocats, vraiment. Si vous avez vraiment besoin d'aide supplémentaire, les exemples fonctionnent assez bien - mais vous devez les adapter à la personne à qui vous expliquez (et sur quoi vous cherchez exactement)
la source
Je trouve que les meilleures analogies sont adaptées à la personne à qui vous parlez. Sont-ils un peintre? Expliquez que ce que vous faites équivaut à explorer la théorie de la fabrication de meilleurs pinceaux. Ce domaine n’a que 60 ans au lieu de 600! Les cavaliers? Comparez-le au développement de souliers spécifiques aux tâches au fil des ans.
S'ils veulent vraiment mieux comprendre, ma façon préférée de l'expliquer consiste à parler de la façon de remplir des formulaires d'impôt et des instructions sur chaque ligne. Je trouve que la plupart des personnes de plus de 20 ans ont déjà utilisé le formulaire IRS 1040 et que les cases que vous remplissez correspondent bien à une assignation de variables. Ensuite, je signale que le logiciel en fait l'équivalent d'environ 2 milliards par minute (un chiffre composé, mais il fait passer le message). Si vous étudiez les langages informatiques, il est facile pour les gens de comprendre pourquoi de meilleures instructions seraient réellement importantes =)
S'ils semblent toujours intéressés, c'est à peu près au point où je commence à essayer d'expliquer le contrôle de flux. Habituellement, lorsque je finis de parler du contrôle de flux relatif au formulaire 1040, ils commencent à être très excités et commencent à demander si j'ai déjà vendu certaines de mes idées au gouvernement!
Je parle souvent de systèmes embarqués, alors parfois, je fusionne l'analogie de la formule 1040 avec un robot qui cuit un pain (ou 500). Habituellement, cela fonctionne bien, bien que pour une raison quelconque, allant des formulaires fiscaux de l’IRS à la création de quelque chose qui laisse un goût agréable dans la bouche, ce soit un exercice vraiment difficile pour certaines personnes.
la source
Tes parents ont une sorte d'ordinateur. Probablement pas un, mais plusieurs. Ils peuvent avoir un ordinateur de bureau ou un ordinateur portable, un téléphone ou un iPad. Sinon, ils ont une machine à laver, un enregistrement vidéo, un lecteur de DVD ou quelque chose avec un ordinateur à l'intérieur.
Sinon, vous dites: "Désolé, mais vous avez réussi à mener une vie complètement sans ordinateur. Je ne peux donc pas vous expliquer ce que je fais. Mais le monde change. Vous avez juste besoin de me croire Je sais ce que je fais. "
S'ils ont un type d'ordinateur, vous dites: "Ceci est un ordinateur, et cela ne fonctionne pas simplement par magie. Cela fonctionne parce qu'un homme ou une femme intelligent a écrit un programme qui indique à votre ordinateur comment travailler. Et le travail de ces hommes et ces femmes intelligents sont très durs et ce que je fais, c'est les aider à rendre le travail plus facile ".
la source
Il y a quelque temps, j'ai décidé qu'une bonne analogie pour une programmation facile à comprendre pour les personnes peu ou pas expérimentées en informatique consisterait à écrire des recettes à tricoter .
Une bonne recette de tricotage contient plusieurs tailles dans la même liste d'instructions, qui vous donnent des boucles et des instructions if. Il est illisible pour ceux qui ne tricotent pas et, s’il contient des erreurs, vous vous retrouvez avec des motifs mal alignés ou une manche supplémentaire. En tant qu’écrivain de recettes, c’est ensuite à vous de déterminer où la recette a été erronée en vous basant sur les chandails incorrects et de le réparer.
Vous pouvez ensuite utiliser l'exemple de "Je regarde en quoi les recettes sont différentes pour le tricot, le crochet, le Nålebinding et autres" et pour apprendre à utiliser X (où vous devez trouver une analogie pour ce que vous faites réellement ).
la source
C'est magique!
Quand des personnes sans formation technique me demandent ce que cela signifie d’écrire des logiciels / programmes / faire de l’ingénierie logicielle, je leur dis simplement ce que c’est vraiment: de la magie. Les magiciens incarnent des sorts dans une langue ésotérique pour effectuer certaines tâches, ils agitent leur baguette et quelque chose de magique se produit. J'introduis certains sorts dans une langue ésotérique, je bouge la souris et il se passe quelque chose de magique (en ce qui les concerne).
S'ils ne sont pas convaincus, je leur ai demandé d'allumer leur téléphone intelligent et de me dire comment ça marche vraiment. Ils disent habituellement: "Je ne sais pas, c'est le cas. J'appuie sur des boutons et tout se passe." Puis je leur dis: "Oui, exactement, mais je sais ce qui se passe réellement, et c'est fondamentalement la même chose qu'Harry Potter agitant sa baguette et disant:" Hocus pocus "" Pour toutes fins utiles, au profane, je pense que c'est une explication parfaitement légitime.
Presque tout le monde sait qui est Harry Potter, ce qu'il fait et ce qui le rend spécial (au moins, il est magicien et peut faire des choses puissantes avec la magie). Vous pouvez simplement expliquer que parfois les magiciens doivent écrire leurs sorts dans une nouvelle langue pour rendre leur magie encore plus puissante, ce qui n’est pas si éloigné de la vérité. Vous pouvez simplement leur dire que vous étudiez le processus de création de cahiers plus puissants pour aider une génération encore plus puissante d'assistants capables de créer encore plus de magie sur leurs appareils grand public préférés. Tout le monde apprécie ça.
Epic Fail
Si cela échoue, je reviens à l'exemple de recette, car la non-uniformité des solutions enseigne au moins qu'il existe plus d'une façon de peauner un chat (ou de faire un gâteau), et cela fait partie de la programmation. rusé. Cela permet également de placer la personne dans la position de processeur et de suivre parfois des instructions qu’elle ne comprend peut-être pas (la plupart des gens ne connaissent probablement pas la différence entre le bicarbonate de soude et la levure chimique, et pourquoi une recette aurait l’une ou l’autre).
Impasses
Je n'aime pas utiliser les mathématiques comme exemple, car pour faire des mathématiques, il faut comprendre à quoi servent les étapes. Vous ne pouvez pas faire beaucoup de maths en suivant aveuglément les instructions (bon, vous pouvez, mais ce n'est pas comme ça que les humains l'apprennent, généralement). Je n'aime pas le tri comme exemple car il est trop technique pour que le non-initié l'apprécie. Si je parle à quelqu'un qui peut apprécier l'exemple de tri, il a probablement déjà une idée de la programmation et l'a probablement essayé lui-même.
la source