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

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

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

Какие разделы важны для роста, что нужно уметь? Где можно подучиться этому?
Вопрос задан в рамках подготовки материала для соцсетей и гипертемы. Подробности тут.
ТехнологииПрограммирование+3
  · 43,4 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 принципах? Мы с вами вообще на разных языках говорим, причём вы говорите лозунгами, а не мыслями.
@Марк Сафронов, именно Греф считает "кодировщиками" всех программистов, которым вообще образование не нужно. Лозунги то здесь при чем? Математика тренирует мозг, поэтому она и нужна. Какой это лозунг?
@Smarina, "математика тренирует мозг" это и есть лозунг. Вы его в ранг догмы возводите. Тренировать мозг можно и переводом текстов, и упражнениями в логике, и задачами классификации в биологии и множеством других наук, не являющихся математикой в том смысле, который вчерашние школьники в него вкладывают.
Про "кодировщиков" я всё ещё не понимаю смысл вашего наезда. Я такими ярлыками не пользуюсь. Про Грефа я знаю только то, что в правительстве есть кто-то с такой фамилией. Профессия называется "разработчик программного обеспечения". Даже слово "программист" это всего лишь упрощённый сленг для широкой публики.
Ещё раз повторяю. Разработчику ПО, если он не решает математические задачи, не нужны знания из классической вузовской математики - матан, диффуры, алгебра, всё это вообще никак не нужно. Лучше по журналистике учебник прочитать или по лингвистике.
@Smarina, Математика тренирует мозг точно также как и заучивание стихов, потому как математики просто занимаются заучиванием формул. Нет разницы что вы учите: стих Пушкина или формулу Эйлера.
А вот то, что математика развивает логику - это смешно! Это как правило озвучивают люди, которые не знают что такое логика.
Логика - это последовательная цепочка рассуждений человека, которая делается на основе ранее полученных ПРАВИЛЬНЫХ знаний и которая приводит рассуждения к правильному конечному выводу.
И если у вас нет ПРАВИЛЬНЫХ ранее полученных знаний, то никакая математика вам не поможет.
Наоборот - стремление математиков получить универсальную формулу, заставляет их делать кучу математических допущений (сказочных предположений). В результате у математиков как правило рождаются теории, которые можно сравнить только с полным ИДИОТИЗМОМ.
Т.ч. если по честному, то математика и логика вещи - несовместимые.
@Павел, здесь вы уже сами, если честно, показываете предвзятость, только в другую сторону. Математика безусловно использует аппарат логики, в процессе доказательства теорем. Если исходные предположения теоремы были изначально доказано ложными или недоказанными, это проблема самого исследователя, не дисциплины в целом. Одна из эвристик, прекрасно известных в математической логике - "из лжи можно вывести всё что угодно". Полагаю, к общей логике это так же относится.
@Smarina, разработка больших систем само по себе развивает
логическое мышление, умение анализировать и находить оптимальные варианты и решения
Для это не обязательно глубоко знать математику.
@Марк Сафронов, "Математика безусловно использует аппарат логики, в процессе доказательства теорем."
Не хочу спорить, т.к. не то место.
Вот вам пример, а вы подумайте:
Бернулли придумал уравнение о том, что с какой бы скоростью вода по трубам не бежала - давление остается неизменным.
Для доказательства придуманного он придумал сказочную несжимаемую жидкость, которой в природе не существует. Зачем? А затем, что запрет на сжатие и растяжение - это запрет на изменение давления.
Т.к. позже уравнение Бернулли к себе взяли аэродинамисты, то для того, чтобы применить это уравнение в аэродинамике они объявили воздух "несжимаемым".
А как тогда летает самолет? Ведь на самом деле давление под крылом растет из-за того что воздух под крылом сжимается, а давление над крылом падает потому что там воздух разжимается.
Вы как программист, которого заставят писать программу по аэродинамике какую логику будете рассматривать? Математическую или здравомыслящих людей, которые знают что воздух легко сжимаем и разжимаем?
Ели математическую - то как по мне это не логика!
@Марк Сафронов, вот здесь я вам расскажу, что разработчик ПО очень должен понимать математику и физику и химию. В этим занимаюсь более 10 лет. И мне приходилось решать новые задачи в области и математики и физики и даже химии. И особенно запихнуть эти решения в аппаратуру, которая по производительности очень сильно отстают, а вот по надёжности в сто крат превышают на химико-физическом уровне.
Ваша цитата: "Тренировать мозг можно и переводом текстов, и упражнениями в логике, и задачами классификации в биологии и множеством других наук, не являющихся математикой в том смысле, который вчерашние школьники в него вкладывают"
Все что вы перечислили и есть математика и решаются относительно простыми системами уравнений и задач по разложению рядов и т.д.
Так что математика для колеров, которые создают сайты и лендинг не нужна, достачно школьной арифметики. А вот про увеличение воронки продаж уже давно нацелена на очень мощный математический аппарат. Как вырос Google, Yandex, Amazon и прочие, очень сильным математическим аппаратом для обработки больших массивов данных и выявления систем и гипотез на сотнях и тысячах параметров. От геолокации, частотой кликов по экрану телефона, скорость откликов на рекламу, частоту запросов и качества запросов, частотой пользования и прочего всего не перечислить.
4ая техническая революция в процессе.
@Павел, какой безграмотный коммент. Логика - это часть математики, соглашусь только с тем что она урезана. Потому что если ее раскладывать даже из трудов Аристотеля - то логика не бинарна, а троична. Условно он называл так три части логики: Истина, Ложь и "божественное"(неопределенность, то что не истина и не лижь одновременно).
@Александр Линчевский, я уже не знаю, как ещё мне нужно сформулировать мою мысль, чтобы её понял любой. Я думал, что она была понятна абсолютно любому человеку, неважно насколько зашоренному или не знакомому со специальностью.
ЕСЛИ ТВОЁ ПО РЕШАЕТ МАТЕМАТИЧЕСКИЕ ЗАДАЧИ КОНЕЧНО ЖЕ ТЕБЕ НУЖНА МАТЕМАТИКА, ТА, КОТОРАЯ НУЖНА ДЛЯ ЭТОЙ ЗАДАЧИ.
Я реально не знаю, у вас есть элементарные навыки принятия чего-то отличающегося от вашей точки зрения или нет. Вопрос того, насколько математика нужна для задач в реальной жизни вообще, к исходному вопросу отношение имеет опосредованное.
Я ещё раз повторяю элементарный факт, который должен быть очевиден любому профессиональному разработчику ПО: вопросы написания кода программы, его архитектуры, его сопровождаемости, его безопасности к математике, к ВУЗОВСКОЙ МАТЕМАТИКЕ ТРАДИЦИОННОЙ, к той "математике", о которой спрашивают авторы подобных вопросов, потому что не знают никакую другую, никак не относятся, это лингвистика, это психология даже в какой-то степени.
Сам факт того, что вы употребляете этот пейоратив "кодер" и полностью игнорируете мои слова про фундаментальные книги реальных серьёзных программистов, которые не содержат никакой высшей математики в тексте, говорит только о том, что 10 лет в индустрии, которыми вы тут хвастаетесь, вы провели в маленьком пузыре, и заработали профессиональную деформацию из-за этого.
@Павел, вы если не знаете, что такое математическая логика, вы хотя бы нагуглите, а ещё лучше - найдите учебник вузовский. Прежде чем гневно писать мне тут свои домыслы.
Вы как программист, которого заставят писать программу по аэродинамике какую логику будете рассматривать?
Аэродинамика - известная область знаний в физике. Заказчик, который, по вашим словам, "заставит" меня писать программу "по аэродинамике", скажет мне ограничения моделирования, которые его устраивают. Дальше поднимается литература по аэродинамике, организовываются совещания с экспертами в этой области, и имеющиеся у экспертов знания кодируются на выбранном языке программирования. "Логика" тут вами приплетена для пустой демагогии. Для тестирования корректности модели, которую будет обсчитывать моя программа, вполне возможно, будут проведены натурные тесты. Моя специализация далека от моделирования физических процессов, поэтому я могу только предполагать, но общие принципы разработки ПО никто никогда не отменял. О ЧЁМ Я И ГОВОРЮ В СВОЁМ ОТВЕТЕ.
Насчет легендарного трехтомника Кнута могу согласиться, что не математику это не осилить. А ощутимая польза для программиста разобравшегося в ней есть несомненная. Правда, сам я всю книгу не осилил :)
@Leonid, это обширный справочник с развёрнутыми комментариями.
Энциклопедии подобного типа не изучают, имхо. По ним, если что, просто справляются, как по гуглю или яндексу. Считаю, учить категорически всю эту "мудрость" не нужно.
Л.К.
Мне думается, что программисты перестали себя считать инженерами. От того и этот диспут: нужны ли этим программистам общие знания выше 7 класса средней школы.
Учёный, доктор наук, математика, информатика и экономика. Математические и инструментальны...  · 19 янв 2022
Конечно, должен. Математика это не интегралы и диф. уравнения - это инструмент, язык описания моделей явлений и процессов. Много алгоритмов разработали именно математики. Нужны те разделы, которые требует решаемая задача. Материалов в сети по математике достаточно и можно найти любую информацию. Но не все тексты просты и понятны. специальные курсы нет смысла проходить... Читать далее
Образовательная платформа Хекслет  · 28 окт 2022  · ru.hexlet.io
Достаточно большая часть задач повседневных задач, которые встают перед программистами решается без применения математики. Набросать страницу, создать небольшое CRUD-приложение (приложение где происходят базовые действия над сущностями: создание, изменение, удаление), поработать с БД или очередями. Всё это можно делать буквально по документации, не вдаваясь в то, что... Читать далее
Помогаем новичкам освоить профессию веб-разработчикаПерейти на ru.hexlet.io/webinars
программист  · 12 мая 2022
План такой: use-case когда математика нужна (для затравки) почему математика почти всегда не нужна (и что нужно) если нужна математика, то что наиболее часто теория графов, что типовое нужно Поехали. 1. В принципе некоторые разделы Software Engineering проще переоткрыть (и немного доделать напильником) самому, чем штудировать мануалы (в которых часто "за деревьями леса... Читать далее
Благотворитель, предприниматель, бизнесвумен, волонтер, капиталист, демократ, спортсменка-...  · 9 янв 2022  · it-life74.ru
Думаю, что должен. Ведь само программирование, это и есть 90% математика и геометрия цифр в пространстве. Без неё не инженерии , а программирование , лично для меня это инженерное образование.
Ваш друг Павла ХейнПерейти на it-life74.ru
2 эксперта согласны
Научные заметки о жизни: zen.yandex.ru/id/5c43498395753900ac66852d  · 10 мая 2022
"Программист" не профессия, а признак принадлежности к огромной отрасли с множеством разнообразных профессий. В этой отрасли есть свои ученые, инженеры, рабочие, подсобники, маркетологи и кустари-одиночки. И всех их называют программистами. В зависимости от конкретного рабочего места и функциональных обязанностей формируются и требования к работнику. Где-то достаточно... Читать далее
1 эксперт согласен
Yriy
подтверждает
10 мая 2022
Мышление программиста это креативный процесс познания мира алгоритмами, системами и обязательным тестированием для... Читать дальше
Геймдизайнер. Мастер дискуссии и срачей. Имею опыт обучения других геймдизайнеров.  · 13 мая 2022
Было бы странно, если б программист графики не знал, как работать с матрицами и кватернионами. Или программист ИИ не слышал бы про цепи Маркова. Или инженер высоконагруженных систем не владел бы комбинаторикой и матанализом.
1 эксперт согласен
Ответ реверсивный, но верный.
Увлечения: Аэродинамика, физика.  · 19 февр 2022
Вопрос скользкий и именно для нашей страны. Если программист живет и работает на западе, то не должен. В развитых странах существует такая профессия как: "Постановщик компьютерной программы". Это человек, который объясняет программисту как должна выглядеть программа и что она должна делать. А программист должен в совершенстве знать код своего языка программирования и... Читать далее
4 эксперта согласны
по большей части так и есть… ответ скорее верен...
Первый
Программист java, javascript. Люблю программировать как на работе, так и в свободное...  · 21 февр 2022
Программист для роста должен уметь учиться: бысто искать, обрабатывать и применять информацию из любой области.
Технологии меняются очень быстро. И что бы именно рости, надо успевать за потребностями рынка.
А математика как таковая - это тоже область знаний. Если требуется по ТехЗаданию, то надо быстро найти информацию, понять и применить.
3 эксперта согласны
Коротко и по делу. Согласен с каждым утверждением.
Член ММО - Московского математического Общества. Кстати, старейшего в мире. Л.М. Коганов.  · 13 мая 2022
Математика как профессия, весьма многогранная, в основе содержит формулировку и доказательство / условно - делание теорем. В том числе решение естественно возникших просто формулируемых, трудно доказываемых, многие годы стоЯщих задач. Раньше программированием занимались в основном математики - профи, как-то указанный Коллегами Д.Э.Кнут и лица, которых я знал. Проходят... Читать далее
3 эксперта согласны
Математика - царица наук. Да, я уже не помню очень многое, но черт подери, как же были увлекательны времена... Читать дальше