Какое отношение имеет математика к программированию? [закрыто]

89

Я только начал диплом в области разработки программного обеспечения. Прямо сейчас мы начинаем с базовой Java и тому подобного (поэтому, можно сказать, снизу вверх) - что хорошо, у меня нет опыта программирования, кроме знания того, как делать «Hello World» в Java.

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

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

Рори
источник
49
Программирование это математика. ru.wikipedia.org/wiki/Discrete_matmatics
SK-logic
25
@ Дэйв, поэтому я дал ссылку в комментарии, а не в качестве ответа.
SK-logic
7
@FiascoLabs, даже более того - структура и логика языка также являются областями математики. Программирование - это не что иное, как прикладная математика.
SK-logic
19
На несвязанной ноте, начинать с Java не "снизу".
Matt H
5
@ CharlesE.Grant, многие студенты-математики делают то же самое (и все еще сдают свои тесты).
SK-logic

Ответы:

138

Прежде всего: я математик - профессиональный (в этом мне платят за математику). Я не программист. Я занимаюсь программированием, но совершенно определенно из разнообразия Cargo Cult (см. Первый комментарий на https://tex.stackexchange.com/q/451/86 и мой ответ) и ничего подобного, что обычно приводило бы меня к этому сайт (на самом деле, я зарегистрировался здесь, чтобы опубликовать этот ответ, увидев ссылку на него в чате TeX).

Резюме моего ответа: математика программирование .

Недавно я начал преподавать курс математики для нематематической группы студентов. Они были разделом программирования. Я думал, что это было фантастически! Наконец-то я смог научить математике людей, которые уже поняли основные идеи и у которых уже был элементарный инструментарий для выполнения математики. Я был невероятно разочарован, когда спросил, сколько из них действительно написали программу, и получил ответ где-то между 0 и 1.

Прежде чем я продолжу, я должен уточнить несколько вещей. Есть области математики, которые непосредственно связаны с программированием и связаны с оценкой алгоритмов и классификацией языков и тому подобное. Я не говорю о тех. Существует также программа, которая пытается перевести всю математику на формальный язык, который может быть оценен компьютером. Это немного ближе к тому, о чем я говорю, но даже если сосредоточиться на этом, будет не хватать основной части того, что я пытаюсь сказать. Математика, которую я делаю, и программирование, которое я делаю, почти полностью не связаны темой. Связь между ними находится на другом уровне.

Я хотел бы начать с комментария к основному вопросу:

Если это делает математику, то вся человеческая деятельность является формой математики. Если это так, то слово «математика» не имеет полезного значения, потому что его нельзя использовать для различения одного вида деятельности от другого.

Да, это делает математику. Но «математика» - все еще полезное слово, потому что, как говорится в песне: «Дело не в том, что ты делаешь, а в том, как ты это делаешь». Я бы сказал, что занимаюсь математикой, когда подхожу к чему-то математически . Иногда это математика с «жестким ядром»: формулировка определений, доказательство теорем. Иногда это не так. Иногда он пишет маленькие глупые программы, чтобы мои дети могли выучить их написание слов.

В этом мне помогает математика, когда я программирую:

  1. Абстракция Это, вероятно , самый важный навык передаваться от математики. Под этим я подразумеваю возможность убрать все ненужные вещи и сосредоточиться на важных свойствах.

  2. Перспектива Если бы я мог выбрать только одну вещь, которую должны были изучить все мои ученики, это было бы так: способность изменить точку зрения в соответствии с проблемой. Мы обычно рассматриваем это в линейной алгебре с формулами изменения базиса (которые приводят к ужасным матрицам и ужасным осложнениям), но это гораздо более применимо, чем это. В глубине души, это идея, что только потому, что что-то было представлено вам одним способом, это не должно быть способом, которым вы работаете с этим. Это отделяет взгляд от самой вещи от того, как она была представлена. Это может быть чрезвычайно практично: все дело в том, чтобы сделать что-то полезное или эффективное, Если у меня есть список векторов, и более эффективно хранить их в виде списка x-координат и списка y-координат, пусть будет так .

  3. Форма в зависимости от функции, ведущая сверху; если вещь может быть представлена ​​множеством разных способов, то уже не справедливо будет говорить о том, что одна конкретная презентация - это вещь. Снова перевести цитату из этой песни: «Дело не в том, кто ты есть, а в том , что ты делаешь ».

Я мог бы продолжать, но это те, которые приходят на ум.

Теперь, вероятно, есть много (негативных) реакций на то, что я написал до сих пор. Один из них будет «Это не математика, это просто здравый смысл». (или плохой смысл), на который я ссылаюсь на свое замечание выше, согласное с мнением, что «вся человеческая деятельность является формой математики». Другой будет «Это не тот тип математики, который подразумевается в этом вопросе». Это почти наверняка верно, и здесь я на самом деле гораздо больше сочувствую человеку, который сказал: «По крайней мере, я не касался математики в течение 10 лет». Он или она не правы, конечно, они занимались математикой в ​​течение 10 лет, потому что всякий раз, когда они писали программу, они занимались математикой . Они просто не осознавали этого.

Я на самом деле использую некоторые "настоящие математики" в своих программах. Недавно я написал забавный 3D-исследователь форм, который использовал математические расчеты для определения проекций и других преобразований, которые мне пришлось применить к моим данным. Я был слегка удивлен, обнаружив, что на самом деле кодирую кватернионы! Но, конечно, математика, которая была задействована, была тривиальной по сравнению с математикой, которую я делаю, когда работаю. Это был материал с обратной стороны. Этот тип математики, тогда я согласен с мнением, что вы поднимаете это, когда вам это нужно, и если вам нужно что-то более сложное, чем вы можете найти в Википедии, тогда вы найдете настоящего математика, который сделает это за вас. Однако для того, чтобы вы могли поднять его, когда вам это нужно, вам нужно кое- что выучить., Эта вещь может быть не тем, чем вы когда-либо пользуетесь на самом деле, но, узнав, что что-то облегчает понимание того, чем вы на самом деле пользуетесь в дальнейшей жизни. Так что это, где я не согласен с Coder: вам нужно выучить некоторую математику , если вы когда - либо будете использовать какую - либо математику , и вы должны изучить его с математической стороны (что не означает доказательство теорем, кстати).

И так, наконец, к «Математика это программирование». Вы можете научиться всему этому, будучи хорошим программистом. И если вы выучите эти вещи, вы найдете математику намного проще, потому что вы поймете, что когда мы говорим о векторе в векторном пространстве, то это просто экземпляр класса, Vectorчто означает, что мы можем делать все то, что Vectorделает с этот экземпляр: сложение, вычитание, масштабирование и так далее. Вот почему я хотел бы преподавать математику программистам. Но, говоря как математик, я бы сказал, что первыйиз них «абстракция» легче изучать в математике, чем в программировании, потому что математика - это погоня за абстракцией. Всякий раз, когда мы видим какое-то поведение, наша тренировка всегда состоит в том, чтобы спросить: «Что это за вещь, которая заставляет ее вести себя таким образом? Что если я возьму другую вещь, которая была похожа, она будет вести себя таким же образом? Должен ли я потерять его, чтобы перестать так себя вести? " (Принятие этого до крайности приводит к «многоножке математике» - поиск термина). Но мы делаем это не с (просто) объектами "реального мира" (какими бы они ни были), мы делаем это с вещами, которые уже были абстрагированы.

Это продолжалось достаточно долго, поэтому позвольте мне закончить с одной из классических шуток математика:

Математик и физик посетили семинар по новой модели, включающей 24-мерное пространство. После этого они обсуждали это, и физик заметил: «Это было действительно сложно. Я имею в виду, как можно визуализировать 24-мерное пространство?» На что математик ответил: «О, это просто. Просто визуализируйте n-мерное пространство и затем установите n = 24».


Добавлено 2012-03-2

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

Однако я не уверен, что смогу. Читая эти комментарии и остальную часть того, что на этой странице, я могу только прийти к выводу, что существует огромное недопонимание относительно того, что на самом деле является математика. Более того, я не чувствую себя достаточно компетентным, чтобы объяснить это. К счастью, кто-то уже связался с Плачем Локхарта, поэтому я отложу объяснение этого. Хотя я мог бы сформулировать это по-другому (поскольку я вырос в научной среде, я бы сделал больший акцент на экспериментальной природе математики), я не думаю, что смог бы выразить это лучше .

Я все еще думаю, что могу что-то добавить. А также недопонимания относительно того , что математика является , есть также недопонимание относительно того , что «делать математику» означает. Я вижу две почти противоречивые позиции:

  1. Математика - это уравнения и формулы. Таким образом, нет необходимости изучать это, потому что существует Википедия (это почти противоположность апокрифическому вызову Эйлера Дидро ).

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

Хотя эти две позиции противоречат друг другу, они оказываются в одном и том же месте: нет смысла программисту изучать любую математику - и, несомненно, не математику! В конце концов, что они знают о чем-либо? Все, что действительно нужно знать программисту, можно найти в Википедии или украсть у кого-то еще.

Выше я описал себя как программист Cargo Cult. Бьюсь об заклад, у большинства из вас был частный хихиканье, и они подумали: «О да, держу пари, я знаю, как тогда выглядят ваши программы». Вы, вероятно, чувствовали себя немного самодовольными и превосходными (хотя я уверен, что вы чувствовали себя плохо из- за самодовольства и превосходства).

То, что я описал выше, это математика культа грузов.

Поэтому, когда я говорю, что вы должны немного изучить математику, чтобы понять, как работает математика, я говорю это точно по той же причине, что и вы, если бы вы увидели немного кода, который я написал: «Насколько легче ваша жизнь было бы, если бы вы прекратили вырезать и вставить код из StackOverflow и немного узнали бы о том, как это сделать правильно. "

Но самое главное, что вы должны учиться у математиков. Почему так? Вот аналогия. Язык, на котором я больше всего разбираюсь, это TeX. (Все сказано, правда!). Теперь предположим, что я хочу узнать немного больше о TeX, и так получилось, что Дон Кнут находится в городе и предложил дать несколько уроков по TeX. Или я мог бы просто прочитать об этом в Википедии. Или, может быть, это Perl и Ларри Уолл, или C # (это правильно?) И Джон Скит. Вполне возможно, что эти люди не лучшие учителя , но они наверняка восполнят это в той сумме, которую они знают!

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

Существует золотая середина между поиском уравнений в Википедии и доказательством гипотезы Пуанкаре, точно так же, как - в отношении плача Локхарта - существует золотая середина между «я не очень разбираюсь в искусстве, но я знаю, что мне нравится» и быть Моне, и между "Где ключ"? " и быть доном Кнутом. Если вы еще учитесь в университете, у вас есть удивительная возможность учиться у людей, которые являются экспертами в своей области и которые по какой-то причине готовы тратить свое время, объясняя это вам.


Еще один момент, на котором я хотел бы остановиться подробнее, это то, что как программист вы не должны бояться изучать немного больше математики. Это не Глубокие Связи, ни полезность. Дело в том, что ваша способность программировать на компьютере может помочь вам в изучении математики. Я просто хочу упомянуть несколько.

  1. Понимание переменных. Очень многих людей смущают простые заявления типа «Пусть n будет натуральным числом ...». Или «Пусть epsilon> 0». В математике есть места, где важно запомнить область действия переменной. Все это обычное явление в программировании. Научитесь переводить математическое утверждение в программу, и вам будет гораздо легче отслеживать, что к чему.

  2. Природа доказательства. Если вы когда-либо написали тест или написали программу, которая будет использоваться кем-то другим, тогда вы понимаете суть доказательств. Когда вы делаете это, вы должны знать, что все, что пользователь вводит, вы можете иметь с этим дело (вставьте обязательную ссылку xkcd здесь). Это все доказательство! Демонстрация того, что независимо от того, что вставляет «пользователь / вселенная», утверждение будет выполнено. Эксперименталисты склоняются к «если это работает при нормальных обстоятельствах, это правда», но программисты знают, что всегда есть тот ребенок, который попробует Alt + G + Shift + ÅØÆ, просто чтобы посмотреть, что происходит.

  3. DRY. Извините, что сломал это для вас, но мы это изобрели, а не вы. Мы «не повторяем себя» на протяжении тысячелетий. Вот почему у меня есть копия элементов Евклида на моих полках, и это все еще полезно .

И это еще не все. Если бы я знал немного больше о программировании, я написал бы книгу под названием «Математика для программистов», в которой целью было не учить «математике, которую должны знать программисты», а «математике, которую должен знать каждый, но оптимизированной для программистов». , Но я, вероятно, никогда не узнаю достаточно о программировании, чтобы написать его - если кто-то не предложит мне сотрудничество!


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

Loop Space
источник
19
Это один из лучших ответов, которые я когда-либо читал на SE; Кстати, там есть великая книга «Математика для программистов»; она называется « Конкретная математика» и написана в соавторстве с автором TeX Дональдом Кнутом. Я только что получил копию, и это фантастика. Я чувствую, что ты перевернут; Я стал серьезно относиться к программированию, когда понял, что лучший способ (для меня) понять концепции в математическом классе - это написать программу, которая сделает это для меня. Конечно, тогда я хотел использовать программу вместо ручных вычислений, и моим учителям математики это не понравилось.
Джейсон Льюис,
Чувак, +100 за это.
Барри Браун
2
Зарегистрирован только для того, чтобы проголосовать за это
leo
Именно так. Вы не можете хорошо программировать без аналитической мысли, которой учит вас математика.
Fiasco Labs
1
Есть ли хорошая книга по математике программирования (глядя на программирование математически)?
Qed
27

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

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

оборота DeadMG
источник
6
1) В самих синглетах нет ничего плохого, 2) алгоритмическая теория информации, формальные языки и денотационная семантика имеют прямое отношение к тем простым вещам, которые вас почему-то волнуют (они не так важны для программирования). в общем).
SK-logic
19
Ваш опыт должен быть несколько ограничен. Синглтоны необходимы и неизбежны, если они являются частью модели предметной области. А как построить модель предметной области - это математическая проблема, не более того. И да, те, кто не знают теории формальных языков, создают ужасные модели и ужасные языки.
SK-logic
10
@dave: опасность в этом методе заключается в том, что любой может отвратить вас от разумной, хорошо обоснованной позиции, заявив дико отличающуюся позицию, какой бы глупой она ни была. Взятие средних значений не является полезной заменой для оценки аргументов.
Майкл Боргвардт
4
@ SK-logic: Возможно ли, что вы двое просто говорите о разных понятиях о том, что именно является «синглтоном»? Мне кажется, что SK-логика говорит об абстрактной идее наличия в системе только одного экземпляра определенного объекта, что иногда является именно тем, что требуется. К сожалению, эта абстрактная концепция была тесно связана с ужасающе плохой деталью реализации наличия общедоступного статического метода фабрики, потому что книга GoF дала это в качестве примера того, как такой Синглтон может быть доступен.
Майкл Боргвардт
5
Пожалуйста, не больше Обсуждение вне темы re Singtons
mattnz
20

Математика и программирование связаны двумя способами.

Одним из них является то, что математика может быть использована для рассуждения о компьютерных программах. Он может помочь ответить на такие вопросы, как «Как изменится время выполнения моей программы при изменении входных данных?», «Гарантируется ли, что моя программа найдет ответ на мою проблему?», «Насколько эффективна моя программа? Msgstr "Как мне переставить программу, чтобы она работала быстрее или использовала меньше памяти?" Вы, как правило, освещаете такие темы в курсах старших классов по теории вычислений, разработке алгоритмов и разработке компьютерных языков.

Второй способ, которым связаны математика и программа, заключается в том, что программирование используется для решения математических задач. Это важно, потому что многие проблемы «обычной жизни» могут быть преобразованы в математические задачи и затем решены (возможно, приблизительно) на компьютере. Подобные темы будут в некоторой степени отображаться практически на всех ваших курсах, но особенно на курсах по дискретной математике и математическому моделированию.

Чарльз Э. Грант
источник
Математика не может помочь вам гарантировать, что ваша программа найдет ответ. Это решило бы проблему остановки, что невозможно.
DeadMG
6
@DeadMG Это невозможно для произвольных программ. В некоторых случаях может быть доказано, что данная программа может быть прервана или не прервана.
Люк Дантон
6
@DeadMG, это распространенное недоразумение проблемы остановки. Проблема остановки не говорит о том, что вы не можете доказать, останавливается ли конкретная программа или нет, она говорит, что нет единого алгоритма или доказательства, которое можно было бы применить ко всем программам, чтобы решить, останавливаться или нет. См., Например, en.wikipedia.org/wiki/Halting_problem и programmers.stackexchange.com/questions/125882/… .
Чарльз Грант
Aaaah. Тогда моя ошибка. Глупое блокирование голосования ... если бы вы могли отредактировать ваше сообщение, чтобы я мог отменить голосование?
DeadMG
4
@DeadMG, знаете ли вы о том , наиболее типичных задач программирования не нужен Тьюринг-полный язык вообще ? А для остальных случаев почти всегда есть специализированное доказательство остановки.
SK-logic
12

Два конкретных примера, где математическое образование важно для информатики:

1) Реляционные базы данных, где используется реляционное исчисление .

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

Реляционная алгебра может предложить эти шаги для получения телефонных номеров и названий книжных магазинов, которые предоставляют Some Sample Book:

Join book stores and titles over the BookstoreID.
Restrict the result of that join to tuples for the book Some Sample Book.
Project the result of that restriction over StoreName and StorePhone.

Реляционное исчисление сформулировало бы описательный, декларативный способ:

Get StoreName and StorePhone for supplies such that there exists a title BK with the same BookstoreID value and with a BookTitle value of

Пример книги.

Реляционная алгебра и реляционное исчисление по существу логически эквивалентны: для любого алгебраического выражения в исчислении есть эквивалентное выражение, и наоборот. Этот результат известен как теорема Кодда.

Следующая область - это искусственный интеллект (ИИ) и машинное обучение .

Для примера того, как они используются, взгляните на класс udacity CS 373: ПРОГРАММИРОВАНИЕ РОБОТИЧЕСКОГО АВТОМОБИЛЯ .

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

Предварительные условия: Инструктор примет глубокие знания программирования, все программирование будет на Python. Знание вероятности и линейной алгебры будет полезно.

НЕДЕЛЯ 1:

Основы вероятности локализации автомобилей с фильтрами частиц

НЕДЕЛЯ 2:

Гауссианы и постоянная вероятность Отслеживание других автомобилей с фильтрами Калмана

НЕДЕЛЯ 3:

Обработка изображений и машинное обучение Поиск объектов в данных датчика

НЕДЕЛЯ 4:

Планирование и поиск Определение места движения с помощью поиска A * Поиск оптимальных маршрутов с помощью динамического программирования

НЕДЕЛЯ 5:

Управление рулевым управлением и скоростью с помощью PID

НЕДЕЛЯ 6:

Собираем все вместе Программирование автомобиля без водителя

НЕДЕЛЯ 7:

Выпускной экзамен, проверяющий ваши знания

JonnyBoats
источник
Я предполагаю, что это относится к сфере ИИ, но у большинства людей есть этот круговой снимок в небе, когда этот термин используется. В любом случае, почти любая программа, которая имитирует реальный мир, почти всегда требует какой-то более сложной математики. Кроме того, любая система с датчиками почти всегда требует некоторой формы математики.
Данк
11

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

Со стороны специалиста по математике, различные темы по математике (как и многие другие отрасли науки) могли бы значительно выиграть от программирования.

оборота Эммад Карим
источник
Я согласен. Я много занимаюсь разработкой предприятий и не нуждаюсь в необходимости использовать сложную математику, хотя это, безусловно, полезно знать, так как она определенно может помочь. Я бы сказал, что каждый программист должен был принять хотя бы Calculus 1. Другие типы программ могут использовать такие вещи, как преобразования Фурье, статистические модели, а в 3D-программировании часто используются матрицы.
Макотосан
@Makotosan, спасибо за ваш комментарий. Математика, однако, очень интересна, учитывая, что у программиста мало времени, лучше всего потратить усилия на то, что действительно увеличивает производительность. Дополнительная информация становится роскошью для тех, кто может себе это позволить.
NoChance
Я думаю, что математика - это просто знание предметной области, необходимое для вашей программы, так же, как понимание финансов важно для разработчиков Excel.
sixtyfootersdude
9

Я думаю, больше всего на свете, это сходство используемого мыслительного процесса, что делает их похожими.

Например, оба чрезвычайно логичны. Если вы будете следовать одному и тому же набору шагов или той же формуле, вы всегда получите один и тот же результат. Например, 1+1всегда будет равно 2, а set a = 1значит aвсегда будет 1 (пока вы не установите его на что-то другое)

Другой пример - необходимость мыслить пространственно. В математике я обнаружил, что мне часто приходится держать цифры в голове и визуализировать, что я делаю. В качестве простого примера, я бы сломаться математические проблемы , так что - то нравится 13x13становится 13x10 + 13x3, что гораздо проще мой мозг работать, и мне нужно следить , что 13x10=130 + 13x3=39, таким образом 130+39 = 169. Та же самая способность визуализировать что-то невидимое или разбивать проблему на более мелкие проблемы часто применяется в программировании.

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

Рейчел
источник
И некоторая базовая математика является обычной ступенью для того, чтобы получить этот систематический, логический процесс решения проблем. Языковая структура, то, чему больше не учат в школе, также является еще одной ступенькой. Есть причина, по которой компилятор имеет синтаксический анализатор, и чем лучше вы разбираетесь и обращаете внимание на структуру вашего кода, тем выше вероятность того, что вы сможете хорошо программировать.
Fiasco Labs
5

Полагаю, на сегодняшний день вас учили элементам исчисления и некоторой тригонометрии . И ты называешь это математикой. Это все равно что называть пару ног "человеком".

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

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

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

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

Zjr
источник
4

Программирование пересекает множество традиционных академических дисциплин.

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

Джоэл Браун
источник
4

Здесь я расскажу вам практические вещи, где я столкнулся с математикой при решении некоторых вычислительных задач (особенно в области Интернета):

  1. Поисковые системы используют Vector Calculus для поиска данных.
  2. Матричная факторизация может быть использована для многих вещей, таких как анализ настроений.
  3. Вам нужно знать Calculus, Summations, чтобы понять сложность написанного вами кода.
  4. Вероятность широко используется в вероятностном поиске информации / поиске
  5. Наивная теорема Байеса используется в прогнозной аналитике.
  6. Вам нужно знать такие вещи, как гиперплоскость и т. Д. Для концепции под названием SVM, которая снова используется в машинном обучении для решения задач категоризации.
  7. Вы должны понимать Entropy для того, чтобы заниматься обработкой естественного языка.
  8. Латентное семантическое индексирование / анализ главных компонентов, используемый поисковыми системами, в значительной степени опирается на матричную алгебру. & скоро......
Явяр
источник
3

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

Кроме того, теперь я разработчик веб-приложений на основе базы данных. Если бы вы сравнили меня с кем-то, кто занимается программированием на языке ассемблера, вы могли бы думать о нас как о двух очень талантливых профессионалах, но у нас был бы совершенно другой опыт, даже если мы оба «программисты».

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

Конечно, в программировании новичка вы, вероятно, узнаете об арифметике указателей. Вы будете писать короткие программы, чтобы проиллюстрировать эту концепцию и ваше понимание того, как она управляет вашим компьютером, подчиняясь вашей воле. Однако изучение того, как работает арифметика с указателями в абстрактной форме, не поможет вам использовать указатели в реальной программе. Когда придет время вносить беспорядок в 10 000 строк кода и вносить некоторые изменения в арифметику указателей, вам необходимо уметь рассуждать на очень абстрактном уровне, принимая стратегические решения, чтобы сбалансировать различные опасения относительно того, как ваши изменения повлияют код.

Как программист, вы должны уравновесить «читабельность» вашего кода, производительность вашего кода, простоту использования полученных программ и многие другие проблемы. Вы должны быть в состоянии сделать очень абстрактные сравнения, чтобы сбалансировать эти проблемы друг с другом. Вы будете делать многие из этих сравнений каждый день. Я даже не начал о тайм-менеджменте. Вы будете абстрактно рассуждать о вероятности того, что что-то, что вы делаете, повлияет на вашу способность выполнять ваши задачи вовремя, и еще раз, вы будете ежедневно принимать множество решений, которые будут влиять на вашу работу.

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

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

Печенье из рисовой муки
источник
Мне особенно нравится часть "как большинство из нас знает это". Это трудность, с которой я сталкиваюсь, читая большинство ответов здесь: «левая рука» не знает, что делает «правая рука».
Loop Space
Я думаю, «левая рука не знает, что делает правая рука», резюмирует это. ОП сказал, что он «начинает снизу» с Java. Программирование на Java - это что-то вроде сборки чего-то из болтов и пиломатериалов из хозяйственного магазина, в отличие от обработки этих болтов и превращения живых деревьев в пиломатериалы (что было бы больше похоже на программирование на ассемблере)
Рисовые печенья муки
2

Математика описывает (скажем) кубическое уравнение.

Алгоритм описывает, как решить это кубическое уравнение.

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

Информатика - это анализ алгоритма - его теоретическая пространственно-временная эффективность, границы ошибок и т. Д. Это можно считать разделом математики. Однако обратите внимание, что информатика и программирование на самом деле не одно и то же. Если вы хотите быть хорошим программистом, важно иметь фундамент в области компьютерных наук, потому что это помогает вам лучше спроектировать и продумать алгоритмы, которые вы разрабатываете. Но это не требование.

Хороший программист может не быть (на самом деле часто не очень) хорошим математиком, и наоборот. Это отдельные идентифицируемые навыки.

mcmcc
источник
3
Это зависит от вашего домена. Если вы просто хотите стать программистом, вам не обязательно знать математику. Если вы хотите стать ключевой частью бизнеса (во многих доменах), то очень важно иметь возможность найти решение проблем домена. Очень часто эти решения могут быть получены только при наличии твердого математического фона. Возможно, вам не нужно быть экспертом в какой-либо конкретной математической области, но вы должны знать, как применять широкий спектр математики, чтобы вы могли понять, какая математика может решить вашу конкретную проблему в данный момент.
Данк
2

Я видел много вопросов на этих форумах в те годы, когда настоящая проблема заключалась в плохом математическом понимании автора. Например, любой, кто имеет хороший фундамент в алгебре, понимает, что вы не можете делить на ноль. Но я видел много вопросов, в которых автор не понимал этого и впоследствии не понимал сообщения об ошибке, которое в основном гласило: «Вы не можете делить на ноль». Я видел много вопросов, где было ясно, что автор не понимает основную логику. Я видел слишком много вопросов, где понятия булевой алгебры явно не поняты.

То, что вы не пишете математические доказательства или не решаете непосредственно уравнения, как в учебнике по математике, не означает, что вам не нужно понимать стоящие за ними концепции. Кстати, за долгие годы работы я никогда не сталкивался с плохим программистом, у которого было хорошее понимание математики.

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

Хотя в базовом приложении CRUD вы можете обойтись чуть более, чем базовой алгеброй, большинство наиболее интересных проблем и более продвинутой работы связаны с математическим пониманием. Так почему же вы хотите ограничить себя с самого начала, не изучая математику?

HLGEM
источник
2

Два примера, которые сразу приходят на ум:

функции - идея применения преобразования к входным переменным для получения выходной переменной глубоко укоренилась в математике. Понятие передачи функции в качестве параметра другой функции тем более. Вообще понятие абстрактного мышления связано с программированием параллелей математики довольно тесно.

bitMasks - этот общий программный подход к решению проблем требует, по крайней мере, базового понимания булевой алгебры, чтобы даже понять концепцию.

JohnFx
источник
1

С точки зрения программистов: математика - это подмножество программирования.

Математика, применяемая в программировании:

При работе с коллекциями (массивами, списками, картами и т. Д.) В программировании вы имеете дело с реализацией математических абстракций в реальном мире.

Программирование без математики:

Если вы это сделаете println("Hello World"), то тот факт, что некоторая математика используется для вычисления положения на экране, длины строки и т. Д., В действительности не имеет значения.

Использование программирования для математики:

Реализация математики и физики на языке программирования делает возможными такие вещи, как автоматизированное проектирование.

Джек
источник
Существует пересечение вещей, которые связаны как с математикой, так и с программированием. Ни один из них не является подходящим подмножеством другого. Если бы вы знали больше МАТ, вы бы это знали. Давайте нарисуем диаграмму Венна и посмотрим, сможем ли мы найти предмет в каждой области. Алгебра связана с математикой и программированием. Принципы объектно-ориентированного программирования не связаны исключительно с математикой, а являются абстракциями, поскольку математика - это абстракция. Дискретная математика невероятно полезна для программистов, как и статистика. Исчисление редко приходит в голову большинству программистов, никогда за 30 лет.
Уоррен П
0

Программирование обычно основано на модели, которая обычно является математической моделью.

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

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

Имея сильную математику, вы получите больше материала для моделирования вашей работы. Это в конечном итоге делает вас лучшим программистом. Например, вы можете нарисовать квадратное уравнение в одном из ваших проектов, таким образом, вы узнаете больше вещей только потому, что вы сильны в математике. Или вы пишете программу, чтобы найти площадь круга, чтобы дать вам больше опыта.

За свою короткую преподавательскую карьеру я обнаружил, что если учащиеся не имеют математического образования, они почти теряются при решении финансовой проблемы. Если они теряются в модели, изучение самого языка становится более сложным и, честно говоря, очень расстраивает.

Без имени
источник
3
То, может ли кто-то решить финансовую проблему, зависит от того, компетентны ли они в этой области и не имеют почти никакого отношения к способности программировать. Я работаю с программным обеспечением для обработки сигналов, в котором много математики. Моя работа не в том, чтобы заниматься математикой, а в том, чтобы превращать то, что делают математики и инженеры, для которых программирование не входит в сферу их компетенции, в хорошее программное обеспечение. Потому что это мой домен.
Blrfl
В большинстве практических областей они различны: кто-то имеет модель, а кто-то должен ее запрограммировать. Так что да, вы правы. Но чтобы кто-то начал изучать программирование с самого начала, он должен знать математику. Иначе это будет сложно. Они должны знать о переменных, выражениях и различных математических свойствах. Я работал с командой оптимизации. Они работали над решателями. Если бы они не знали математику, они бы никогда не работали над ней. Я ответил с точки зрения обучения и зная, что он просто новый ученик, который вступает в программирование.
Noname
С точки зрения обучения крайне важно иметь математическое образование, иначе другие не будут учиться.
Noname
Решатели - это в значительной степени проблема математической области, из-за которой можно было бы понять, что для их работы потребуется понимание математики. Я не говорю, что в программировании нет математических понятий, но, как указал @DeadMG в своем ответе, есть много очень практических аспектов процесса, в которых математика абсолютно не помогает.
Blrfl
1
@Birfl, DeadMG, ну, немного неосведомлен (и почти всегда ошибается). Математика всегда поможет во всех этих «мягких» областях. Психология основана на математике. Социология еще более математична. А в случае системного дизайна, вам лучше не трогать это без очень хорошего знания семантики (которая основана на дискретной математике). В программировании нет аспектов, которые не являются математическими. Графический дизайн и кодирование CRUD включены.
SK-logic
0

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

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

Джон Боде
источник
0

Это, честно говоря, зависит от того, какое программирование вы делаете.

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

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

Тем не менее, вам не обязательно изучать математику, а затем изучать программирование. Это совершенно правильно, чтобы научиться программированию, а затем освоить некоторые сложные математические. Я начал писать код еще до того, как начал изучать классы Calc или Trig, и у меня все получилось. Когда я начал изучать продвинутую математику, я обнаружил, что кодирование мне действительно помогло, так как я мог больше изучать тему, меняя переменные в быстром сценарии, чем с ручкой и бумагой.

kcunning
источник
Вам обязательно нужно знать свои триггерные и векторные математические функции для игр.
Алан Б
Абсолютно. Я также обнаружил, что написание игр может быть отличным способом переучить математику, которую вы, возможно, забыли в старшей школе, если вы не в срок.
kcunning
0

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

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

Я решительно поддерживаю идею быть хорошим программистом, у которого есть друг (или коллега / консультант), который является хорошим математиком.

Очевидно, что если вам повезло иметь оба набора навыков, бегите с ним!

TecBrat
источник
0

Простой ответ; Математика делает тебя быстрым . Конечно, вы можете google / se / wikipedia решить ваши проблемы с кодированием, но достаточно математики и вам не нужно . Хотите верьте, хотите нет, но правильно обученный человеческий мозг работает быстрее, чем Google . Более того, чем больше математики вы знаете, тем быстрее вы сможете понять результаты, которые дает вам Google / SE / Wiki, и тем меньше вам придется углубляться в детали, чтобы понять, что люди говорят вам. В процессе решения ваших задач программирования вы все равно будете учить математику, но если вы сосредоточитесь на математике, это будет гораздо более эффективный процесс.

Ваш вопрос отчасти напоминает рок-музыканта, который спрашивает, зачем им нужно формальное музыкальное образование. Можно ли быть успешным без этого? Конечно. Делает ли это вас гораздо более крутым, если вы все равно будете этим заниматься? Абсолютно.

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

Кстати, - и без обид, предназначенных для кого бы то ни было - любой, кто говорит, что он / она хороший программист, но он / она ненавидит математику, является Большим Толстым Лжецом. То, что случилось, было, они были отключены от формальной математики плохим преподавателем или преподавателем колледжа, и с тех пор они чувствуют, что они "не хороши в математике". Любой, у кого нет проблем с обучением (т. Е. Любой, кто способен изучать ОО-язык), способен на все, вплоть до Sophomore Calculus.

jamesson
источник
0

Действия по математике и 99% программирования имеют очень мало общего. Математика не обязана быть великим программистом. Я прошел несколько курсов по математике на уровне колледжа, включая, но не ограничиваясь, элементы линейного алгебры Исчисления I, II, III и некоторые другие.

Я был инженером-программистом более 10 лет, и мне редко приходилось использовать что-то большее, чем базовая математика. Есть некоторые исключения, где математика необходима: например, графика и другие области. Но 99% программирования и разработки программного обеспечения не требуют математики. Это требует логического мышления, алгоритмов, ООП, функций, разлагающихся задач и т. Д.

Паскаль Ашванден
источник
0

1) Изучая программирование, вы столкнетесь с техническим жаргоном (т. Е. Алгоритмом). Для анализа алгоритма необходимо иметь представление о природе полиномиальных, логарифмических и экспоненциальных функций.

2) Основываясь на приложении для информатики, нужно иметь представление о дискретной математике и непрерывной математике, чтобы написать осмысленное решение. Можно понять больше об этом, пройдя такие курсы, как

---> Математика для информатики

---> Кодирование матрицы: линейная алгебра в приложениях информатики .

Для новичка я чувствую, что динамически типизированные языки вроде python/ schemeявляются первыми лучшими языками для программирования. Языки со статической типизацией, такие как Java/ C++не лучшие для начала. Opencourseware, опубликованный из "MIT / UOC-Berkeley / Stanford", может помочь вам лучше, чем обычная программа обучения в колледже. Бьюсь об заклад, вы!

overexchange
источник
-1

Я бы сказал, что это зависит от уровня программирования. Модели данных и корреляции между ними, алгоритмы программирования. Например, чтобы написать программу, которая выводит «Hello World», я не вижу необходимости в ознакомлении кого-либо с высшей математикой. Уровень математического участия будет зависеть от уровня сложности проблемы, которая должна быть решена программно.

Aubede
источник
-2

Просто мой опыт, не более:
я не математик. Я не гений, просто автодидакт.
... и спустя много лет я понимаю, чем работаю с интуицией

Сначала я изучил Pick (мертвая система) с нуля (наедине с бумажной документацией и примерами),
... после C, C ++ для удовольствия и Java для работы.

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

Теперь многие инструменты (например, Eclipse) помогают и исправляют вас: вам нужно сосредоточиться на том, что вы хотите сделать , всего лишь с 52 зарезервированными словами ... и множеством библиотек, которые не работают.

Поэтому, если вам нравится язык, выберите Java-проект, изучите Pattern Design, UML, разберитесь в JVM и как использовать его с Bigloo и Scala, разберитесь снова и снова в течение 10 000 часов.

Опыт работы с Java дает вам хорошо оплачиваемую работу и долгое время в крупных промышленных проектах, и вы сможете переключиться на другую среду, потому что вы умеете говорить информативно , а не математически .

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

В противном случае, экспериментируйте по-другому.

С наилучшими пожеланиями,
Клод

сл-р
источник
Опять же, смотрите ниже пост. Вы занимаетесь математикой, вы просто не хотите этого признавать.
Jamesson
1
Я видел, но я нашел также другие посты, отвечающие на первый вопрос о математическом интересе для студента (который знает основы, а не специальности) с -1 ^ n, когда они рассказывали о логике на латыни, философии, языке ... реальный жизнь. Разве математика дает разуму настолько ограниченный характер, что все не в уравнении отвергается, не понимая окружающего мира и не забывая, что Ньютон начинает с интуиции, данной яблоком? Возможно, именно модератор должен открыть умы другим мирам, когда это возможно, это обогатит обе стороны дискуссии. Тем не менее, я буду осторожен в своем письме.
cl-r
-2

Кто-то чуть не ударил ногтем по голове выше. Программирование это математика. В частности, программирование - это раздел математической логики, называемый теорией вычислимости или теорией рекурсии.

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

Любой, кто говорит, что программирование не является математикой, либо не знает, о чем они говорят, либо имеет скрытый мотив, как максималист «Интеллектуальной собственности», который надеется получить прибыль, получив патент на алгоритм или какую-то другую базовую математическую программу. факт или открытие.

Некоторые ссылки на программирование как математику, и следствие, не зная, о чем вы говорите:

Программа Proofs: логика 19-го века и компьютерные технологии 21-го века

Программы являются доказательствами: модели и типы в лямбда-исчислении

Корреспондентская статья Карри-Ховарда из Википедии

О необычной эффективности логики в информатике

Необоснованная эффективность логики

Да, они имеют большое значение для «логической» части математической логики, но математика, как правило, признается несколькими аксиомами, и их логические следствия развиваются с помощью логики первого порядка.

Если говорить иначе и быть максималистом "IP" ради денег:

Как запатентовать алгоритм в США . Алгоритмы не являются патентоспособными, но патенты выдаются на алгоритмы, не называя их алгоритмами. Нетрудно найти в Интернете много материалов, которые либо указывают, либо пытаются объяснить это противоречие.

Брюс Эдигер
источник
6
-1 для объявления hominem в конце.
Чарльз Э. Грант
@ charles ad hominem против кого? Оригинальный постер? Я думаю, что пункт о патентах является проницательным (даже если бы он был сформулирован лучше).
gcbenison
@gcbenison, «Любой, кто говорит, что программирование не является математикой ... или имеет скрытый мотив» - это классическая атака ad hominem: мне не нужно отвечать на ваши аргументы, потому что вы плохой человек. Я нашел это раздражающим, потому что я не думаю, что программирование - это математика, и я думаю, что патенты на программы - это мерзость. У меня есть степень магистра по прикладной математике, хотя я знаю, о чем говорю, безусловно, открыт для дискуссий.
Чарльз И. Грант
@commentators: спасибо. Я использую, чтобы игнорировать это поведение, потому что оно является проецируемым самим собой несчастьем, навязанным другим. --- Брюсу Эдигеру: Отражение знака сомнения в прогрессе.
cl-r
@ cl-r: я думал об очень конкретных примерах, таких как анти-Linux-кампания SCO и nature.com/news/… Если мы, как программисты, разрешаем юристам определять математику в интересах юриста, то мы наносим огромный вред всей цивилизации. ,
Брюс Эдигер
-2

Математика это все, что связано с программированием. Например, в программировании игры вам нужно использовать математику для физики и делать больше всего. Для перемещения х позиции игрока в Java вы могли бы сделать int x = x + speed * deltaTimeили int x = x - speed * deltaTimeНо вы могли бы сказать, что это основные математики так позволяет перейти на более продвинутые вещи. Существует алгоритм рейтинга шахматистов, который называется Алгоритм Эло.

Это объяснил алгоритм Эло

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

Это не магия, это тяжелая работа и хорошая математика.

one2three
источник
-4

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

Большинство разработчиков не решат ни одного уравнения в течение своей профессиональной карьеры, и такие вещи, как большие обозначения O, также могут быть поняты нематематическим способом. Вы просто думаете о чем-то, представляете, как в голове всплывают биты, и вуаля, вы можете сказать, что это за большой материал, если кто-то объяснит, что такое бревно и сила.

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

По крайней мере, я не касался математики в течение 10 лет, у меня все время были споры с моими профессорами по математике, и когда мне была нужна математика для рендеринга в реальном времени, я изучал все с точки зрения программистов, без каких-либо доказательств каких-либо теорем, и для меня это было просто и легко понять по сравнению со всеми профессорами математики, которые вставали нам в голову комментарий: «Вы не можете быть хорошим программистом, если вы не знаете математику». Конечно, вы можете, просто!

Теперь я знаю математические вещи, так что я могу общаться с математическими программистами со всеми различиями журнала и прочим, но только по той причине, чтобы они не потеряли сознание. Потому что эти вещи бесполезны в 99,9% случаев, и когда они есть, их можно изучать в 1000 раз эффективнее с точки зрения программистов.

Черт, программистам нужно как минимум 5 лет, чтобы освоить язык программирования + фреймворки + лучшие практики С какой стати они должны научиться доказывать теоремы? Ученики по математике занимаются математикой, программисты запускают это, вот как это должно работать.

кодировщик
источник
8
Ребенок говорит своей маме, что ему не понадобится математика, потому что он вырастет и станет миллионером бейсболиста. Его мама говорит ему: «Вам понадобится математика, чтобы сосчитать ваши миллионы».
Nav
2
Извините, я должен не согласиться. Изучение математики научит вас мыслить логически. Если вы не можете мыслить логически, все, что вы собираетесь написать, это набор кода, который не масштабируется. Я не говорю, что вы должны быть экспертом по математике или даже по математике, и при этом вы не должны использовать это в своей повседневной жизни. Но вам нужно изучить это, если вы хотите решить реальные проблемы программирования.
jmort253
2
@ jmort253: Изучение математики не превращает вас в логически мыслящего человека. Это либо что-то, что у тебя в голове, либо нет. Я ненавидел математику со школы, но я очень логичный человек. Программирование - это не математика, я занимаюсь системным программированием более 10 лет, и я могу сказать это со 100% уверенностью, и вы можете ожидать еще меньше математики, когда занимаетесь веб-разработкой или администрированием SQL. Ваша задача не состоит в том, чтобы разрабатывать новые математические теории, ваша задача состоит в том, чтобы заставить вещи работать, используя ограниченные ресурсы, поддерживаемым способом, используя самые эффективные алгоритмы и контейнеры.
Кодер
2
@Nav: Это имеет смысл для каждого человека для базовой математики, вплоть до уравнений с х и у. Но подсчет ваших миллионов - это обычно то, что делают бухгалтеры и юристы, потому что в противном случае вы пропустите какой-то закон штата, который должен что-то делать с декларацией, и потерять все в любом случае. Вы должны быть достаточно умны, чтобы понять, что происходит, но как только вы достигнете успеха, вам будет выгоднее использовать специализированные услуги, которые будут делать вещи для вас правильно, быстро и вовремя, пока вы будете держать себя в форме в тренажерном зале, сохранить этот с трудом заработанный топ 5 место.
Кодер
10
Математика - это не процесс решения уравнений. Если единственная математика, которую вы когда-либо видели, - это математика, которую преподают в школе, вы никогда не видели реальной математики .
doppelgreener