Je prends Advanced Placement Computer Science pour la dernière année au lycée. Il semble que nous apprenions simplement à mémoriser du code et des fonctions et non à être ingénieux et efficaces dans l'utilisation de la documentation et autres.
Pratiquement, j'imagine que de nombreux (sinon tous) travaux de programmation vous permettraient de feuilleter la documentation, de revoir le code passé et le code des autres, faisant essentiellement ce que mon professeur considérerait comme de la "tricherie".
Bien que je convienne que les concepts de base sont essentiels pour mémoriser (dans n'importe quel sujet), il me semble superflu et peu pratique de donner un examen à la plume et au papier pour une classe CS, surtout quand pratiquement vous auriez un compilateur, un débogueur, une référence manuels, et l' ensemble d'Internet à consulter dans n'importe quelle situation de travail dans le monde réel.
Pourquoi CS est-il enseigné en se concentrant sur la mémorisation du code et des fonctions plutôt que sur l'enseignement de compétences utiles, notamment la façon d'utiliser et d'interpréter la documentation, un exemple de code, le débogueur, etc.?
Réponses:
Dans une classe de lycée, vous êtes au niveau le plus élémentaire de votre chemin vers la maîtrise. Les choses qui sont couvertes dans votre classe sont le genre de choses qu'un programmeur professionnel devrait savoir froidement. À bien des égards, cela revient à apprendre vos "horaires". Bien sûr, vous pourrez toujours saisir une calculatrice dans un environnement "réel", mais cette mémorisation augmente non seulement votre vitesse dans des tâches plus complexes, mais favorise également une compréhension plus approfondie des principes de base.
Par exemple, vous devez connaître plusieurs algorithmes de tri, comment ils sont mis en œuvre, comment ils fonctionnent, quand ils sont mieux utilisés et quand ne pas les utiliser. Cela pourrait toujours être recherché, mais ne devrait pas l'être - pas plus qu'un mathématicien ne devrait avoir à chercher 6 fois 8.
la source
Il est souvent enseigné de cette façon parce que les enseignants ne connaissent généralement pas d'autre moyen de tester la compréhension. Vos sentiments sont tout à fait corrects car cela ne vaut rien d'être enseigné comme ça. La façon dont les gens sont éduqués en général a désespérément besoin d'une réforme!
La vie s'améliore cependant, au moins à l'UIUC, j'ai constaté que plus vous montez dans vos classes CS, moins les examens sont orientés comme vous le décrivez et dans la majorité de mes cours, nous avons été autorisés à tricher pour toute la merde que vous auriez probablement recherché sur Google si vous étiez réellement assis devant un ordinateur.
Cela étant dit, plus je suis monté dans mes classes, moins ils vous apprennent réellement sur les langues ou comment mettre en œuvre quelque chose. En fait, je n'ai eu qu'un seul cours où ils nous ont réellement appris quoi que ce soit sur la programmation, il s'agissait principalement de concepts mathématiques abstraits et on s'attendait à ce que nous comprenions la partie de la programmation par nous-mêmes (à condition qu'ils soient toujours heureux de vous aider, mais c'était jamais quelque chose à un examen).
la source
Ne laissez pas la scolarité interférer avec votre éducation.
-- Mark Twain
Je suis mexicain et je vous le dis parce qu'au Mexique, ce n'est pas exactement un bon endroit pour l'éducation (à tous les niveaux), du moins dans l'enseignement public.
Eh bien, au milieu de ma carrière (CS), je me sens exactement de la même façon que vous vous sentez, alors je commence à apprendre par moi-même et je passe un an à apprendre les algorithmes, Linux, les scripts, le fonctionnement de mon ordinateur, un peu relationnel bases de données, html, css, etc. (un peu sur tous). Et bien sûr, j'ai dû sauter des cours *, baisser mes notes * et obtenir mon diplôme un an après *, le tout pour apprendre.
Après cette année, je reviens à ma routine "normale", de retour aux cours réguliers, aux devoirs, aux examens et aux projets. Les cours étaient toujours ennuyeux, rien de nouveau à apprendre, tout était pareil. J'ai donc décidé de participer à des sites de concours de programmation comme UVA juge en ligne , chef de code et projet euler , puis j'ai regardé quelques conférences au MIT Open Course Ware et j'apprenais toujours par moi-même, mais d'une manière différente.
La leçon: ne laissez pas les choses se produire, faites que les choses se produisent. Si vous n'êtes pas satisfait de la façon dont vous apprenez, changez-le!
* Pas les décisions les plus sages que j'ai prises.
la source
Cela dépend de ce que vous essayez de mémoriser ...
Pour étudier les mathématiques, par exemple, vous devez être familier avec l'algèbre et vous devez souvent être plutôt créatif dans la façon dont vous effectuez les manipulations algébriques afin de simplifier les équations. Mais vous devez avoir mémorisé certains éléments constitutifs afin de pouvoir vous concentrer sur ces éléments intéressants. Vous devez, par exemple, connaître vos tables de multiplication par cœur et vous devez connaître certaines identités afin de pouvoir reconnaître comment manipuler les équations afin d'utiliser ces identités.
Afin d'étudier l'informatique, vous devez également vous familiariser avec les structures de données et les algorithmes de base des blocs de construction, car vous devrez les appliquer à des problèmes de niveau supérieur. Il est très peu probable que vous écriviez, par exemple, votre propre implémentation de liste liée dans le monde réel, vous utiliseriez simplement celle fournie par votre bibliothèque. Mais sachant comment une liste chaînée est implémentée et comment implémenter la vôtre, vous seriez en mesure de déterminer où et si utiliser une liste chaînée lorsque vous commencez à travailler sur des problèmes de niveau supérieur. De même, vous n'écririez jamais votre propre fonction de recherche binaire, mais il est important de comprendre comment cela fonctionne afin de pouvoir raisonner sur des choses comme où une base de données pourrait utiliser un index et où elle ne pourrait pas.
Une fois que vous avez mémorisé certains éléments de base, il est beaucoup plus facile de faire des choses comme interpréter la documentation. La documentation peut indiquer qu'une liste est utilisée et supposer que le programmeur sait implicitement que cela signifie que les insertions sont O (1) et les recherches sont O (n). Les blocs de construction sont également beaucoup plus stables au fil du temps - vous êtes très susceptible d'utiliser de nouveaux débogueurs toutes les quelques années, vous utiliserez probablement la même recherche binaire pendant toute votre carrière.
la source
"Pourquoi CS est-il enseigné en se concentrant sur la mémorisation ... par opposition à l'enseignement de compétences utiles" - Je pense que vous négligez un peu trop la mémorisation. Tout comme vous devez pratiquer l'écriture de code, interpréter la documentation, utiliser le débogueur, vous devez également pratiquer la mémorisation.
Vous pourriez être surpris de voir à quel point vous pouvez devenir plus efficace si vous n'avez pas à consulter la référence API aussi souvent ou à rechercher autant de commandes de débogueur.
L'une des meilleures choses que j'ai apprises au lycée a été d'observer un ami qui n'a jamais pris de notes en classe. Son argument était qu'il pouvait se rappeler ce qui était important. J'ai commencé à faire la même chose et je pense que cela a amélioré mes compétences en mémorisation, ce que je trouve très utile au quotidien, même avec toutes ces références d'API disponibles.
la source
Les examens à la plume et au papier ont réellement du sens si l'objectif est de tester une compréhension complète du sujet traité. J'ai passé l'examen Computer Science AB il y a près d'une décennie et je suis d'accord avec la méthode du stylo et du papier.
Vous devez en savoir suffisamment sur tout algorithme que vous apprenez dans les niveaux inférieurs de l'informatique pour pouvoir expliquer comment écrire le code d'implémentation dans votre langue cible. Les élèves devraient également être en mesure d'écrire du code à la main avec une syntaxe généralement correcte. Nous manquons tous parfois un point-virgule ou des parenthèses :). Les compétences de débogage et de conception peuvent également être testées sans déduction à partir d'un IDE utile.
Si un étudiant ne peut pas faire cela, alors il ne possède pas la maîtrise de ce sujet, juste peut-être une familiarité passagère.
la source
D'après mon expérience, la mémorisation s'accompagne d'une pratique simple et il n'est absolument pas nécessaire de l'enseigner. Plus important encore, cette approche signifie uniquement mémoriser ce dont vous avez réellement besoin de vous souvenir dans tout ce que vous faites, pas un tas d'ordures aléatoires dont votre professeur espère que vous pourriez avoir besoin et invariablement vous ne le ferez pas. Le temps passé à mémoriser la mise en œuvre d'un algorithme pourrait être beaucoup mieux consacré à une autre cause.
Après tout, pourquoi auriez-vous besoin de vous entraîner à écrire un algorithme? Une fois que vous l'avez écrit une fois, vous pouvez le réutiliser à tout moment, même en cas de très grande probabilité que quelqu'un d'autre n'ait pas déjà écrit une implémentation disponible gratuitement pour la langue de votre choix et que votre environnement ne fournisse pas déjà une telle un algorithme pour votre utilisation, ce qui n'est pas vrai pour la grande majorité des algorithmes simples comme le tri et autres. Pratiquer quelque chose où il est très peu probable que vous deviez le faire en premier lieu et même si vous le faites, vous ne devrez le faire qu'une seule fois? Pas une utilisation précieuse du temps.
La chose importante à savoir sur Heapsort n'est pas du tout comment l'implémenter. C'est la complexité de fonctionnement dans les meilleurs et les pires cas, et des choses similaires. Mais, surprise, il y a un tableau pratique sur Wikipedia qui vous donnera instantanément ces informations. Encore une fois, il n'y a aucune valeur à avoir cette connaissance. Il est instantanément disponible pour vous à tout moment, jusqu'à la fin des temps, sans frais. Alors pourquoi voudriez-vous le mémoriser? C'est inutile.
D'après mon expérience, il n'y a absolument aucune raison d'exiger qu'un étudiant mémorise quoi que ce soit. Si vous posez une question à laquelle une source de référence peut répondre, alors vous posez une question à laquelle la possibilité d'y répondre n'a aucune valeur.
la source
ORDER BY
et C ++std::sort
.