Un de mes amis m'a demandé l'autre jour si je me contentais de consulter les listes de chiffres lors de la programmation ou comment cela fonctionnait. J'ai essayé d'expliquer que c'était généralement plus comme une formule mathématique, avec un mot anglais étrange jeté, et que c'était généralement plus lisible. Mais c'est une explication très vague qui n'explique pas beaucoup pour un non-programmeur.
Mais cela m'a amené à réfléchir à ce qui ferait un bon exemple. Non pas parce que je veux lui apprendre la programmation ou autre chose, mais simplement pour lui donner une idée du code de programme "qui ressemble".
Et cela m'a amené à me demander ce qui fonctionnerait réellement comme bon exemple. Et cela s'avère étonnamment difficile.
Ma première pensée était évidemment un simple programme "Hello World". Mais cela ne montre vraiment rien d’utile. Cela ne montre pas vraiment comment nous utilisons les fonctions, les variables, ou les structures de flux de contrôle telles que if
ou while
pour créer un programme qui en fait fait quelque chose. Il n'y a pas de logique à cela. Le programme ne réagit à rien.
Donc, peut-être que quelque chose comme le calcul des nombres premiers serait un meilleur exemple. Mais là encore, cela pourrait être trop théorique et peu pratique ... (à quoi ça sert? Qu'est-ce que cela a à voir avec l'écriture de "vrais" programmes?) Et là encore, il n'y a pas de logique de flux de contrôle significative. C'est juste une suite de maths.
Et aussi, quelle langue devrait être utilisée?
Idéalement, je ne pense pas que ce soit une langue très "propre". Mais plutôt, cela devrait probablement rendre la structure claire. Si tel est le cas, une certaine quantité de bruit et d’encombrement peut suffire. Peut-être que quelque chose comme C++ serait en fait un meilleur exemple que Python pour cette raison. Les accolades explicites et les spécificateurs de type sont des "crochets" évidents pour aider à expliquer la structure du programme ou pour souligner qu'il ne s'agit pas de simplement simples énoncés pouvant presque être lus en anglais.
Mais avec C++, nous entrons aussi dans une syntaxe carrément étrange. Pourquoi std::cout << x
est-il utilisé pour imprimer x? Pourquoi pas une syntaxe d'appel "normal"? Et printf
n'est pas beaucoup mieux, avec sa chaîne de format arcane et son manque d'extensibilité (est-ce que je veux compliquer le programme en utilisant char*
pour des chaînes? Ou dois-je utiliser std::string
et me contenter d'appeler la s.c_str()
apparemment inutile pour obtenir une chaîne peut être imprimé avec printf
?
Peut-être qu'un langage de niveau supérieur serait meilleur après tout. Mais lequel? Et pourquoi?
Je sais qu'il y a beaucoup de questions similaires ici sur le programme de langue/exemple à utiliser pour enseigner la programmation. Mais je pense que les exigences ici sont différentes. En enseignant la programmation, nous voulons la simplicité plus que tout. Nous voulons éviter tout ce qui n'a pas encore été enseigné. Nous voulons nous assurer que l'étudiant peut comprendre tout à l'écran.
Je ne m'intéresse pas à la simplicité en soi. Mais plutôt en donnant à un "étranger" une idée de "à quoi ressemble un programme". Et les programmes ne sont pas simples. Mais ils ne présentent généralement une certaine structure et méthode à la folie. Quelle langue/quel programme mettrait en avant cela?
Modifier
Merci pour toutes les suggestions faites jusqu'à présent. Certains d'entre vous ont eu un angle quelque peu différent de celui que j'avais prévu.
Peut-être un exemple est en ordre. Je ne peux pas piloter un avion, mais j'ai une connaissance de base de ce à quoi ressemble le cockpit et de ce qu'un pilote "fait" en vol.
Et je ne suis pas un menuisier qualifié, mais je connais une scie ou un marteau quand j'en vois une.
Mais quand vous voyez quelque chose à voir avec la programmation dans les films, par exemple, ce ne sont généralement que des écrans remplis de déchets (comme dans le texte vert dans Matrix). Il ne semble pas que quelque chose qu'un être humain normal puisse réellement faire. Il n'y a rien de reconnaissable dedans. Quelqu'un qui n'est pas un programmeur pense simplement que c'est de la magie noire.
Je ne veux pas lui apprendre à voler ou à programmer un logiciel… Mais j'aimerais lui donner un cadre de référence de base. Juste une idée de "ah, alors c'est avec ça que vous travaillez. Donc, ce ne sont pas que des symboles et des nombres aléatoires à l'écran". Le simple fait d'afficher une simple expression if
- serait une révélation par rapport aux symboles et nombres aléatoires de style Matrix.
Certains d'entre vous ont suggéré d'expliquer un algorithme ou d'utiliser un pseudocode, mais c'est ce que je veux éviter. J'aimerais quelque chose qui montre simplement à quoi ressemble le code réel, de la même manière qu'il n'est pas nécessaire d'être charpentier pour regarder une scie et avoir une idée de base de ce que c'est et de son fonctionnement .
Quand j'étais enfant, nous sommes allés en vacances en Italie. En descendant, le pilote m'a laissé entrer dans le cockpit de l'avion. Bien sûr, je n'ai pas appris à piloter l'avion. Mais j'ai eu un aperçu du monde du pilote. J'ai une idée de la façon dont l'avion part, de ce que fait le pilote.C'est vraiment tout ce que je veux faire. Mon amie n'a aucun intérêt à apprendre la programmation et je ne veux pas la forcer à comprendre le code source. Mais elle était curieuse de savoir quel type d’outils ou d’entités je travaillais. S'agit-il de symboles de style matriciel défilant à l'écran? Des mathématiques pures? L'anglais sous forme de prose?.
Tout ce qui m'intéresse, c'est de comprendre à très haut niveau "à quoi ça ressemble quand je travaille".
All I'm interested in conveying is that very high-level understanding of "What does it look like when I work".
Pour répondre directement à votre question - à quoi ressemble la programmation , je leur montrerais un imprimé d’une application volumineuse. Des applications pour jouets ou des choses mignonnes comme qsort dans haskell donnent vraiment une mauvaise idée.
DE BASE
10 PRINT "Sara is the best"
20 GOTO 10
Mise à jour: quand j'avais 12 ans, mon cousin (il avait 14 ans) a amené Turbo Pascal 7.0 et l'a installé sur mon ordinateur.
Il a programmé un jeu de tic tac toe à partir de zéro (en mode BGI, pour ceux qui connaissent).
J'ai observé/observé, étape par étape, l'évolution d'un programme jusqu'à ce qu'il devienne une application complète.
Jusque-là, je savais seulement comment imprimer des chaînes en BASIC: -B
Vous pouvez faire la même chose. Programmation en binôme. En fait, votre amie sera un observateur, mais elle aura une idée;)
Pourquoi ne pas envisager un langage qui n'existe pas (ou existe, si vous le croyez) et utiliser Pseudo Code ? Je pense que, en fonction de ce que vous voulez réaliser - je prendrais l’exemple d’une tâche familière à la personne, mais qui est scindée en un exemple de pseudo-code.
Je trouve généralement que l'idée de «cuisiner» ou de «recettes» convient parfaitement pour expliquer des choses à des non-programmeurs.
Je demande à la personne d'imaginer qu'elle avait une recette assez complexe - par exemple. un plat de curry et de riz. Je suggère alors qu'ils devraient essayer de l'écrire pour quelqu'un qui n'a absolument aucune idée de ce qu'ils font pour qu'ils puissent le cuisiner.
Il y a un très petit nombre d'étapes impliquées:
Je suis sûr que vous pouvez voir où cela se passe ...;)
Il y a beaucoup de similitudes avec la cuisine et la programmation (comme il y en a beaucoup, mais il y a plus de gens qui comprennent la cuisine que de construire une maison) . Les étapes/similitudes (à mon sens) sont les suivantes:
Fondamentalement, je pense que pour enseigner la programmation en tant que sujet général - je n’enseignerais pas nécessairement à partir d’une langue sauf si vous aviez une raison impérieuse de le faire}. Au lieu de cela, enseignez d'abord de l'abstraction jusqu'à ce qu'ils comprennent au moins les principes fondamentaux de la façon dont les choses pourraient tomber ensemble. Ensuite, ils trouveront peut-être que c'est plus facile lorsqu'ils sont assis devant un moniteur et un clavier.
Je pense qu'il peut ne pas y avoir une "bonne réponse" pour celui-ci. Mais je pense que peut-être quelques très bonnes idées pourraient vous être utiles.
Je voudrais expliquer que la programmation donne des instructions détaillées pour que l'ordinateur puisse effectuer des tâches complexes.
Comment faire deux tasses de café?
Faire bouillir l'eau
Café dans une tasse
Ajouter du lait
Faites encore 3 à 6
Ça ressemble un peu à ça. Parfois.
Peut-être que tout le monde se concentre trop sur le code plutôt que sur les outils. Il est peut-être préférable de lui montrer un projet dans un environnement de développement intégré (IDE) et comment il inclut divers fichiers source et peut-être des éléments schématiques, comme un schéma de base de données ou un concepteur d'interface utilisateur visuelle. Visual Studio, Eclipse ou Xcode sont assez éloignés de l'image mentale de la plupart des gens: des symboles verts lumineux défilant rapidement sur un fond noir.
Je pense que vous devriez télécharger une grosse application win32, écrite en langage d'assemblage AT & T, et la lui montrer dans le bloc-notes, et lui dire: "Comme vous pouvez le constater, il faut un surhumain comme moi pour programmer."
Codez quelque chose qui a une valeur compréhensible pour un non-programmeur. Si je démontrais Quicksort à ma mère, cela ne serait d'aucune utilité.
Demandez à la personne de ses intérêts. Si, par exemple, il est boursier, combinez un script qui lit des statistiques boursières sur une page Web appropriée et les compile dans une feuille Excel (utilisez CSV, pour éviter des dommages cérébraux importants ^^) ou peut-être dans un graphique de Nice .
Si la personne utilise Twitter, codez quelque chose qui compte les suiveurs de ses suiveurs ou quelque chose comme ça.
Ces tâches sont assez simples pour être exécutées très rapidement et utilisent déjà bon nombre des outils de base utilisés par les programmeurs, tels que les boucles, les bibliothèques (pour tous les éléments http impliqués), voire la récursion.
Une fois que vous avez terminé ou pendant que vous codez (encore mieux), vous pouvez expliquer comment votre programme fonctionne comme par magie.
Restez simple et parlez en langage humain. Si vous leur montrez des mégaoctets de code et que vous parlez de choses comme l'héritage prototype, vous les intimidez et ils perdront tout intérêt immédiatement.
Pour donner à ma femme une idée de ce que je fais pour rapporter un chèque de paie (c'est du vrai travail! Promis! Nous ne naviguons pas simplement sur le Web toute la journée!). les concepts de base: appeler une fonction (print), assigner et lire une variable et comment une instruction if fonctionne. Comme elle est enseignante, j'ai comparé le concept de conditionnels au travail avec des enfants d'âge préscolaire :)
IF you hit Jonny THEN you're in time out OTHERWISE you can have a snack.
Après avoir passé en revue quelques concepts de très haut niveau, je lui ai ensuite montré le code à un simple jeu de devinettes et je l'ai laissée la jouer tout en regardant à travers le code.
# Guessing Game
import random
print("Guess a number between 1 and 100: ")
target = random.randint(1, 100)
guess = 0
guess_count = 1
while guess != target:
guess_count += 1
guess = int(input())
if guess == target:
print("Correct!")
if guess < target:
print("Higher...")
if guess > target:
print("Lower...")
print("Congratulations! You guessed the number in " + str(guess_count) + " guesses!")
Mis à part le concept quelque peu abstrait d '"importation", il s'agit d'un exemple très simple, facile à suivre et à "connecter" à ce qui se passe à l'écran, sans parler du fait qu'il fait quelque chose d'intéressant et d'interactif. Je pense que ma femme a quitté l'expérience un peu moins mystifiée par l'ensemble du concept sans vraiment avoir besoin de connaître beaucoup de code.
Je pense que la clé est que quelqu'un puisse voir le code ET que le résultat final soit côte à côte.
Ensuite:
http://markharrison.net/stackoverflow/univac-1110-500-unisys.jpg
À présent:
http://markharrison.net/stackoverflow/codemonkey.png
Il y avait un package graphique CLI appelé LOGO , et plus connu pour Turtle Graphics , utilisé pour dessiner des formes à l'écran à l'aide de commandes telles que LT 90, RT 105
, etc. expérience pour essayer de dessiner quelque chose de complexité moyenne.
LOGO - Langage de programmation orienté graphique orienté logique.
REPEAT 360 [FD 1 RT 1] -- draws a circle, etc.
Voir plus à logothings ou Wikipedia qui contient également des liens vers des interprètes de logos modernes.
Quand mes 5 ans. Ma fille m'a posé la question que je lui avais fait «développer» le programme d'un petit robot «flèche» qui le placerait dans le coin supérieur gauche du tableau en utilisant des morceaux de papier ressemblant à un organigramme, indiquant les déplacements, les virages et les conditions. Je pense que cela s'applique aussi aux adultes.
Je ne revendique pas l'invention de cette réponse, cependant.
À propos de votre edit : J'ai peur que les programmeurs aient encore moins idée de l’idée que les autres ont de la programmation. ;-) Les gens pensent que la programmation est une corruption de carte vidéo verte presque autant que les espions sont équipés des jouets high tech de James Bond. Et tout professionnel de tous les domaines est normalement irrité en regardant le film concernant son travail. Parce que le cinéaste n'en a aucune idée! Savons-nous comment représenter correctement la programmation dans le film en revanche? ;-)
J'ai trouvé que la meilleure approche pour "enseigner à quelqu'un ce que la programmation est sans lui apprendre la programmation" est en fait de simplement supprimer tout ce qui est lié à un langage de programmation spécifique.
Au lieu de cela (en supposant qu'ils soient réellement intéressés), je leur expliquerais comment implémenter une fonction dans un programme, comme une simple demande de prêt bancaire (la plupart des gens ont eu à traiter un prêt à un moment donné, s'ils dépassaient un certain âge) , puis percer des trous dans toutes les hypothèses.
Par exemple, que devrait-il se passer si l'utilisateur saisit un montant de prêt négatif? Et si l'utilisateur ne peut pas se permettre le prêt? Comment la demande de prêt pourrait-elle savoir cela? Comment la demande de prêt pourrait-elle savoir quel compte bancaire vérifier et quel historique de paiement vérifier (c'est-à-dire qui est l'utilisateur en réalité)? Que se passe-t-il si l'utilisateur tente de saisir son nom dans le champ du montant du prêt? Que se passe-t-il si l'utilisateur tente de contracter un emprunt sur 75 ans? Faut-il limiter les choix à une liste de longueurs disponibles?
Et à la fin, la programmation prend toutes ces règles et les écrit dans un langage que l’ordinateur comprend, de sorte qu’il les respecte à la lettre. À ce stade, si cela est jugé nécessaire, je sortirais un code simple afin de pouvoir examiner le langage en général, puis éventuellement d’écrire l’une des règles dans ce langage.
Des points bonus si vous pouvez faire réagir votre ami avec: Mais si on oublie quelque chose? Eh bien, alors nous avons des bugs, et maintenant vous savez pourquoi aucun logiciel n’est bugfree aussi :)
À quoi ça ressemble quand tu travailles?
Cela ressemble à taper.
Sérieusement, la programmation est un peu comme si Legos était un texte, et pour construire une grande maison Lego, il fallait taper beaucoup de texte, juste bien, en connectant les bonnes chevilles aux bons trous. C'est ainsi que je le décris généralement.
Définitivement quelque chose avec des graphiques, ou des fenêtres, dans un langage de niveau supérieur.
Pourquoi? Un non-programmeur est aussi généralement un non-mathématicien, c'est pourquoi il n'obtiendra pas la beauté du tri. Cependant, montrer quelque chose dessiné sur un écran ("regarde, une fenêtre!", "Regarde, si peu de frappe et nous avons une boîte 3D en rotation!") Peut faire des miracles;).
Il est vraiment difficile de comprendre à quoi ressemble la programmation à partir d’un exemple de code source, car elle est très abstraite.
Il n'y a rien de mal à démarrer sur hello world, tant que vous pouvez montrer ce que l'ordinateur fait réellement avec. Vous pouvez ensuite introduire une construction à la fois. C'est ce que la programmation ressemble à: faire des changements incrémentiels et voir les résultats.
Donc, vous avez un programme Bonjour tout le monde. Maintenant changez le en
string Name = getLine();
printf("Hello, %s", name);
alors la construction si
printf("Do you like cake?");
string answer = getLine();
if(answer==="yes") {
printf("Yeay! I like cake too!");
}
if(answer==="no") {
printf("Filthy cake hating pig!");
}
démontrez ensuite que le dernier programme échoue lorsqu'il reçoit une réponse autre que "oui" ou "non", et comment vous y prendre pour le corriger ....
etc. Je ne pense pas que vous deviez approfondir des concepts tels que la récursion ou même les fonctions.
Peu importe la programmation que vous utilisez pour cela, tant que vous êtes capable de montrer sur un ordinateur le résultat de ces différents programmes. (bien que ces exemples psuedocode soient probablement proches de la validité de python)
Je pense que la robotique est très utile pour expliquer la programmation, car même des exemples simples et artificiels sont pratiques. L’équivalent robotique de Hello World ou l’impression d’une liste de nombres peut consister à faire bouger le robot dans une ligne ou à tourner dans un cercle. Il est facile pour un non-programmeur de comprendre que pour qu'un robot fasse TOUT utile, il doit d'abord se déplacer et se positionner. Cela vous permet d'expliquer la structure simple du programme et le contrôle de flux.
Vous voulez que le robot avance, mais seulement tant que rien ne bloque son chemin. Ensuite, vous voulez qu'il tourne et bouge à nouveau. C'est une routine simple qui utilise le contrôle de flux de base, et les fonctions que vous appelez sont assez faciles à comprendre (si votre plate-forme a tout de même des abstractions décentes).
Les graphiques pourraient aussi fonctionner. Tout ce qui a immédiat résultats. jQuery même, car tout le monde est familier avec la rotation des images et des animations Web. Même des exemples artificiels, tels que l'insertion d'éléments dans le DOM, ont un effet visible, et la plupart des gens comprendront ce que les énoncés du programme font et pourquoi.
Des choses comme Robocode et LOGO sont probablement très utiles pour cela.
{
wait for 6/8;
play F (5), sustain it for 1/4 and a half;
play E flat (5), sustain it for 1/8;
play D flat (5), sustain it for 1/8 and a half;
play F (4), sustain it for 1/16;
// ...
}
Peut-être une métaphore pourrait-elle être celle d'un compositeur écrivant une partition. Le métier de compositeur est l’activité intellectuelle de créer de la musique. Avec une partition, le compositeur dit au pianiste ce qu’il doit jouer, et il le fait au moyen d’instructions précises (notes, pauses, etc.). Si les "instructions" ne sont pas assez précises, le pianiste jouera quelque chose de différent.
Le travail d'un développeur de logiciel est l'activité intellectuelle de résolution de problèmes (problèmes liés au traitement automatisé de données). Avec code source, le développeur dit au ordinateur quoi faire, et il le fait au moyen d'instructions précises. Si les instructions ne sont pas assez précises, l'ordinateur fera quelque chose de différent et ne résoudra pas le problème correctement.
Je voudrais juste écrire quelque chose en pseudo-code qui montre comment utiliser un ordinateur pour résoudre un problème quotidien. Peut-être déterminer quel magasin coûte le moins cher pour acheter une liste d'épicerie particulière ou similaire.
Pourquoi ne pas simplement montrer la vidéo timelapse Une journée dans la vie d’une équipe Scrum ?
Voulez-vous lui montrer à quoi ressemble la programmation? Il suffit d'ouvrir un terminal et
find /
Un programmeur écrit les instructions à exécuter par l'ordinateur.
En exécutant le programme, l’ordinateur suit ces instructions.
Par exemple, un cuisinier suivra une recette afin de cuire une miche de pain. (même si c'est dans leur tête) ... c'est de la programmation. Contrairement à ma femme, l'ordinateur suit la recette exactement à chaque fois. Ma femme le fait dans sa tête et il s'avère différent mais délicieux à chaque fois ;-)
Si vous voulez aller de l'avant et enseigner cela plus en détail, le pseudo-code est facile à comprendre.
par exemple.
IF today's date is the 1st of may then
print to screen "Happy Birthday"
ELSE
print to screen "It's not your birthday yet"
La beauté du code psuedo est que presque tout le monde peut le comprendre et c’est là le but.
Je dirais soit de faire un algorithme standard en psuedocode (n'importe quel algorithme de tri n ^ 2 devrait suffire. J'aime le tri par sélection.) Ou de les indiquer à http://99-bottles-of-beer.net/
là encore, j'aime juste diriger les gens vers 99-bottles-of-beer.net B-)
Je dis lui montrer genre de bulle.
C'est un truc facile et compréhensible, converti en langage formel.
C'est notre travail. Exprimer nos idées dans un langage formel strict, tel que même une machine puisse comprendre. Un peu similaire à la conception de procédures pour la conception organisationnelle.
Codez rapidement quelque chose qui lit les cours des actions et les écrit sur une feuille de calcul Excel. Cela est assez facile à faire en quelques minutes et impressionne très rapidement les types non techniques car ils en voient la valeur pratique.
Alice qui a été développé à Carnegie Mellon.
Alice est un environnement de programmation 3D innovant qui facilite la création d'une animation pour raconter une histoire, jouer à un jeu interactif ou une vidéo à partager sur le Web. Alice est un outil pédagogique pour l'initiation à l'informatique. Il utilise des graphiques 3D et une interface glisser-déposer pour faciliter une première expérience de programmation plus attrayante et moins frustrante.
J'aime motiver la programmation d'introduction avec le "problème des vestiaires" (par exemple, 100 vestiaires, initialement fermés. La personne 2 entre et ouvre tous les numéros pairs, la personne 3 entre et modifie le statut d'ouverture à fermé et vice versa les casiers dont les numéros sont divisibles par 3, la personne 4 entre et ceux-ci pour les casiers dont les numéros sont des multiples de 4, etc., jusqu’à ce que la personne 100 entre). La question est, quels casiers restent fermés? Bien sûr, il existe une solution élémentaire en mathématiques à ce problème (seuls les carrés parfaits restent ouverts), mais je pense que c'est un bon exercice pour la programmation d'intro.
Mon choix habituel est de récupérer un ensemble d’enregistrements client dans une base de données. En utilisant C # et LINQ dans Visual Studio, il faut peut-être au plus 10 minutes pour créer une page Web et vider les clients de la base de données "Northwind" dans une grille. La bonne chose est qu'une "liste de clients" est quelque chose que presque tout le monde peut comprendre.
En pseudo-code:
function dealWithPerson(person){
if(ILike(person)){
getCookie().giveTo(person);
}
else{
person.tell("You shall receive no cookies!");
}
}
dealWithPerson(Person.fromName("Nick"));
dealWithPerson(Person.fromName("John"));
Cela démontre le concept de fonctions, l'orientation d'objet et les chaînes, dans une syntaxe de type C (quand je dis syntaxe de type C, je me réfère aux caractères étranges).
Il montre également comment le code peut être réutilisé . Notez que, bien qu'il s'agisse d'un pseudo-code, je ne serais pas surpris qu'il y ait un langage qui accepte cette syntaxe (JavaScript le permet peut-être?).
Vous pouvez également adapter cet exemple aux boucles . En espérant que cela aide à montrer à cette personne à quoi ressemble un programme (puisqu'il s'agit d'une syntaxe réaliste et relativement facile à comprendre).
Tout dépend du niveau de son intérêt (ou de votre intérêt pour her ). La plupart des gens posent cette question comme une conversation oisive et ne veulent pas vraiment savoir.
La programmation est plus que des algorithmes (comme "Comment faire une tasse de café), elle est aussi fondamentalement enracinée dans les mathématiques. La plupart des gens seront vite déroutés par l'utilisation subtile de termes mathématiques (qu'est-ce qu'une" fonction "?).
Pour réellement enseigner la programmation, il peut être utile de repenser à vos propres expériences de programmation, à votre premier professeur de programmation, à votre premier langage de programmation. Comment as tu appris? quand vous appreniez, quelles compétences aviez-vous déjà fraîches dans votre esprit (c.-à-d. calcul)? Qu'est-ce qui vous a motivé à vouloir comprendre ce qu'est une variable ou pourquoi il existe trois types de boucles différents?
Langage: utilisez quelque chose comme python. Vraiment de haut niveau, sans crochet, probablement mieux.
Surpris, cela reste ouvert, et surpris, personne n’a déjà donné cette réponse. (Je pense. J'ai peut-être oublié une des 40 questions que personne ne lira de toute façon.)
Votre réponse est dans votre question
Quand j'étais enfant, nous sommes allés en vacances en Italie. En descendant, le pilote m'a laissé dans le cockpit de l'avion. Bien sûr, je n'ai pas apprendre à piloter l'avion. Mais j’ai jeté un coup d’œil dans le pilote monde. J'ai une idée de la façon dont ils font voler l'avion, de ce que le pilote fait réellement.
C'est vraiment tout ce que je veux faire.
C'est tout ce que vous avez à faire. Choisissez un court exercice sur un tutoriel . Une interface graphique légèrement plus longue pourrait également être bénéfique en raison des éléments visuels ajoutés. (Les jeux risquent de pousser un peu plus loin.) Et laissez-la vous regarder coder. C'est tout. C'est la même chose que votre exemple pilote.
De plus, il y a un certain nombre de REPL en ligne qui rendra l'observation du code encore plus immédiate.
Jalf,
Ce qui fonctionne habituellement le mieux, c’est montrer quelque chose que la personne connaît déjà.
Sélectionner un fichier et l’imprimer est quelque chose de très familier à la plupart des gens.
Ainsi, vous pouvez montrer un petit morceau de code qui demande un fichier .__ et faire quelque chose avec. Cela peut être très court et montrer quand même comment un programme est construit.
Un morceau de code comme celui-ci montrera:
J'enseigne la programmation depuis de nombreuses années et j'ai découvert que le nombre de façons dont vous avez besoin d'expliquer est égal au nombre d'étudiants que vous avez. Mais une méthode qui fonctionne la plupart du temps est la suivante:
Tout code est simplement un raccourci pour le langage naturel. Écrit en anglais complet, la plupart des programmes semblent triviaux.
Quant à un bon algorithme, c'est une autre histoire. Il est regrettable de constater que de nombreux cours d’informatique n’enseignent plus les algorithmes et ne s’y adonnent pas.
Je considérerais Greenfoot . Bien que l’apprentissage de la programmation soit destiné aux enfants, les graphiques aideraient probablement le lecteur à associer le code à des "actions". Voici un article sur Greenfoot par un de mes collègues.
Je vote pour quicksort, qui est plus élégant que le type à bulles et plus facile à comprendre
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
Affichez les bases de R , il est plus facile à comprendre que C, a de nombreuses fonctions intégrées telles que mean ou sqrt, et au moins le signe d'assigment de R est "<-"
Citation Steven C. McConnell , extrait de son excellent livreCode Complete, au chapitre 2, il parle de métaphores du logiciel
Une abondance déroutante de métaphores s'est développée autour du développement de logiciels.
- Fred Brooks dit que les logiciels d'écriture sont comme l'agriculture, la chasse au loup-garou ou la noyade de dinosaures dans une fosse de goudron (1995).
- David Gries dit que c’est une science (1981).
- Donald Knuth dit que c’est un art (1998).
- Watts Humphrey dit que c’est un processus (1989).
- P.J. Plauger et Kent Beck disent que c’est comme conduire une voiture (Plauger 1993, Beck 2000).
- Alistair Cockburn dit que c’est un jeu (2001).
- Eric Raymond dit que c’est comme un bazar (2000).
- Paul Heckel dit que c’est comme filmer Snow White et les sept nains (1994).
Je guiderais une personne dans une fonction relativement simple, comportant moins de dix lignes de code. Ne vous concentrez pas trop sur la syntaxe; concentrez-vous sur ce qu'il est censé faire et sur les étapes à suivre pour le faire. Également toucher un peu sur certains des compromis faits (vitesse vs espace, pour vérifier les erreurs ou ne pas vérifier, etc.).
Puis expliquez que ce que vous avez montré représente 0,01% de l’ensemble du programme. Et expliquez que 90% de votre temps n'est pas consacré à la rédaction, mais à la lecture et à la compréhension de la raison pour laquelle cela ne fonctionne pas.
Ma femme ne sait absolument rien de la programmation et des ordinateurs. Mais elle a bien compris lorsque j’explique que les ordinateurs sont absolument sans cervelle et ne font que suivre instructions . Vous pouvez définir et contrôler ces instructions avec un langage de programmation. En gros, vous dites à un ordinateur quoi faire avec un langage de programmation; c'est le langage qu'un ordinateur (in) comprend directement.
Cela peut être une longue histoire, mais un bon exemple de démonstration est une calculatrice telle que calc.exe
(ou le programme que votre système d'exploitation utilise). Chaque programmeur devrait pouvoir expliquer dans un langage facile à comprendre ce qu'il fait "sous le capot" (en indiquant à l'ordinateur qu'il doit écouter et se rappeler quels boutons sont enfoncés et que faire avec ces valeurs). Vous pouvez également essayer de le démontrer également dans votre propre langue, qui devrait également être assez facile à comprendre. Au moins, cela a aidé ma femme (je suppose;)).
J'ai fait cette tâche une tonne de fois. La réponse est simple et c'est ce que vous faites avec les enfants. Jouer à un jeu
Il y a probablement beaucoup de jeux auxquels vous pourriez jouer mais le meilleur que j'ai rencontré est "Devinez le nombre". Vous jouez au jeu et ils le comprennent. Ensuite, vous leur dites qu'ils viennent de faire une chose appelée recherche binaire et que cela résout beaucoup de problèmes. Ensuite, leur montre du code C ou BASIC pour cette fonction. La structure est assez simple pour que puisqu'ils comprennent fondamentalement l'algorithme, ils peuvent presque lire le code. (Si c'est 100% grec, peut avoir des problèmes de style de codage.)
C est probablement mieux pour la structure globale. Si vous pouvez insérer des gotos dans le BASIC, c'est parfait. Les sauts sont vraiment au cœur de la programmation, et être capable de les voir dans le code est incroyable pour la compréhension. Assembly est trop encombré de syntaxe obscure pour les non-initiés. Et les langages C et de haut niveau cachent les sauts le plus souvent à l’intérieur de différents types de constructions.
Mieux encore, il serait peut-être bon de lancer l'impression pour BASIC, C et LISP et de leur dire qu'il s'agit de langues différentes qui essaient de dire le même chose de différentes façons, et que les vrais programmeurs pensent à beaucoup de choses de différentes manières. Et si courir pour faire une impression est trop intimidant pour une simple explication, il suffit alors de créer une carte de visite des impressions et de la conserver dans votre portefeuille. Ils devraient facilement tenir sur une carte si vous supprimez les commentaires.