Сайт «Типичный программист» в очередном выпуске рубрики
«Вопросы к экспертам» затронул извечный вопрос про программирование и математику. Итак, действительно ли программисту нужно знание математики для успешной работы и если нужно, то насколько?
Павел Емельянов, архитектор в департаменте серверной виртуализации Parallels. В середине 90-х и позднее — самый плодовитый генератор идей и кода в mainstream ядро Linux из России в целом и Parallels в частности. Завсегдатай тусовок (в том числе «только по приглашению») Linux community в режиме реального времени.
Зависит от того, что называть математикой. Умение складывать числа тоже математика, и такое знание крайне желательно. А, например, без понимания того, что именно доказал Перельман, вполне можно программировать. Любые попытки провести грань, до которой необходимо знать математику, чтобы стать программистом, заведомо обречены на провал. Одно можно сказать наверняка — умение оперировать абстрактыми понятиями (одно из основных для математика) несомненно помогает и программистам в их работе.
Дмитрий Исайкин, руководитель команды
С/С++ разработки почты в Mail.Ru Group.
Как и в любом деле, все зависит от решаемой задачи.
Когда я участвовал в разработке рекомендательной и репутационных систем, математика была очень нужна. Приходилось придумывать и разрабатывать алгоритмы, использующие интегральное и дифференциальное счисление, находить экстремумы, строить регрессии, вводить метрики для определения близости в многомерном пространстве. И все ради каких-то лишних сотых долей в RMSE рекомендательного движка.
Последние годы я занимаюсь разработкой высокопроизводительных бэкендов, работающих в режиме 24/7, обслуживающих миллионы онлайн-пользователей, держащих сотни тысяч постоянных соединений. Теперь мне достаточно знаний основ теории алгоритмов, алгоритмической сложности, теперь главное — надежный, поддерживаемый, расширяемый, быстрый код.
И я бы не сказал, что из-за меньшей «математичности» работы я получаю от нее меньшее удовольствие и признание.
В любом случае, программист, впрочем, как и обычный человек, должен знать и любить математику!
Сергей Терлецкий, менеджер по работе с образовательными учреждениями в компании Embarcadero. Имеет более 12 лет опыта на ИТ рынке, начав свою карьеру как разработчик на C++. Ранее отвечал за крупные проекты в образовании в компании Softline, включая Федеральный проект «Первой помощи», проект по модернизации образования в Калужской области.
Так или иначе, базовый курс математики нужен в работе всем, вопрос только в какой момент потребность в ней будет максимальна в жизни специалиста. Когда я учился, программисты числились прикладными математиками, это показательно для нашей страны. Я тут не могу быть принципиально объективен, так как программировать мне пришлось начинать с мат. моделирования процессов в полупроводниках. С точки зрения программирования, на начальном этапе главное практические навыки написания кода, тут накапливается интуитивный опыт, знаю по себе из практики порой находишь такие баги и фишки, которые можно найти именно в постоянном контакте со средой разработки и кодом, тут математика не причем. Но если есть амбиции и желание решать и программировать реальные задачи самому, а главное создавать принципиально новые технологии, то фундаментальные знания математики и хорошее абстрактное мышление будут очень важны. Мировые аналитики прогнозируют, что в будущем человек за свою жизнь будет менять несколько профессий, значит не получится всю жизнь пробыть кодером. А учить и осваивать мат. аппарат надо до 25 лет.
Сергей Зефиров, программист с широким опытом работы: от микроконтроллеров, до кластеров с GPGPU. В настоящий момент занят работой над хранилищем для объектно-ориентированной БД. Имеет опыт программирования 23 года. Haskell использует уже 17 лет. Ведёт свой блог.
Чем больше математики программист умеет применить, тем лучше.
Важна не сама математика, а умение её применять. Количество знаний математики увеличивает вероятность её применения.
Роман Юферев, руководитель направления ИТ-Менеджмент и Мониторинг в компании VIAcode. Работает с такими заказчиками как Microsoft, Amazon, McDonalds. Докладчик конференций: Agile Days, Pragmatic PM, Software People, CodeFest, SQA Days, Microsoft TechEd, Microsoft Management Summit, System Center Universe
Это очень интересный вопрос! Для начала, существуют определенные задачи, требующие от разработчиков высочайших знаний в области мат-анализа, дифференциальных уравнений, численных методов и т. д., но спектр этих задач довольно узок, а распространённость крайне низкая. Правда, такие специалисты очень высоко ценятся и могут рассчитывать на прекрасные условия труда. Для 80% разработчиков знания высшей математики никогда не пригодятся, еще 10%, возможно, придется вспомнить базовые вещи из теории вероятностей и некоторых других разделов математики — эти знания будут востребованы для решения задач по обработке данных. В то же время, учитывая взрывной рост направления Big Data, я вижу хороший потенциал для роста требований именно к знаниям в области математики.
Василий Кобзарь, преподаватель GeekBrains. Системный администратор с 2002 года, работал среди прочего в Яндексе и Мастерхосте. Имеет широкий опыт и кругозор, специализируется на администрировании Linux. Занимался как эксплуатацией, так и разработкой. Следит за новыми технологиями и применяет их в своей работе.
Если математика будет являться предметной областью, то знать её потребуется настолько хорошо, насколько это нужно для решения задачи. Однако, вопрос видимо поставлен для общего случая, и связан с бытующим мнением. Программисту хорошо было бы разобраться с логикой и абстрактной алгеброй, которые не преподаются ни в школе, ни в большинстве вузов. Также не помешают матстат и дискретка. Матан по большей части бесполезен, также как и, скажем, тригонометрия. Вобщем, полезна та часть математики, что «ум в порядок приводит», а знание любых формул наизусть только забивает голову.
Антон Пискунов, основатель и генеральный директор TeamKey.
Здесь надо четко понимать, чем вы хотите заниматься и куда расти. В большинстве сфер которые позволяют иметь адекватную зарплату глубокое знание математики не требуется, я имею в виду, к примеру, такие категории как веб и мобильная разработка.
Если вы идёте в адовый хайлоад и собираетесь писать всякие редисы и прочее плотно работающее с нагрузкой или будете работать, к примеру, с машинным обучением, то здесь нужна не столько математика, сколько в принципе фундамент из совокупности базовых наук.
Отдельного упоминания стоят сферы банка и бухгалтерии — тут опять же нужна не просто математика, а четкое понимание устоявшихся терминов, схем и кучи документов.
В итоге получается что в первые пару лет вашей карьеры действительно что-то считать вы будете лишь в геймдеве когда у вас стрела из-за кривой баллистики не будет долетать до орков.
Но на самом деле всё это не важно — ориентируйтесь на то, что в течение профессиональной деятельности вы всегда будете находится в постоянном поиске информации которую не знаете. Математику можно совершенно спокойно закинуть в разряд скилла, который качается ровно тогда когда этого требует от вас бизнес — представьте свой мозг в роли стартапа и начните развивать его с MVP, с того что вы можете продать сейчас. Что-нибудь прикладное.
Олег Горшков, руководитель отдела системной интеграции ecommerce-студии Simtech Development (преподает курсах по программированию на PHP, 4 года подряд курирует и судействует номинацию по программированию на PHP самой крупной в Поволжье олимпиады по информационным технологиям «Волга IT»).
Я считаю, что знание математики для программиста профессионально необходимо. Математика закладывает основы анализа и простоения алгоритмических моделей. Программирование — это автоматизация математических действий. Причем важно знать не просто математику, а высшую математику.
Михаил Адигеев, к.т.н., начальник отдела проектов ГК «ГЭНДАЛЬФ», доцент Южного федерального университета, эксперт международной олимпиады «IT-Планета».
Не думаю, что именно необходимо. Есть программисты, имеющие лишь самые базовые знания математики. Но знание (не на уровне зубрёжки, а с глубоким пониманием) дискретной математики и основ статистики — очень существенный плюс к возможностям профессионального роста. Очень сильно пересекаются с математикой и «продвинутые» методы разработки алгоритмов.
Ну а в некоторых областях без глубоких знаний математики вообще никак. В Data Mining и Machine Learning необходимы статистика, теория вероятностей, линейная алгебра; в криптографии — общая и линейная алгебра; в 3D-моделировании — геометрия и механика; в биоинформатике — дискретная математика, статистика.
То есть без знаний математики стать программистом можно, но при этом есть и большой риск, что вы закроете для себя возможность заниматься в будущем действительно интересными проектами.
Алексей Михайлишин, руководитель отдела разработки ПО компании ОС3. Один из основателей сообщества «Типичный программист».
Стать программистом в формальном понимании этого слова можно и без глубоких познаний в математике. Однако, если вы хотите заниматься действительно сложными и интересными проектами, то математика в том или ином виде вам точно понадобится. Например, у нас был проект «Кубосвод» — комплекс, позволяющий показывать сферические проекции в прямоугольных объемах. Это такой планетарий, для которого не нужен специальный купол, можно всё устроить в обычном учебном классе: рассмотреть звёздное небо или показать панорамный фильм. Потребуется только проектор, сферическое зеркало и программа, производящая рассчёты. И наши программисты с задачей справились.
Конечно, не все проекты такие. Для того, чтобы создавать шаблонные интернет-магазины наврятли потребуются знания стереометрии, но, безусловно, программировать для этого надо уметь. Я бы сказал, что знания математики дают программисту конкурентные преимущества перед теми, у кого их нет и открывают более широкий выбор проектов и компаний, в которых они могут работать.
Андрей Ситник, веб-разработчик в Evil Martians («Злые марсиане», разрабатывает проекты для eBay, Groupon, РенТВ, RocketBank ). До этого работал в компаниях InSales, Тематические медиа. Докладчик IT-конференции «Стачка».?
Связь математики и программирования — очень популярное заблуждение. Есть очень мало задач, где знание некоторых направлений математики вам пригодиться. А вот умение общаться в команде или понимать пользователя нужно в любом направлении программирования.
Математика в общем — это скорее язык, чем направление науки. В отличии от естественных языков, математика — абсолютно точный и формальный язык. Поскольку язык влияет на мышление, то раньше изучения языка математики было обязательным. Так можно было научиться точно и формально мыслить.
Но любой язык программирования — это тоже точный и формальный язык. Так что изучение математики не даст программисту чего-то важного.
Илья Андреев, руководитель отдела организации обучения фирмы «1С».
На мой взгляд, в программировании главное алгоритмическое мышление. Алгоритмическое мышление не вытекает непосредственно из изучения школьной программы по математике, физике или, например, истории. Математика и программирование — это разные вещи: те кто хорошо разбирается в математике совсем необязательно хорошо программирует. И наоборот. Хотя в некоторых программах активно используется математика, а в некоторых это совсем не нужно.
Алгоритмическое архитектурное мышление это особый навык, который, скажем, нужно отдельно почувствовать.
В целом, любому программисту математика полезна для развития технического мышления. Ряд программистов сталкивается с математикой постоянно. Например, программисты-актуарии, разработчики, связанные с статистическим анализом, инженеры-программисты математического моделирования, например, если он пишет движки под игры.
А вот в прикладном программировании математика почти не нужна.
Зураб Отарашвили, Помощник ректора Университета Иннополис по научной и инновационной деятельности.
Математика программисту абсолютно необходима. Это базис, на котором строится цепь алгоритмов, основа любой программы, которую программист описывает. Знание математики проводит четкую грань между программистом и хорошим программистом. Хороший — понимает, что делает, разбирается в логике и сути описываемых процессов. Только знание математики позволит написать оптимальную программу.
Владимир Голованов, ведущий разработчик Java Центра Финансовых Технологий.
Знание именно математики — зависит от предметной области. Например, в компьютерной трехмерной графике нужно знать геометрию на 5. А если разрабатывать сайты с небольшой нагрузкой — тут математика вряд ли пригодится в чистом виде. Но необходимо иметь в виду: как правило, хорошие навыки в математике появляются не просто так, а в связи с хорошей развитостью других навыков, например, абстрактного мышления и памяти. А эти навыки в программировании также очень нужны. Вот почему получается, что, как правило, у программистов нет проблем с математикой. И если у кого-то наблюдаются проблемы в этой области — вероятно, в программировании также будут проблемы.
Также математика дает основу для структурного мышления, нужного для системного анализа — а в программировании без системного анализа становится все труднее, ведь сложность систем начинает превышать возможности одного отдельно взятого человека.
Еще посредством математики описываются алгоритмы. И если когда-нибудь придется самостоятельно реализовывать алгоритмы из книжки или из интернета, математические знания также станут острой необходимостью.
И, наверное, последнее — вычислительная математика. Мы работаем в условиях конечных дискретных ресурсов, и для программиста необходимо понимать, где протекает граница между непрерывностью и дискретностью, между конечностью и бесконечностью. Из непонимания этих принципов при программировании возникают труднонаходимые ошибки, которые редко способно выявить тестрирование. Сюда, например, относятся все классические ошибки, приводящие к дырам в безопасности: переполнение буфера, целочисленное переполнение и т.д.
Поэтому, даже если именно математика и не пригодится, то все сопутствующие ей дисциплины просто необходимы. Так что… учим мат часть!
Спасибо экспертам за ответы!
Подводя итоги можно сказать, что большинство экспертов сходятся во мнении по поводу того, что если уж знание математики не необходимо, то лишним оно точно не будет. В некоторых областях она нужна больше, в некоторых меньше. Решите для себя, чем вы хотите заниматься и на каком уровне, а ответ найдёт себя сам.