В течение прошлого года я учился в старших классах средней школы информатики. Кажется, что нас учат просто запоминать код и функции, а не то, как быть находчивым и эффективным при использовании документации и тому подобного.
Практически, я думаю, что многие (если не все) задания по программированию позволили бы вам пролистывать документацию, просматривать прошлый код и код других, по сути, делая то, что мой учитель считал бы «обманом».
Хотя я согласен с тем, что основные понятия необходимы для запоминания (по любому предмету), для меня кажется излишним и нецелесообразным сдавать бумажный экзамен для класса CS, особенно когда практически у вас есть компилятор, отладчик, справочник руководства и весь Интернет, к которому можно обратиться в любой реальной рабочей ситуации.
Почему CS учат сосредоточиться на запоминании кода и функций, а не на обучении полезным навыкам, в том числе тому, как использовать и интерпретировать документацию, примеры кода, отладчик и тому подобное?
Ответы:
В старших классах вы находитесь на самом базовом уровне своего пути к мастерству. Вещи, которые рассматриваются в вашем классе, - это то, что профессиональный программист должен знать холодно. Во многом это сродни изучению ваших «временных таблиц». Конечно, вы всегда сможете взять калькулятор в режиме «реального мира», но это запоминание не только увеличивает вашу скорость в более сложных задачах, но также способствует более глубокому пониманию основных принципов.
Например, вы должны знать несколько алгоритмов сортировки, как они реализованы, как они работают, когда их лучше всего использовать и когда их не использовать. Это всегда можно посмотреть, но не должно быть - больше, чем математик должен искать 6 раз 8.
источник
Это часто преподается таким образом, потому что учителя обычно не знают другого способа проверки понимания. Ваши чувства абсолютно правильны в том смысле, что бесполезно учить так. То, как люди получают образование в целом, отчаянно нуждается в реформе!
Жизнь становится лучше, хотя, по крайней мере, в UIUC я обнаружил, что чем выше вы идете на занятиях по CS, тем меньше экзамены ориентированы, как вы описываете, и на большинстве моих курсов нам давали шпаргалку для всего этого дерьма что вы, вероятно, гуглили бы, если бы на самом деле сидели за компьютером.
Тем не менее, чем выше я учусь в своих классах, тем меньше они на самом деле учат вас языкам или тому, как что-то реализовывать. На самом деле, у меня был только один класс, где они действительно научили нас чему-то программированию, в основном это были абстрактные математические концепции, и от нас ожидали, что мы сами разберемся с частью программирования (при условии, что они всегда были рады помочь, но это было никогда что-нибудь на экзамене).
источник
Не позволяйте школьному обучению мешать вашему образованию.
-- Марк Твен
Я мексиканец и говорю вам это, потому что в Мексике не совсем хорошее место для образования (на любом уровне), по крайней мере, в государственном образовании.
Ну, в середине моей карьеры (CS) я чувствую точно так же, как вы себя чувствуете, поэтому я начинаю учиться самостоятельно, и я провожу год, изучая алгоритмы, linux, скрипты, как работает мой компьютер, немного реляционного базы данных, HTML, CSS и т. д. (немного обо всем). И, конечно, мне пришлось пропустить занятия *, подвести свои оценки * и закончить через год после *, все для того, чтобы учиться.
После этого года я возвращаюсь к своей «обычной» рутине, возвращаясь к обычным занятиям, домашним заданиям, экзаменам и проектам. Занятия все еще были скучными, ничего нового для изучения, все было одинаково. Поэтому я решил принять участие в конкурсах сайтов по программированию, таких как UVA судья онлайн , шеф-повар кода и проект euler , затем я посмотрел несколько лекций в MIT Open Course Ware и все еще учился самостоятельно, но по-другому.
Урок: не позволяйте вещам случаться, заставляйте вещи случаться. Если вы недовольны тем, как вы учитесь, измените его!
* Не самые мудрые решения, которые я принял.
источник
Это зависит от того, что вы пытаетесь запомнить ...
Например, чтобы изучать математику, вы должны быть знакомы с алгеброй и часто должны проявлять творческий подход к выполнению алгебраических манипуляций, чтобы упростить уравнения. Но вы должны запомнить некоторые строительные блоки, чтобы иметь возможность сосредоточиться на этих интересных битах. Вы должны, например, знать свои таблицы умножения наизусть, и вы должны знать некоторые тождества, чтобы вы могли распознать, как манипулировать уравнениями, чтобы использовать эти тождества.
Чтобы изучать информатику, вы также должны быть знакомы с базовыми структурами и алгоритмами построения блоков, потому что вам нужно будет применять их к задачам более высокого уровня. Крайне маловероятно, что вы когда-нибудь, например, напишите свою собственную реализацию связанного списка в реальном мире, вы просто воспользуетесь той, которую предоставляет ваша библиотека. Но, зная, как реализован связанный список и как реализовать свой собственный, вы сможете понять, где и следует ли использовать связанный список, когда вы начнете работать над проблемами более высокого уровня. Точно так же вы никогда бы не написали свою собственную функцию двоичного поиска, но важно понять, как она работает, чтобы вы могли рассуждать о таких вещах, как, где база данных может использовать индекс, а где нет.
После того, как вы запомнили некоторые базовые строительные блоки, гораздо проще выполнять такие вещи, как интерпретация документации. Документация может указывать, что список используется, и предполагать, что программист неявно знает, что это означает, что вставки - это O (1), а поиск - O (n). Строительные блоки также значительно более стабильны с течением времени - вы, скорее всего, будете использовать новые отладчики каждые несколько лет, вы, вероятно, будете использовать один и тот же бинарный поиск всю свою карьеру.
источник
«Почему CS учат фокусироваться на запоминании ... вместо того, чтобы преподавать полезные навыки» - я думаю, вы слишком много не учитываете запоминание. Так же, как вы должны практиковаться в написании кода, интерпретации документации, использовании отладчика, вы также должны практиковать запоминание.
Вы можете быть удивлены, насколько эффективнее вы можете стать, если вам не нужно часто обращаться к API-справке или искать столько команд отладчика.
Одной из лучших вещей, которую я узнал в старшей школе, было наблюдение за другом, который никогда не делал заметок в классе. Его аргумент состоял в том, что он мог вспомнить, что важно. Я начал делать то же самое и думаю, что это улучшило мои навыки запоминания, которые я считаю очень полезными каждый день, даже когда все эти ссылки на API легко доступны.
источник
Ручные и бумажные экзамены действительно имеют смысл, если цель состоит в том, чтобы проверить полное понимание предмета под рукой. Я сдал экзамен по компьютерным наукам почти десять лет назад, и я согласен с методом пера и бумаги.
Вы должны знать достаточно о любом алгоритме, который вы изучаете на более низких уровнях информатики, чтобы иметь возможность объяснить, как писать код реализации на вашем целевом языке. Студенты также должны иметь возможность писать код вручную с в основном правильным синтаксисом. Мы все пропускаем точку с запятой или скобки иногда :). Кроме того, навыки полезной отладки и проектирования могут быть проверены без помощи полезной IDE.
Если ученик не может этого сделать, он не владеет этой темой, возможно, просто мимолетное знакомство.
источник
По моему опыту, запоминание приходит с простой практикой, и совершенно не нужно его учить. Что еще более важно, этот подход означает только запоминание того, что вам действительно нужно помнить во всем, что вы делаете, а не кучу случайного мусора, который, как надеется ваш учитель, вам может понадобиться, и неизменно вы этого не сделаете. Время, затрачиваемое на запоминание реализации какого-либо алгоритма, может быть гораздо лучше посвящено какой-то другой причине.
В конце концов, зачем вам практиковаться в написании алгоритма? После того, как вы напишите его один раз, вы можете использовать его снова и снова - даже при крайне малой вероятности того, что кто-то еще не написал свободно доступную реализацию для языка по вашему выбору и что ваша среда еще не обеспечивает такой возможности. алгоритм для вашего использования, который тривиально не подходит для подавляющего большинства простых алгоритмов, таких как сортировка и тому подобное. Практиковать что-то там, где крайне маловероятно, что вам когда-либо придется делать это в первую очередь, и даже если вы это делаете, вам когда-нибудь придется делать это только один раз? Не ценное использование времени.
Важная вещь, которую нужно знать о Heapsort, это не то, как его реализовать вообще. Это сложность работы в лучшем и худшем случаях и тому подобное. Но, удивительно, в Википедии есть удобный столик, который мгновенно предоставит вам эту информацию. Итак, опять же, нет смысла иметь это знание. Он доступен для вас в любое время, когда вы захотите, с настоящего момента и до конца, практически без затрат. Так почему вы хотите запомнить это? Это бессмысленно.
По моему опыту, нет абсолютно никаких причин требовать от ученика запоминания чего-либо. Если вы задаете вопрос, на который можно получить ответ из справочного источника, тогда вы задаете вопрос, когда возможность ответить на него не имеет значения.
источник
ORDER BY
и C ++std::sort
.