2010-09-05 3 views
16

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

+9

Я считаю, что разработчики должны знать все. Это было бы лучше, чем не знать все. –

ответ

3

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

+2

Администратор БД может получить прибыль от знания теории массового обслуживания. –

+2

@Peter G: И сеть в основном в значительной степени исключительно теории массового обслуживания. Не случайно основной язык программирования для телекоммуникационных сетей назван в честь изобретателя теории массового обслуживания. –

0

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

+0

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

19

Это зависит от типа разработчика, о котором вы говорите, и о той математике, о которой вы говорите. Я почти уверен, что большинству «обычных» разработчиков не нужно много знать о математике. Но хотите ли вы стать «обычным» разработчиком?

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

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

+0

Когда система GPS никогда не будет включать непрерывную математику? – Gian

+0

Ну ... и что такое путь обучения? – NixDev

+0

@Gian: Я не был понятен - я думал о поиске пути на графике (или подобных дискретных математических проблемах на графике) –

0

Мой опыт таков:

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

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

0

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

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

9

Да.

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

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

+1

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

+3

Я считаю, что это так. Может быть, не каждый разработчик нуждается в фон CS, но каждый проект делает это. Моя работа связана с требованиями клиентов, которые могут быть довольно сложными и найти для них изысканные решения. Без степени CS большинство людей не справились бы с этой задачей. Когда я закончил, я перехожу к дизайну в группу сторонних разработчиков, которая по сути выводит код. Они не понимают CS, дискретную математику и т. Д., Но я знаю. – 2010-09-06 12:21:05

+3

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

0

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

1

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

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

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

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

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

1

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

0

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

Но темы, как:

  • теории множеств
  • теории графов
  • Alg. Анализ
  • Alg.Сложность
  • Сортировка
  • и т.д ...

необходимы для разработчика.

Смежные вопросы