web-dev-qa-db-fra.com

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

On m'a demandé de prendre une personne dans notre service informatique qui n'a aucune expérience en programmation mais qui est une personne intelligente et capable et de l'aider à passer à la programmation chez, disons, un développeur débutant prenant en charge les applications .Net existantes. Je crois vraiment que cette personne peut le faire, mais je cherche le moyen le plus rapide de l'accélérer. J'ai un tas d'idées mais je voulais voir ce que les autres pensaient. Je sais que cela dépendra également beaucoup de la façon dont il apprend, mais je parle en général.

Donc, la question: selon vous, quelles sont les meilleures façons de mettre rapidement un non-développeur au courant du développement (.Net dans ce cas)?

100
Richard Fantozzi

Je prescris généralement la même séquence à tous ceux qui veulent apprendre la programmation. C'est très théorique, mais cela jette une bonne base. 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, alors vous pourriez aussi bien abandonner maintenant.

  1. Code, par 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 par la force, si nécessaire. Posez toutes les questions que vous avez, mais seulement après avoir lutté pour le découvrir par vous-même. Si vous pouvez passer à travers ces trois livres, félicitations, vous êtes un programmeur, maintenant je peux vous jeter Perl EN 15 MINUTES ou tout ce qui est à la librairie dans la grande bibliothèque de Java et vous vous en sortirez bien. Si vous ne pouvez pas passer au travers de 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 tous deux très simples à première vue (C et Scheme sont des langages super faciles) mais ils approfondissent le véritable art de la programmation sans perdre de temps à confondre la syntaxe, ils sont donc excellents pour commencer à recâbler votre cerveau pour être un bon programmeur.

Les tentatives de prendre un raccourci et d'aller directement à l'apprentissage de la chose exacte que vous voulez apprendre maintenant (comme commencer avec C # et ASP.NET) sont condamnées.

125
Joel Spolsky

La meilleure façon de mettre rapidement un non-développeur au courant est de inspirer!

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

Bien que je sois d'accord avec Joel dans le cas du candidat idéal, je ferais attention de ne pas trop entasser la théorie dans un esprit faible - cela ne fera que les repousser. 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 entièrement d'accord avec @karudzo - l'accomplissement de soi et un examen constructif peuvent être très inspirants.

30
jkoreska

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

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

Bien sûr, il semble facile de lui apprendre un langage simple (C #, s'il doit faire des trucs .NET), mais apprendre un langage n'est pas apprendre à 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 liées, le modèle de compilation de la langue qu'il apprend, la modularisation, la gestion des ressources, les paradigmes, les modèles, Big- O-notation ... - toute l'enchilada. C'est beaucoup de choses à parcourir, et la plupart d'entre nous ont pris plusieurs années juste pour apprendre ces bases, et encore plus pour devenir un vrai programmeur professionnel.

Il y a du matériel qui couvre beaucoup de cela (comme le plus récent livre de Stroustrup qui enseigne programmation en utilisant C++, plutôt que d'enseigner le langage C++), mais il n'y en a pas beaucoup et rien qui couvre tout cela. Le gars doit donc être disposé à apprendre et à lire beaucoup de livres et d'articles.

Quant à la façon de procéder: je n'ai pas de programme complet à coller ici. (Désolé.)
Ce que je recommanderais, cependant, est de commencer par lui enseigner un langage de programmation, afin qu'il ait une chance de faire des progrès initiaux rapides et d'obtenir des résultats encourageants. Il y a pas mal de livres pour enseigner ces langues, choisissez-en un que vous connaissez. 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 a pas (m), commencez à penser les vôtres bien à l'avance, mais soyez prêt à les adapter à son niveau/vitesse de compréhension.
Si cette première langue n'était ni C ni C++, IMO, il devrait en apprendre une de ces prochaines. K&R est bon pour cela, tout comme le TCPL de Stroustrup ou, s'il peut (avec votre aide) gérer une courbe d'apprentissage abrupte, Koenig/Moo. La raison pour laquelle je recommanderais ceci est que, une fois que vous connaissez C ou (de préférence IMO) 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 flux 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 être à l'aise de lui dire d'apprendre ce genre de choses.

12
sbi

Je ne les lancerais pas sur .NET. J'ai fait cette erreur trop de fois. Ne laissez pas un employeur vous forcer à créer un programmeur incompétent à cause du temps. .NET peut être une plateforme de développement rapide, mais il n'oblige pas les développeurs à apprendre la programmation. En C # seul, vous trouverez un développeur bloqué sur les types de référence, la durée de vie des objets, ils laisseront d'énormes fuites de mémoire (oui c'est possible dans .NET), et auront des conceptions médiocres. Il serait préférable de les démarrer en C ou C++ (probablement en c ++ car ils devront utiliser OOP concepts) puis dire quelque chose comme: "Maintenant, ce ne serait pas bien si votre mémoire a été géré pour vous, tout était orienté objet, et vous n'avez pas eu à gérer tous ces pointeurs désagréables? "Voici C # et Java. S'ils maîtrisent le c ++, ils conquériront 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'a donnée, et j'étais beaucoup mieux quand j'ai frappé l'analyse numérique à cause de cela. Cela vous permettra également de savoir plus tôt si le candidat coupera 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 les comprendriez-vous, mais vous les comprendriez mieux que quelqu'un qui ne connaissait pas c et c ++.

7
Jonathan Henson

Programmation en binôme. Laissez-les vous masquer pendant que vous écrivez votre propre code - n'importe quel code. En quelques heures, demandez-leur d'entrer votre code pour vous, pendant que vous leur dites quoi faire, touche par touche, même si nécessaire. Répondez à quelques-unes de leurs questions, mais pas au point de ralentir beaucoup - laissez-les simplement s'imprégner de tout cela. Ils trouveront également vos fautes de frappe et plus de vos bugs 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 vues auparavant.

J'ai appris une grande partie de ce que je sais en tant que développeur de cette façon en un mois, et j'ai enseigné à plusieurs autres nouveaux développeurs de cette manière, dont l'un a pu me remplacer en tant que développeur principal d'une startup après plusieurs mois. Lorsque nous avons commencé à travailler ensemble, il n'avait jamais écrit une seule ligne de code.

6
trace

Donnez-leur quelque chose de simple, mais utile à résoudre. Laissez-les tâtonner un peu et aidez-les à peaufiner. Il n'y a rien de tel qu'un petit exploit pour les stimuler (même si quelqu'un qui n'est pas intéressé par la programmation w

6
jschorr

Donnez-lui une bonne idée (studios visuels, express est toujours bon). Apprenez-lui les 60% de syntaxe courants (laissez de côté le rendement, linq, les énumérations, les attributs, etc., donnez des cours, virtuels et redéfinissez). Passez du temps sur le débogueur (en particulier callstack). Dites-lui ensuite de google "msdn functionanme" chaque fois qu'il a besoin d'aide et cela devrait lui permettre de démarrer rapidement.

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

Bonus: apprenez-lui à sérialiser les données json afin qu'il puisse facilement lire/écrire dans un fichier. Un db est exagéré et trop à apprendre et vous ne voulez pas qu'il écrive des formats de fichiers personnalisés bien que je puisse laisser passer une entrée par type de fichier pour enregistrer/charger un tableau de chaînes comme acceptable.

2
user2528

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 façon analytique. D'abord et avant tout, la personne devrait être capable de penser et de trouver l'algo sur une feuille de papier pour déterminer le problème. Vous devez les guider pour qu'ils aient la bonne technique de réflexion.

Viennent ensuite les principes fondamentaux de la langue. Faites-les commencer dans la langue de votre choix. Donnez un problème au programme.

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

Demandez-leur maintenant de reprogrammer le problème antérieur avec ces nouveaux concepts.

1
Nomad

Démarrez-le sur les bases: variables, boucles, tandis que les boucles, pour les boucles, les tableaux, apprenez-lui les bases, l'impression à l'écran, en faisant des calculs simples. Passez aux méthodes et à la POO de base, des choses comme voici comment créer une classe, montrez-lui pourquoi pas seulement comment.

Le langage n'a pas d'importance, mais choisissez quelque chose que vous savez et qui est très abstrait (Java, python etc ...) de cette façon, il n'a pas besoin de se soucier de choses comme la gestion de la mémoire, pointeurs etc ... Apprenez les bases de la récursivité, des tours de hanio ou de la recherche récursive de répertoires.

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

1
Snow_Mac

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 l'ingéniosité sont deux compétences clés pour un programmeur.

À la fin de la journée, la passion/l'intérêt va certainement être un facteur clé dans la façon dont ils réussiront à l'apprendre rapidement. S'il n'a pas ou n'attrape pas "le bug", cela peut être un processus lent et/ou douloureux. S'il attrape le bug, il sera en retard de codage, en dehors des heures de travail, ayant le temps de sa vie.

1
Andy Fleming