Нужна ли математика для программирования? [закрыто]


117

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

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

Я до сих пор не могу определиться, какая из аргументов верна. Не могли бы вы рассказать нам свою позицию, исходя из собственного опыта?


7
Десять лет спустя я позвонил своему учителю математики и сказал ему, что никогда не использовал высшую математику за всю свою карьеру. Дик подвинься, я знаю, но отличный вопрос! Плюс один.
Крис МакКолл,


Просмотрите ответ на этот вопрос, получивший наибольшее количество голосов .
Борис Ститницки

Скорее, чем. В конце концов, это нужно передать программистам.
Крис Кадмор,

Ответы:


111

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

Я начал программировать, когда мне было около 9 лет, и было бы преувеличением сказать, что к тому моменту я выучил много математики. Однако, приложив немного усилий, я смог понять переменные, циклы, операторы goto (простите меня, я был Vic 20 BASIC, и я еще не читал ни одного Dijkstra) и базовую геометрию координат для вывода графики на экран. ,

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

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

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

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


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

Математика не нужна для программирования, потому что программирование - это математика. Это может быть хорошая математика или плохая математика (например, когда длинный призыв орангутана транслитерируется на язык Ook ), но всякий раз, когда программист разрабатывает объектную модель чего-то, он (обычно неосознанно) выполняет математический акт. Итак, опять же, для программирования не нужно читать книги по математике, но это ничего не меняет в том, что программирование - это математика, и что (как выразился Евклид) к нему нет королевской дороги.
Борис Ститницкий

56

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

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

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


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

Строгость и дисциплина решения математических задач превращаются в программирование. Вам нужно иметь способность разбирать проблему и подходить к ней сначала с очевидного направления, а затем с более творческих направлений в обеих дисциплинах.
Брамха Гош, 01

4
Два великих программиста, которыми я очень восхищаюсь, не изучали компьютерные науки, а, скорее, получили математическое образование и только что изменили карьерный путь: Мигель де Икаса и Александр Степанов. Кстати, Степанов однажды сказал , что во время работы по математике «вы не начинаете с аксиом: вы в конечном с аксиомами». : D
Джо Пинеда

@Liam - Речь идет о сопоставлении с образцом и об изменении памяти в краткосрочной перспективе. Оба вида деятельности требуют этих навыков.
jcolebrand

+1 за "Есть очень хороший шанс, что если вы хороши в одном, вы, вероятно, будете хороши в другом".
Торбьёрн Равн Андерсен

39

информатика! = программирование

Хорошо, серьезно, я знаю хороших и плохих программистов, специализирующихся на английском и психологии, а некоторых - на компьютерных науках. Некоторые очень известные ребята, которыми я восхищаюсь как разработчики, не имели опыта работы с CS. Ларри Уолл (Perl), например, был лингвистом. С другой стороны, это помогает узнать что-то о домене, над которым вы работаете, потому что тогда вы, по крайней мере, сможете увидеть, имеют ли ваши данные смысл и помочь вашим клиентам / пользователям найти то, что они действительно хотят. И да, есть проблема вычислительной сложности, эффективных структур данных и корректности программы. Это то, что вы изучаете в области компьютерных наук, и это полезно знать практически в любой области, но это не является ни необходимым, ни достаточным.


12
Я думаю, что лучшая цитата, которую я слышал, - это «Информатика - это не больше компьютеров, чем астрономия - телескопы». (Дейкстра)
tloach 01

5
Я думаю, что stackoverflow.com был создан в основном для того, чтобы преодолеть этот однострочный тип ответов, но есть 15 единомышленников, которые подняли этот бесполезный ответ на вершину. У меня нет с вами ничего личного, однако я пометил ваш ответ как "оскорбительный". Так, по крайней мере, для меня.
simsim 01

2
@simsim: Мне кажется обидным, что люди думают, что степень в области CS каким-то образом связана с программированием.
tloach 01

3
@simsim: Неважно, что имели в виду Джоэл и Джефф, когда создавали этот сайт. Все дело в создании сообщества, в котором программисты помогают друг другу. Я думаю, что короткий ответ Дэвида попадает в цель. +1
Скотти Т.

@ Scottie: если бы это было «все о создании сообщества, в котором программисты помогают друг другу», то форумов и списков рассылки было бы достаточно. Возможно, я был немного резок в своем ответе, но было удивительно видеть, что 15 пользователей проголосовали за совершенно невежественный «ответ», ну, конечно, до редактирования. :-)
simsim 01

29

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

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

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

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


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

Справедливо! GrayWizardx и другие: Что вы порекомендуете как самообучающиеся материалы для чтения? Меня сильно оттолкнул убийственно плохой способ, которым меня учили математике, когда я был моложе. Я не хочу винить кого-то еще, но математика была представлена ​​злобно. Пришло время выкупить. Насколько ЛЕГКО изучить изложенную здесь математику (исчисление, линейную алгебру, дискретную математику и т. Д.) Самостоятельно? Рекомендуется ли какой-либо конкретный набор учебников для этого подхода? Высшее образование больше не вариант!
Emmel

1
@Emmel, я действительно видел «Манга-справочник по математике» и «Манга-справочник по исчислению» в журнале Barnes and Noble, и я знаю, что на днях видел «Полное руководство для идиотов по линейной алгебре». Что касается реальных ресурсов, то раньше было несколько отличных математических сайтов (для студентов и т. Д.), Но я не уверен, сколько из них все еще существует. Одна вещь, которую я делаю время от времени, - это хожу в общественный колледж и «проверяю» математические классы (принимаю это на балл / неуспешно) и просто переключаюсь. Не делал этого за 5-6 лет, но в прошлый раз это очень помогло.
GrayWizardx 03

26

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

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

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


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

@balabaster: Иногда, но я бы сказал, что это случается нечасто. Точно так же вам не обязательно знать формулу заранее, чтобы использовать ее. Быть компетентным в математике - это хорошо, поэтому вы можете понимать формулы, когда видите их, но вам редко нужна сама математика на уровне диплома, IMO.
Джон Скит,

11
Степень математики? Тогда вы знаете, что это не просто цифры. У меня две степени по математике, и я часто использую контент: логическая алгебра для анализа / упрощения логики, теория автоматов / языка для построения DSL, алгебра для анализа производительности большого O и т. Д.
joel.neely

14

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


14

Я пойду против течения и скажу "Да"

Я переключаюсь с гражданского строительства на программирование (бетон - отстой!). Мой математический фон состоит из обычных занятий на первом году обучения, на втором и третьем курсах математического анализа (дифференциальный эквалайзер, интеграция объемов, ряды, преобразования Фурье и Лапласа) и курса численного анализа.

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


Сколько фундаментальных алгоритмов на самом деле пишет средний программист? Думаю, 80% заданий по программированию не связаны с математикой, кроме базовой алгебры.
dbkk 01

@dbkk: Самая распространенная задача среднего программиста - это проектирование объектной модели, «бизнес-логики» некоторой области. И такой процесс есть не что иное, как математика, хотя обычно это не отражается теми, кто выполняет задачу.
Борис Ститницки

14

Это зависит от того, что вы делаете. Если вы много занимаетесь 3D-программированием, знание 3D-геометрии, безусловно, необходимо, не так ли? ;-) Если вы хотите создать новый формат изображения, такой как JPG, или новый аудиоформат, такой как MP3, вы также сильно потеряетесь, если не можете понять косинусное или преобразование Фурье, так как это основы, на которых основано сжатие с потерями. , Многие другие задачи могут быть решены лучше, если вы достаточно хорошо знаете свою математику.

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


13

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


9

Да, нет необходимости в продвинутой математике - если вы занимаетесь коммерческим программированием - готовым программным обеспечением.

Однако при работе с хардкорными вещами, такими как:

  • Расчет траекторий для управления роботом
  • Создание AI-подобных приложений для поддержки неопределенности и автоматического мышления
  • Игра с трехмерным движением и графикой

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

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

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


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

4
Как он использовал Тьюринга для этого? Доска для спиритических сеансов или сеанс?
Джаред Апдайк,

8

Какой тип программирования?

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

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

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

Я надеюсь, что этот бессмысленный ответ поможет.


6

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

Если вы разработчик игр и вам приходится много работать с физикой - понимание математики имеет решающее значение. Если вы работаете с расширенными визуальными элементами управления - без геометрии ничего не обойтись. Если вы планируете провести какие-то финансовые расчеты - ДЕЙСТВИТЕЛЬНО помогло бы твердое знание статистики.

С другой стороны, за последние 5 лет у меня было всего 2 или 3 проекта, где вообще требовалось ЛЮБОЕ количество математики. Из них только в 1 случае поиск в Google не помог.

В конце концов, даже финансовые расчеты очень часто делают за вас ваши клиенты и дают вам формулы для реализации.

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


К «разработчику игр» я бы добавил «разработчик симуляторов». Я помню, как в 93-м я ездил по городу, пытаясь найти учебник по математике, достаточно продвинутый, чтобы объяснить мне, как работают Quaternions, чтобы я мог правильно кодировать мертвый алгоритм перекокинга. Слава Богу за Интернет сегодня!
TED

6

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

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

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


6

По моему опыту, математика необходима в программировании, от нее никуда не деться. Все программирование основано на математике.

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

Например, вы можете программировать, если знаете только сложение и вычитание. Когда требуется умножение, вам придется выполнить множество сложений. Умножение упрощает повторяющиеся сложения. Алгебра позволяет упростить математику, прежде чем применять ее в программах. Линейная алгебра предоставляет инструменты для преобразования изображений. Булева алгебра предоставляет механизм сокращения всех этих ifутверждений.

И не забывайте о родстве математики, логики и философии. Логика поможет вам эффективно использовать caseилиswitch операторы . Философия поможет вам понять мысли человека, написавшего код, который вы изменяете.

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


6

Я занимаюсь программированием 8 лет профессионально, а с 12 лет - как хобби.

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

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

Вам нужно понимать алгоритмическое мышление. Сначала это, затем это производит то, что используется в этом вычислении. Скорее всего, вы это понимаете или нет, и это довольно трудное препятствие, чтобы преодолеть его, если вы этого не понимаете; Я обнаружил, что это то, что вы «получаете», а не то, чему вы действительно можете научиться. И наоборот, некоторые люди не «понимают» искусство. Они не должны становиться художниками. Кроме того, в программе CS были студенты, которые не могли понять, почему это не работает: x = z + w; z = 3; у = 5; Дело не в том, что они не понимают сложения, а в том, что они не понимают требования однозначного выражения. Если они это понимают, компьютер тоже должен, верно? Если вы не видите, что не так в трех приведенных выше строках, не становитесь программистом.

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

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

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

Величина тоже меняет вещи. Если вы сортируете набор финансовых данных из 1000 элементов, в этом нет ничего страшного. Однако, если бы это было 10 миллионов записей, вы бы очень выиграли от знания векторной математики и глубокого понимания сортировки на двоичном уровне (как система сортирует по алфавиту? Как она узнает, что 'a' меньше 'b ?)

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

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


5

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


5

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

Итак, ответ на ваш вопрос - это зависит от того, что вы пытаетесь сделать.


5

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

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


5

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

  • Не каждый может разработать UI.
  • Не каждый может написать эффективный код.
  • Не все могут четко комментировать и документировать.
  • Не каждый может сделать хороший алгоритм

Математика поможет вам до определенной степени, но только до определенной степени.


5

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


5

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

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


5

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

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

4

Я не думаю, что высшая математика - это требование хорошего программиста - как всегда, это зависит от того, что вы кодируете.

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

Но будучи профессиональным программистом в течение почти 10 лет (и еще 10 лет любителя) «высшая математика» - это не то, что мне нужно регулярно. Примерно в 99,8% случаев это просто плюс, минус, деление и умножение в некоторых разумных комбинациях - в большинстве случаев это касается алгоритмов, а не математики.


4

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

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


4

Программисту часто нужны математические знания, навыки графического дизайна, способность решать головоломки, трудовая этика и множество других навыков и качеств. Очень немногие программисты хороши во всем, в чем они могут быть хороши. Я бы не согласился ни с одним утверждением вида "вы не настоящий программист, если не можете { вставить сюда любимые навыки программирования" }».

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


4

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

Например, в теории планирования и оптимизации есть много опыта в области CS, который стоит за многими планировщиками в современных ОС. Это пример того, что потребует некоторой математики, но не чего-то сверхсложного.

Но, честно говоря, для большинства задач математика не нужна. Что вам нужно, так это научиться мыслить по основанию 2 и 16, например, умение мысленно ИЛИ / И. Например, если у вас есть байт, и в этом байте есть два 3-битных поля и 2 потраченных впустую бита, знание того, какие биты в каких полях активны, когда значение байта составляет что-то вроде 11, сделает работу немного быстрее, чем необходимость использования ручка и бумага.


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

@San: Я уверен, что я слишком упрощаю, но я думаю, что большинству разработчиков систем никогда не нужно знать эти вещи на этом уровне. Я изучал его на базовом уровне в моих первых двух степенях и несколько глубже, когда работал над докторской степенью, но это никогда не было моей сильной стороной, я предпочитаю оставить это экспертам. Мои знакомые, знакомые с ОС, обладали математическими способностями, которые меня просто поразили.
Uri

что я считаю очень верным. Я думаю, что необходимо отличать системное программирование от программирования ОС. Плотно сплетенные концепции, но, тем не менее, разные.
Сан-Хасинто,

4

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

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

Кроме того, убедитесь, что вы умеете рассчитывать что-либо с любой базой, особенно с основанием 2, 8 и 16.

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

(x|y) & (x|z) & (x|foo)

можно упростить до

x | (y & z & foo)

Что я раньше не совсем понимал.


4

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

Ни в коем случае вам не нужно брать или сдавать математический класс для чего-либо из этого.

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

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

Суть в том, что я верю в силу воли. Если вы хотите научиться этому, вы можете и хотите, это очень просто. Вам не нужно брать уроки или тратить много денег, например, linux и qemu могут занять вас довольно долгое время, разные языки asm и т. Д. Сбойные среды для разработки ядра, встроенные и т. Д. Вы не ограничены этим , но я не верю, что тебе нужно убегать и брать какие-нибудь уроки, если ты не хочешь. Если вы хотите тогда обязательно взять несколько классов ee, несколько классов cs и несколько классов математики ..


Это не огненная наживка, а реальность. Все, что вам нужно знать о цифровой электронике и разработке программного обеспечения с точки зрения программирования, можно обобщить. 0, 1 и, или, нет. Эти пять вещей используются цифровой электроникой и всеми программами. Вы можете построить что угодно с помощью большого ящика быстрых ворот nand.
old_timer 03

4

Вам нужна математика. Программирование - это не более чем математика. Любые открытия теоретической физики не становятся практическим (применимым) значением, если они не объясняются в терминах математических решений. Ни один из них не может быть решен с помощью вычислений, если они не могут быть интерпретированы на компьютерах, а точнее на языках программирования. Таким образом, разные языки предназначены для решения конкретных задач. Но для общих и широко распространенных языков программирования, таких как java, c, c ++, многие из наших задач по программированию включают повторяющееся (непрерывное) решение одних и тех же проблем, таких как извлечение значений из базы данных, текстовых файлов, их размещение в Windows (рабочий стол, Интернет), манипулирование одинаковые значения, иногда доступ к некоторым данным с аналогичных устройств (но с учетом разных торговых марок, разных портов и головной боли) и т. д., что не требует более чем унитарный метод,


3

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.