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





информатика! = программирование
Хорошо, серьезно, я знаю хороших и плохих программистов, специализирующихся на английском и психологии, а некоторых - на компьютерных науках. Некоторые очень известные ребята, которыми я восхищаюсь как разработчики, не имели опыта работы с CS. Ларри Уолл (Perl), например, был лингвистом. С другой стороны, это помогает узнать что-то о домене, над которым вы работаете, потому что тогда вы, по крайней мере, сможете увидеть, имеют ли ваши данные смысл, и помочь вашим клиентам / пользователям перейти к тому, что они действительно хотят. И да, есть проблема вычислительной сложности, эффективных структур данных и корректности программы. Это то, что вы изучаете в области компьютерных наук, и это полезно знать практически в любой области, но этого не нужно и недостаточно.
Думаю, лучшая цитата, которую я слышал, - это «Компьютеры - это не больше компьютеры, чем астрономия - телескопы» (Дейкстра)
Я думаю, что stackoverflow.com был создан в основном для того, чтобы преодолеть этот однострочный тип ответов, но есть 15 единомышленников, которые подняли этот бесполезный ответ на вершину. У меня нет с вами ничего личного, однако я пометил ваш ответ как "оскорбительный". Так, по крайней мере, для меня.
@simsim: Мне кажется обидным, что люди думают, что степень в области CS каким-то образом связана с программированием.
@simsim: Неважно, что имели в виду Джоэл и Джефф, когда создавали этот сайт. Все дело в создании сообщества, в котором программисты помогают друг другу. Я думаю, что короткий ответ Дэвида попадает в цель. +1
@ Скотти: если бы это было «все о создании сообщества, в котором программисты помогают друг другу», то форумов и списков рассылки было бы достаточно. Возможно, я был немного резок в своем ответе, но было удивительно видеть, как 15 пользователей проголосовали за совершенно невежественный «ответ», ну, конечно, до редактирования. :-)
Нет, математика не нужна. Я ничего не делал с тех пор, как закончил учебу, и, вероятно, забыл, какие небольшие вычисления я освоил.
Думайте об этом как о машине. Как вы думаете, сколько математики / физики стоит за такими вещами, как контроль тяги и торможение с АБС? Много. Как много математики вам нужно знать, чтобы использовать эти инструменты? Никто.
Обновлено: одно, что нужно добавить. Здесь, наверное, важна промышленность. Программисту, работающему в исследовательской фирме или пишущему встроенные системы контроля тяги для этого автомобиля, вероятно, гораздо больше понадобится математика, чем среднему программисту бизнес-инструментов.
Хотя продвинутая математика может не требоваться для программирования (если вы не программируете продвинутую математику), мыслительный процесс программирования и математики очень похож. Вы начинаете с базы известных вещей (аксиом, ранее проверенных теорий) и пытаетесь добраться до чего-то нового. Вы не можете пропустить шаги. Если вы пропустите шаги, вам необходимо заполнить пробелы. Это критический мыслительный процесс, который делает их невероятно похожими.
Кроме того, математики и программисты мыслят критически абстрактно. Вещи реального мира представлены объектами и переменными. Возможность перевода от конкретного к абстрактному также связывает эти два поля.
Есть очень хороший шанс, что если вы хороши в одном, вы, вероятно, будете хороши в другом.
Таким образом, можно сказать, что тот, кто разгадывает много кроссвордов или играет в Scrabble, с большей вероятностью будет хорошо программировать, чем тот, кто этого не делает. Отношения кажутся скорее вероятными, чем строгой зависимостью.
Строгость и дисциплина решения математических задач превращаются в программирование. У вас должна быть способность разбирать проблему и подходить к ней сначала с очевидного направления, а затем с более творческих направлений в обеих дисциплинах.
Два великих программиста, которыми я очень восхищаюсь, не изучали компьютерные науки, а, скорее, получили математическое образование и только что поменяли карьерный путь: Мигель де Икаса и Александр Степанов. Между прочим, Степанов как-то сказал, что работая над математикой, «вы не начинаете с аксиом: вы конец поднимаетесь с аксиом». : D
@Liam - Речь идет о сопоставлении с образцом и подтасовке вещей в памяти в краткосрочной перспективе. Оба вида деятельности требуют этих навыков.
+1 за "Есть очень хороший шанс, что если вы хороши в одном, вы, вероятно, будете хороши в другом".
Конечно, это зависит от того, каким программистом вы хотите стать или, что еще лучше, каким программистом вас хотят видеть ваши работодатели. Я считаю, что исчисление и алгебра необходимы, статистическое и линейное программирование - действительно хороший инструмент, который стоит иметь в вашем портфеле, возможно, анализ (производные, интегралы, функции ...) можно было бы обойтись без него. Но если вы хотите знать, как все работает до мелочей (например, электроника или какие-то нетривиальные алгоритмы), вам лучше никуда не идти без «продвинутой» математики.
У меня есть степень по математике, но я не могу припомнить, чтобы мне требовалась эта математика хоть раз в моей карьере. Это было полезно с точки зрения тренировки моего разума для логического мышления, но я не писал код с использованием гидродинамики, квантовой теории или цепей Маркова. (Я подозреваю, что последний, скорее всего, всплывет.)
Большинству бизнес-разработчиков большую часть времени не нужны сложные математические знания. Иногда знание тригонометрии может помочь, и, конечно же, может быть важно иметь возможность разбираться в математике, достаточном для реализации алгоритмов, описанных математически, - но помимо этого? Неа.
Не забывайте, что большинство программистов не развивают информатику - они создают приложения. Мне не нужно знать передовое инженерное дело, чтобы водить современную машину, хотя эта машина почти наверняка была усовершенствована. через Advanced Engineering.
Я согласен с большей частью того, что вы сказали, однако нельзя ли сказать, что многие аспекты программирования можно значительно упростить, если понять общие математические принципы? Иногда формулу для чего-то намного проще запрограммировать, чем алгоритм для достижения того же значения ... если вы знаете эту формулу
@balabaster: Иногда - но я бы сказал, что это случается нечасто. Точно так же вам не обязательно знать формулу заранее, чтобы использовать ее. Быть компетентный в математике - это хорошо, поэтому вы можете понимать формулы, когда видите их, но вам редко нужна сама математика на уровне степени, IMO.
Степень математики? Тогда вы знаете, что это не просто цифры. У меня две степени по математике, и я часто использую контент: логическая алгебра для анализа / упрощения логики, теория автоматов / языка для построения DSL, алгебра для анализа производительности big-O и т. д.
Я бы сказал, что наличие продвинутой логической (дискретной) математики действительно может помочь. Это вместе с теорией множеств. При работе с обычными компьютерными программами эти дисциплины могут очень помочь. Однако много другой математики, которую я изучал в университете, было исчислением, которое, насколько я могу видеть, имело очень ограниченное применение. Поскольку 90% (или что-то в этом роде) программирования связаны с созданием бизнес-приложений с помощью очень простой математики, я бы сказал, что по большей части вы можете обойтись очень маленькими математическими знаниями. Однако хорошее понимание булевой алгебры, логики, дискретной математики и теории множеств действительно может поднять вас на следующий уровень.
Большая часть программирования, которое я выполнял, включала физическое моделирование для исследований, включая такие вещи, как электромагнетизм, квантовая механика и строительная механика. Поскольку проблемные области связаны с продвинутой математикой, мне было бы трудно решить их без использования продвинутой математики.
Итак, ответ на ваш вопрос - это зависит от того, что вы пытаетесь сделать.
Математика нужна разработчикам в одних областях, но почти бесполезна в других.
Если вы разработчик игр и вам приходится много работать с физикой - понимание математики имеет решающее значение. Если вы работаете с расширенными визуальными элементами управления - без геометрии ничего не обойтись. Если вы планируете провести какие-то финансовые расчеты - ДЕЙСТВИТЕЛЬНО поможет знание статистики.
С другой стороны, за последние 5 лет у меня было всего 2 или 3 проекта, где вообще требовалось ЛЮБОЕ количество математики. Из них только в 1 случае поиск в Google не помог.
В конце концов, даже финансовые расчеты очень часто делают за вас ваши клиенты и дают вам формулы для реализации.
Так что, если вы занимаетесь прикладным программным обеспечением, вы, скорее всего, никогда не воспользуетесь своим математическим образованием. Если вы занимаетесь академическим программным обеспечением, математика имеет решающее значение.
К «разработчику игр» я бы добавил «разработчик симуляторов». Я помню, как в 93-м я ездил по городу, пытаясь найти учебник по математике, достаточно продвинутый, чтобы объяснить мне, как работают кватернионы, чтобы я мог правильно кодировать мертвый алгоритм перекокинга. Слава Богу за Интернет сегодня!
Если вы собираетесь писать новый язык программирования, необходимы глубокие математические знания. Или вам нужно написать свои собственные алгоритмы.
Однако для большей части повседневного программирования - от веб-сайтов до приложений для обработки страховых полисов - только базовая математика - это необходимый.
Какой тип программирования?
Судя по моему коммерческому опыту, мне не требовалась высшая математика, но это сильно зависит от области, в которой вы работаете.
Компьютерная графика требует большого количества продвинутой математики. Многое в академическом компьютерном программировании требует продвинутой математики.
Таким образом, существует тенденция корреляции между людьми, которые хорошо разбираются в математике, и людьми, которые хорошо разбираются в программировании.
Надеюсь, этот бессмысленный ответ поможет.
ИМО, вам, вероятно, нужны способности к математике, не обязательно иметь много знаний в этой области. Итак, вещи, которые вам нужны, чтобы хорошо разбираться в математике, аналогичны вещам, которые вам нужны, чтобы хорошо разбираться в программировании.
Но в целом я не могу вспомнить, когда в последний раз использовал какую-либо сложную математику в повседневном программировании, так что нет.
Я не думаю, что высшая математика - это требование хорошего программиста - как всегда, это зависит от того, что вы кодируете.
Конечно, если вы занимаетесь программированием 3D-графики, вам понадобятся матрицы и прочее. Как автору программного обеспечения для бизнеса вам, вероятно, понадобится математическая статистика.
Но, будучи профессиональным программистом в течение почти 10 лет (и еще 10 лет любителя), «высшая математика» - это не то, что мне нужно регулярно. Примерно в 99,8% случаев это просто плюс, минус, деление и умножение в некоторых разумных комбинациях - в большинстве случаев это касается алгоритмов, а не математики.
Для большинства программистов изучение высшей математики важно просто потому, что оно заставляет ваш мозг мыслить логически, шаг за шагом переходить от одного к другому.
Однако очень немногие профессии по программированию требуют чего-либо, кроме школьной математики. Однажды я использовал линейную алгебру. Я никогда не использовал исчисления. Я использую алгебру каждый день.
Это зависит от того, что вы делаете. Если вы много занимаетесь 3D-программированием, знание 3D-геометрии, безусловно, необходимо, не так ли? ;-) Если вы хотите создать новый формат изображения, такой как JPG, или новый аудиоформат, такой как MP3, вы также сильно потеряетесь, если не можете понять косинусное или преобразование Фурье, так как это основы, на которых основано сжатие с потерями. . Многие другие задачи могут быть решены лучше, если вы достаточно хорошо знаете свою математику.
Есть также много других задач программирования, которые не требуют особой математики.
См. Также Программирование == математика? из stackoverflow.
Хотя я не думаю, что это необходимо для программирования, я не могу сказать вам, сколько раз мне удавалось использовать концепции линейная алгебра, чтобы написать ясное и короткое решение, заменяющее запутанное (а иногда и неправильное). Когда работает любая графика или геометрия (и даже какой-то решатель), знание матрицы и того, как с ними работать, также чрезвычайно полезно.
Да, нет необходимости в продвинутой математике - если вы занимаетесь коммерческим программированием - готовым программным обеспечением.
Однако при работе с хардкорными вещами, такими как:
Некоторые продвинутые знания математики могут пригодиться. И это не похоже на то, что это проблемы "не из этого мира".
Мне пришлось создать программу, чтобы попытаться «спрогнозировать» необходимое количество бумаги для офиса (и было адом найти лучший способ приблизить значения).
Однако вы должны быть осторожны, потому что при использовании сложных вещей легко заблудиться - есть мой друг, который прибегал к использованию Тьюринга для сохранения состояния динамического меню только для его правильного отображения - хм ... возможно он слишком далеко зашел в своем воображении.
вы можете добавить такие вещи, как сжатие файлов или редактирование файлов MP3, или что-то еще, что требует реального понимания того, что делает компьютер, вместо того, чтобы просто создавать веб-сайт.
Как он использовал Тьюринга для этого? Доска для спиритических сеансов или сеанс?
Существует множество задач по программированию, с которыми можно хорошо справиться, не имея знаний в области продвинутой математики. Вероятно, можно с уверенностью сказать, что для большинства имеющихся вакансий в области программирования редко требуется что-то большее, чем математика на уровне средней школы. Но вы не собираетесь писать программное обеспечение, которое поможет отправить шаттл в космос, взломав ваш уровень математики алгебры в колледже. Таким образом, хотя продвинутая математика обычно не является жизненно важной для многих задач программирования, более сложные задачи обязательно потребуют ее. Изучение математики также учит ценным навыкам решения проблем, которые можно использовать практически где угодно. Я думаю, вы могли бы сказать, что большую часть времени в этом нет необходимости, но это, безусловно, поможет почти всегда.
Кто-то с солидным математическим (не просто арифметическим) или логическим образованием хорошо справится с алгоритмами, использованием переменных, условными рассуждениями и структурами данных.
Математика поможет вам до определенной степени, но только до определенной степени.
Для вашего общего графического интерфейса пользователя и веб-приложений когда-либо потребуются только базовые знания математики.
Раз в жизни у вас может быть странный проект, в котором вам понадобятся исчисления или линейная алгебра.
(Если вы занимаетесь программированием трехмерных игр или какой-либо другой конкретной областью программирования, вам может понадобиться это каждый день)
Программисту часто могут быть полезны математические знания, навыки графического дизайна, способность решать головоломки, трудовая этика и множество других навыков и качеств. Очень немногие программисты хороши во всем, в чем программист может быть хорош. Я бы не согласился с любым утверждением вида «ты не настоящий программист, если не умеешь {вставьте сюда любимую программную способность}».
Но я бы опасался программиста, который не умеет заниматься математикой. Больше, чем того, кто не умел рисовать.
Я пойду против течения и скажу "Да"
Я переключаюсь с гражданского строительства на программирование (бетон - отстой!). Мой математический фон состоит из обычных занятий на первом году обучения, на втором и третьем курсах математического анализа (дифференциальный эквалайзер, интеграция объемов, ряды, преобразования Фурье и Лапласа) и курса численного анализа.
Я обнаружил, что моей математике невероятно не хватает компьютерного программирования. Есть целые области дискретной математики и логики, которых мне не хватает, и я выживаю только благодаря обширной библиотеке учебников, Википедии и Вольфраму. Самые продвинутые алгоритмы основаны на продвинутой математике, и я не могу разрабатывать продвинутые алгоритмы, не проводя обширных исследований (по сути, эквивалентных полукурсам работы). Я определенно не могу придумать НОВЫЕ алгоритмы, так как я просто не знаю у меня нет математических основ, как плечи гигантов, на которых можно было бы стоять.
Сколько фундаментальных алгоритмов на самом деле пишет средний программист? Думаю, 80% заданий по программированию не связаны с математикой, кроме базовой алгебры.
@dbkk: Самая распространенная задача среднего программиста - это проектирование объектной модели, «бизнес-логики» некоторой области. И такой процесс есть не что иное, как математика, хотя обычно это не отражается теми, кто выполняет задачу.
Я согласен с Крисом. Я бы тоже сказал «Да». Но это зависит от вашего рынка, как указано выше. Если вы просто создаете какие-то базовые "готовые" приложения или инструменты для письма, которые помогут в повседневной работе ... тогда математика не так важна.
Разработка нестандартных программных решений требует решения множества проблем и критического мышления. Навыки, которые, безусловно, улучшаются при наличии математического образования. Я мало изучал математику со степенью компьютерной инженерии, и я отдаю должное моему математическому опыту в понимании того, почему я именно там, где я нахожусь сегодня.
Это мои 2 цента, из чтения выше я могу сказать, что многие не согласятся. Я призываю всех принять во внимание то, что я не говорю, что у вас не может быть этих навыков без математического образования, я просто утверждаю, что навыки являются побочными эффектами наличия такого фона и могут положительно повлиять на программное обеспечение.
На мой взгляд, в этом вопросе есть несколько хороших моментов.
Как писал здесь Дэвид Нехме, информатика и программирование - это два очень разных предмета.
Я считаю вполне возможным, что программист с очень элементарными математическими навыками в средней школе и в колледже может быть компетентным программистом. Однако насчет выпускника по информатике не так уж и уверенно.
Как вы правильно заметили, процесс создания алгоритма во многом зависит от того, как вы обрабатываете математику. Даже если это всего лишь результат математического и аналитического процесса, который вы должны выполнить, чтобы правильно разработать алгоритм.
Я также думаю, что это во многом зависит от того, чем вы занимаетесь, больше, чем от вашей должности или навыков. Например, если программирование и математика являются инструментами для достижения некоторого эффекта, то вы обязательно должны быть компетентны в обоих (то есть: вы создаете программу моделирования для какой-то цели). Хотя, если программирование является конечной целью вашей деятельности, то математика, скорее всего, не потребуется. (т.е. вы создаете веб-приложение)
Я не думаю, что передовые математические знания - это требование хорошего программиста, но, основываясь на личном опыте, я думаю, что программисты, которые лучше разбираются в продвинутой математике, также становятся лучшими программистами. Это может быть просто из-за более логичного мышления или более логичного взгляда из-за их опыта решения математических задач.
Программирование требует, чтобы вы овладели двумя предметами или хотя бы выучили их. Само программирование и для чего предназначена ваша программа. Если вы пишете программное обеспечение для бухгалтерского учета, вам необходимо изучить бухгалтерский учет, если вы программируете кинематику роботов, вам необходимо понимать прямую и обратную кинематику. Учетная запись может требовать только базовых математических навыков, в других доменах требуются другие типы математики.
Важно сохранять перспективу. Изучение математики, продвинутой математики, вычислений и т. д. Отлично подходит для мыслительных процессов, и многие программисты ожидают и могут использовать математические и математические концепции. Но во многих работах по программированию математика практически не используется.
Информатика, будучи математической дисциплиной, конечно же, требует много математики. Но немногие профессии в области программирования являются производными от comp sci. CS - очень специфическая дисциплина. Есть причина, по которой ИТ-школы теперь выделяют программную инженерию отдельно от CS. Это очень разные области.
Comp Sci, например, плохо подготовит вас к миру большинства веб-приложений. А программная инженерия плохо подготовит вас к проектированию компилятора и разработке ядра.
Если вам нужна высшая математика в повседневной работе, так как программист действительно зависит от ваших задач. Мне они нужны. Причина в том, что мне приходится работать с гидравлическими расчетами трубопроводных систем, чтобы оценить в коде систему трубопроводов до того, как она будет построена. Никогда не стоит стоять рядом с разрушающейся системой трубопроводов из-за пониженного или избыточного давления. ;)
Думаю, для многих других видов «моделирования реального мира» вам также понадобится продвинутая математика.
Статистические методы машинного обучения становятся все более важными.
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением.
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится.
Программирование - это инструмент информатики.
Во многих областях программирования математика находится на заднем сиденье. Если вы не знаете, как выполнять быструю сортировку, загрузите модуль, который сделает это за вас. Вы не понимаете эллиптических кривых, нет проблем, купите модуль шифрования AES.
Теперь по информатике. Да, вам нужна математика более высокого уровня. Не сомневайся на этот счет. Криптография, операционные системы, построение компиляторов, машинное обучение, языки программирования и т. д. - все требует некоторой формы высшей математики (исчисления, дискретного, линейного, сложного) для полного понимания.
Создание компилятора требует более высокой математики?
Я считаю, что на этот вопрос (которого я получаю довольно много) лучше всего ответить аналогией.
Многие из нас поднимают тяжести. Почему? Потому что мы готовимся к тому дню, когда станем профессиональным штангистом? Сможем ли мы когда-нибудь столкнуться с поднятием тяжестей как требованием работы?
Конечно, нет. Мы поднимаем тяжести, потому что это тренирует наши мышцы. Он держит нас в хорошей форме. Человек в хорошей форме будет лучше работать в других областях: походы, строительство, бег, сон и т. д.
Изучение математики для мозга похоже на тяжелую атлетику. Он тренирует ум и поддерживает его в форме. Возможно, вы никогда не будете использовать математические вычисления в своей карьере, но благодаря этому ваш мозг будет в лучшей форме.
Фундаментальная концепция математики заключается в следующем, разработке, понимании, реализации и использовании алгоритмов. Если вы не умеете заниматься математикой, значит, вы не можете этого делать, а если вы не можете этого делать, вы не можете быть эффективным программистом.
Общие задачи программирования могут не нуждаться в каких-либо конкретных математических знаниях (например, вам, вероятно, не понадобятся векторная алгебра и исчисление, если, например, вы не выполняете такие задачи, как трехмерная графика или физическое моделирование), но базовые навыки идентичны, а способности в одном домене будет соответствовать соответствующая неспособность в другом домене.
Деловое программирование: арифметика, немного алгебры
Инжиниринг: численный анализ
Научное программирование: нет предела
Для дальних планов этого не требуется, но ...
В качестве тривиального примера - без понимания геометрии вы не сможете много чего делать с квадратами и прямоугольниками. (Каждый программист имеет / получает геометрию, так что это просто пример).
Без тригонометрии есть определенные вещи, которые сложно сделать. Попробуйте нарисовать аналоговые часы, не разбираясь в тригонометрии - вы можете это сделать, но процесс, который вам предстоит пройти, по сути, заново изобретает тригонометрию.
Исчисление интересно. Возможно, вам это никогда не понадобится, если вы не разрабатываете игры, но математический анализ учит вас моделировать вещи, которые действуют гораздо более «в реальном мире». Например, если вы попытаетесь смоделировать падение дерева, чтобы получить правильную скорость в каждой точке арки, вам, вероятно, понадобится много математики.
С другой стороны, дело в точности. Все, что вы можете делать с исчислением, вы, вероятно, можете делать с помощью циклов и приближений.
Кроме того, чтобы сделать вещи еще более реалистичными, вам, вероятно, понадобятся фракталы и более продвинутая математика.
Если вы программируете веб-сайты и базы данных, алгебра 101 вам вряд ли понадобится.
В университете можно научиться только теоретическим вещам.
Математика - это не только образ мышления, но и сами навыки. И даже это лежит на нескольких уровнях. Кто-то еще заметил, что аналитические навыки и навыки абстракции, общие для математики, важны для программирования, и это один уровень. Я бы также сказал, что есть еще один уровень, который содержит точные аналоги, которые переносятся от одного к другому - например, теория множеств, лежащая в основе реляционных баз данных, которая все скрыта семантикой SQL.
Очень часто «лучшие» - я имею в виду наиболее эффективные и краткие - решения - это те, за которыми стоит немного математики. Если вы начнете думать о своих проблемах программирования, ориентированных на данные, как о манипуляциях с матрицами, что часто случается, вы часто можете найти новые решения из мира математики.
Очевидно, что не обязательно быть экспертом по математике, чтобы программировать, кого угодно можно научить, но это один из навыков, которым стоит обладать - и его нужно искать среди новобранцев.
В некотором программировании я полагаю, что математика была бы наиболее полезной, но не для программиста. Мне повезет, если я смогу сложить 2 + 2 без моего удобного калькулятора денди.
Зависит от задачи программирования. Я бы поставил `` взять данные из базы данных и отобразить их на веб-сайте '' в стиле программирования на не очень большой стороне, а затем `` видеоигры '' на другой стороне (я работаю в играх, и я чувствую, что использую несколько случайных разных вкус математики каждый день, и, вероятно, использовал бы больше, если бы знал больше).
Чтобы ответить на ваш вопрос, как он был задан, я должен был бы сказать: «Нет, математика не нужна для программирования». Однако, как другие люди предположили в этой теме, я считаю, что существует корреляция между пониманием математики и способностью «мыслить алгоритмически». То есть уметь абстрактно мыслить о количестве, процессах, отношениях и доказательствах.
Я начал программировать, когда мне было около 9 лет, и было бы преувеличением сказать, что я выучил много математики к тому моменту. Однако, приложив немного усилий, я смог понять переменные, циклы, операторы goto (простите меня, я был Vic 20 BASIC, и я еще не читал ни одного Dijkstra) и базовую геометрию координат для отображения графики на экране. .
В конце концов я получил диплом с отличием по чистой математике со вторым курсом по информатике. Хотя я сосредоточился в основном на анализе, я также изучил довольно много дискретной математики, теории чисел, логики и теории вычислимости. Помимо возможности применить к программированию некоторые идеи из статистики, теории вероятностей, векторного анализа и линейной алгебры, я изучал небольшую математику, которая была непосредственно применима к моему программированию во время учебы в бакалавриате, а также к коммерческому и исследовательскому программированию, которым я занимался впоследствии.
Однако я твердо верю, что формальные методы мышления, которых требует математика - тщательное рассуждение, поиск контрпримеров, построение аксиоматических основ, выявление связей между концепциями - оказали огромную помощь, когда я брался за большие и сложные проекты программирования.
Подумайте, как спортсмены тренируются для своего вида спорта. Например, футболисты, несомненно, тратят большую часть своего тренировочного времени на базовые футбольные навыки. Однако, чтобы улучшить свою общую физическую форму, они могут также проводить время в тренажерном зале на велосипеде или гребных тренажерах, занимаясь отягощениями и т. д.
Изучение математики можно сравнить с силовыми тренировками или кросс-тренингом, чтобы улучшить вашу умственную силу и выносливость для программирования. Совершенно необходимо, чтобы вы практиковали свои базовые навыки программирования, но изучение математики - это невероятная умственная тренировка, которая улучшает ваши основные аналитические способности.
Хочу добавить, что математика - это не силовая тренировка только для вашей умственной силы, но она также открывает двери для новых проблем и решений. Например, во время стажировки по обработке изображений я не смог бы реализовать наши алгоритмы удаления шума без глубокого понимания PDE. Полученный код был простым, но очень точным. И математика - вот что нас туда привело. Еще более удивительна красота этих формул. Одно небольшое выражение PDE можно преобразовать в несколько страниц кода. Без первоначальной формулы трудно понять, как вы когда-нибудь с ней справитесь.
Math - это не нужный для программирования, потому что программирование является math. Это может быть хорошая математика или плохая математика (например, когда длинный призыв орангутана транслитерируется в Ook язык), но всякий раз, когда программист создает объектную модель чего-то, ze (обычно неосознанно) выполняет математический акт. Итак, опять же, для программирования не нужно читать книги по математике, но это ничего не меняет в том, что программирование - это математика, и что (как выразился Евклид) к нему нет королевской дороги.
Это зависит от того, чем вы занимаетесь: веб-разработкой, программным обеспечением для бизнеса и т. д. Я думаю, что для такого рода вещей математика не нужна.
Если вы хотите заниматься компьютерной графикой, обработкой аудио / видео, искусственным интеллектом, криптографией и т. д., Тогда вы необходимость математический фон, иначе вы просто не можете этого делать.
На ум приходят две вещи:
Я считаю, что без определенных видов математики не обойтись. Например, каждый разработчик программного обеспечения должен знать и понимать Законы де Моргана и Обозначение O.
Другие виды просто очень полезны. В симуляции нам часто приходится много заниматься физическим моделированием. Если вы работаете с графикой, вам часто придется писать алгоритмы преобразования координат. За свою 20-летнюю карьеру у меня было много других ситуаций, когда мне нужно было написать и решить одновременные линейные уравнения, чтобы выяснить, какие константы нужно ввести в алгоритм.
Я много использовал математику, когда решал задачи по механике твердого тела и теплопередаче с помощью компьютеров. Линейная алгебра, численные методы и др.
Я никогда не использую эти знания сейчас, когда пишу бизнес-приложения, доставляющие информацию из реляционных баз данных в пользовательские веб-интерфейсы.
Я все равно порекомендую кому-нибудь получить лучший математический фон.
Дискретная математика очень помогает разработчику; У меня нет формального обучения этому.
Я думаю, что методы, изложенные в «Программирование коллективного разума», далеки от того, что я делал как ME, и могут попасть в бизнес-приложения, которые я делаю сейчас. Netflix, безусловно, сделал из этого хороший бизнес. Эта групповая разведка, похоже, набирает обороты.
Чтобы ответить на вопрос: нет.
Математический талант и талант программирования: сильная корреляция, практически нет причинно-следственной связи.
Одно, безусловно, не является обязательным условием для другого, и усиление ваших математических навыков не сделает вас лучшим программистом, если вы не программируете в одной из специализированных областей, где математика является довольно неотъемлемой частью (3D-графика, программирование статистики и т. д.)
Тем не менее, конечно, математическое образование не повредит и в некоторых случаях очень поможет вам. И, как отмечали другие, мыслительные процессы, связанные с математикой и программированием, очень похожи; если у вас есть талант к одному, вы, вероятно, обнаружите, что у вас есть талант к другому.
Если бы я собирался порекомендовать программистам математические требования, это была бы некоторая базовая статистика. Почти все работы по программированию требуют небольшого отчета.
Потребность в математике немного возрастает, когда вы начинаете делать более сложные и / или забавные вещи. Игры довольно сложны в математике, как и приложения, критичные к производительности, где вам действительно нужно понимать стоимость различных алгоритмов.
Я собираюсь посидеть с вами здесь прямо на заборе ... Есть много хороших аргументов как за, так и против, и все они в равной степени веские. Так какой же правильный ответ?
Оба ... в зависимости от ситуации. Это не тот случай, когда «если ты не с нами, ты против нас».
Есть много аспектов математики, которые действительно делают области программирования намного проще: геометрия, алгебра, тригонометрия, линейные уравнения, квадратные уравнения, производные и т. д. Фактически, многие из наиболее эффективных «алгоритмов» имеют в своей основе математические принципы.
Как отметил Джон, у него есть диплом по математике, но в мире программирования он почти не использует эти знания. Я предполагаю, что он использует математику гораздо больше, чем он, вероятно, считает, хотя и бессознательно ... ладно, может быть, не квантовой механикой, а более базовыми принципами. Каждый раз, когда мы создаем графический интерфейс, мы используем математические принципы для создания эстетичного дизайна, мы не делаем этого сознательно - но мы делаем это.
В деловом мире мы редко думаем о математике, которую используем в нашем программном обеспечении - и во многих аспектах программного обеспечения, которое мы пишем, это просто стандартные алгоритмы для выполнения тех же монотонных задач, чтобы помочь деловому миру догнать технологии, которые доступный.
Было бы довольно легко пропустить всю карьеру, даже не сознательно используя математику в нашем программном обеспечении. Однако понимание математики помогает упростить многие аспекты программирования.
Думаю, вопрос действительно сводится к следующему: «Нужна ли математика передовой для программирования?» и, конечно же, на вопрос который ответ будет отрицательным ... если только вы не начнете писать и / или взламывать алгоритмы шифрования (что является увлекательной темой) или работать с гидравлическими уравнениями, как указал Мил, или системами управления потоком (как и раньше). Но я бы добавил, что хотя базовая математика может и не быть необходимый, она сделает вашу жизнь намного проще.
У меня есть диплом по математике, и я не могу сказать, что это мне хоть как-то помогло. (Я разрабатываю общие веб-приложения, ничего научного). Мне нравится работать с другими разработчиками, не имеющими математического образования, потому что они, кажется, думают за пределами моей «математической» рамки и заставляют меня делать то же самое.
Я признаю, что никогда не использовал в программировании какую-либо сложную математику, за исключением некоторых любимых проектов, связанных с математическими темами.
Тем не менее, мне очень нравится работать вместе с людьми, которые достаточно сообразительны, чтобы разбираться в математике. Освоение сложных и трудных вещей помогает привести ваш мозг в форму для решения сложных и трудных задач программирования.
Необходимо! = Достаточно
Давайте, ребята! в заголовке написано «необходимый», я бы сказал, что это в лучшем случае условие достаточный для возможности хорошего программирования. Так же, как и у них есть много достаточных, но не необходимых условий: 5-летний опыт работы, степень бакалавра наук или любое научное образование.
Некоторые могут даже возразить, что если вы поэт или английский специалист, то сможете стать хорошим дизайнером API или что художник может хорошо разбираться в UI / Web-программировании.
Но это, очевидно, не гарантии, точно так же, как знание математики может не сделать вас хорошим программистом, но вы все равно можете взломать C++ или F#, как и остальные ...
Мой ответ - нет. Я был / являюсь (сейчас безработный, спасибо Индии) программистом более 25 лет. И за всю свою карьеру я НИКОГДА не сталкивался с программой LOGIC, которая требовала бы чего-то большего, чем базовые математические навыки. Если вы не работаете с математикой каждый день, которая выходит за рамки базовых математических навыков, необходимость в продвинутой математике отпадает. На корпоративном уровне любая сложная математика БУДЕТ передана статику или математику, который предоставит программисту необходимый псевдокод, и оба будут сотрудничать в тщательном тестировании конечного продукта. В конце концов, все дело в суде математического ботаника. На любом уровне, если вы не математик / статик / старший программист, мысль о том, что программист будет отвечать за ожидаемые результаты сложной математической компьютерной программы, абсурдна и очень безрассудна.
Для программирования не нужно изучать математику.
Но изучение математики тренирует вас в дисциплине мышления. Поэтому я считаю математику полезной для разработчиков.
Вам нужна базовая математика для программирования, такая как сложение, вычитание, умножение и деление.
@Thomas: Вы можете видеть арифметические операции как черные ящики, вам не нужно их изучать :-)
Я думаю, это действительно зависит от того, что вы пытаетесь сделать, но IMHO, теория CS и OS здесь важнее математики, и вам действительно нужна только математика, которую они включают.
Например, в теории планирования и оптимизации есть много опыта в области CS, который стоит за многими планировщиками в современных ОС. Это пример того, что потребует некоторой математики, но не чего-то сверхсложного.
Но, честно говоря, для большинства задач математика не нужна. Что вам нужно, так это научиться мыслить по основанию 2 и 16, например, умение мысленно ИЛИ / И. Например, если у вас есть байт, и в этом байте есть два 3-битных поля и 2 потраченных впустую бита, знание того, какие биты в каких полях активны, когда значение байта равно примерно 11, сделает работу немного быстрее, чем необходимость ручка и бумага.
Вы когда-нибудь изучали теорию массового обслуживания? Вы когда-нибудь изучали менеджеры памяти и статистические модели, которые заставляют разработчиков выбирать один из них? Я не обязательно не согласен с основной тяжестью вашего ответа, но с вашим чрезмерным упрощением.
@San: Я уверен, что я слишком упрощаю, но я думаю, что большинству разработчиков систем никогда не нужно знать эти вещи на этом уровне. Я изучал его на базовом уровне на первых двух степенях и несколько глубже, когда работал над докторской степенью, но это никогда не было моей сильной стороной, я предпочитаю оставить это экспертам. Мои знакомые, знакомые с ОС, обладали математическими способностями, которые меня просто поразили.
что я считаю очень верным. Я считаю, что необходимо отличать системное программирование от программирования ОС. Плотно сплетенные концепции, но, тем не менее, разные.
Вам не нужно много математики. Некоторое комбинаторное мышление может помочь вам сформулировать и уменьшить проблему для быстрого выполнения. Умение размножаться - это хорошо. Вы инженер, приближения в порядке.
Я думаю, что для описанных вами задач не нужно много математики. но в целом я думаю, что для настоящего продвинутого системного программирования вы:
OMG, исчисление помогает в написании алгоритмов. Вам понадобится алгебра, чтобы помочь с алгоритмами планирования. Логическая алгебра для помощи с семафорами и флагами событий. Теория графов тоже поможет.
Нет, вам не нужно знать математику (кроме, может быть, двоичных / октановых / шестнадцатеричных / десятичных представлений) для системного программирования и тому подобного.
Аааа! Двоичные, восьмеричные, шестнадцатеричные и десятичные числа - это ваша основная математика и теория чисел. Не забывайте сложение, вычитание, умножение и деление. Алгебра помогает с концепциями переменных и упрощает задачи. Также есть распространение ошибок.
Если вы найдете эту тему достаточно увлекательной, чтобы опубликовать ее, просто продолжайте учиться. Остальное придет само собой.
Я начал программировать примерно в то же время, когда поступил в класс преалгебры. Поэтому я бы не сказал, что математика так уж важна, хотя она может помочь в определенных типах программирования, особенно функциональных.
Я еще не изучал дискретную математику, но я вижу много теоретических материалов о программировании, написанных в математической нотации, которая преподается в этом классе.
Кроме того, убедитесь, что вы умеете рассчитывать что-либо с любой базой, особенно с основанием 2, 8 и 16.
Кроме того, один класс, который действительно принес мне некоторые концепции, был этим классом предварительного программирования. Нас учили объединениям, пересечениям и всем прочим счастливым вещам, и это почти полностью соответствует побитовой математике. И мы очень подробно рассмотрели булеву логику. Что я считал наиболее полезным, так это то, когда мы научились сокращать сложные логические операторы. Это было очень удобно:
(x|y) & (x|z) & (x|foo)
можно упростить до
x | (y & z & foo)
Что я раньше не совсем понимал.
Думаю, я буду первым, кто скажет, что делать нужна математика. Как говорили другие, математика не так уж и важна для определенных аспектов развития, но основы критического мышления и структурного анализа очень важны.
Более того, математика важна для понимания многих основ, которые входят в такие вещи, как планировщики, оптимизация, сортировка, управление протоколами и ряд других аспектов компьютеров. Хотя математика, используемая на уровне вычислений, не является сложной (в основном это алгебра средней школы), теории и приложения могут быть довольно сложными, поскольку твердое понимание математики посредством исчисления будет очень полезным.
Можете ли вы обойтись без этого, абсолютно, и вы не должны позволять менее основательным знаниям математики сдерживать вас, но если бы у вас была возможность или склонность, я бы изучал столько математики, сколько вы могли, исчисление, числовую теорию, линейные алгебра, комбинаторика, практические приложения - все это имеет как практические, так и теоретические приложения в широком диапазоне компьютерных наук.
Я знал людей, которые добились больших успехов по обе стороны забора (те, кто не уделял особого внимания математике, и те, кто ходил в школу по физике или математике), но в обеих группах им нравились численные задачи и изучение алгоритмов и теории математики. .
Я поддерживаю это. Хотя и без этого можно обойтись - пожалеете ли о своем решении? Если вы рассчитываете получить хотя бы умеренно увлекательную / сложную работу, приобретенные вами математические навыки обязательно помогут вам.
Справедливо! GrayWizardx и другие: Что вы порекомендуете, как самоучитель, в плане материалов для чтения? Меня сильно оттолкнул убийственно плохой способ, которым меня учили математике, когда я был моложе. Я не хочу винить кого-то еще, но математика была представлена злобно. Пришло время выкупить. Насколько ЛЕГКО самостоятельно изучить изложенную здесь математику (исчисление, линейную алгебру, дискретную математику и т. д.)? Рекомендуется ли какой-либо конкретный набор учебников для этого подхода? Высшее образование больше не вариант!
@Emmel, я действительно видел «Манга-справочник по математике» и «Манга-справочник по исчислению» в журнале Barnes and Noble, и я знаю, что на днях видел «Полное руководство для идиотов по линейной алгебре». Что касается реальных ресурсов, то раньше было несколько отличных математических веб-сайтов (для студентов и т. д.), Но я не уверен, сколько из них все еще существует. Одна вещь, которую я делаю время от времени, - это хожу в общественный колледж и «проверяю» математические классы (принимайте это на балл / неуспешно) и просто переключаюсь. Не делал этого за 5-6 лет, но в прошлый раз это очень помогло.
Системное программирование - это не ракетостроение :-) ИМХО, любой программист good может подойти к системному программированию. Однако нужно знать
Я думаю, что наиболее востребованными качествами было бы написание кода точный и умение углубляться, если требуется, в любом из вышеперечисленных пунктов.
Кстати, это моя личная теория, YMMV; Я пока не считаю себя хорошим программистом! :-(
По моему опыту, требование математики для получения степени информатики существует просто для того, чтобы отсеять тех, кто проиграет. Если вы не можете сдать Calculus I и II, вы определенно не пройдете продвинутый курс по построению компиляторов, базам данных или теории операционных систем.
Откуда эти математики? У меня степень в области компьютерных наук, и я постоянно использую математику в системном программировании. Исчисление поставит вас далеко впереди тех, у кого нет этих концепций (таких как использование пределов, сумм Реймана (sp!), Произведения и суммирования). Но разве для получения степени по информатике не требуется теория построения компиляторов, баз данных и операционных систем? И, судя по вашим утверждениям, требует исчисления.
@ Томас Мэтьюз, вы правы. Большинство школ в наши дни предлагают степень «научиться программировать» и называют это информатикой. Я был ужасно недостаточно подготовлен к Граду. Когда я пошел в школу, я столкнулся с серьезными проблемами все время, пока не закончил учебу, в отличие от моего очень легкого старшеклассника.
Дискретная математика мне показалась очень полезной. Я принимал исчисление, и иногда он тоже мог быть очень полезным, но я не помню ничего из этого. Например, когда я пытался реализовать интерфейс DIS (который имеет дело с такими вещами, как скорости вращения и преобразования координат). Я провел день, путешествуя по городу в поисках книги, чтобы объяснить мне кватернионы (это было до WWW). Также было время, когда мне пришлось написать средство, чтобы некоторые инженеры могли внедрить n-линейная интерполяция. Если вы не понимаете, что это значит, поверьте, я тоже. К счастью, это был Почта-WWW.
Мой совет - не переживайте. Вы можете быть ограничены одним или двумя проектами, но в наши дни не так уж и плохо.
Как программист-самоучка, который начал работать над играми около 30 лет назад, я определенно сказал бы, что вам нужно знать как можно больше математики. Такие вещи, как матрицы, кватернионы, трассировка лучей, системы частиц, физические движки и тому подобное, требуют хорошего уровня математических знаний, и мне только жаль, что я научился всем этим вещам намного раньше.
По моему опыту, математика необходима в программировании, от нее никуда не деться. Все программирование основано на математике.
Выпуск не черно-белый, а более красочный. Вопрос не в том, нужна ли вам математика, а в том, сколько. Более высокие уровни математики дадут вам больше инструментов и откроют для вас разные пути мысли.
Например, вы можете программировать, если знаете только сложение и вычитание. Когда требуется умножение, вам придется выполнить множество сложений. Умножение упрощает повторяющиеся сложения. Алгебра позволяет упростить математику, прежде чем применять ее в программах. Линейная алгебра предоставляет инструменты для преобразования изображений. Булева алгебра обеспечивает механизм сокращения всех этих операторов if.
И не забывайте, что это родство математики, логики и философии. Логика поможет вам эффективно использовать операторы case или switch. Философия поможет вам понять мышление человека, написавшего код, который вы изменяете.
Да, для написания программ не нужно много математики. Некоторые программы могут требовать больше математики, чем другие. Более глубокие математические знания дадут вам преимущество перед теми, у кого их понимание ниже. В наше время людям нужны все преимущества, которые они могут получить, чтобы получить эту работу.
Чтобы делать то, что вы хотите, вам не обязательно знать математику, но она должна вам очень нравиться.
Вы получили несколько ответов, и нет, я не прочитал их все. Я посередине в этом вопросе, нет, вам определенно не нужна математика, чтобы быть программистом. Ассемблер и драйверы устройств в Linux не более и не менее сложны, чем другие, и не требуют математики.
Ни в коем случае вам не нужно брать или сдавать математический класс для чего-либо из этого.
Я согласен с тем, что установка на решение проблем в программировании очень похожа на мышление математических решений, и в результате математика, вероятно, дается легко. или наоборот, если математика сложна, то программирование может оказаться трудным. Класс или степень, или какие-то бумажки или трофеи не требуются, конечно, уйти и изучить материал.
Теперь, если вы не можете быстро преобразовать из шестнадцатеричного в двоичное в десятичное ни в уме, ни на бумаге, ни с помощью калькулятора, вам придется бороться. Если вы хотите заняться сетями и другими вещами, связанными с синхронизацией, которые драйверы ядра часто делают, но не обязаны. Вы будете бороться. Я знаю очень длинный список людей с математическими и / или компьютерными и / или инженерными степенями, которые борются с расчетами скорости, бит в секунду, байтов в секунду, сколько памяти вам нужно для чего-то и т. д. в какой-то степени это можно считать своего рода умением, которое есть у одних, а у других нужно работать.
Суть в том, что я верю в силу воли. Если вы хотите научиться этому, вы можете и хотите, это очень просто. Вам не нужно брать уроки или тратить много денег, например, linux и qemu могут занять вас довольно долгое время, разные языки asm и т. д. Сбойные среды для разработки ядра, встроенные и т. д. Вы не ограничены этим , но я не верю, что тебе нужно убегать и брать какие-нибудь уроки, если ты не хочешь. Если вы хотите тогда обязательно взять несколько классов ee, несколько классов cs и несколько классов математики ..
Это не приманка для огня, а реальность. Все, что вам нужно знать о цифровой электронике и разработке программного обеспечения с точки зрения программирования, можно обобщить. 0, 1 и, или, нет. Эти пять вещей используются цифровой электроникой и всеми программами. Вы можете построить что угодно с помощью большого ящика быстрых ворот nand.
В университете мы читаем книгу Кнута, Грэма и Паташника «Конкретная математика». Это книга по математике с темами, выбранными для студентов, изучающих информатику. Несколько лет спустя я снова проверил книгу и заметил, что использовал каждую тему в книге хотя бы один раз (за исключением чисел Стирлинга).
В большинстве случаев знание математики помогает решать проблемы с меньшими затратами, более элегантно или быстро находить решения. Это также зависит от того, чем вы занимаетесь. Т.е. математика важнее, когда вы концентрируетесь на алгоритмах, чем когда вы концентрируетесь на инженерных задачах.
Я работаю игровым программистом в команде с художниками, гейм-дизайнерами, дизайнерами уровней и т. д.
Наличие кто-то в команде, которая разбирается в математике, является чистым плюсом, так же как плюс иметь кого-то, кто играет во все виды игр, кого-то, кто является представителем нашей целевой аудитории, кого-то, кто пережил некоторые болезненные постановки, и т.п.
Часто те, кто разбирается в математике больше всего, оказываются программистами (иногда геймдизайнерами), потому что предметные области достаточно близки. Но изо дня в день программистам игр не нужно много математики, кроме трехмерной геометрии и (иногда) физики.
Из математики, которую я изучал, наиболее полезной мне показалась статистика, хотя иногда мне не хватает некоторых концепций.
У меня две степени по математике. Хотел бы я знать больше о базах данных.
Я хочу сказать, что возможность найти корни многочлена или возможность доказать, что sqrt (2) иррациональна, полезна в абстрактном смысле, но не обязательно сделает вас лучшим программистом.
интересно, почему это отвергается.
Я не голосовал против, но вы знаете, что базы данных основаны на реляционной алгебре, верно? Насколько мне известно, это тоже относится к математике.
Математика - это набор инструментов для создания программ. Я рекомендую Введение в алгоритмы Кормена. Это касается более «математических» вещей.
- Greatest lowest limit (managing resources)
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)
Вам нужна математика. Программирование - это не более чем математика. Любые открытия теоретической физики не становятся практическим (применимым) следствием, если они не объясняются в терминах математических решений. Ни один из них не может быть решен с помощью вычислений, если они не могут быть интерпретированы на компьютерах, а точнее на языках программирования. Таким образом, разные языки предназначены для решения конкретных задач. Но для общих и широко распространенных языков программирования, таких как java, c, C++, многие из наших задач по программированию включают повторяющееся (непрерывное) решение одних и тех же проблем, таких как извлечение значений из базы данных, текстовых файлов, их размещение в Windows (рабочий стол, Интернет), манипулирование одинаковые значения, иногда доступ к некоторым данным с аналогичных устройств (но с разными названиями брендов, разными портами и головной болью) и т. д., что не требует ничего, кроме унитарного метода, а также алгебры (счетчик, некоторая логика), геометрии (графики) и т. зависит от того, что вы пытаетесь решить.
Я занимаюсь программированием 8 лет профессионально, а с 12 - хобби.
Математика не нужна, логика есть. Однако математика ужасно полезна: сказать, что в этом нет необходимости, все равно что сказать, что для убийства человека не нужно оружие, вы можете использовать нож. Что ж, это правда, но этот пистолет значительно упрощает задачу.
Есть пара голых минимумов, которые вы уже должны соблюдать. Вам необходимо знать основные алгебраические выражения и обозначения, а также общие компьютерные эквиваленты. Например, вам нужно знать, что такое экспонента (от 3 до 3 - 27), а обычное компьютерное выражение - 3 ^ 3. Общие обозначения алгебры действительно меняются между языками, но многие из них используют несколько унифицированную методологию. Другие (глядя на вас LISP) этого не делают. Вам также необходимо знать порядок действий.
Вам нужно понимать алгоритмическое мышление. Сначала это, затем это производит то, что используется в этом вычислении. Скорее всего, вы это понимаете или нет, и это довольно трудное препятствие, чтобы преодолеть его, если вы этого не понимаете; Я обнаружил, что это то, что вы «получаете», а не то, чему вы действительно можете научиться. И наоборот, некоторые люди не «понимают» искусство. Они не должны становиться художниками. Кроме того, в учебной программе CS были студенты, которые не могли понять, почему это не работает: х = г + ш; z = 3; у = 5; Дело не в том, что они не понимают сложения, а в том, что они не понимают требования однозначного выражения. Если они это понимают, компьютер тоже должен, верно? Если вы не видите, что не так в трех приведенных выше строках, не становитесь программистом.
Наконец, вам необходимо знать математику, которая относится к вашей области программирования. Бухгалтерское программное обеспечение могло бы остановиться на базовой алгебре. Если вы программируете физику, вам нужно знать физику (в общих чертах) и математику в трехмерной геометрии (евклидову). Если вы программируете программное обеспечение для архитектуры, вам необходимо знать тригонометрию.
Однако это идет дальше математики; в какой бы области вы ни программировали, вам необходимо хорошо понимать основы. Если вы занимаетесь программным обеспечением для анализа языков программирования, вам необходимо знать вероятность, статистику, теорию грамматики (несколько языков) и т. д.
Часто определенные области нуждаются в знаниях, которые, как вы думаете, не связаны между собой, или могут извлечь из них пользу. Например, если вы программируете программное обеспечение для аудио, вам действительно нужно знать тригонометрию, чтобы работать с сигналами.
Величина тоже меняет вещи. Если вы сортируете набор финансовых данных из 1000 элементов, в этом нет ничего страшного. Однако, если бы это было 10 миллионов записей, вы бы очень выиграли от знания векторной математики и глубокого понимания сортировки на двоичном уровне (как система сортирует по алфавиту? Как она узнает, что 'a' меньше 'b '?)
Вы обнаружите, что как программист ваша общая база знаний резко возрастет, потому что каждый проект потребует большего обучения за пределами непосредственной сферы программирования. Если вы брезгливы или ленивы в отношении самообучения и вам не нравится идея тратить 10+ часов в неделю на выполнение «домашнего задания», не становитесь программистом.
Если вам нравятся мыслительные упражнения, если вам нравится учиться, если вы можете думать об абстрактных вещах, таких как математика без калькулятора или проектировать без блокнота, если у вас широкие вкусы в жизни и хобби, если вы самокритичны и можете выбросить '' избранные идеи, если вам нравится совершенствовать вещи, то станьте программистом. Принимайте это решение не на основе математики, а, скорее, на способности логически мыслить и учиться. Это то, что важно; математика - это всего лишь побочный продукт.
Это хороший ответ, вам не нужно знать математику (черт возьми, я никогда не выхожу за пределы базового Порядка операций: математика PEMDAS), ха-ха, но я всегда прихожу к решению. SURE еще в 1970-х годах математика была бы чрезвычайно важна для программистов, которые пытались эффективно программировать цикл процессора, используя очень сложные математические уравнения, чтобы избежать циклов и тому подобного.
Теперь компьютеры мощные, цикл до 100 или около того, чтобы избежать использования сложной математики, на самом деле не повредит вашей программе в долгосрочной перспективе, но, конечно, вы приобретете математические навыки в качестве наблюдателя, даже не изучая математику, ха-ха, что улучшит ваши навыки эффективного программирования .
Давайте посмотрим правде в глаза, чем больше вы знаете математики, тем больше вероятность, что вы не только лучше оптимизируете программу, но и поймете, что можно программировать, а что невозможно, не читая статей, в которых утверждается, что это невозможно из-за этого сумасшедшего математического уравнения.
Изучение математики может помочь вам понять, как все работает, без реального ОПЫТА ... (я основываю это на своей жизни).
Вот мой пример (статья о сжатии). Я все пытался и пытался, не понимая математики, стоящей за этим .. по крайней мере от 700? ошибочные / неудачные попытки Теперь я знаю больше о том, что можно сделать (что может снова потерпеть неудачу), а также знаю 700 ошибочных подходов к этому.
Если бы я, вероятно, знал математику, я бы даже не пробовал эти 700 ошибочных попыток, вероятно, из-за слишком большого знания математики. Но путь, который я выбрал, не зная математики, мне гораздо интереснее и познавательнее.
Но это только я .. Я всегда в руках человека .. не книжный червь;)
Некоторые из них приводят к новым математическим открытиям, другие просто приводят к более быстрому и более оптимизированному программному обеспечению.
Пусть это будет уроком для вас, ребята, выбирайте свой путь в зависимости от того, что лучше всего подходит для вас, поверьте мне, оба они полезны.
Десять лет спустя я позвонил своему учителю математики и сказал ему, что никогда не использовал углубленную математику за всю свою карьеру. Дик подвинься, я знаю, но отличный вопрос! Плюс один.