Как я могу изучать математику, связанную с программированием на высшем уровне, без значительной формальной подготовки?

Я не занимался математическими классами над базовым исчислением колледжа. Тем не менее, в ходе моей работы по программированию, я собрал много математики и comp sci из блогов и чтения, и я искренне верю, что у меня приличный математический ум. Например, мне нравится и имеет успех, например, Project Euler.

Я хочу погрузиться и действительно начать изучать классную математику, в частности дискретную математику, теорию множеств, теорию графов, теорию чисел, комбинаторика, теорию категорий, лямбда-исчисление и т.д. Мое впечатление до сих пор заключается в том, что я хорошо подготовлен, чтобы взять их на концептуальном уровне, но мне очень тяжело заниматься математическим языком и символами. Я просто не "говорю на языке", и хотя я пытаюсь это узнать, я иду очень медленно. Мне может потребоваться много часов для работы даже по одной формуле или терминологическому абзацу. И да, я могу искать термины и определения, но это ужасно обременительный процесс, который очень скрывает теоретическую простоту того, что я пытаюсь изучить.

Я действительно боюсь, что мне придется вернуться туда, где я остановился, получить учебник по математике среднего уровня и потратить некоторое серьезное время на упражнения, чтобы тренироваться таким образом мысли. Это звучит удивительно скучно, поэтому я задавался вопросом, есть ли у кого-нибудь какие-либо идеи или опыт с этим.

Ответ 1

Если вы не хотите посещать класс, вам все равно нужно получить то, что класс дал бы вам: время в материале и много практики.

Итак, возьмите этот учебник и начните заниматься практическими проблемами. Там действительно нет другого пути (если вы не выяснили, как осмоз может на самом деле произойти...).

Ответ 3

Возьмите класс в местном колледже. Если вы похожи на меня, вам понадобится структура. Там что-то нужно сказать о том, чтобы быть оцененным. Я имею в виду, что так много, чтобы узнать, что соло действительно непрактично, если вы хотите иметь больше, чем просто своеобразное понимание.

Ответ 4

Похоже, ты в той же позиции, что и я. То, что я узнаю о математическом образовании, состоит в том, что большинство из них преподаются неправильно. Является ли причиной или результатом этого, я также нахожу, что большинство математических текстов написаны неправильно. Исключения встречаются редко, но заметны. Например, все, что написано Дональдом Кнутом, является шагом в правильном направлении.

Вот несколько статей, в которых достаточно четко указывается проблема:

И вот статья о простой методике исследования, целью которой является сохранение знаний:

Ответ 5

Рассмотрим аудиторские классы по дискретной математике и доказательствам в местном университете. Дискретный математический класс научит вас некоторым действительно полезным вещам (теория графов, комбинаторика и т.д.), А класс доказательств научит вас больше о математическом стиле мышления и письма.

Ответ 6

Я согласен с @John Kugelman, классы - это путь, чтобы сделать это правильно, но я бы добавил, что если вы не хотите брать уроки, в Интернете есть много ресурсов, которые помогут вам, включая записанные лекции, которые я нахожу, могут быть более доступными, чем книги и документы.

Я бы рекомендовал проверить MIT Open Courseware. Там есть Maths для Computer Science module, и мне нравится работать через Курс лексической алгебры Гильберта Странга видео лекций.

Youtube и videolectures.com также являются хорошими ресурсами для видео-лекций.

Наконец, там есть бесплатная книга Maths для CS в bookboon.

Ответ 7

В этот список я бы добавил "Дорога Haskel к логике, математике и программированию" и Концептуальная математика: первое введение в категории.

--- ноябрь 16 '09 ответ для потомков -

Две книги. Diestel Теория графов и Knuth Конкретная математика. Как только вы получите зависание этих попыток CAGES.

Ответ 8

Найдите хорошего наставника, который является экспертом в этой области, который хочет проводить время с вами на регулярной основе.

Ответ 9

Существует какая-то трюк для изучения плотного материала, такого как математика и математика. Изучение незнакомого абстрактного материала сложно, и наиболее эффективным способом это - познакомиться с ним поэтапно. Во-первых, вам нужно сэкономить: не беспокойтесь, если вы не понимаете все на первом проходе. Затем возьмите break; после того, как вы отдохнете, повторите его еще глубже. Намочите, промойте, повторите; медитируйте, и в конце концов вы можете стать просвещенными.

Я не уверен, где именно начать, чтобы ознакомиться с языком математики; Я просто закончил чтение многих статей, пока не стал лучше. Вы можете искать вводные учебники по формальной математической логике, так как из этого основано много математики (особенно в теории языка); если вы научитесь немного взломать формальные материалы, повседневная нотация может выглядеть немного легче.

Вероятно, вам следует просмотреть книги по темам, которые вас лично интересуют; неотъемлемый интерес должен помочь вывести вас за горб. Кроме того, убедитесь, что вы находите тексты, которые на самом деле вводятся; Я стал настороженно относиться к тонким, неподтвержденным твердым обложкам, обозначенным "Элементарная теория Фуобара", которые, как правило, являются элементарными только для постдоков с PhD в Foobar.

Слово предупреждения: не начинайте с теории категорий - это самая скучная математика, с которой я когда-либо сталкивался! Из-за его соответствия языковому дизайну и теории типов я хотел бы узнать больше об этом, но до сих пор мне не удалось справиться...

Для приятного ввода scattershot для бит многих видов CS-ish math, я рекомендую Godel, Escher, Bach by Hofstadter (если вы, конечно, не читали его, конечно). Это не формальная математическая книга, так что это не поможет вам с проблемой знакомства, но это довольно вдохновляет.

Ответ 10

Математическая нотация сродни нескольким компьютерным языкам:

  • лаконичным
  • требовательный
  • на основе многих идиом
  • справедливое количество локальных вариаций и условностей

Как и в случае с компьютерным языком, вам не нужно "вымывать весь слон за один раз": возьмите его по одной части по времени.

Ориентировочный план для вас может быть

  • идентифицировать интересующие вас области математики. (похоже, у вас уже есть немного смысла для этого, CS помогла вам развить для него достаточно культуру.)
  • возьмите (или просто проверите) несколько формальных классов в этой области. Я согласен с несколькими ответами в этом посте, индивидуальный курс в местном колледже предпочтительнее, но, возможно, сначала, или, конечно же, чтобы получить максимальную отдачу от определенного класса, сначала самостоятельно обучая себя в этой области с помощью MIT OCW, похожие онлайн-ресурсы и связанные с ними книги в порядке/в порядке.
  • если область математики вводит слишком высокую предварительную необходимость с точки зрения беглости с обозначением или с некоторой базовой концепцией или (чаще всего с механическими вычислениями и методами трансформации). Нет проблем! Просто отступите назад, изучите эти основы (и только эти основы!) И снова двигайтесь вперед.
  • Найдите "гуру", человека, который обладает широкой математической культурой и экспозицией, не обязательно математик, физики тоже хороши, действительно, они могут часто формулировать математику более практично. Используйте этого гуру, чтобы вести вас, так как он/она может показать вам, как большие части подходят друг другу.

Примечание. Невозможно получить математическое обозначение для себя. Скорее, его следует изучать в контексте, так же как сказать, что идиома С# лучше запоминается при использовании и когда связана с конкретной задачей, а не изучается в вакууме. Однако связанная публикация SO предоставляет несколько ресурсов для расшифровки и изучения математической нотации

Ответ 11

Project Euler берет проблемы из контекста и бросает их, чтобы люди могли их решить. Project Euler не может научить вас чему-либо эффективному. Я думаю, вы должны забыть об этом, если он популярен, это ничего не значит. Вы не можете изучать математику через Project Euler, поскольку она содержит только кусочки (и некоторые довольно высокие уровни), которые вы должны знать, чтобы решить проблемы. Изучение математики означает рассматривать предмет и читать книгу об этом и решать упражнения или читать решения, как вы учите математику. Если так получится, что через ваше чтение вы найдете что-то, что близко к какой-то эйлеру проекта, ваша удача, но в противном случае Project euler - это полная трата времени. Я думаю, что время гораздо лучше инвестировано, выбирая конкретную отрасль математики и изучая это. Позвольте мне объяснить, почему: я решил 3 довольно продвинутые проблемы Projec Euler, и все они обращались к знаниям из теории чисел, которые у меня были, потому что я изучаю некоторые ее части. Я не думаю, что получил от Project Euler ничего, только что случилось, что я уже знал некоторую теорию чисел и решал проблемы.

Например, если вы узнаете, что вам нравится теория чисел, возьмите Х. Дэвенпорта → Харди и Райт → Кеннет и Розен, изучите их. Если вам нравится, что Graph Theory возьмёт книгу Рейнхарда Дистеля, которая свободно доступна и изучает (или просматривает books.google.com и обнаруживает, что вам больше подходит по вашему вкусу), но не обращайте внимания на направления 999999 только потому, что Project Euler имеет проблемы от динамического программирования до продвинутой геометрии или до продвинутой теории чисел, это, безусловно, неправильный путь, и это не приблизит вас к вашей цели.

Звучит удивительно скучно

Ну... Математика не скучна, когда вы находите какую-то проблему, к которой вы привязаны, что вам нравится, и вы хотели бы найти решение, и когда у вас будет достаточно времени, чтобы задуматься об этом, экран компьютера. Математика в основном выполняется с ручкой и бумагой (да, вы можете использовать компьютеры.. но это не совсем так).

Итак, если вы обнаружите проблему реального мира или какую-либо проблему программирования, которая выиграет от вы знаете некоторые продвинутые математики, и вы знаете, какие математики вы должны изучать, это может побуждать учиться таким образом.

Если вы чувствуете, что не мотивированы, трудно учиться должным образом.

Существует также вопрос о том, что вы на самом деле имеете в виду, когда говорите learn. Оканчивает ли процесс обучения после того, как вы решили проблемы в конце главы книги? Ну, ты решаешь. Вы можете подумать, что вы закончили изучать этот предмет, или можете считать, что вы еще не закончили и больше не читали об этом. Есть целые книги только по одному уравнению и вариациям.

Объем математики, связанной с программированием, которую вы можете изучать без формального обучения, ограничен, но этого более чем достаточно. Но, может быть, вы сами можете научиться самостоятельно.

Все это сводится к вашим ресурсам и мотивации.

Чтобы знать математику, вам нужно заниматься математикой, а не программировать (эйлер проекта).

Ответ 12

Для начала изучения теории категорий я рекомендую Теорию категорий Дэвида Спивака для науки (теория категорий AKA для ученых), потому что она относительно понятна из-за многих примеров, которые позволяют понять по аналогии и которая быстро создает основу для понимания более абстрактных понятий.

Для этого требуется способность рассуждать логически и интуитивно понятное представление о том, что такое набор. Он исходит из множеств и функций через теорию базовой категории до присоединенных функторов, категорий функторов, пучков, монад и введения в операды. Два основных потока - моделирование баз данных по категориям и описание категорий с аннотированными диаграммами, называемыми ologs. Библиография содержит ссылки на более продвинутые и специализированные темы, в том числе недавние работы доктора Спивака.

Ожидаемый результат чтения этой книги - это способность понимать тексты и статьи теории теорий, написанные для математиков, такие как Теория категорий Mac Lane для рабочего математика.

В формате PDF он доступен из http://math.mit.edu/~dspivak/teaching/sp13/ (рекомендуется динамическая версия с самого последнего). Версия HTML с открытым доступом доступна из https://mitpress.mit.edu/books/category-theory-sciences (что рекомендуется, так как оно включает дополнительный контент, включая ответы на некоторые упражнения).