Vocabulaire approprié pour aider les programmeurs débutants

9

Je me retrouve à aider des programmeurs débutants relativement souvent; expliquer pourquoi leur code ne fonctionnera pas quand ils le demandent, suggérer des solutions, etc. Les gens que j'aide ont une formation formelle en programmation à partir d'un module de première année, en Java, mais j'ai l'impression que je ne peux pas très bien communiquer avec eux.

Par exemple: on peut écrire une fonction mais ne pas comprendre pourquoi elle n'est pas exécutée, sans se rendre compte qu'ils ont oublié de l'appeler. Si j'utilise des phrases comme "(make a) call (to) the function/it"et "pass it the.."j'obtiens des regards vides.

Mon processus normal serait alors de trouver un endroit dans leur code où ils appellent une fonction à partir du langage, et de leur dire qu'ils peuvent appeler leurs propres fonctions de la même manière qu'ils appelaient cette autre fonction. Parfois, même cela devient vide.

Existe-t-il d'autres éléments de vocabulaire qui sont plus adaptés (mieux?) Pour aider les programmeurs débutants? Ou n'est-ce pas un problème de communication?

Andy Hunt
la source
5
Les utilisateurs de feuilles de calcul savent comment appeler une fonction. Beaucoup peuvent écrire le leur. Il y a quelque chose de fondamentalement faux ici.
jeffo
@JeffO J'avais l'impression que quelque chose n'allait pas, mais je voulais donner à ce module et à ces personnes le bénéfice du doute
Andy Hunt
7
Attends quoi? Les programmeurs avec lesquels vous travaillez ne savent pas ce que signifie «appeler une fonction» et passer des arguments? C'est aussi simple que possible sans dessiner des images et utiliser des métaphores impliquant des chats et des chiens. Cela va au-delà d'un problème de communication et pourrait malheureusement être un problème de manque de connaissances. J'ai relu votre question et il semble qu'ils aient essentiellement suivi un cours d'introduction et c'est tout?
wkl
3
@AndyBursh: comment ces élèves ont-ils pu arriver en deuxième année? J'espère qu'ils ne réussiront pas les examens et choisiront un travail en dehors du développement de logiciels.
Doc Brown
3
Peut-être que des marionnettes à chaussettes aideraient
MattDavey

Réponses:

15

Ils devront éventuellement apprendre les termes appropriés, le plus tôt sera le mieux.

Utilisez-les correctement et expliquez-les chaque fois que vous obtenez un regard vide. Essayez simplement d'envoyer les bons signaux, qu'il est OK de poser des questions sur tout ce qu'ils ne comprennent pas - les seules questions stupides sont celles que vous ne posez pas.

tdammers
la source
2
J'étais sur le point de poster presque exactement la même réponse que la vôtre. :) +1
Tom Squires le
Ne ramenez pas les explications à leur niveau, augmentez leur niveau.
Bent
2

En général

Lorsqu'une personne ne vous comprend pas, vous avez deux alternatives:

  1. Adapter le vocabulaire selon ce que la personne sait ou non,

  2. Expliquez à la personne les termes qu'elle ne comprend pas.

Le premier cas fonctionne bien lorsque la personne connaît déjà assez bien le vocabulaire technique, mais pas assez, ou pas dans votre domaine.

Par exemple, vous pouvez utiliser le terme méthode en C # ou Java, et la personne qui travaille principalement avec un autre langage ne comprendrait pas ce terme. Vous expliquerez ensuite qu'en C # ou Java, méthode fait référence à ce que nous appelons habituellement fonction (par exemple en C), et qu'il n'y a pas de fonction en C # ou Java . En PHP , par exemple, les méthodes et les fonctions existent et ont une signification différente . Si la différence est trop douloureuse pour la personne, vous parlerez de fonctions par souci de simplicité.

Dans votre cas précis, vous pouvez difficilement choisir le premier: «faire un appel à la fonction» ne peut pas être reformulé de manière plus simple. Un appel est un appel. Vous ne pouvez pas simplifier davantage cela.

Cela signifie que vous devez choisir la deuxième voie: expliquer à la personne chaque terme technique.

  1. Dirigez la personne vers un dictionnaire ou Wikipedia, ce qui fonctionne très bien pour les concepts de base et la terminologie.

    Je choisirais cela pour les termes couramment utilisés . Par exemple, je préfère inviter la personne à lire Wikipédia pour comprendre ce qu'est le polymorphisme, ou ce que sont la covariance et la contravariance. Ces termes sont déjà très bien expliqués, donc pas besoin de réinventer la roue ici.

  2. Ou expliquez avec vos propres mots .

    Je choisirais cela pour des termes spécifiques au contexte et / ou acceptant un large éventail de définitions . Par exemple, Wikipedia n'est pas très utile pour comprendre la vision de Microsoft du cloud computing, et je préfère m'expliquer ce qu'est le cloud à quelqu'un qui travaillera sur une application Windows Azure.

Dans votre cas particulier

Les personnes à qui vous parlez n'ont pas les concepts et les termes les plus élémentaires utilisés en programmation. Ils ne peuvent pas continuer sans apprendre ce vocabulaire de base , car ils sont incapables de communiquer du tout : ils ne peuvent pas lire de livres sur la programmation ou les blogs, ils ne peuvent pas écouter leurs collègues, et ils ne peuvent même pas vraiment poser de questions sur Empilez les sites Web Exchange, car personne ne comprendra ce qu'ils demandent.

Dans votre cas, plutôt que de rechercher un vocabulaire approprié, je passerais quelques jours ou semaines à leur enseigner certains concepts de programmation de base et les termes couramment utilisés . Après quelques jours, vous pourrez leur parler sans être obligé de constamment "les dessiner et utiliser des métaphores impliquant des chats et des chiens" .

Arseni Mourzenko
la source
1

Au lieu de fonctions , commencez par des sous-programmes . Dites-leur qu'un programme n'est qu'une liste d'instructions, une recette pour dire à l'ordinateur comment faire quelque chose. Et qu'il est exécuté une instruction après l'autre (avec la possibilité de faire quelques étapes en parallèle, mais plus à ce sujet plus tard).

Certaines tâches sont assez courantes et répétitives, donc ce serait terrible si nous devions toujours les écrire encore et encore, donc nous les écrivons une seule fois et en faisons un "petit programme" - un sous - programme , qui peut être réutilisé par d'autres parties du programme. Afin de pouvoir l'exécuter plus d'une fois, nous lui donnons un nom significatif dans notre programme. Et puis nous pouvons utiliser ce nom lorsque nous voulons exécuter ce "petit programme" dans le cadre d'un plus grand, en l' appelant par ce nom.

Appeler un sous-programme, c'est comme invoquer un démon qui sait accomplir cette tâche, par le nom de ce démon. Donc, quand nous voulons faire cette tâche particulière dans notre programme, nous écrivons "appelons le démon nommé Argoth", et le démon se présente et fait la tâche pour nous comme nous lui avons demandé de le faire, puis s'en va et nous pouvons continuer notre emploi.

Parfois, le démon a besoin d'informations supplémentaires sans lesquelles il ne peut pas décider laquelle des tâches à effectuer ou ce que nous attendons vraiment de lui. Par exemple, si le démon est censé construire un château, il peut avoir besoin de savoir il est censé le construire, ou quelle taille , etc. Ce sont les arguments transmis au démon ... Je veux dire, le sous-programme, qui devient maintenant paramétré .

Les paramètres sont les informations qui manquent, mais sont nécessaires pour effectuer la tâche. Ils modifient un peu ce que le sous-programme peut faire. Ils sont comme des cases vides dans la recette qui doivent être remplies avant de pouvoir l'exécuter.

Les arguments , en revanche, sont les informations (valeurs) réelles que nous fournissons pour ces paramètres.

Quant à l'exécution parallèle, on peut y penser de cette façon: il y a toujours quelqu'un (ou quelque chose ) qui exécute le programme (la liste des instructions). C'est soit un autre être humain (saviez-vous que "ordinateur" était autrefois le nom d'une personne qui effectuait le calcul?), Soit une machine. Un programme n'est qu'une liste d'instructions, il ne fonctionne pas seul. Il doit y avoir quelqu'un ou quelque chose qui fera le processus de calcul(effectuez ces actions dans la liste). Et parfois, ces actions peuvent être effectuées en parallèle - nous pouvons distribuer les copies de la liste à plusieurs personnes et laisser chacune d'elles effectuer un ensemble de tâches différent de la liste, tant qu'elles ne s'interrompent pas, ou ne s'interrompent pas. Je n'ai pas à attendre les résultats du travail de quelqu'un d'autre. C'est du multithreading pour vous;)

Quant à la différence entre les fonctions et les sous - programmes (également appelés procédures ), la différence habituelle est qu'une fonction est appelée pour calculer une certaine valeur qu'elle renvoie à la suite de son exécution, tandis que les procédures sont exécutées juste pour le plaisir;) AKA pour leurs "effets secondaires" - juste pour le bien des opérations effectuées à partir de la liste.

Mais si appeler une procédure ou une fonction pose des problèmes au début, vous pouvez utiliser un autre terme qui était autrefois populaire: sauter . On peut sauter dans un sous-programme, ce qui signifie que vous arrêtez d'exécuter tout ce que vous faites en ce moment et que vous "sautez" vers un autre endroit de la liste (ou une autre liste) - le sous-programme - afin d'exécuter ses tâches. Ensuite, lorsque vous avez terminé, vous "sautez en arrière" - c'est-à-dire que vous revenez à l'endroit où vous avez été interrompu, afin de pouvoir continuer votre tâche précédente. La différence entre appeler et sauter est que maintenant vous êtes le démon.

Quant aux méthodes mentionnées ici par quelqu'un, ou au fait que certains langages "n'ont pas de fonctions, seulement des méthodes" - ce n'est pas tout à fait correct, car les méthodes sont des fonctions! - un type particulier d'entre eux: ce sont des fonctions qui sont utilisées pour récupérer des informations encapsulées à l'intérieur d'un objet, ou pour les opérer. Ils sont une "méthode pour opérer sur ces données". Le nom vient d'un paradigme orienté objet dans lequel les données sont entourées d'objets et ne peuvent pas être exploitées directement, uniquement par des fonctions spéciales appelées "méthodes".

Une méthode est spéciale d'une autre manière: elle doit savoir sur quel objet particulier elle est censée fonctionner / être appelée (l'objet "this"). C'est pourquoi les méthodes sont généralement agrémentées d'un paramètre caché supplémentaire qui stocke des informations sur l'objet sur lequel il a été appelé (le pointeur "this"). Cela complique un peu la façon dont la fonction est appelée, mais c'est un "détail d'implémentation" qu'un programmeur ne devrait pas déranger beaucoup, tant qu'il sait ce qu'il fait.

BarbaraKwarc
la source