какие знания математики нужны в программировании

Математика для программиста

какие знания математики нужны в программировании. Смотреть фото какие знания математики нужны в программировании. Смотреть картинку какие знания математики нужны в программировании. Картинка про какие знания математики нужны в программировании. Фото какие знания математики нужны в программировании

Нужна ли математика программисту?

Нужна. А, кроме неё, нужна сферическая геометрия, география, музыка и банковское дело. И я сейчас не шучу.

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

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

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

Ещё пять лет назад Артём Поликарпов доказал, что каждый фронтендер немного дизайнер. Нам нужно понимать как устроены шрифты: что такое гротеск, чем он отличается от антиквы, что такое интерлиньяж, кернинг, разрядка, капитель. Понимать, что такое сетки и что такое композиция. Кроме этого, разбираться в UX — мы должны знать что такое оптимистичный UI, где поставить прелоадер и зачем это всё нужно пользователю.

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

Например, правильность номера банковской карты определяется по алгоритму Луна — это теория кодирования.

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

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

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

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

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

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

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

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

Первое решение, которое может прийти в голову — это с помощью метода map собрать другой массив, массив ростов этих людей, а потом с помощью метода reduce посчитать их сумму и поделить на количество.

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

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

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

Источник

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

Наверняка вы задумывались над вопросом: нужна ли математика программисту? И если нужна, то как «приручить» эту самую математику?

какие знания математики нужны в программировании. Смотреть фото какие знания математики нужны в программировании. Смотреть картинку какие знания математики нужны в программировании. Картинка про какие знания математики нужны в программировании. Фото какие знания математики нужны в программировании

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

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

«Незнание математики грозит кашей в голове.»

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

Статья разделена на несколько частей:

Советы

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

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

Школьная программа:

Вузовская математика:

Источник

Математика для программистов

Авторизуйтесь

Математика для программистов

какие знания математики нужны в программировании. Смотреть фото какие знания математики нужны в программировании. Смотреть картинку какие знания математики нужны в программировании. Картинка про какие знания математики нужны в программировании. Фото какие знания математики нужны в программировании

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

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

Как изучать математику

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

В освоении математики есть два уровня понимания. Первый уровень — идейный. Это осознание того, для чего нужны определенные объекты, какая задача решается и где это используется. Второй уровень понимания — детальный; это подробное изучение подробностей решения задачи. Иногда нужно разобраться в задаче на детальном уровня понимания, но в большинстве случаев — достаточно идейного.

Старт 4 ноября, 9 месяцев, Онлайн, Беcплатно

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

Дискретная математика

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

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

Логика

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

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

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

При этом решение, которое первым пришло вам в голову, не всегда самое правильное и красивое. Часто формальными преобразованиями можно сократить объем кода и сделать его более читаемым. А кроме того, некоторые логические трюки позволяют сделать само решение короче, быстрее и эффективнее.

Ресурсы:

Комбинаторика

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

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

Ресурсы:

Теория вероятностей

Иногда на собеседовании интервьюер, дабы проверить насколько крут кандидат, задает такую задачу: «Вот у нас есть отрезок, который начинается с числа А и заканчивается числом Б. Мы кидаем на него две точки случайным образом. Какая будет средняя длина наибольшего отрезка?» или же «Пусть у нас есть треугольник, на вершине которого сидит муха. Пусть она перелетает с вершины на вершину за 3 секунды и отдыхает на каждой вершине по секунде, каждый раз случайно выбирая себе путь. Через какое время она в среднем вернется в начальную точку?».

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

Теория вероятности делится на две части: дискретную и непрерывную. Хотя в теории дискретная — это подкласс непрерывной, методы решения задач несколько различаются. Опять же лучше начинать с простого — дискретная теория вероятности часто сводится к комбинаторным задачам. И теоретическая часть у дискретной формулируется проще.

Непрерывная теория вероятности для полного понимания требует знания элементарных основ мат. анализа, в частности понятия интеграла, хотя многие задачи требуют лишь умения считать площади простых фигур. Именно непрерывная теория вероятности является фундаментом для математической статистики и машинного обучения. Поэтому, если хотите работать в этой области, стоит начать с изучения книги Ричарда Хэнсена Probability Theory and Statistics или Probability Theory with Simulations.

Ресурсы:

Теория графов

Слышали ли вы задачу о мостах Кенигсберга?

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

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

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

Ресурсы:

Теория чисел и криптография

Задумывались ли вы, почему к простым числам такой большой интерес? Почему работает шифрование RSA? Чем отличается http от https и что такое сертификат безопасности?

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

Дискретная оптимизация

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

Бывает, что в таких задачах нельзя найти точное решение за приемлемое время — его можно получить только полным перебором. Такова, например, задача Коммивояжера, или задача линейного программирования. Иногда можно отказаться от точного решения, и использовать некоторые приближения. Обо всем этом можно узнать в курсе Discrete Optimization на Coursera.

Источники

Небезызвестная серия курсов Introduction to Discrete Mathematics for Computer Science на Coursera по дискретной математике. Она довольно обширна и дает общее представление о всех нужных областях дискретной математики — логике, комбинаторике, теории вероятностей, теории графов, теории чисел и криптографии. Последний курс затрагивает проблему дискретной оптимизации.

Кроме того, для тех, кому не очень нравится формат курсов, будет полезной книга Discrete Mathematics. An Open Introduction. Книга довольно большая и подробная, поэтому можно сделать упор на основных понятиях и определениях.

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

Что дальше?

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

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

Перейти к регистрации

Источник

Насколько важна математическая подготовка в перспективных направлениях разработки ПО

какие знания математики нужны в программировании. Смотреть фото какие знания математики нужны в программировании. Смотреть картинку какие знания математики нужны в программировании. Картинка про какие знания математики нужны в программировании. Фото какие знания математики нужны в программировании

Профессия программиста становится все более массовой и востребованной. Сейчас порог вхождения в ИТ-сферу в принципе снизился, но продолжает расти интерес к ИТ-технологиям в целом, и к программированию в частности.

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

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

Я учился в ВУЗе, в котором раньше, лет 30-40 назад, не существовало специальности «Инженер-программист». Однако люди, занимающиеся программированием, там были – их называли «ПМщики». Дело в том, что учились они на кафедре Прикладной математики. Но справедливо было бы все-таки называть их математиками, нежели программистами.

какие знания математики нужны в программировании. Смотреть фото какие знания математики нужны в программировании. Смотреть картинку какие знания математики нужны в программировании. Картинка про какие знания математики нужны в программировании. Фото какие знания математики нужны в программировании

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

Конечно, можно еще вспомнить, что раньше была и трава зеленее, и небо голубее… Но где же программистам прокачивать матчасть в сегодняшних условиях? Означает ли это, что теперь на «серьезные» позиции разработчиков будут охотнее брать математиков, а не программистов?

Новые реалии

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

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

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

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

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

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

какие знания математики нужны в программировании. Смотреть фото какие знания математики нужны в программировании. Смотреть картинку какие знания математики нужны в программировании. Картинка про какие знания математики нужны в программировании. Фото какие знания математики нужны в программировании

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

Знания математики нужны большинству программистов, вот только какие именно разделы нужны для разработки того или иного вида ПО? Что нужно знать для того чтобы, программировать игры, искусственный интеллект, big data, научный софт и так далее?

Иван Хватов, разработчик ПО, «Яндекс»:

какие знания математики нужны в программировании. Смотреть фото какие знания математики нужны в программировании. Смотреть картинку какие знания математики нужны в программировании. Картинка про какие знания математики нужны в программировании. Фото какие знания математики нужны в программировании

Насколько нужна программисту математика? Опишите, пожалуйста, свою историю отношений с матчастью.

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

В каких направлениях разработки необходима матчасть? Почему? Какие разделы математики там нужны?

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

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

Проходить онлайн-курсы. Сейчас с этим нет проблем.

Чем отличается математическое мышление от программистского (алгоритмического)?

Не знаю, я бы это не разделял.

Какие специалисты лучше подходят для математикоемкой разработки: математики с азами программирования или программисты с азами математики?

Антон Каракулов, веб-разработчик, ТМ

какие знания математики нужны в программировании. Смотреть фото какие знания математики нужны в программировании. Смотреть картинку какие знания математики нужны в программировании. Картинка про какие знания математики нужны в программировании. Фото какие знания математики нужны в программировании

Насколько нужна программисту математика? Опишите, пожалуйста, свою историю отношений с матчастью.

Всё зависит от того какие задачи предстоит решать программисту. Чем больше прикладных — тем реже нужна матчасть. Чем более системных — тем чаще оказывается востребованной.

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

В каких направлениях разработки необходима матчасть? Почему? Какие разделы математики там нужны?

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

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

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

Чем отличается математическое мышление от программистского (алгоритмического)?

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

Какие специалисты лучше подходят для математикоемкой разработки: математики с азами программирования или программисты с азами математики?

В общем среднем по больнице — конечно, программисты с азами математики.

Артем Кухаренко, основатель NTechLab:

какие знания математики нужны в программировании. Смотреть фото какие знания математики нужны в программировании. Смотреть картинку какие знания математики нужны в программировании. Картинка про какие знания математики нужны в программировании. Фото какие знания математики нужны в программировании

Насколько нужна программисту математика?

Если здесь имеется ввиду знание математики, то, на мой взгляд, оно обязательно далеко не во всех областях программирования, но лишним оно, конечно, тоже не будет. Я бы сказал, что в разных областях оно даст свой прирост к квалификации: в каких-то – 10%, в каких-то – 1000%.

Если имеется ввиду знание теории и основ области в которой человек работает, то, на мой взгляд, это must have для любого эксперта в своей области.

Опишите, пожалуйста, свою историю отношений с матчастью.

Учился в математическом классе одной из лучших матшкол Москвы — Гимназия №1543, потом учился на ВМК МГУ, где тоже была математика, не такая серьезная, конечно, как на МЕХМАТе МГУ например, но на достаточном уровне, чтобы можно было разбираться и понимать, например, современные алгоритмы машинного обучения. Плюс участвовал в школьных олимпиадах по программированию, где нужно было изучать теорию алгоритмов, что в дальнейшем мне очень сильно помогло.

В каких направлениях разработки необходима матчасть? Почему? Какие разделы математики там нужны?

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

Можете посоветовать, как подтянуть математический аппарат программистам, давно закончившим ВУЗ? Какие курсы лучше посещать?

Сейчас появилось много открытых курсов, таких как Coursera, но в них обычно материал дается очень поверхностно, чтобы охватить как можно более широкую аудиторию. Есть, конечно, и исключения, но их мало. Есть несколько ресурсов, где материал дается на очень хорошем уровне, например, Stanford engineering everywhere: там просто записи лекций, которые читаются в Стэнфорде. На мой взгляд, их очень полезно смотреть если есть базовая подготовка.

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

Какие специалисты лучше подходят для математикоемкой разработки: математики с азами программирования или программисты с азами математики?

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

Пользователь Mrrl, рассуждая о разделах математики, необходимых программистам, писал следующее:

1) Математический анализ — без него просто никуда, основа всех численных моделей.

2) Алгебра (высшая) — применяется довольно редко. Либо в виде теории групп — когда нужно что-нибудь сделать с группами вращений или движений пространства, либо в виде конечных групп/полей, где она смыкается с теорией чисел. Но если уж пришлось туда забрести, то приходится использовать активно. Если и не в коде, то в разработке алгоритмов.

3) Аналитическая геометрия — думаю, она нужна любому, кто связан с компьютерной графикой, компьютерной геометрией, моделированием в 3D…

4) Линейная алгебра и геометрия — аналогично аналитической геометрии. Плюс матрицы вылезают во многих задачах обработки информации.

5) Дискретная математика — графы сюда входят? А булева алгебра? А конечные автоматы? Для разработки алгоритмов будет использоваться часто, пусть и в фоновом режиме.

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

7) Дифференциальные уравнения — если они не являются частью предметной области, то встречаются редко. Чаще в качестве такого же вспомогательного инструмента, как производящие функции. Или для анализа данных, оптимизационных алгоритмов…

8) Дифференциальная геометрия. — Бывает. Когда приходится работать с многопараметрической моделью, полезно представлять себе свойства пространства параметров. Чаще всего это ограничивается метрикой — даже геодезические считать не приходится. Ну, и есть один специфический случай — программы, в которых дело идёт в пространстве Лобачевского.

9) Топология — кроме трассировки плат не могу представить, где она нужна. Возможно, в компьютерной геометрии, например, при построении поверхности по одному или нескольким облакам точек, при расчётах взаимодействия тел, для поиска пути в пространстве допустимых параметров какого-нибудь робота… Но я этим пока не занимался, и насколько нужна именно топология, не знаю. Для разработки алгоритмов, думаю, нужна.

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

11) Интегральные уравнения — не сталкивался. Возможно, потому, что в качестве отдельного предмета я их не знаю.

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

13) Уравнения в частных производных — если не часть предметной области… могут пригодиться для каких-нибудь вариантов гладкой интерполяции данных (когда работы с базисными функциями почему-то не хватает). Насколько УрЧП нужны для моделирования, скажем, морской поверхности в компьютерной графике, не знаю — не занимался. Подозреваю, что нужны.

14) Теория вероятностей, математическая статистика, теория случайных процессов — в разной степени в любом анализе данных.

15) Вариационное исчисление и методы оптимизации — ИИ в играх и роботехника.

16) Методы вычислений и численные методы — сколько угодно. Если работа связана хоть с какими-нибудь вещественными числами.

17) Теория чисел — аналогично теории конечных групп. В целом, встречается нечасто. Если, конечно, не считать современной криптографии…

Источник

Добавить комментарий

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