2008-09-09 2 views
63

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

I.e. Я попытался выслушать/посмотреть открытые учебные материалы из Массачусетского технологического института Introduction to Algorithms, но быстро понял, что мне не хватает нескольких математических понятий, чтобы лучше понять курс.

Итак, каковы основные математические концепции, которые должен знать хороший инженер-программист? И каковы возможные книги/сайты, которые вы мне порекомендуете?

ответ

62

Math for Programmers. Хорошее чтение.

+0

Статья Yegge очень тщательно и содержит несколько других ресурсов для дальнейшего чтения. – 2008-09-10 15:35:54

+0

Отличная ссылка, спасибо! – 2008-10-11 00:49:36

7

Начните с того, что мы, люди СС, называем «дискретной математикой». Исчисление и линейная алгебра могут оказаться весьма полезными, потому что они получают вашу ногу в дверь во многие области приложений. Как только вы освоите эти три, перейдите к теории вероятностей. Эти 4 предоставят вам компетенцию в 95% (я сделал это) домены приложений.

+0

Некоторые люди называют «дискретная математика» «конечная математика». Я считаю, что они оба одинаковы. – 2008-10-24 15:31:56

1

Была книга, которая была рекомендована ... название было чем-то вроде Concrete Mathematics. Это было рекомендовано в нескольких вопросах.

+0

он предположил, что ваши основные принципы понятны, это вводный, но продвинутый. что еще мы можем ожидать от руна. – 2010-06-30 18:11:58

0

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

3

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

9

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

+2

Действительно?Для каких программных задач это требуется? – 2008-09-09 18:21:37

+0

@ Anders - Доказательство доказательств в случае разработки алгоритма. – rjzii 2008-09-09 19:56:00

+1

К счастью, индукционные доказательства являются одними из самых простых имо. – mmcdole 2008-11-13 07:26:39

9

Big O notation в общем анализе алгоритма, так и по отношению к стандартным коллекциям (сортировке, вставки поиска и удаление)

4

Я хотел бы сказать булеву логику. И, ИЛИ, XOR, NOT. Я нашел в качестве программиста более часто, чем остальные математические понятия.

5

Я думаю, это зависит от вашего внимания. Несколько лет назад я купил набор Art of Computer Programming Дональда Кнута. Посмотрев на книги, я понял почти все исчисления. Если вы заинтересованы в разработке своих собственных универсальных алгоритмов и доказательств для них, я рекомендую понять эти книги с тех пор, с чем вы столкнулись в этом мире. С другой стороны, если вы хотите или нужно использовать различные процедуры сортировки/поиска/дерева/etc ..., тогда большая нотация O как минимум, логическая математика и общая алгебра будут в порядке. Если вы имеете дело с 3D, то геометрия и триггер.

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

19

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

if (condition-1) { 
    if (condition-2) { 
     action-1 
    } else { 
     action-2 
} else { 
    action-2 
} 

можно переписать в виде

if (condition-1 and condition-2) { 
    action-1 
} else { 
    action-2 
} 

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

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

Теория множеств является основой реляционных баз данных и SQL.

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

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

0

Дискретная математика
Линейная алгебра
Комбинаторика
Вероятность и статистика
Теория Graph

8

Для дискретной математике, here удивительный набор из 20 лекций из ArsDigita университета. Каждые около часа и двадцать минут.

12

Я бы с полями, Лэндон заявил:

Дискретная математика, линейная алгебра, комбинаторике, Вероятность и статистика , теории графов

и добавить математическую логику.

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

Computer graphics -> Linear Algebra 
Gaming -> Linear Algebra, Physics 
Computer Linguistics -> Statistics, Graph Theory 
AI -> Statistics, Stochastics, Logic, Graph Theory 
2

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

0
  • булева алгебра
  • теория множеств
  • Дискретная математика
10

В порядке значимости:

  • Counting (требуется для петель)
  • сложение, вычитание, умножение, деление.
  • Алгебра (требуется только для понимания использования переменных).
  • Булева алгебра, логическая логика и двоичная.
  • Экспоненты и логарифмы (т. Е. Понимают обозначение O (n)).

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

  • Линейная алгебра и тригонометрия (3D визуализация)
  • Дискретная математика и теория множеств (проектирование баз данных, разработка алгоритма, дизайн компилятор).
  • Статистика (ну, для статистических и/или научных/экономических приложений, возможно, также полезно для разработки алгоритмов).
  • Физика (для моделирования).

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

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

2

Глава 1 «Искусство программирования» призвана обеспечить именно это.

0

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

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

0

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

1

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

0

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

1

Проверьте книгу Foundations of Computer Science
Эта книга создана: Al Aho и Jeff Ullman, а вся книга доступна в Интернете.

Это то, что говорят авторы в предисловии о цели этой книги:

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

0

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

0

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

Я освещаю основы в своем блоге «Computing Your Skill», где я обсуждаю, как работает XLS Live TrueSkill и алгоритм Matchmaking.

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

  • Нет связанных вопросов^_^