Comment puis-je enseigner à une personne brillante, sans expérience en programmation, comment programmer? [fermé]

100

On m'a demandé d'embaucher une personne de notre service informatique qui n'a aucune expérience en programmation, mais qui est une personne intelligente et capable et qui l'aide à passer à la programmation, disons à un développeur débutant prenant en charge des applications .Net existantes. Je crois vraiment que cette personne peut le faire, mais je cherche le moyen le plus rapide de le faire passer à la vitesse supérieure. J'ai beaucoup d'idées, mais je voulais voir ce que les autres pensaient. Je sais que cela dépendra aussi énormément de la façon dont il apprendra, mais je parle en général.

Donc, la question: quels sont, à votre avis, les meilleurs moyens d’informer rapidement un non-développeur de son développement (.Net dans ce cas)?

Richard Fantozzi
la source
1
Peut-être question connexe: programmers.stackexchange.com/questions/10930/… : D
jmservera
J'ai entendu dire que Learn Python The Hard Way était bon pour les non-programmeurs débutants.
john2x
Jetez un coup d'œil à Small Basic . C'est simple, mais utile pour les débutants.
3
Je pense qu'expliquer la programmation à quelqu'un qui n'a pas de modèle mental de quoi que ce soit dont vous parlez est inutile. Déterminez quelle langue vous allez parler et demandez-leur de suivre les tutoriels et de se salir les mains, puis d'expliquer. Ils vont se débattre et vous allez vous lancer et accélérer le processus d'apprentissage.
Le Muffin Man
1
Je lui demanderais de lire le livre | Sur la cruauté d'enseigner l'informatique | d'Edgser Dijkstra, demandez-lui de connaître la raison de cet article, afin qu'il puisse se méfier des éventuels dommages au cerveau que le grand public lui inflige. façons d'enseigner la programmation
vfclists

Réponses:

125

Je prescris généralement la même séquence à quiconque veut apprendre la programmation. C'est très théorique, mais cela pose de bonnes bases. Cela devrait prendre trois ou quatre mois d’études à temps plein, mais la programmation n’est pas quelque chose que vous apprenez du jour au lendemain.

Si vous ne pouvez pas passer à travers cette séquence, vous ne pourrez pas programmer, vous pouvez donc tout aussi bien abandonner maintenant.

  1. Code, de Charles Petzold.
  2. Le langage de programmation C, K & R
  3. La structure et l'interprétation des programmes informatiques, Abelson et Sussman.

Ma règle est la suivante: parcourez ces trois livres à la force des choses, si nécessaire. Posez toutes les questions que vous avez, mais seulement après avoir eu du mal à le résoudre vous-même. Si vous pouvez vous débrouiller dans ces trois livres, félicitations, vous êtes programmeur, je peux maintenant vous jeter à PERL EN 15 MINUTES ou à tout autre déchet se trouvant à la librairie du Big Bookcase of Java et vous vous en sortirez bien. Si vous ne pouvez pas lire ces trois livres, abandonnez, rentrez chez vous, vous ne l'obtiendrez jamais.

Je ne pense pas que vous ayez besoin d'apprendre C et Scheme, pour être honnête. Ils ne sont qu'une base pour l'apprentissage futur. Ces deux livres assez simples sont à la fois très simples en surface (C et Scheme sont des langages super faciles) mais ils approfondissent le véritable art de la programmation sans perdre de temps en confusion de syntaxe; ils sont donc excellents pour commencer à recâbler votre cerveau pour être un bon programmeur.

Les tentatives faites pour utiliser un raccourci et accéder directement à l'apprentissage de la chose exacte que vous voulez apprendre maintenant (par exemple, en commençant par C # et ASP.NET) sont vouées à l'échec.

Joel Spolsky
la source
25
En tant que personne qui a dû se cogner la tête contre des «programmeurs» hautement recommandés pour leurs capacités en C #, mais ne pouvait pas faire des choses simples comme mettre en œuvre une classe de base très bien documentée, trouver des fuites de mémoire dans les programmes c et c ++, ou tout simplement résoudre un problème eux-mêmes ou apprendre une nouvelle idée à un rythme modéré, je suis d’accord. Ce n'est pas de l'élitisme; c'est du bon sens. Si vous ne pouvez pas maîtriser les pointeurs et la récursivité, vous ne serez jamais très utile à quiconque a besoin de développeurs capables de résoudre eux-mêmes les problèmes.
Jonathan Henson
53
Non, ce n'est pas le seul moyen d'être un bon programmeur. Mais si trois livres constituent une "liste décourageante", vous risquez de sous-estimer ce que font les programmeurs.
Joel Spolsky
32
Tu es tellement déconnecté parfois, Joel.
Robert S.
46
Désolé, les journaux mettent quelques jours à arriver dans mon club privé car ils doivent être repassés par un valet avant que nous puissions les voir.
Joel Spolsky
19
Malheureusement, cette réponse échoue up to speed quickly.
rlb.usa
30

Le meilleur moyen de mettre rapidement les non-développeurs au courant est de les inspirer !

Pour avoir du succès, le candidat doit être au moins curieux, sinon passionné , de programmation (quelle que soit la plate-forme).

Bien que je sois d’accord avec Joel dans le cas du candidat idéal, je ferais bien de ne pas entasser trop de théorie dans un esprit faible, cela ne ferait que les décourager. S'ils sont inspirés, curieux et, espérons-le, passionnés, ils voudront comprendre la théorie après avoir vu la magie.

Je suis tout à fait d'accord avec @karudzo - la réalisation de soi et un examen constructif peuvent être très inspirants.

Jkoreska
la source
29
"Si vous voulez construire un navire, n'encouragez pas les gens à ramasser du bois et ne leur assignez pas de tâches ni de travail, mais apprenez-leur plutôt à aspirer à l'immensité infinie de la mer." - Antoine de Saint-Exupéry
Julien Chastang Le
Julien - gentil! Exactement!
jkoreska
Je suis complètement d'accord avec toi sur celui-ci! J'ai encadré / encadré de nombreux développeurs qui n'avaient aucune expérience et qui parfois ne savaient pas qu'ils allaient devenir des programmeurs. Je l'ai fait simplement en les guidant tout au long du chemin… leur propre curiosité et leur passion les ont amenés au résultat final. S'ils n'avaient eu aucune de ces deux qualités, je ne pensais pas qu'il leur aurait été possible d'atteindre ce qu'ils avaient accompli. Je travaille avec trop de programmeurs à qui il manque l'un ou l'autre de ces attributs et qui y travaillent simplement parce qu'il y a beaucoup de travail disponible ... c'est affreux!
Jeach
Je suis d'accord. Je pense que la question de l'apprentissage de la programmation trouve une réponse très littérale. Les gens apprennent des choses pour une raison. Les gens apprennent à programmer pour résoudre les problèmes, à aider les gens et à transformer les idées en réalité. J'ai rencontré des gens qui ont oublié cela en cours de route et lorsqu'ils l'ont redécouverte, ils ont redécouvert leur amour pour la programmation. Lorsque vous apprécierez vraiment quelque chose que vous apprendrez, vous trouverez des moyens d'apprendre et vous irez mieux.
Luis Perez
12

Je cherche le moyen le plus rapide de le faire accélérer.

Le moyen le plus rapide pourrait être de lui donner le temps qu'il faut , bien que cela puisse facilement durer un an ou deux.

Bien sûr, il semble facile de lui apprendre un langage simple (C #, s’il doit faire des choses .NET), mais l’apprentissage d’une langue n’apprend pas à programmer.

S'il n'a jamais programmé, alors, outre la syntaxe et la bibliothèque d'au moins une langue, il devra en apprendre davantage sur les tableaux, les listes chaînées, le modèle de compilation de la langue qu'il apprend, la modularisation, la gestion des ressources, les paradigmes, les motifs, etc. O-notation ... - l'entier enchilada. C’est beaucoup de choses à explorer, et la plupart d’entre nous ont mis plusieurs années à apprendre ces bases et encore plus à devenir un véritable programmeur professionnel.

Il existe des documents qui couvrent beaucoup de cela (comme le dernier livre de Stroustrup qui enseigne la programmation en C ++, plutôt que le langage C ++), mais il n'y en a pas beaucoup et rien qui ne couvre tout cela. Donc, le gars doit être disposé à apprendre et à lire beaucoup de livres et d'articles.

Pour ce faire, je n'ai pas de programme complet à coller ici. (Désolé.)
Ce que je recommanderais cependant, c'est de commencer par lui apprendre un langage de programmation, afin qu'il ait la chance de faire des progrès rapides et d'obtenir des résultats encourageants. Il existe de nombreux livres pour enseigner de telles langues, choisissez-en un que vous connaissez bien. Si le livre contient de nombreux exercices et qu'il est prêt à les faire, préparez-vous à passer beaucoup de temps à l'aider. Si le livre n’en contient pas, commencez à penser aux vôtres, mais soyez prêt à les adapter à son niveau / vitesse de compréhension.
Si cette première langue n'était ni le C ++ ni le C ++, il devrait en apprendre un prochain. K & R est bon pour cela, tout comme le TCPL de Stroustrup ou, s'il peut (avec votre aide), faire face à une courbe d'apprentissage abrupte, Koenig / Moo. La raison pour laquelle je recommanderais ceci est que, une fois que vous connaissez C ou (IMO de préférence) C ++, il est relativement facile de choisir l'un de ces dérivés C comme C #, Java, ObjC ...

Pour le reste, fournissez-lui un flot constant de bons livres et articles. Je ne pense pas que ce soit très utile si nous en suggérons trop, car 1) cela doit correspondre à la culture de votre entreprise et 2) vous devez vous sentir à l'aise de lui dire de l'apprendre.

sbi
la source
1
"développeur débutant prenant en charge les applications .Net existantes" ... "il devra se familiariser avec les tableaux, les listes chaînées, le modèle de compilation de la langue qu'il apprend, la modularisation, la gestion des ressources, les paradigmes, les modèles, la notation bit-O" sont tous "gentils à posséder", mais je parie qu’une bonne partie des développeurs qui ont écrit le code n’ont pas ces compétences.
Kirk Broadhurst
1
@KirkBroadhurst: Si tel est le cas, alors quelque chose ne va pas dans votre entreprise.
Sbi
@sbi Je pense que vous constaterez que quelque chose ne va pas dans beaucoup d'entreprises. La société d'OP suggère qu'un non-programmeur (mais il est un "type intelligent"!) Soit transféré dans un rôle de support aux applications. Je ne sais pas où vous travaillez ... mais d'après mon expérience, c'est "le monde réel". Les programmeurs compétents sont vraiment exceptionnels - comme dans la plupart des industries, la plupart des gens le font assez bien pour s'en sortir.
Kirk Broadhurst
1
@KirkBroadhurst: Je décide où je travaille. J'ai fui des entreprises pour incompétence, et je m'enfuirais si aucun des développeurs ne sait au moins la plupart de ces choses.
sbi
7

Je ne les lancerais pas sur .NET. J'ai commis cette erreur trop de fois. Ne laissez pas un employeur vous obliger à créer un programmeur incompétent à cause du temps. .NET peut être une plate-forme de développement rapide, mais il ne force pas les développeurs à apprendre la programmation. En C # seul, vous constaterez qu'un développeur reste bloqué sur les types de référence, la durée de vie des objets, ils laissent d'énormes fuites de mémoire (oui, c'est possible dans .NET), et leur conception est médiocre. Il serait bien mieux de les démarrer en C ou C ++ (probablement c ++ car ils devront utiliser les concepts de la POO), puis dire quelque chose comme: "Ce ne serait pas bien si votre mémoire était gérée pour vous, tout était objet -orienté, et vous n'avez pas eu à gérer tous ces pointeurs méchants? " Voici C # et JAVA. S'ils maîtrisent le c ++, ils vaincront tous les deux en une semaine ou deux chacun. Je recommande le régiment de Joel. C’était la liste que mon professeur CS 101 m’avait fournie et j’étais beaucoup mieux quand j’ai eu recours à l’analyse numérique. Cela vous permettra également de savoir plus tôt si le candidat coupe la moutarde ou non. De plus, une fois que vous aurez c et c ++, vous comprendrez automatiquement c # et java après avoir lu l’introduction aux livres. Non seulement vous les comprendriez, mais vous les comprendriez mieux que quelqu'un qui ne connaissait pas c et c ++.

Jonathan Henson
la source
4
"" Maintenant, ça ne serait pas bien si votre mémoire était gérée pour vous, chaque chose était orientée objet, et vous n'aviez pas à gérer tous ces pointeurs désagréables? "Vous voulez dire que voici le STL. Pourquoi ne m'as-tu pas
appris
Eh bien, STL est gentil. Je parle davantage de l'API Windows en ce qui concerne la programmation Windows. L'API Windows n'est pas conçu avec la POO en tête. Je trouve que c’est un bon exercice de faire écrire à un pauvre type une application utilisant l’API en c ++. Je lui demande ensuite d’écrire une classe Window et d’encapsuler la boucle d’événements, par exemple ... vous savez, rendez-la orientée objet. Puis, une fois que tout fonctionne, je leur montre Windows Forms. Cela les oblige vraiment à traiter certains concepts de base - par exemple, le fonctionnement d’une application Windows - qu’aucune personne ne comprendrait si elle se contentait de se lancer dans .NET.
Jonathan Henson
4
pourquoi quelqu'un toucherait-il l'API Windows avec un bâton? Je veux dire parlaient hWNDdes années 80, n'est-ce pas? Clairement, vous utilisez plutôt une belle abstraction (qui est un débat complètement différent). Bien sûr, savoir comment cela fonctionne sous le capot est agréable, mais vous n'avez pas besoin de C # .NET pour l'abstraction
Raynos
2
L'API Windows est incroyable. En tout cas, je ne l'utilise que comme outil pédagogique. Par exemple, les gens ne comprennent généralement pas comment les événements sont déclenchés par magie dans les programmes Windows. Il est utile pour eux de s’amuser avec la boucle d’événements. En outre, les programmeurs doivent au moins se familiariser avec hWND, en particulier s’ils s’occupent de tout type d’applications graphiques, tout comme vous aurez du mal à faire quoi que ce soit sous Unix sans savoir comment utiliser un XID. Quoi qu'il en soit, cela les oblige à apprendre le fonctionnement d'un programme Windows. En outre, une fois qu'ils ont terminé, ils savent comment fonctionne Windows.Forms.
Jonathan Henson
Il n'est pas nécessaire que ce soit une transition vers C # btw, mais simplement vers .NET en général. Je pense que @Joel a écrit un bon article sur la loi des abstractions qui fuit, expliquant pourquoi il est souvent bon pour les programmeurs de regarder sous le capot avant d'utiliser un cadre.
Jonathan Henson Le
6

Donnez-leur quelque chose de simple, mais utile à résoudre. Laissez-les tâtonner un peu et aidez-les à le peaufiner. Rien de tel qu’un petit exploit pour les encourager (bien que quelqu'un ne veuille pas programmer

Jschorr
la source
6

Programmation en binôme. Laissez-les vous occulter pendant que vous écrivez votre propre code - n'importe quel code. Quelques heures plus tard, demandez-leur de saisir votre code, pendant que vous leur dites quoi faire, touche par touche, même si nécessaire. Répondez à quelques-unes de leurs questions, mais pas tant que cela vous ralentisse beaucoup. Laissez-les tremper. Ils trouveront aussi vos fautes de frappe et plus de vos insectes que vous ne le pensez. Dans quelques jours, ils pourront commencer à "naviguer" en vous indiquant le code à saisir pour des tâches similaires à celles qu'ils ont déjà vues.

En un mois, j’ai appris beaucoup de choses sur ce que j’ai appris en tant que développeur et j’ai enseigné à plusieurs autres nouveaux développeurs, dont l’un a pu prendre la relève pour moi en tant que développeur principal après plusieurs mois. Quand nous avons commencé à travailler ensemble, il n'avait jamais écrit une seule ligne de code.

trace
la source
1
Je pense que la programmation en binôme est un très bon moyen d'enseigner aux programmeurs débutants, mais je pense que la programmation en binôme peut être problématique tout le temps. Je pense que les programmeurs débutants ont besoin de passer du temps seuls pour apprendre à résoudre des problèmes et gagner la confiance en leurs capacités.
Helephant
Oui, lancez-les avec la programmation en binôme et donnez-leur des tâches simples - tâches réelles, sur le logiciel sur lequel ils sont censés travailler, dans le langage dans lequel ils sont censés travailler, avec un réel accomplissement. Revoir et encadrer tout leur travail et ils vont progresser.
Thomas W
2

Donnez-lui une bonne idée (visual studios, express est toujours bon). Enseignez-lui les 60% de syntaxe habituels (laissez tomber le rendement, linq, les énumérations, les attributs, etc., enseignez les classes, virtuel et substitut). Passez du temps sur le débogueur (en particulier callstack). Puis, dites-lui de rechercher "msdn functionanme" sur Google à chaque fois qu'il a besoin d'aide, ce qui devrait lui permettre de démarrer rapidement.

Apprenez-lui également à ne jamais attraper et avaler une exception. Dites-lui qu'il doit le relancer ou le connecter!

Bonus: lui apprendre à sérialiser les données JSON afin qu'il puisse facilement lire / écrire dans un fichier. Une base de données est excessive et trop à apprendre et vous ne voulez pas qu'il écrive des formats de fichier personnalisés, bien que je puisse laisser une entrée par type de ligne de fichier passer pour enregistrer / charger un tableau de chaînes comme acceptable.


la source
1

Je sais que beaucoup de gens ont parlé de langues et de livres pour ces langues. Je diffère.

La programmation consiste à apprendre à penser de manière analytique. Tout d’abord, la personne devrait être capable de penser et de présenter l’algo sur un bout de papier, décrivant le problème. Vous devez les guider pour qu'ils acquièrent la bonne technique de réflexion.

Viennent ensuite les fondamentaux de la langue. Faites-les commencer sur la langue de choix. Donner un problème à programmer.

Une fois cette première coupe terminée, demandez-leur de se familiariser avec les principes fondamentaux et les modèles de conception de CS.

Maintenant, demandez-leur de reprogrammer le problème précédent avec ces nouveaux concepts.

Nomade
la source
1

Commencez-le par les bases: variables, boucles, boucles, boucles, boucles, tableaux, apprenez les bases, imprimez à l'écran, faites des calculs simples. Déplacez-vous dans les méthodes et la POO de base, comme par exemple comment créer une classe, montrez-lui le pourquoi pas simplement le comment.

La langue importe peu, mais choisissez quelque chose que vous connaissez et qui est très abstrait (java, python, etc.). Ainsi, il n'aura pas à s'inquiéter de choses comme la gestion de la mémoire, les pointeurs, etc. ... Enseignez les bases de récursivité, tours de hanio ou recherche récursive de répertoires.

Apprendre à programmer est une bonne ressource gratuite sur la programmation Ruby. Rendez-le amusant, facile et amusant.

Snow_Mac
la source
1

Donnez-lui des défis et faites-lui apprendre à trouver des ressources pour résoudre le problème lui-même.

Si vous pouvez lui apprendre à trouver des réponses et à être autonome, il apprendra naturellement à bien programmer. La pensée critique et la débrouillardise sont deux compétences clés pour un programmeur.

À la fin de la journée, la passion / intérêt sera certainement un facteur clé dans la réussite de leur apprentissage rapide. S'il n'a pas ou ne détecte pas "le bogue", cela peut être un processus lent et / ou douloureux. S'il attrape le virus, il sera en retard sur le codage, en dehors des heures de travail, comme si de rien n'était.

Andy Fleming
la source