Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Должен ли продвинутый программист понимать в математике?

Какие разделы важны для роста, что нужно уметь? Где можно подучиться этому?
Вопрос задан в рамках подготовки материала для соцсетей и гипертемы. Подробности тут.
ТехнологииПрограммирование+3
Давид Кац
  ·   · 44,1 K
Веб-разработчик, геймер, специалист по этике  · 16 янв 2022
"Должен" ли он? Если честно, вряд ли. Разработка ПО как таковая, сам процесс написания и структурирования исходного кода программы, не требует знания математики, ни школьной, ни университетской. Всё зависит от задач, которые вы решаете. Понятное дело, если вы пишете физический движок для моделирования уравнений Навье-Стокса, то вам понадобится чуток больше и совсем других математических знаний, чем если бы вы занимались штамповкой продающих лэндингов на заказ и генерацией воронок продаж с них.
Если открыть книги безусловно продвинутых программистов - Мартина Фаулера, банды четырёх, Роберта Мартина, Джоэла Спольски, Эндрю Ханта и Дэвида Томаса, Кента Бека, Эрика Эванса и других - то мы не увидим в них математики. Самое большее, какие-то элементарные арифметические знания на бытовом уровне. Дроби, проценты, вероятности.
Однако, я могу осторожно предположить, что "продвинутый программист" ассоциируется с фразой "понимает в математике", потому что так получилось и потому что книги по алгоритмизации ассоциируются с математикой. Продвинутый разработчик ПО, безусловно, должен знать алгоритмизацию и структуры данных, а это относят к дискретной математике.
Опять же, "понимать в математике" - что это значит? Уметь самостоятельно вывести доказательство какого-то математического результата? Нафиг не надо. Уметь самостоятельно прочитать монографию по Банаховым пространствам, которые векторные нормированные, полные по метрике, порождённой нормой? Вообще не в кассу. Решать дифференциальные уравнения, вычислять криволинейные интегралы? Всё это уже один раз было решено, насмерть оптимизировано и больше с нуля выводить не рекомендуется.
Традиционно к математике, желательной в компьютерных науках, относят дискретку - булеву алгебру, теорию графов, теорию множеств - и теорию алгоритмов, которая к математике относится примерно так же, как химия относится к физике.
Я из своего университетского курса прикладной математики, который прошёл в 2006-2011 годах, сказал бы, что мне каждый день пригождается как раз булева алгебра, теория графов и теория множеств. Теория вероятности и матстат пригодились вообще в целом для общего развития, ну да их теперь аж в средней школе читают. И правильно делают.
В геймдеве, безусловно, очень нужна векторная алгебра и матрицы. Для некоторых специфических задач мне были бы полезны вещи из теории игр и динамического программирования, но мне не ставят такие задачи, а теория игр к математике относится примерно так же, как к теоретической физике относится сопромат.
То, что ожидается от действительно продвинутого программиста, отлично написано в Code Complete МакКоннелла, "Идеальном программисте" и "Чистом коде" Мартина, и в The Pragmatic Programmer Ханта и Томаса. Первые две книги есть на русском.
Чистая математика, полезная для алгоритмиста, собрана в книге Concrete Mathematics, которую составили Грэхэм и Кнут, на минуточку, автор буквально легендарного The Art of Computer Programming. TAoCP тоже включает в себя главу с перечислением необходимых, по мнению Кнута, математических знаний для программиста.
3 эксперта согласны
Вы случайно не Герман Греф? Просто его "философия". Математические дисциплины прежде всего тренируют мозг,... Читать дальше
@Smarina, я повторю то, что уже сказал в своём ответе: идите и скажите Мартину Фаулеру, что он "простой "кодировщик". Или Дейву Томасу. Этот ярлык был придуман людьми, которые вообще не понимают, о чём они говорят.
Покажете мне математику в Agile Manifesto, в Domain-Driven design, в SOLID принципах? Мы с вами вообще на разных языках говорим, причём вы говорите лозунгами, а не мыслями.
Насчет легендарного трехтомника Кнута могу согласиться, что не математику это не осилить. А ощутимая польза для программиста разобравшегося в ней есть несомненная. Правда, сам я всю книгу не осилил :)
@Leonid, это обширный справочник с развёрнутыми комментариями.
Энциклопедии подобного типа не изучают, имхо. По ним, если что, просто справляются, как по гуглю или яндексу. Считаю, учить категорически всю эту "мудрость" не нужно.
Л.К.
Мне думается, что программисты перестали себя считать инженерами. От того и этот диспут: нужны ли этим программистам общие знания выше 7 класса средней школы.
Учёный, доктор наук, математика, информатика и...  · 19 янв 2022
Конечно, должен. Математика это не интегралы и диф. уравнения - это инструмент, язык описания моделей явлений и процессов. Много алгоритмов разработали именно математики. Нужны те разделы, которые требует решаемая задача... Читать далее
Образовательная платформа Хекслет  · 28 окт 2022  · ru.hexlet.io
Достаточно большая часть задач повседневных задач, которые встают перед программистами решается без применения математики. Набросать страницу, создать небольшое CRUD-приложение (приложение где происходят базовые действия над... Читать далее
Помогаем новичкам освоить профессию веб-разработчикаПерейти на ru.hexlet.io/webinars
программист  · 12 мая 2022
План такой: use-case когда математика нужна (для затравки) почему математика почти всегда не нужна (и что нужно) если нужна математика, то что наиболее часто теория графов, что типовое нужно Поехали. 1. В принципе некоторые... Читать далее
Благотворитель, предприниматель, бизнесвумен...  · 9 янв 2022  · it-life74.ru
Думаю, что должен. Ведь само программирование, это и есть 90% математика и геометрия цифр в пространстве. Без неё не инженерии , а программирование , лично для меня это инженерное образование.
Ваш друг Павла ХейнПерейти на it-life74.ru
2 эксперта согласны
Научные заметки о жизни: zen.yandex.ru/id/5c434983...  · 10 мая 2022
"Программист" не профессия, а признак принадлежности к огромной отрасли с множеством разнообразных профессий. В этой отрасли есть свои ученые, инженеры, рабочие, подсобники, маркетологи и кустари-одиночки. И всех их называют про... Читать далее
1 эксперт согласен
Yriy
подтверждает
10 мая 2022
Мышление программиста это креативный процесс познания мира алгоритмами, системами и обязательным тестированием для... Читать дальше
Геймдизайнер. Мастер дискуссии и срачей. Имею...  · 13 мая 2022
Было бы странно, если б программист графики не знал, как работать с матрицами и кватернионами. Или программист ИИ не слышал бы про цепи Маркова. Или инженер высоконагруженных систем не владел бы комбинаторикой и матанализом.
1 эксперт согласен
Ответ реверсивный, но верный.
Увлечения: Аэродинамика, физика.  · 19 февр 2022
Вопрос скользкий и именно для нашей страны. Если программист живет и работает на западе, то не должен. В развитых странах существует такая профессия как: "Постановщик компьютерной программы". Это человек, который объясняет... Читать далее
4 эксперта согласны
по большей части так и есть… ответ скорее верен...
Первый
Программист java, javascript. Люблю программироват...  · 21 февр 2022
Программист для роста должен уметь учиться: бысто искать, обрабатывать и применять информацию из любой области. Технологии меняются очень быстро. И что бы именно рости, надо успевать за потребностями рынка. А математика как... Читать далее
3 эксперта согласны
Коротко и по делу. Согласен с каждым утверждением.
Член ММО - Московского математического Общества...  · 13 мая 2022
Математика как профессия, весьма многогранная, в основе содержит формулировку и доказательство / условно - делание теорем. В том числе решение естественно возникших просто формулируемых, трудно доказываемых, многие годы стоЯщих... Читать далее
3 эксперта согласны
Математика - царица наук. Да, я уже не помню очень многое, но черт подери, как же были увлекательны времена... Читать дальше