Как я могу выучить математику более высокого уровня, связанную с программированием, без особой формальной подготовки?
Я не посещал никаких математических уроков выше базовых показателей колледжа. Тем не менее, в ходе моей работы по программированию, я взял много математики и компьютерных наук из блогов и чтения, и я искренне верю, что у меня есть приличный математический ум. Например, я наслаждаюсь и успешно работаю над Project Euler.
Я хочу погрузиться и действительно начать изучать какую-нибудь классную математику, в частности дискретную математику, теорию множеств, теорию графов, теорию чисел, комбинаторику, теорию категорий, лямбда-исчисление и т. Д. До сих пор у меня сложилось впечатление, что я хорошо подготовлен к этим на концептуальном уровне, но мне действительно тяжело с математическим языком и символами. Я просто не "говорю на языке", и хотя я пытаюсь выучить его, я иду очень медленно. Мне может понадобиться несколько часов, чтобы проработать хотя бы один сложный абзац формулы или терминологии. И да, я могу искать термины и определения, но это ужасно обременительный процесс, который сильно затеняет теоретическую простоту того, что я пытаюсь выучить.
Я действительно боюсь, что мне придется вернуться к тому, с чего я остановился, получить учебник по математике среднего уровня и уделить серьезное время упражнениям, чтобы научиться мыслить таким образом. Это звучит удивительно скучно, поэтому я подумал, есть ли у кого-нибудь еще идеи или опыт в этом.
12 ответов
Если вы не хотите посещать занятия, вам все равно нужно получить то, что дал бы вам занятие: время на материале и много практики.
Итак, возьмите этот учебник и начните заниматься практическими задачами. Другого пути на самом деле не существует (если только вы не выяснили, как на самом деле может возникнуть осмос...).
Нет знаний, которые можно получить только в классе.
Ознакомьтесь с учебным курсом MIT по математике
Также их сайт на YouTube
Project Euler также является отличным способом думать о математике в том, что касается программирования
Пройдите курс обучения в местном колледже. Если вы похожи на меня, вам понадобится структура. Есть что-то, что можно сказать о давлении оценивания. Я имею в виду, что так много нужно узнать, что соло действительно непрактично, если вы хотите иметь нечто большее, чем просто мимолетное понимание.
Похоже, ты в том же положении, что и я. Что я узнаю о математическом образовании, так это о том, что большинство из них преподается неправильно. Является ли причина или результат этого, я также нахожу, что большинство математических текстов написаны неправильно. Исключения редки, но заметны. Например, все, что написано Дональдом Кнутом, является шагом в правильном направлении.
Вот пара статей, в которых эта проблема достаточно четко изложена:
А вот статья о простой методике обучения, которая направлена на сохранение знаний:
Я бы согласился с @John Kugelman, классы - это способ сделать это правильно, но я бы добавил, что если вы не хотите посещать занятия, у Интернета есть много ресурсов, которые помогут вам, включая записанные лекции, которые я найти может быть более доступным, чем книги и документы.
Я бы порекомендовал проверить MIT Open Courseware. Там есть модуль по математике для информатики, и мне нравится работать над курсом видео-лекций Гильберта Странга по линейной алгебре.
Youtube и videolectures.com также являются хорошими ресурсами для видеолекций.
Наконец, в bookboon есть бесплатная книга по математике для CS.
Рассмотрим аудиторские занятия по дискретной математике и доказательствам в местном университете. Дискретный класс по математике научит вас некоторым действительно полезным вещам (теория графов, комбинаторика и т. Д.), А класс доказательств научит вас больше о математическом стиле мышления и письма.
К этому списку я бы добавил "Дорога Хаскеля" к логике, математике и программированию, а также к концептуальной математике: первое введение в категории.
--- 16 ноября '09 ответ для потомков--
Две книги. Теория графов Дистеля и конкретная математика Кнута. Как только вы освоитесь с этими, попробуйте CAGES.
Найти хорошего наставника, который является экспертом в этой области, который готов проводить время с вами на регулярной основе.
В изучении плотного материала есть своего рода хитрость, например, математика и математический CS. Изучать незнакомые абстрактные вещи сложно, и самый эффективный способ сделать это - познакомиться с ними поэтапно. Во-первых, вам нужно проверить это: не волнуйтесь, если вы не все понимаете в первом проходе. Затем сделайте перерыв; после того, как вы отдохнули, пройдитесь еще раз вглубь. Вспенить, промыть, повторить; медитируйте, и в конце концов вы можете стать просветленным.
Я не уверен, с чего конкретно начать, чтобы познакомиться с языком математики; Я только что прочитал много бумаг, пока не стал лучше. Вы могли бы искать вводные учебники по формальной математической логике, так как большая часть математики (особенно в теории языка) основана на этом; если вы научитесь немного взламывать формальные вещи, повседневная запись может выглядеть немного проще.
Вам, вероятно, следует просмотреть книги по темам, которые вас лично интересуют; неотъемлемый интерес должен помочь вам преодолеть горб. Кроме того, убедитесь, что вы найдете тексты, которые на самом деле являются вводными; Я стал настороженно относиться к тонким, неокрашенным твердым обложкам с надписью " Элементарная теория Foobar", которые имеют тенденцию быть элементарными только для постдоков с докторской степенью в Foobar.
Предупреждение: не начинайте с теории категорий - это самая скучная математика, с которой я когда-либо сталкивался! Из-за его актуальности для языкового дизайна и теории типов, я хотел бы узнать больше об этом, но до сих пор я не смог разобраться...
Для хорошего, скромного вступления в биты многих видов математики CS-ish, я рекомендую Godel, Escher, Bach от Hofstadter (если вы, конечно, еще не читали его). Это не официальная математическая книга, поэтому она не поможет вам с проблемой знакомства, но она очень вдохновляет.
Математическая нотация сродни нескольким компьютерным языкам:
- краткий
- требовательный
- основанный на многих идиомах
- изрядное количество местных вариаций и условностей
Как и в случае с компьютерным языком, вам не нужно "мыть слона целиком": принимайте его по одной за раз.
Предварительный план для вас может быть
- определить области математики, которые интересны или важны для вас. (кажется, у вас уже есть в этом какое-то чувство, CS помог вам развить для этого достаточно культуры.)
- взять (или просто проверить) несколько формальных занятий в этой области. Я согласен с несколькими ответами в этом посте, личный курс в местном колледже предпочтителен, но, может быть, сначала, или, чтобы быть уверенным, чтобы получить максимум от конкретного класса, сначала самообучаться в этой области с MIT OCW, аналогичные онлайн-ресурсы и связанные книги в порядке / хорошо.
- если область математики вводит слишком высокий уровень предварительного условия с точки зрения беглости с примечаниями или с некоторой основной концепцией или (чаще всего механические вычисления и методы преобразования). Нет проблем! Просто вернитесь немного назад, изучите эти основы (и только эти фонды!) И снова двигайтесь вперед.
- Найдите "гуру", кого-то, у которого широкая математическая культура и опыт, не обязательно математик, физики тоже хороши, ведь они часто могут сформулировать математику более практичным способом. Используйте этого гуру, чтобы он направлял вас, поскольку он / она может показать вам, как большие кусочки сочетаются друг с другом.
Примечание. Изучение математических обозначений само по себе мало что дает. Скорее, его следует изучать в контексте, как, например, идиома C# лучше запоминается при использовании и применительно к конкретной задаче, чем при обучении в вакууме. Однако соответствующая публикация SO предоставляет несколько ресурсов для расшифровки и изучения математических обозначений.
Для начала изучения теории категорий я рекомендую Теорию категорий для науки Дэвида Спивака (AKA Category Theory для ученых), потому что она относительно понятна благодаря множеству примеров, которые позволяют понять по аналогии и которые быстро создают основу для понимания более абстрактных понятий.
Это требует умения логически рассуждать и интуитивно понятно, что такое множество. Он идет от множеств и функций через базовую теорию категорий к сопряженным функторам, категориям функторов, пучкам, монадам и введению в операды. Два основных направления - моделирование баз данных в терминах категорий и описание категорий с помощью аннотированных диаграмм, называемых ologs. Библиография содержит ссылки на более продвинутые и специализированные темы, включая недавние статьи доктора Спивака.
Ожидаемый результат от чтения этой книги - способность понимать тексты теории категорий и статьи, написанные для математиков, таких как Теория категорий Мак Лэйна для рабочего математика.
В формате PDF он доступен по http://math.mit.edu/~dspivak/teaching/sp13/ (динамическая версия рекомендуется с самой последней версии). HTML-версия с открытым доступом доступна по https://mitpress.mit.edu/books/category-theory-sciences (рекомендуется, поскольку она включает дополнительный контент, включая ответы на некоторые упражнения).
Project Euler вынимает проблемы из контекста и позволяет их решать людям. Проект Эйлер не может научить вас чему-либо эффективно. Я думаю, вы должны забыть об этом, если это популярно, это ничего не значит. Вы не можете изучать математику через Project Euler, так как он содержит только кусочки (и некоторые довольно высокоуровневые кусочки), которые вы должны знать для решения проблем. Изучение математики означает изучение предмета и чтение книги о нем, а также решение упражнений или чтение решений - вот как вы учите математику. Если так получилось, что во время чтения вы найдете что-то близкое к проекту euler, ваша удача, но в противном случае Project euler - пустая трата времени. Я думаю, что время куда лучше потратить, выбрав определенную область математики и изучая ее. Позвольте мне объяснить, почему: я решил 3 довольно продвинутых задачи Проекта Эйлера, и все они обращались к знаниям из теории чисел, которые у меня случились, потому что я изучаю некоторую их часть. Я не думаю, что я что-то узнал от Project Euler, просто случилось так, что я уже знал некоторую теорию чисел и решил проблемы.
Например, если вы обнаружите, что вам нравится теория чисел, возьмите H. Davenport -> Hardy & Wright -> Kenneth & Rosen's, изучите их. Если вам нравится теория графов, возьмите книгу Рейнхарда Дистеля, которая находится в свободном доступе, и изучите ее (или проверьте books.google.com и найдите то, что больше подходит вашему вкусу), но не распространяйте свое внимание в 999999 направлениях только потому, что у Project Euler есть проблемы. от динамического программирования до продвинутой геометрии или продвинутой теории чисел, это явно неправильный путь, и он не приблизит вас к вашей цели.
Это звучит удивительно скучно
Ну... Математика не скучная, когда вы находите какую-то проблему, к которой вы привязаны, которая вам нравится, и вы хотели бы найти решение, и когда у вас есть достаточно времени, чтобы поразмышлять над ней, не находясь за экраном компьютера., Математика делается в основном ручкой и бумагой (да, вы можете использовать компьютеры... но это не совсем так).
Таким образом, если вы обнаружите реальную проблему или какую-то проблему программирования, которая принесет пользу, если вы будете знать некоторые сложные математические дисциплины, и вы знаете, какую математику вы должны изучать, это может быть мотивирующим для обучения таким образом.
Если вы чувствуете, что у вас нет мотивации, трудно учиться правильно.
Существует также вопрос о том, что вы на самом деле имеете в виду, когда говорите " учитесь". Останавливается ли процесс обучения после того, как вы решили проблемы в конце главы книги? Ну, вы решаете. Вы можете считать, что вы закончили изучение этого предмета, или можете считать, что вы еще не закончили, и читайте больше об этом. Есть целые книги только об одном уравнении и его вариациях.
Количество математики, связанной с программированием, которую вы можете изучать без формального обучения, ограничено, но этого более чем достаточно. Но, может быть, вы можете самообучаться.
Все сводится к вашим ресурсам и мотивации.
Чтобы знать математику, нужно заниматься математикой, а не программированием (проект Эйлера).