Прежде всего: я математик - профессиональный (в этом мне платят за математику). Я не программист. Я занимаюсь программированием, но совершенно определенно из разнообразия Cargo Cult (см. Первый комментарий на https://tex.stackexchange.com/q/451/86 и мой ответ) и ничего подобного, что обычно приводило бы меня к этому сайт (на самом деле, я зарегистрировался здесь, чтобы опубликовать этот ответ, увидев ссылку на него в чате TeX).
Резюме моего ответа: математика программирование .
Недавно я начал преподавать курс математики для нематематической группы студентов. Они были разделом программирования. Я думал, что это было фантастически! Наконец-то я смог научить математике людей, которые уже поняли основные идеи и у которых уже был элементарный инструментарий для выполнения математики. Я был невероятно разочарован, когда спросил, сколько из них действительно написали программу, и получил ответ где-то между 0 и 1.
Прежде чем я продолжу, я должен уточнить несколько вещей. Есть области математики, которые непосредственно связаны с программированием и связаны с оценкой алгоритмов и классификацией языков и тому подобное. Я не говорю о тех. Существует также программа, которая пытается перевести всю математику на формальный язык, который может быть оценен компьютером. Это немного ближе к тому, о чем я говорю, но даже если сосредоточиться на этом, будет не хватать основной части того, что я пытаюсь сказать. Математика, которую я делаю, и программирование, которое я делаю, почти полностью не связаны темой. Связь между ними находится на другом уровне.
Я хотел бы начать с комментария к основному вопросу:
Если это делает математику, то вся человеческая деятельность является формой математики. Если это так, то слово «математика» не имеет полезного значения, потому что его нельзя использовать для различения одного вида деятельности от другого.
Да, это делает математику. Но «математика» - все еще полезное слово, потому что, как говорится в песне: «Дело не в том, что ты делаешь, а в том, как ты это делаешь». Я бы сказал, что занимаюсь математикой, когда подхожу к чему-то математически . Иногда это математика с «жестким ядром»: формулировка определений, доказательство теорем. Иногда это не так. Иногда он пишет маленькие глупые программы, чтобы мои дети могли выучить их написание слов.
В этом мне помогает математика, когда я программирую:
Абстракция Это, вероятно , самый важный навык передаваться от математики. Под этим я подразумеваю возможность убрать все ненужные вещи и сосредоточиться на важных свойствах.
Перспектива Если бы я мог выбрать только одну вещь, которую должны были изучить все мои ученики, это было бы так: способность изменить точку зрения в соответствии с проблемой. Мы обычно рассматриваем это в линейной алгебре с формулами изменения базиса (которые приводят к ужасным матрицам и ужасным осложнениям), но это гораздо более применимо, чем это. В глубине души, это идея, что только потому, что что-то было представлено вам одним способом, это не должно быть способом, которым вы работаете с этим. Это отделяет взгляд от самой вещи от того, как она была представлена. Это может быть чрезвычайно практично: все дело в том, чтобы сделать что-то полезное или эффективное, Если у меня есть список векторов, и более эффективно хранить их в виде списка x-координат и списка y-координат, пусть будет так .
Форма в зависимости от функции, ведущая сверху; если вещь может быть представлена множеством разных способов, то уже не справедливо будет говорить о том, что одна конкретная презентация - это вещь. Снова перевести цитату из этой песни: «Дело не в том, кто ты есть, а в том , что ты делаешь ».
Я мог бы продолжать, но это те, которые приходят на ум.
Теперь, вероятно, есть много (негативных) реакций на то, что я написал до сих пор. Один из них будет «Это не математика, это просто здравый смысл». (или плохой смысл), на который я ссылаюсь на свое замечание выше, согласное с мнением, что «вся человеческая деятельность является формой математики». Другой будет «Это не тот тип математики, который подразумевается в этом вопросе». Это почти наверняка верно, и здесь я на самом деле гораздо больше сочувствую человеку, который сказал: «По крайней мере, я не касался математики в течение 10 лет». Он или она не правы, конечно, они занимались математикой в течение 10 лет, потому что всякий раз, когда они писали программу, они занимались математикой . Они просто не осознавали этого.
Я на самом деле использую некоторые "настоящие математики" в своих программах. Недавно я написал забавный 3D-исследователь форм, который использовал математические расчеты для определения проекций и других преобразований, которые мне пришлось применить к моим данным. Я был слегка удивлен, обнаружив, что на самом деле кодирую кватернионы! Но, конечно, математика, которая была задействована, была тривиальной по сравнению с математикой, которую я делаю, когда работаю. Это был материал с обратной стороны. Этот тип математики, тогда я согласен с мнением, что вы поднимаете это, когда вам это нужно, и если вам нужно что-то более сложное, чем вы можете найти в Википедии, тогда вы найдете настоящего математика, который сделает это за вас. Однако для того, чтобы вы могли поднять его, когда вам это нужно, вам нужно кое- что выучить., Эта вещь может быть не тем, чем вы когда-либо пользуетесь на самом деле, но, узнав, что что-то облегчает понимание того, чем вы на самом деле пользуетесь в дальнейшей жизни. Так что это, где я не согласен с Coder: вам нужно выучить некоторую математику , если вы когда - либо будете использовать какую - либо математику , и вы должны изучить его с математической стороны (что не означает доказательство теорем, кстати).
И так, наконец, к «Математика это программирование». Вы можете научиться всему этому, будучи хорошим программистом. И если вы выучите эти вещи, вы найдете математику намного проще, потому что вы поймете, что когда мы говорим о векторе в векторном пространстве, то это просто экземпляр класса, Vector
что означает, что мы можем делать все то, что Vector
делает с этот экземпляр: сложение, вычитание, масштабирование и так далее. Вот почему я хотел бы преподавать математику программистам. Но, говоря как математик, я бы сказал, что первыйиз них «абстракция» легче изучать в математике, чем в программировании, потому что математика - это погоня за абстракцией. Всякий раз, когда мы видим какое-то поведение, наша тренировка всегда состоит в том, чтобы спросить: «Что это за вещь, которая заставляет ее вести себя таким образом? Что если я возьму другую вещь, которая была похожа, она будет вести себя таким же образом? Должен ли я потерять его, чтобы перестать так себя вести? " (Принятие этого до крайности приводит к «многоножке математике» - поиск термина). Но мы делаем это не с (просто) объектами "реального мира" (какими бы они ни были), мы делаем это с вещами, которые уже были абстрагированы.
Это продолжалось достаточно долго, поэтому позвольте мне закончить с одной из классических шуток математика:
Математик и физик посетили семинар по новой модели, включающей 24-мерное пространство. После этого они обсуждали это, и физик заметил: «Это было действительно сложно. Я имею в виду, как можно визуализировать 24-мерное пространство?» На что математик ответил: «О, это просто. Просто визуализируйте n-мерное пространство и затем установите n = 24».
Добавлено 2012-03-2
Было довольно много комментариев к этому ответу, выражающих различные взгляды. Теперь они были удалены модератором при том понимании, что я постараюсь включить их (или ответить на них) в свой ответ.
Однако я не уверен, что смогу. Читая эти комментарии и остальную часть того, что на этой странице, я могу только прийти к выводу, что существует огромное недопонимание относительно того, что на самом деле является математика. Более того, я не чувствую себя достаточно компетентным, чтобы объяснить это. К счастью, кто-то уже связался с Плачем Локхарта, поэтому я отложу объяснение этого. Хотя я мог бы сформулировать это по-другому (поскольку я вырос в научной среде, я бы сделал больший акцент на экспериментальной природе математики), я не думаю, что смог бы выразить это лучше .
Я все еще думаю, что могу что-то добавить. А также недопонимания относительно того , что математика является , есть также недопонимание относительно того , что «делать математику» означает. Я вижу две почти противоречивые позиции:
Математика - это уравнения и формулы. Таким образом, нет необходимости изучать это, потому что существует Википедия (это почти противоположность апокрифическому вызову Эйлера Дидро ).
Математика о теоремах и определениях. Так что нет необходимости изучать его, так как программы никогда ничего не доказывают (что примерно так же заблуждение, как ... вставьте сюда любимую ошибку).
Хотя эти две позиции противоречат друг другу, они оказываются в одном и том же месте: нет смысла программисту изучать любую математику - и, несомненно, не математику! В конце концов, что они знают о чем-либо? Все, что действительно нужно знать программисту, можно найти в Википедии или украсть у кого-то еще.
Выше я описал себя как программист Cargo Cult. Бьюсь об заклад, у большинства из вас был частный хихиканье, и они подумали: «О да, держу пари, я знаю, как тогда выглядят ваши программы». Вы, вероятно, чувствовали себя немного самодовольными и превосходными (хотя я уверен, что вы чувствовали себя плохо из- за самодовольства и превосходства).
То, что я описал выше, это математика культа грузов.
Поэтому, когда я говорю, что вы должны немного изучить математику, чтобы понять, как работает математика, я говорю это точно по той же причине, что и вы, если бы вы увидели немного кода, который я написал: «Насколько легче ваша жизнь было бы, если бы вы прекратили вырезать и вставить код из StackOverflow и немного узнали бы о том, как это сделать правильно. "
Но самое главное, что вы должны учиться у математиков. Почему так? Вот аналогия. Язык, на котором я больше всего разбираюсь, это TeX. (Все сказано, правда!). Теперь предположим, что я хочу узнать немного больше о TeX, и так получилось, что Дон Кнут находится в городе и предложил дать несколько уроков по TeX. Или я мог бы просто прочитать об этом в Википедии. Или, может быть, это Perl и Ларри Уолл, или C # (это правильно?) И Джон Скит. Вполне возможно, что эти люди не лучшие учителя , но они наверняка восполнят это в той сумме, которую они знают!
И это то, что математики . Мы люди, которые пишут на реальном языке, а затем пишут библиотеки, которые вы используете. Конечно, вам не нужно знать, как доказать теорему - вы не собираетесь писать библиотеку! Но если вы немного знаете о том, как мы думаем, то это может помочь вам понять, почему мы написали библиотеку так, как мы это сделали, и если вы поймете, что она может помочь вам лучше использовать ее.
Существует золотая середина между поиском уравнений в Википедии и доказательством гипотезы Пуанкаре, точно так же, как - в отношении плача Локхарта - существует золотая середина между «я не очень разбираюсь в искусстве, но я знаю, что мне нравится» и быть Моне, и между "Где ключ"? " и быть доном Кнутом. Если вы еще учитесь в университете, у вас есть удивительная возможность учиться у людей, которые являются экспертами в своей области и которые по какой-то причине готовы тратить свое время, объясняя это вам.
Еще один момент, на котором я хотел бы остановиться подробнее, это то, что как программист вы не должны бояться изучать немного больше математики. Это не Глубокие Связи, ни полезность. Дело в том, что ваша способность программировать на компьютере может помочь вам в изучении математики. Я просто хочу упомянуть несколько.
Понимание переменных. Очень многих людей смущают простые заявления типа «Пусть n будет натуральным числом ...». Или «Пусть epsilon> 0». В математике есть места, где важно запомнить область действия переменной. Все это обычное явление в программировании. Научитесь переводить математическое утверждение в программу, и вам будет гораздо легче отслеживать, что к чему.
Природа доказательства. Если вы когда-либо написали тест или написали программу, которая будет использоваться кем-то другим, тогда вы понимаете суть доказательств. Когда вы делаете это, вы должны знать, что все, что пользователь вводит, вы можете иметь с этим дело (вставьте обязательную ссылку xkcd здесь). Это все доказательство! Демонстрация того, что независимо от того, что вставляет «пользователь / вселенная», утверждение будет выполнено. Эксперименталисты склоняются к «если это работает при нормальных обстоятельствах, это правда», но программисты знают, что всегда есть тот ребенок, который попробует Alt + G + Shift + ÅØÆ, просто чтобы посмотреть, что происходит.
DRY. Извините, что сломал это для вас, но мы это изобрели, а не вы. Мы «не повторяем себя» на протяжении тысячелетий. Вот почему у меня есть копия элементов Евклида на моих полках, и это все еще полезно .
И это еще не все. Если бы я знал немного больше о программировании, я написал бы книгу под названием «Математика для программистов», в которой целью было не учить «математике, которую должны знать программисты», а «математике, которую должен знать каждый, но оптимизированной для программистов». , Но я, вероятно, никогда не узнаю достаточно о программировании, чтобы написать его - если кто-то не предложит мне сотрудничество!
Я оставлю это там. Возможно, если бы я думал больше, я бы изменил то, что написал; надеюсь, я бы объяснил это лучше. Через несколько месяцев я могу даже не согласиться с его частями. Если кто-то хочет поспорить дальше или прокомментировать иначе, вероятно, лучше не делать этого в комментариях здесь. Вы знаете, где меня найти .