Как стать автором
Обновить

Комментарии 353

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

Лямбда-исчисление само по себе никак не связано с вызовом функций и тем более с инструкцией CALL.

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

Скрытый текст

Правильный ответ: компьютер этого не знает.

Вот как раз электроны и дырки программисту, который пишет на какой нибудь Scala, не особо нужны (хотя для общего развития знать стоит). А вот то, что функции - это объекты, над которыми можно проводить определённые операции, получая новые функции - знать обязательно, и эта теория была как раз таки развита в рамках лямбда исчисления. Согласен, что это нужно только для глубокого понимания и можно обойтись - так же, как арифметические действия можно делать не зная аксиом Пеано.

я с вами не согласен, там конечно сложно сразу так понять всё базовое, но что-то мне подсказвает там настолько всё логично, что другого просто быть не может, та машина Тьюринга это простейшая первая машина на сколько помню, на которой доказался определенный момент, далее эти принципы развили и развили и прочее и новые добавились, а лямбда исчелсления я не отрицаю, я не согласен что именно по лямбде можно всё это, я считаю не только по лямбде, я могу ошибаться, не експерт в этом деле

НЛО прилетело и опубликовало эту надпись здесь

замечу, что не менее полезно представлять себе работу компьютера, начиная от лямбд.

А можно пример? Когда это проще и плодотворнее, чем когда от печки - начиная с простой логики, разных J-K триггеров, машинных команд, ассемблера, С/С++ и так далее.

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

Тут путь примерно такой: автоматы -> формальные грамматики -> лямбда-исчисление -> формальная семантика -> семантически строго определённые языки. И ничего дальше грамматик, между прочим, почему-то не проходят в вузе.

А потом народ кидается программировать на невероятном языке C++, в котором половина синтаксических конструкций вообще не имеет семантики (для чего придумано даже специальное название UB), и вроде как складывается впечатление, что так и надо.

Да вот тут прямо ниже в обсуждении пример, когда у людей нет ясности, где проходит граница между синтаксисом и семантикой

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

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

НЛО прилетело и опубликовало эту надпись здесь

Думаю тут должна быть "большая половина".

Но всякие trivially_relocatable_if_eligible это UB by design. Трудно с этим спорить.

НЛО прилетело и опубликовало эту надпись здесь

Не совсем, здесь явное противопоставление синтаксиса и семантики языка внутри самого языка.

Как вообще любые маркеры do_something_if_possible, не меняющие синтаксис работы с объектами, которые свойство if_possible(x) в себе не сообщают.

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

Строго говоря, гораздо больше половины. Если посчитать долю UB среди всех возможных цепочек символов, которые являются синтаксически корректными программами на C++, так там у большинства будет, например, использование переменной вперёд присваивания значения. Понятно, что в реальности люди учатся так не писать, но тем не менее.

Почему Логику вдруг узурпировала математика?

Не знаю, "почему" и "узурпировала" ли вообще. Но рекомендую почитать, например, классические учебники по математической логике Колмогорова.

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

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

Но при чём здесь теория типов из математики?

Ну опять же рекомендую обратиться к специализированной литературе. Там же в тексте упомянут изоморфизм Карри-Говорда и его важность для статически-типизированных программ.

не всякий алгоритм может быть запрограммирован

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

математика - язык

Слишком упрощённое представление. Различные разделы математики предоставляют различные языки, подчеркивающие те или иные аспекты, но, как правило, относящиеся к тем или иным вычислениям.

НЛО прилетело и опубликовало эту надпись здесь

В статье же утверждается, что Логика вдруг стала частью математики. Давно?

Формально где-то в 17-19 столетиях. "Вопрос о создании символической логики как универсального научного языка рассматривал Лейбниц в 1666 году в работе «Искусство комбинаторики» (De arte combinatoria). Он думал о записи высказываний на специальном языке, чтобы затем по логическим законам вычислять истинность других. В середине XIX века появились первые работы по алгебраизации аристотелевой логики, сформировавшие первооснову исчисления высказываний (Буль, де Морган, Шрёдер). В 1847 г. Дж. Буль опубликовал работу «The Mathematical Analysis of Logic» («Математический анализ логики»), а в 1854 г.— «An Investigation of the Laws of Thought» «Исследование законов мышления»)."
Что то мне подсказывает (логика?) что автор в статье о математике под логикой понимает именно предмет "Математическая логика".

НЛО прилетело и опубликовало эту надпись здесь

если представить что бесконечность - явление, а точка формально кирпичик минимальный тоесть частица, и её можно посчитать, то поидее точки бесконечности относительны , тоесть бесконечность точек это будет явление )

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

То есть я правильно вас понимаю что вы не признаете математической логики как науки и надо ее срочно выпиливать из технических вузовских программ и заставлять философов расписывать таблицы истинностей и на логических гейтах строить сумматоры на бумаге?

НЛО прилетело и опубликовало эту надпись здесь

Как раз математически ИИ описывается, а программно - мы 70 лет слышим про "почти". И сейчас программная реализация ИИ во многом дальше от цели, чем 30 лет назад, поскольку малосведущие в математике люди решили забить на семантический оператор и обойтись синтаксическим контекстом написанных человечеством текстов. Однако, с внезапностью выпадения снега зимой в глазах ЖКХ, наступил теоретически предсказанный облом. Контекст полностью посчитан, а ИИ нет.

НЛО прилетело и опубликовало эту надпись здесь

а программист (или инженер) скажет "а пофиг что оно означает, мы изобрели способ записывать ещё неизученные понятия".

В том-то и дело, что это не понятия. Из здравого смысла ясно, что это не понятия, и из математики ясно, что это не понятия. Это просто синтаксические гармоники слов.

НЛО прилетело и опубликовало эту надпись здесь

А что вы здесь вкладываете в слово "значит"?

Никакой семантики, отличной от самого себя, он не имеет. И по этой причине никакого тайного знания вам не откроет.

НЛО прилетело и опубликовало эту надпись здесь

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

Надеюсь, что не задел ничьих религиозных чувств.

НЛО прилетело и опубликовало эту надпись здесь

Смысла у конструкции нет ни в том, ни в другом случае. С 32768 эмбеддингами она просто более синтаксически похожа на осмысленный текст.

Умный инженер Пелевин про это писал в "Чапаеве и Пустоте". Где казаки пели песню, в которой слова точно такие же, как в другой песне, а смысл совсем иной.

НЛО прилетело и опубликовало эту надпись здесь

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

Чтоб было более понятно, приведу забавный пример.

Я открыл с DeepSeek три разных диалога:

  1. "Ну ** твою мать" (без цензурных звёздочек)

  2. "Ну ёрш твою медь"

  3. "Я недоволен"

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

Получил три абсолютно разных ответа.

Собака - не большого интеллекта существо и не лучший оратор, но поняла бы смысл сказанного в миллион раз лучше.

НЛО прилетело и опубликовало эту надпись здесь

А 3987 число у этих высказываний, видать, сильно разное.

НЛО прилетело и опубликовало эту надпись здесь

А почему тогда результат разный?

Потому что LLM выдаёт не строку текста, а распределение токенов на каждую итерацию, и из этого распределения случайным образом выбирает очередной токен. Получить разные результаты можно даже подавая на вход одни и те же данные (если, конечно, не считать состояние ГПСЧ ещё одним входом).

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

Собственно, по-другому и не может быть, потому что в алгоритме LLM нет семантической функции вообще, а на сленге генеративщиков семантикой называется упакованная форма синтаксиса.

Логика - философская дисциплина.

Философская дисциплина, именуемая "логикой" является простейшим практическим приложением математической логики к вопросом философии. Математическая же логика включена в формальную, которая рассматривает помимо неё ещё и неклассические логики. А формальная логика, если не изменяет память, является одной из интерпретаций формальных арифметик.
Так что у вас не столько даже телега впереди лошади, а, скорее, капли проистекающие из ведра, подвешанного к этой телеге впереди лошади ;)
А, да, чтобы да раза не вставать, основателем формальной логики как науки считается аж Аристотель. Впрочем, исторический приоритет, как вы сами заметили, здесь не главное.

Логика - самостоятельная формальная нормативная наука.

Так наука или, всё же, дисциплина другой науки?

НЛО прилетело и опубликовало эту надпись здесь

в обоих случаях она не то, что заявлено в статье

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

НЛО прилетело и опубликовало эту надпись здесь

математическая логика является частным случаем Логики

Наоборот. Об этом даже написано в вашей любимой энциклопедии. :)
А если бы вы изучали хотя бы одну из них, то и сами бы это знали ))

сперва появилась Логика

Сперва появилась Алхимия, поэтому химия является её подмножеством, ага.

НЛО прилетело и опубликовало эту надпись здесь

Сперва появилась Алхимия, поэтому химия является её подмножеством, ага.
Так вы где логику, говорите, изучали? Post hoc ergo propter hoc? Не слыхали?

НЛО прилетело и опубликовало эту надпись здесь

Сам тот факт, что вы последовательность написанных на экране слов “убедиться-убедиться-отправиться-закупиться-нажраться” используете для описания поведения воображаемого человека, вместо которого может быть подставлен реальный человек вроде нас с вами – а уж тем более то обстоятельство, что первые два “убедиться” можно менять местами, а остальные слова нет – это чистое лямбда-исчисление. Тут вам и аппликация, и альфа-эквивалентность, и бета-редукция.

То, что вы написали – это лямбда-абстракция опьянения. Но не само опьянение, что важно для человека (но не генеративного ИИ).

НЛО прилетело и опубликовало эту надпись здесь

Я не считаю, что это сова на глобусе. Я считаю, что это очень корректное и существенное рассуждение, хотя и простое.

Причём, наверное, половина людей, занятых в наше время программированием, даже на таком уровне этих вещей не понимает или не задумывается над этим. А именно, что, например, для нас с вами слово “опьянение” обозначает определённое состояние человека, которое мы можем себе представить в виде ощущений (то есть, с точки зрения теории, у него есть семантика, обозначаемая жирными квадратными скобками), а для генеративного ИИ это слово, как и любое другое, означает только само себя и свой лексический контекст (то есть синтаксис, с которым и оперирует лямбда-исчисление).

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

НЛО прилетело и опубликовало эту надпись здесь

Про опьянение не скажу, но вот на первые два вопроса ответы для меня очевидны))

Физика безусловно первичнее, так как именно она задаёт задачи математике, да вообще оправдывает её появление и развитие.

И яйцо первичнее курицы. Потому снести его могла какая-нибудь ещё-не-курица, а вот сама курица вылупится из яйца.))

а скоро Раст придёт и будем такты считать на самом безопасном языке, а потом думать почему не С++), там всё очевидно, а тему вы хорошую подобрали в конце абзаца, это имеет место быть сегодня, можно затронуть даже чуть, тему отцов инженеров, потомучто, сейчас не всё тривиально, например баш на уровне с С по статистике на отдаленном масштабе не вдумываясь учитывая особенности по вики смотрел ) можете на вики проверить, я не хейта ради просто накидал фактов, прошу прощения

Должны ли инженеры создавать ОС вот интересно? или не инженеры

"Честное слово, я и не подозревал, что вот уже более сорока лет говорю прозой." (г-н Журден)

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

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

В целом ваши тезисы все очень спорные, не лезьте в computer science и математику пожалуйста с ними))

НЛО прилетело и опубликовало эту надпись здесь

если брать науку в целом

Эээ... Вы привели пример из математики, которые далеко не все считают научной дисциплиной, а языком, к примеру. Из физики пример можно?

НЛО прилетело и опубликовало эту надпись здесь

Вот записанная Эйнштейном аксиома: скорость света одинакова во всех инерциальных системах отсчёта.

А если/когда вдруг обнаружится явление, или эксперимент, где это утверждение про окружающий нас физический мир не будет выполняться? Ну хоть чуть-чуть. Такое с разными теориями происходило и дальше будет происходить. Больше не аксиома? Что-то я не вижу, как такое может с математической аксиомой произойти. Типа, раз, и сложение целых чисел не коммутативно. Чуть-чуть :)

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

Ошибки силологизмов богословской логики разбираются в первой главе учебника Колмогорова.

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

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

А должны были?

Мне просто интересно, какой логикой вы из религиозного контента (скажем, христианского) сделали вывод, что этот контент должен был научить людей летать на Луну, когда этот же самый контент прямым текстом сообщает, что умножая знания - умножаешь скорбь, и что раскормленное Эго вынуждает людей идти на безумства, которые для людей плохо кончаются. Да, это определённо похоже на инструкцию к манипуляции материальными сущностями во славу человеческого Эго XD.

Да, хабр скатился. Контекст комментария не хотите учесть и потом переответить?

Или вы бот? Судя по тому что вас пригласил ализар и количеству комментариев.

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

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

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

ООП хоть и "ложная штука", но она также как и функциональщина и/или язык с богатой системой типов позволяет писать программы.

Догматы знания не порождают

История философии говорит об обратном.

Силологическая ошибка, то что философия повлияла на науку - не значит что догматы повлияли на науку.

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

Предлагаю закончить этот разговор, говорю с пустотой.

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

НЛО прилетело и опубликовало эту надпись здесь

зато с научной точки зрения объясняется достаточно просто — конфликт капиталов

Это левая (марксистская) точка зрения, а не научная.

НЛО прилетело и опубликовало эту надпись здесь

кроме марксистов мало кто двигал общественные науки - это правда

Нет, это ложь.

однако это описание не имеет логических противоречий, опытных опровержений и так далее

Написанному верить.

А опытные опровержения это как вообще?

сколько бы ни пропагандировали «марксизм устарел» это будет звучать так же, как «физика устарела»

Будет, когда люди массово отупеют и перестанут отличать яишницу от божьего дара.

НЛО прилетело и опубликовало эту надпись здесь

Догматы породили знания, которые впоследствии породили научный метод в том числе.

Предлагаю закончить этот разговор, говорю с пустотой.

Ну нет, так просто вы не сольётесь.

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

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

Религию и психологию можно сравнить между собой в рамках душевного спокойствия и подготовки к смерти.

Четкие границы, правильный подбор аксиом, корректность логического мышление - то чему учит математика.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

В чём разница между богословием и наукой?

Когда наблюдаемые данные противоречат предсказаниям науки, вы меняете теорию и аксиомы.

Когда наблюдаемые данные противоречат предсказаниям богословия, вы сжигаете еретика или в лучшем случае применяете фундаментальную аксиому «пути господни неисповедимы».

НЛО прилетело и опубликовало эту надпись здесь

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

Полностью поддерживаю (в естественноязычной интерпретации: высказывание «2 + 2 = 4» не будет ересью, даже если исходит от марксиста).

развитие гегелевой диалектики

Маркс напихал взаимных противоречий в свою логическую систему и сидит довольный, потому что теперь может доказать что угодно. Ура! Ура! Ура!

Для подробного разбора, почему Гегель вместе с Марксом — это гибель мозга, можете почитать второй том Поппера Open Society and Its Enemies, например.

ересью в науке признают с такой же частотой, как и в богословии

А ещё Петрика ересью считают!

Дело в том, что учение Петрика (или Маркса) не является наблюдаемым фактом в петриковщине (или экономике).

вон хоть на наши споры о теории типов посмотрите: оппонент банально не принимает никаких разумных, практических аргументов против типов

Оттого, что вы будете раз за разом повторять «типы нинужны», это не станет разумным, практическим аргументом.

НЛО прилетело и опубликовало эту надпись здесь

я не говорил что типы не нужны, вы намеренно и постоянно искажаете контекст

Я именно к этому контексту и отсылаю. Или мне нужно все ваши комментарии целиком сюда копировать, а то иначе вы не вспомните, что вы сами писали?

я планировал, что с религиозно настроенными гражданами вроде вас общаться не буду

И моя религия выражается в том, что я имею наглость регулярно вам напоминать, что от > вместо типы тоже спасают, и показывать, как?

я имею наглость регулярно вам напоминать, что от > вместо ≥ типы тоже спасают

если вы путаетесь с выбором > и ≥ то типы вам не помогут, так же как если вы не в состоянии запомнить таблицу умножения, мат.анализ вам не получится освоить.

если вы путаетесь с выбором > и ≥ то типы вам не помогут

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

как если вы не в состоянии запомнить таблицу умножения, мат.анализ вам не получится освоить

Да, там ведь используются совершенно одинаковые навыки. Матан — это про зубрёж, как таблица умножения.

Таблицу умножения по какому основанию, кстати? По основанию 30 запомнить и вы вряд ли сможете уже, но что это говорит?

НЛО прилетело и опубликовало эту надпись здесь

Раньше вы путали знаки сравнения в любом месте, теперь только в декларации типа. Ну ладно, давайте с декларацией.

-- декларирую тип с ошибкой `<` вместо `≤`:
data PersonOrder (p1, p2 : Person) : Type where
  MkPO : p1.name < p2.name → PersonOrder p1 p2

poReflexive : (p : Person) → PersonOrder p p
poReflexive = ??? -- не получится реализовать

Типы снова помогли отловить ошибку!

НЛО прилетело и опубликовало эту надпись здесь

да в любом месте, почему бы не в декларации типа их перепутать?

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

а ваш синтетический пример и лень комментировать.

Конечно, потому что сказать-то нечего, а признать, что типы помогают, никак нельзя.

Ну и да, даёшь короткий пример — «синтетика! нинужно!», даёшь длинный пример — «не совпадает с моей областью деятельности! нинужно! я командую парадом микросервисами!»

попробуйте воспроизвести перепут < и <= на вашем любимом факториале, или Фибоначчи

Ну это, конечно, не синтетика.

Путал на практике, упрощая, добавление единицы к индексу и его отсутствие. Типы помогали это ловить, код тупо не тайпчекался.

Или, опять же, на практике занимался аудитом формального доказательства смарт-контракта на isabelle/hol. Там и перепутанные операторы отлавливались, и некорректные формулы расчёта стоимости коинов (скажем, они должны быть монотонными по какому-нибудь параметру — успехов поймать это тестами), и так далее. И всё это — типами.

НЛО прилетело и опубликовало эту надпись здесь

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

Почему же? Цельная картина в том, что вы не понимаете, когда сужение требований помогает, а когда — мешает.

я много раз говорил: типы помогают.

Вы только что говорили, что типы не помогают отличить > от . Я показал, как они помогают [это сделать]. Вы теперь говорите, что много раз говорили, что типы помогают [это сделать]. Или вы уже потеряли контекст?

И констрейнты в типах, которые Вы по недоразумению зовёте "теоремами" тоже.

Почему по недоразумению? Вы же сами сказали, что утверждения теорем — это тоже констрейнты. Что не так?

типизацию: решает проблемы перепутывания арбузов с автомашинами

Далеко не только, и ваше игнорирование любых ответов на этот неверный тезис начинает надоедать.

Радикально упрощает написание компилятора.

Ну вообще нет. Писать компилятор с тайпчекером куда сложнее (и тем сложнее, чем сложнее система типов).

Радикально усложняет жизнь программисту.

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

иммутабельность

Вообще ни при чём тут.

Радикально усложняет жизнь программисту, поскольку ему (программисту) требуется моделировать реальный мир, а он (реальный мир) мутабелен в своей основе

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

Так что кто тут ещё упрощает или усложняет.

упрощённый синтаксис записи констрейнтов

Вы так и не смогли определить, что такое констрейнты и чем они отличаются от теорем. И какой синтаксис был бы не упрощённым, да.

Кстати, многие языки давно умеют запускать код на стадии компиляции: вот Python

Что за стадия компиляции у Python?

Такой запуск кода не имеет вообще никакого отношения к типам.

и как же типы тут помогали?

Ну как, индекс должен иметь тип Fin (n + 1), а имел тип Fin n. Соответственно, надо либо weaken делать, либо прибавлять единичку: система типов на этапе написания этого кода сказала, что я что-то из этого забыл, и, значит, надо прям вот здесь сесть и подумать, что я хочу. Потом, когда я про этот код сел доказывать теоремы, то, если бы я (неверно) выбрал weaken вместо прибавления единички, то теоремы бы не доказались, а так они доказались.

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

а-а-а! блокчейн! мошенники и криптовалюты!

А-а-а! Яндекс! Политики, пропагандисты и неумехи!

Это у вас украли эфира на 1.5 млрд $?

Нет, и я вообще не занимался эфиром.

злоумышленники использовали сложный метод подмены транзакции, который позволил им получить полный контроль над активами.

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

НЛО прилетело и опубликовало эту надпись здесь

не показали.

Пример выше. Показал.

Я помню, что вам лень отвечать, но «мне лень отвечать, почему вы не показали, но не показали, пнятненько?» — это очередное пробитое дно уровня ведения дискуссии с вашей стороны.

Вы математик или где?

Нет, конечно. Какой из меня математик?

Но в то же время "теорема всегда сводится к констрейнту" - нет.

Я у вас выше прямо спросил, является ли теорема Ферма констрейнтом, и вы сказали да. На неявный вопрос о том, есть ли теоремы-не-констрейнты, вы там не ответили положительно, поэтому я спрошу здесь: приведите, пожалуйста, пример теоремы, которая не является констрейнтом в вашей терминологии.

когда оппонент говорит "только" достаточно привести ему один контрпример.

А когда оппонент говорит «не только» (как это сделал я), то что надо привести?

А во-вторых, констрейнт - это уже не про типы, а про самостоятельную сущность.

Кто сказал? Есть вообще целые системы типов вроде всяких refinement types, чей смысл существования — именно что навешивать констрейнты и оперировать с ними удобно для программиста (сиречь иметь разрешимую автоматизацию).

Или, на более привычном вам языке, вы говорите «Int — это не тип, а самостоятельная сущность».

но весь этот пакет относится не к типам и я предлагаю таки спорить по каждому пункту отдельно.

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

при языках, примеры которых Вы приводите

Линейные типы дают мутабельность и в тех языках, примеры которых я пишу. Монада ST даёт мутабельность.

Ага, но вы этого не сделали.

Если бы я не сделал, то оно бы не скомпилировалось.

тип у вас внутри всего один и он ничего не подсказал

Не понял, что это вообще значит? Мне компилятор говорит что-то в духе «cannot match i of type Fin n with argument of type Fin (n + 1)». Вот прям подсказка: скоуп индекса другой, увеличился на единицу, и надо это как-то обработать теперь.

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

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

Видите? Вы во-первых, сами нашли пример, опровергающий Ваш тезис.

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

Это у вас очень серьёзная заявка на первое место на чемпионате среди ретардов хабра.

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

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

Но вообще да, согласен, бесовское всё это. Науку отменить, журналы закрыть, грабли в руки — и пахать. Пол Пот грит малаца.

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

Не понял. Загрузка, парсинг и разбор AST-деревьев — это выполнение кода внутри анализируемого исходника? Лол.

Вы результатами моего труда скорее всего пользовались.

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

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

НЛО прилетело и опубликовало эту надпись здесь

это функция, отвечающая "да" или "нет" на вопрос "входящее значение корректно?".

Только это не функция, это утверждение. И у меня там не только проверка x^a + y^a = z^a, а ещё и указание, что это (не) выполняется для любых a ≥ 3.

«Все крокодилы зелёные» — это функция? Что она принимает на вход?

2x = y или даже Фермовый x^a + y^a = z^a теоретически можно записать в констрейнтах.

А можно таки конкретный пример теоремы, которая по-вашему так не записывается?

Но в тот момент, когда внутри констрейнта требуется, например, интегрировать, дифференцировать, вычислять минимумы/максимумы и так далее, в этот момент компилятор поднимет лапки и скажет "автоматически такое делать я не умею".

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

Вывод

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

символы Unicode (кстати, что это за фетиш? Для чего он?)

Чтобы читать легче было.

это не теоремы, а нечто, могущее иметь с ними дальнее сходство.

Только вот, опять же, любую теорему можно там выразить.

Смотрим в языки программирования с динамической типизацией. Видим констрейнты и без типов. Мало того, можем запрограммировать констрейнт даже там, где они не предусмотрены синтаксисом

И где здесь проверки на этапе компиляции?

Как будет выглядеть утверждение теоремы Ферма? Только чтобы у вас не получилось реализовать неправильные утверждения.

Всё это разные технологии и продать их мне пакетом под видом "типы" не выйдет.

Потому что у вас нулевые способности к восприятию информации, безусловно.

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

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

В программировании тоже вон науки до фига - ИИ тот же.

А где в ИИ наука?

Если проход через турникет метро будет требовать счётчика Гейгера, то это создаст неудобства.

Это скорее ситуация с тестами и повальным юнит-тестированием всего и вся, за которую вы топите.

Написав import module, Вы выполняете код, который реализует присвоение значения переменной foo. И этот код будет исполняться пока идёт import. Полный аналог кода, исполняемого в момент компиляции.

А можно так же, но с языками, где есть полноценный шаг компиляции, вроде C? И чтобы произвольная bar могла выполняться.

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

НЛО прилетело и опубликовало эту надпись здесь

утверждения не могущие быть выражены через функцию не могут быть и скомпилированы

Этот аргумент не в ту сторону, в которую вы думаете и в которую вам бы хотелось.

я приводил: наличие интегралов, производных, рядов и так далее — вещей, не могущих быть сведенными к констрейнтам

Как всегда, конкретики от вас не добьёшься, ну да ладно.

Почему они не могут быть сведены к констрейнтам-то? Чем они хуже Ферма?

покупатель не согласен платить за впариваемую ему хтонь

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

да и необходимость что-то вычислять на стадии компиляции явно преувеличена: ведь вычисления возможны исключительно около констант

Я в своё время получал хорошие деньги именно за то, что вычислял на этапе компиляции на эзотерическом языке (темплейты C++). Готовность платить большие деньги за это в куче разных мест подразумевает, что это таки востребовано.

НЛО прилетело и опубликовало эту надпись здесь

это именно то, что из ваших теорем делает простые констрейнты и только.

Это именно то, что показывает, что эти типы и есть записи [утверждений] теорем. А функции, имеющие эти типы — их доказательства.

какая конкретика нужна?

Теорема, не сводящаяся к констрейнтам в вашей терминологии.

я вам уже давал пример задачи, повторю:

есть организация, в ней есть склад [...]

Не нашёл здесь теории с интегралами и производными.

тем что математика совершенно не отображает реальную жизнь.

И поэтому одни теоремы сводимы к «констрейнтам», а другие — нет? Хорошая логика.

И?

И для вас этот личный опыт же является ультимативным аргументом, разве нет?

НЛО прилетело и опубликовало эту надпись здесь

Понятно, конкретики от вас всё ещё нет, а есть замыливание глаз и заговаривание зубов.

НЛО прилетело и опубликовало эту надпись здесь

ЗАЧЕМ мне может понадобиться ряд Фибоначчи

Например - продавать сигналы трейдерам на биржах .

Не знаю как сейчас , но лет 25 назад было популярно .

конкретики нет ОТ ВАС.

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

Потому я эти примеры начну писать и рассматривать только после того, как Вы приведёте пример: ЗАЧЕМ мне может понадобиться ряд Фибоначчи.

Ставь лойс, если любишь придумывать соломенные чучела и потом требовать от собеседника их опровергать.

В жизни нет применений рядов Фибоначчи, факториалов и проч.

Симуляции физики, графические приложения, игровые движки. Там встречаются и ряды Фибоначчи, факториалы, интегралы, производные, теория вероятности (криптография кстати) и т.д. и т.п.

Или всё это для вас не программирование?

Изначальный коммент стерся, возможно комментатора забанили. Поэтому отвечу тут.

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

А между тем, задача-то не сложная. Всего-то и нужно, прямо так и программировать, как указано в ТЗ: есть понятие "взять товар с полки?" -> прямо так и программируем: пишем функцию shelf.get_product(id).

А как вы гарантируете, что, когда сработала функция shelf.get_product(id), то товар действительно взят с полки (и наоборот)? А никак. Потому что вы используете не функцию от реального физического состояния (например, изображения полки с видеокамеры), а своё вымышленное модельное состояние объекта. Это главная проблема ООП.

да в любом месте, почему бы не в декларации типа их перепутать?

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

Логика - это философская дисциплина

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

Смотрим книжки:

Ю.Л. Ершов, Е.А. Палютин - Математическая логика

Дж. Барвайз. Справочная книга по математической логике. В четырёх частях.

что такое тип в программировании? Это сущность отделяющая одно значение от другого.

Это у Вас бытовое представление о типе. Его вполне достаточно для самого программирования. Но если бы Вы заглянули в теоретические работы 80-тых годов Computer Science в каких-нибудь Lecturure Notes, то Вы нашли бы там длинные простыни про типы и про всякие там сорта. Даже не будучи в курсе всех этих теоретических разработок, можно понять, что тип можно строго определить через некую алгебраическую структуру, которая определённым образом реализуется в грамматике конкретного языка программирования.

Раньше под "значением" понимали всё подряд: числа, строки, солянко-сборные объекты. В общем ООП.

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

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

Есть строгие математические понятия: рекурсивно-вычислимые функции, полнота по Тьюрингу и т.д. и т.п.

А если открыть книги Кнута, Хоара (Взаимодействующие последовательные процессы), Филда и Харриссона (про функциональное программирование)? Везде сплошная математика!

НЛО прилетело и опубликовало эту надпись здесь

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

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

второй закон термодинамики - базис мутабельности

Как второй закон термодинамики связан с мутабельностью в программировании?

НЛО прилетело и опубликовало эту надпись здесь

а претензия в том, почему вы смотрите только на этот факт, как достаточное основание для внедрения типизации?

Вы приписываете мне взгляды, которых я не придерживаюсь

однако за внедрение типов придётся платить оверхедом аннотаций, отказом от возможности формулировки выражений обобщённо, кучей механизмов преодоления построенной нами же клетки

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

за редко встречающуюся проблему платить много и постоянно

Системы типов разные бывают. Возьмёте сильную -- заплатите много, но она словит почти все ошибки, возьмёте слабую -- ошибок словит меньше, но и заплатите мало.

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

Типы не столько для скорости нужны, сколько для выразительности и корректности

и, кстати, заметьте, как далёк наш спор от математики: а она здесь ни при чём, мы ведь о программировании говорим

Увы, не могу с вами согласиться. Последние пару месяцев я читаю книгу по математической логике и система типов Coq помогает и в понимании, и в проверке некоторых утверждений

НЛО прилетело и опубликовало эту надпись здесь

вот это классическая подмена от людей "читающих книги по Coq".

Тут нет подмены, изоморфизм Карри-Ховарда позволяет логические утверждения перенести на уровень типов. При желании можно и теоремы про свои программы доказывать

НЛО прилетело и опубликовало эту надпись здесь

теоремы только про типы
ошибки только про типы

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

а вот знак больше на больше или равно может по ошибке сменить
и типы или Coq здесь ему никак не помогут

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

НЛО прилетело и опубликовало эту надпись здесь

ещё раз; типы позволяют Вам избегать только ошибок связанных с типами: вместо килограмм пришли метры — ошибка

Попробуйте всё же открывать ссылки прежде чем повторять ложные тезисы. Это из теоремы четырёх красок:

Theorem four_color m : simple_map m -> colorable_with 4 m.

Определяет функцию four_color, которая имеет тип "Для любого m типа map R, из simple_map m следует colorable_with 4 m". Теорема выраженная на типах.

Это из Iris:

  Local Lemma acquire_spec γ lk R :
    {{{ is_lock γ lk R }}} acquire lk {{{ RET #(); locked γ ∗ R }}}.

  Local Lemma release_spec γ lk R :
    {{{ is_lock γ lk R ∗ locked γ ∗ R }}} release lk {{{ RET #(); True }}}.

Теоремы о том, как ведёт себя spin_lock в языке Heaplang. От двоеточия до точки это тип. В типе записана тройка Хоара, которая дальше доказывается.

НЛО прилетело и опубликовало эту надпись здесь

То, что Вы зовёте теоремами - простые констрейнты, ограничивающие подмножество внутри множества.

Вот это:

∀ n → n ≥ 3 → ∀ a b c → a ^ n + b ^ n ≢ c ^ n

тоже просто констрейнт?

Тип не защитит Вас от того, что Вы в этом месте напишете x > 0 вместо x >= 0.

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

НЛО прилетело и опубликовало эту надпись здесь

именно

Так, стоп. А великая теорема Ферма — это тоже просто констрейнт?

попробуйте себе объяснить, каким способом оно будет реализовано «под капотом»

А можете вы меня просвятить, пожалуйста?

НЛО прилетело и опубликовало эту надпись здесь

а вы попробуйте выразить Ферма на ваших типах и убедитесь, что это именно констрейнты

Как раз выразил выше (опустив не сильно важную для дискуссии деталь).

Так всё же, слова «уравнение a^n + b^n = c^n не имеет решения в целых ненулевых числах для n ≥ 3» являются просто констрейнтом на подмножество (и чего), или нет?

НЛО прилетело и опубликовало эту надпись здесь

констрейнт да

Окей, если все теоремы — тоже констрейнты, то какой смысл в высказывании «это просто констрейнт»? Что бывает кроме констрейнтов?

и код констрейнта вызывается когда вы преобразование типа выполняете

Лол.

Какое тут преобразование типа? Какой код выполняется? Можете ткнуть в это всё пальцем?

и он же когда пользовательский ввод к типу преобразуется

Дабл лол.

НЛО прилетело и опубликовало эту надпись здесь

второй закон термодинамики утверждает мутабельность мира

Второй закон термодинамики он же про тепловые двигатели, энтропию и т.п.. Как из него следует мутабельность мира?

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

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

всегда было так: Логика - это философская дисциплина, из которой выросла наука целиком, но и не только наука

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

Математика появилась на 2500 лет раньше, чем философия

Откуда инфа?

что такое тип в программировании? Это сущность отделяющая одно значенин от другого

Я бы сказал, наверное, "отделяющая одно множество возможных значений от другого". Иначе непонятно, какой тип отделял бы int a = 1 и int b = 2, а так прям хорошее определение.

НЛО прилетело и опубликовало эту надпись здесь

Почему Логику вдруг узурпировала математика?

Потому что подразумевается математическая логика, которая слегка отличается от богословской или ещё какой.

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

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

что такое тип в программировании? Это сущность отделяющая одно значение от другого.

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

Куски достаточно глубокой теории лежат даже тогда, когда вы обсуждаете ковариантность или контравариантность аргументов и возвращаемых значений ваших фукнций в вашей иерархии ООП-классов, или ко/контравариантность дженериков.

Но при чём здесь теория типов из математики? Ага, снова ни при чём!

Только в том случае, если вы с ней незнакомы. Но это больше говорит о вашем уровне знаний, а не о теории типов.

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

Лолшто.

Алгоритм — это практически по определению то, что может быть запрограммировано на тьюринг-полном языке.

Соответственно: математика - язык, на котором та или иная наука МОЖЕТ выражать свои выводы. А может этого не делать.

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

Другое дело, что программирование — не наука, и программированием можно успешно заниматься (сиречь делать работу и получать за неё деньги) со школьным знанием математики. Просто неплохо при этом осознавать границы своего знания, а не рассказывать «да это всё не может быть нужно и не имеет никакого отношения».

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

Не все алгоритмы обязаны завершаться на любом входе. Не понимаю вашей претензии.

НЛО прилетело и опубликовало эту надпись здесь

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

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

Автор, вероятно, имел в виду математическую логику

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

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

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

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

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

А вот для разработки онлайн магазина

Статья называется не "Для разработки онлайн магазина нужна математика?")) Вопрос несколько шире.)

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

Статья называется не "Для разработки онлайн магазина нужна математика?")) Вопрос несколько шире.)

На самом деле он как раз уже. Программирование – настолько широкая поляна, что обобщённый вопрос: нужна ли [каждому] программисту математика, просто не имеет смысла. Есть задачи, для которых нужна, и те, для которых нет. Вторых таки, думаю, прилично больше. Поэтому и вопрос нужно задавать применительно к конкретной (узкой) области.

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

Тут проблема, а где и как провести границу? Вот по-вашему, много ли математики надо для разработки веб-браузера?

НЛО прилетело и опубликовало эту надпись здесь

Тут проблема, а где и как провести границу?

Это естественная граница, её не надо "проводить". Математика либо нужна, либо нет – определяется постановкой задачи.

Вот по-вашему, много ли математики надо для разработки веб-браузера?

Веб-браузер – весьма сложный, многокомпонентный проект. Скажем, для реализации криптопротоколов – много. А для функции вывода страницы plain text – наверное, нисколько.

НЛО прилетело и опубликовало эту надпись здесь

а здесь «много-нисколько» очень относительные

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

НЛО прилетело и опубликовало эту надпись здесь

Веб-браузер – весьма сложный, многокомпонентный проект. Скажем, для реализации криптопротоколов – много.

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

Вот я пилю webrtc

Весьма непростая задача. Моё уважение.

UPD: вот кстати, это же прекрасная иллюстрация по теме дискуссии. У нас на сайтах видеозвонки под капотом используют как раз тот самый webrtc. И для его использования нам математика не понадобилась совсем. А теперь давайте прикинем "кардиналитет": сколько человек эту либу пишут и сколько используют.

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

тоесть монитор это пространство 1 и так далее и так можно что угодно разобрать

Самый интересный и нужный вид математики, который я изучил в универе - это вычислительная геометрия (Шеймос Препарата). Я помню прочитал ее запоем на каникулах за неделю.

Зачем каменщику сопромат, а водителю такси термодинамика?

Очень справедливое замечание, которое отсылает нас обратно к проблеме определения термина “программист”.

Software engineer, а инженерия - в основном прикладная дисциплина. Если какой-то раздел математики нужен для решения определенной задачи, то он изучается и применяется, если нет - то сугубо если есть личный интерес.

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

Аксиомы - они бывают разные. Соответственно, и аксиоматические подходы. Приведённые в данной статье разделы математики - все основаны на классической аксиоматике, с неконструктивными аксиомами. Но это не значит, что они "недостойны внимания программиста")).

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

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

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

Возможны в жизни и вполне могут иметь смысл ситуации, когда мы заранее не знаем, какой результат должна выдать программа

Я бы сказал, что полезны только те программы, которые вернут результат, который заранее неизвестен. Результатом может быть проверка нового способа вычислений, или проверка предполагаемого результата... да всё что угодно. "Вычислять известный результат" - это определённо никому не нужно.

Какая задача бы не стаяла, мы определённо заранее представляем, что получим в итоге - число, тип, или, внезапно, ТРАКТОР))). Но более того, вычислительный эксперимент возможен только есть алгоритм - конструктивное доказательство, что из начальных условий может быть получен ожидаемый результат.

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

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

Чертовски верная мысль.

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

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

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

Математика и высшее образование вообще меня сделали хуже, ИМХО.

НЛО прилетело и опубликовало эту надпись здесь

Вы:

вашего уровня

в школе

пятнадцатилетний

Я:

высшее образование

чем больше нужно

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

НЛО прилетело и опубликовало эту надпись здесь

Да не, почему? Это важная часть общения и самоактуализации, так что я не против, конечно! Просто, как говорится, употребляйте ответственно.

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

Если ты не заметил, последние 30 лет в Западном мире, чем более полезную для общества работу делает человек, тем меньше он получает. См. учитель и спекулятн, мат. статистик в народном хозяйстве и "квант" (это тот же статистик в хедж-фонде). Это не проблема работы, не проблема человека - это проблема общества, дни которого сочтены.

Объективная польза обществу не обязана совпадать с моими (или твоими) представлениями о прекрасном.

Интересно, на Западе или в Китае такой вопрос вообще живет в умах масс? У нас это выглядит как наследие 70-80 годов, когда понятие "программист" было тождественно понятию "математик". Просто компьютеры были большими и стояли на соответствующих кафедрах. С тех пор разделение труда прям сильно углубилось, а миф остался. А когда-то вообще не было понятия "математик". Были просто "ученые" или "философы", которые просто занимались всеми доступными науками своего времени. А потом опять-таки разделение труда углубилось многократно.

Современная академическая математика отвратительна! Она нарочно дистанцируется от реального мира и сконцентрирована больше на самолюбовании. Совершенно абсурдный культ «царицы всех наук» и претензия на самостоятельную значимость пресекают большинство попыток познакомиться с ней поближе.

Математика это наука об отношениях между математическими объектами. При этом, первичные объекты постулируются, а отношения – доказываются.

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

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

Как говорят философы: «Если, какая-та истина является абсолютной, то и противоположное утверждение тоже является абсолютной истиной».

Насчет, нужна / не нужна математика программистам? Здесь тоже оба утверждения будут «абсолютными истинами». Вопрос надо ставить по другому, что даст математика программисту?

Главное, она дает возможность решать задачи более масштабного уровня. Например, простым программистом вы можете устроиться в какую-нибудь бедную веб-контору «Рога и копыта», а, с фундаментальным образованием, вы можете программировать полет космического аппарата «Луна-25» (но с хорошим знанием физики Луны, чтобы не угробить этот аппарат, особенно на фоне успешного индийского запуска, как это реально произошло) либо моделировать разработку сверхжаростойких материалов для «Орешника». Плюс, токамаки, синхрофазатроны, теоретическая физика, ИИ и много чего еще.

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

Так что изучая / не изучая математику, вы просто выбираете свое направление развития, в частности, в программировании. Обычная проблема выбора, коих много в этой жизни, не более того…

Математика это наука об отношениях между математическими объектами.

В этом весь цимус абстрактной математики

"Цимус" и "практическая ценность" - очень разные понятия. Математики изучают отношения между "математическими объектами", которые они же и придумывают безо всякой мотивации! Точнее, может быть мотивация и была, и даже польза от этих абстракций может обнаружиться позднее, но 99% всей математической литературы целенаправленно игнорируют само понимание "полезности". Из-за этого чтение математической литературы вызывает боль у нематематиков.

Поступайте на специальность «математика», на мехмат МГУ

Это, конечно, здорово, но для меня уже поздновато... Зато за плечами есть физмат ВГУ)) Поэтому в математике ценю прежде всего практическую ценность, а не абстрактный "цимус"))

Обычная проблема выбора, коих много в этой жизни, не более того…

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

Математики изучают отношения между "математическими объектами", которые они же и придумывают безо всякой мотивации! Точнее, может быть мотивация и была, и даже польза от этих абстракций может обнаружиться позднее, но 99% всей математической литературы целенаправленно игнорируют само понимание "полезности". Из-за этого чтение математической литературы вызывает боль у нематематиков.

Математика ведь бывает разного уровня. Это может быть серия книг, типа: «Занимательная математика», вполне доступная для школьников или там, журналы, вроде «Квант» и т.п. Ну, а если вы беретесь сразу за академическую литературу, то да, могут быть проблемы с изучением. Более того, даже студенты математики могут не выдерживать. Так, на моих глазах, один парень, со второго курса математики, в МГУ, реально сошел с ума. Его отвезли в Кащенко, потом выписали. Он попробовал восстановиться, но «крыша поехала снова» и ему посоветовали уйти из математики, чтобы сохранить себя.

Насчет «полезности». Согласен, математики не оперируют этим понятием, по крайней мере, абстрактные. А прикладную математику преподают и на инженерных специальностях, в технических ВУЗах, как очень полезный предмет.

Что касается «мотивация», то она одна – логическая полнота и непротиворечивость. Системы аксиом, ведь, достаточно произвольны. Изменение только одной из них приводит к новым теориям. Известный пример это рождение геометрий Лобачевского и Римана из «школьной» геометрии Эвклида, путём вариации только одной аксиомы о параллельных в разные стороны.

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

Тем не менее, потребности современной науки дают толчок развитию математики в каких-то особых сферах. Например, я специализировался в МГУ на кафедре математических проблем оптимального управления. Могу сказать, что эта сфера была тогда только в начале своего развития и многих необходимых теорий, на тот момент еще просто не существовало. Скажем, когда я проходил преддипломную практику в Институте Нефти и Газа АН СССР, то, сформулировал там задачи по оптимальному извлечению нефти из безнапорных скважин, для которых еще не было математического аппарата решения. Поэтому, приходилось делать упор на численные методы, для решения полученных систем уравнений. И это довольно частая ситуация в матмоделировании реальных процессов.

Знаете, есть такой современный популяризатор математики как Алексей Владимирович Савватеев. Доктор, членкор, профессор МФТИ.

Вот он утверждает, что большинство людей в мире, как бы это не звучало по-расистки и дискриминационно, не в состоянии заниматься математикой. В школе примерно 20% учеников способны понять (не вызубрить) школьный курс алгебры. Дальше - меньше. В ВУЗах счёт идёт на единицы процентов.

Но не надо считать, что если человек профессионально занимается математикой то она вся для него понятна. Его слова - "Обычное явление - я открываю математический журнал, начинаю читать статью - и НИ-ЧЕР-ТА в ней не понимаю"

Его слова - "Обычное явление - я открываю математический журнал, начинаю читать статью - и НИ-ЧЕР-ТА в ней не понимаю"

У меня такое с чужим кодом 😁

НЛО прилетело и опубликовало эту надпись здесь

Да ну? Как запрограммировать квантовую механику, например?

Достаточно только захотеть))

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

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

По сути вся квантовая теоретическая физика по сути опирается именно на компьютерные вычисления.

Опирается? Возможно. Является? Точно нет. Квантовая механика появилась, когда компьютеров ещё не было.

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

Как из этого следует, что программирование лучше подходит для описания квантмеха, чем математика?

Я отвечал на вопрос "Как запрограммировать квантовую механику?"))

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

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

то, что вычислительных ресурсов для обсчёта большого количества сущностей сейчас мало - это дело десятое

А по-моему, не десятое, а нулевое, в смысле, первое :)

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

Так и не дождались. ИНС это жалкое подобие одного биологического нейрона. А для моделирования жалкой сотни биологических нейронов потребовался суперкомпьютер.

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

НЛО прилетело и опубликовало эту надпись здесь

уже сейчас эта штука знает куда больше вас

Как эксперт она неплохо работает, да, только мозг человека чуден не этим. Нейронка же по сути даже не понимает, что несёт.

Праввила отношений этих классов возьмутся откуда?

Берёте язык вроде Qimaera... А, тьфу ты, там опять математика, и даже теория типов и прочее.

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

Я вообще здесь никаких проблем не вижу от слова «совсем». «20%» – это вы еще хорошую цифру назвали. Я, вот, имею классическое советское образование и не сказал бы, что в СССР с этим было лучше. Но, что из этого следует?

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

В школе, мне учительница математики говорила: «Я тебя не буду вызывать к доске. Ты знаешь математику лучше меня. А свою пятерку ты получишь». Но, после восьмого класса, я решил поступить в техникум. Не поступил, потому, что не хватило какой-то бумажки. Чтобы не возвращаться в школу (так как мне там очень не хотели отдавать документы, как способному ученику), я попёрся в училище (ПТУ). Там вообще было кино. Математику изучать не хотел абсолютно никто. Бедную преподавательницу доводили до истерики. Она, со слезами на глазах, говорила, что для нее смысл работы – учить математике меня одного. Такое не забывается.

Тем не менее, я понял, что училище – это тупик в моем образовании и решил, через год, вернуться в школу, в десятый класс. Но в школе мне сказали: «Ни фига! Пойдешь в девятый. Мы не знаем, где ты болтался год (ибо нормальных документов в училище мне не дали)». Это меня обидело и я ушел. Куда мне было идти? Решил пойти в вечернюю школу и искать работу. Вечерняя школа это вообще полный ужас (в переводе на литературный язык) для меня. Занятий – три раза в неделю по паре часов. Преподавание – чисто символическое, только для галочки. Не, думаю, так деградировать я не готов, вернусь, лучше, в девятый класс, с потерей года.

В школе, меня радостно приняли: «Дурак! Зачем ты ушел? Мы тебя только попугать хотели! Естественно, пойдешь в десятый класс. Но, при условии – ни одной тройки. Иначе, отчислим!». Отчислили бы меня вряд ли, но проверять не стал, троек у меня не было.

Это я к тому, что серьезная математика, действительно, доступна далеко не всем. Но, этого и не надо!

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

Смотрите, математику, профессионально, могут освоить немногие. Но, набор на эту специальность – очень высокий. Соответственно, конкурс очень низкий. У нас было 1.4 человека на место. Однако за неуспеваемость вылетали, даже участники международной математической олимпиады и победители всесоюзной.

О чем это говорит?

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

Вот она «соль» всего! Математика очень перспективна в СССР / России. Программирование, на фоне абстрактной математики – «Детский лепет на лужайке!». Имея диплом математика МГУ, вы легко можете заняться чем угодно, начиная от теоретической физики и заканчивая матмоделированием всего и вся. Одной левой – отроете дверь в высокотехнологичные госкорпорации, военные и оборонные предприятия и т.д. и т.п. Да, при этом вы станете «не выездным», как тут критиковали. Но это разумная цена. Я вот, лично, люблю Францию, но предпочитаю ее любить издалека. Туда я не хочу ехать даже туристом. Пускай она, лучше, присоединяется, третьей, к Союзному Государству России и Белоруссии. Иначе, без России, красивая страна деградирует до уровня Украины.

"Обычное явление - я открываю математический журнал, начинаю читать статью - и НИ-ЧЕР-ТА в ней не понимаю"

Ну и что из того! Зачем разводиться на эмоции? Мы, студенты – математики, начиная с четвертого курса, после распределения по кафедрам, перестали понимать друг друга в профессиональных вопросах. Но, если сильно надо, прочитаешь пару специализированных учебников и въедешь в тему…

Я привел не своё мнение. Но вот ещё вспомнилось фраза что "из-за того математику в вузах читают практически всем подряд, и на первых курсах, теряется огромное количество потенциальных специалистов, которые физиологически не в состоянии понять ту математику, что им объясняют". Это не его, точно. И не моё. Но тоже какого-то преподавателя.

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

ВУЗ, даже обычный, это определенный уровень. И, пока у нас нет обязательного высшего образования, то, думаю, снижать здесь планку особо не стоит. Тем более, что она и не особо высокая. В данном случае я имею в виду свой первый ВУЗ - Политехнический институт. Оттуда, если кто и вылетал, за неуспеваемость, то считанные единицы и то, по собственной глупости (пьянки, гулянки, правонарушения). Это только в МГУ с нас требовали по полной программе. И опять же, кто вылетал, в первую очередь? Студенты с большим самомнением, которые изначально имели высокий уровень подготовки, например, выпускники ФизМатШколы при Университете. Ибо материал давали в таком темпе, что любые твои начальные преимущества очень быстро обнулялись. Если вовремя не спохватился – пиши «труба». А середнячки, которые «звезд с неба не хватали», но пахали каждый день, не пропуская лекций и семинаров, вовремя, делающих «домашку» и курсовые, у тех шансов выжить было больше.

Опять же, сравнивая оба ВУЗа. Чтобы сдать зачеты и экзамены «на стипендию», в первом ВУЗе мне достаточно было начать серьезно учиться, максимум, за месяц до зачетной сессии, т.е., первые три месяца в семестре я мог «валять дурака» (а, по факту, подрабатывать на стороне). Зато, в МГУ, про подработки нужно было сразу забыть, а, относительно, расслабиться можно было, максимум, первые две недели в семестре. Потом, если не возьмешь себя в руки, то вылетишь как пробка, со стопроцентной гарантией.

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

А так, учась в Университете, я постоянно носился с идеями реформы образования. Даже умудрился поговорить на эту тему с министром образования СССР, на встрече со студентами МГУ (вообще, разные знаменитости любили нас баловать, даже с Б.Н. Ельциным общался накоротке). Министр, в итоге, пообещал организовать выпуск академического журнала «Математическое моделирование». И, да, свое обещание выполнил, а я получил первые выпуски этого журнала.

Только есть нюанс, в «бедной конторе» з/п будет выше.

Отличный пост!) Но вот про царицу наук - мне всегда казалось, её так называют, потому что математика есть в любой науке. И любая наука не может без неё существовать.

Спасибо! У Салтыкова-Щедрина был такой рассказик... Там генералы не смогут прожить без мужика, а вот мужик без них вполне может)). Это я кто тому, что никакая наука не может прожить без инструментария для решения задач. Но именно физика (и её разделы, вроде химии, биологии, социологии, экономики и проч.)) "отдаёт приказы" математике, но никак не наоборот!) Математика нужна всем как "мужик", который может всё, а не как "генерал"))

у Платона и Пифагора наоборот(на сколько помню), человек может отрицать математику, но она всё равно есть, Евклид и вплоть до Ньютона расширили науку и дополнили новыми моментами, вобщем математика мать наука, как не крути

Любой спор всегда надо начинать с определения того, одинаково ли сторонами понимаются термины. Если неодинаково, то корректный спор невозможен. Это касается и термина "программист". В моем (старомодном понимании) термин "программист" намного отличается от современного понимания. В моем понимании это вообще не профессия, а скорее призвание.

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

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

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

Нужно сначала дать определению термину "математика".

А то в одном американском сериале "математик" - это тот, "кто любит цифры".

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

А так - "математика" в смысле правил сложения дробей - не нужна, конечно.

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

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

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

Тоже хотел написать, что всё зависит от определения термина "математика".

Автор определяет математику, как набор правил и методик. И предлагает некоторые разделы этих правил и методик программистам.

С другой стороны, любой язык программирования - это тоже набор правил и методик. И вот есть Python-программисты, есть PHP-программисты, есть Java-программисты. И тут выхожу я и говорю: "Знаете, ребята, вам всем, вообще-то, надо бы ещё в довесок знать C++". И найдутся те, кто будут со мной согласны, а также те, кто не согласны.

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

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

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

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

полигоны, точки, линии, модельки, тайлики, всё это работа с пространством

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

математика в базе комплектом целым блоком для 3д и 2д даже интересна, если это конечно нужно, если это действительные задачи, которые будет решать человек ему рано или поздно придётся вникнуть в каждую формулу в частности, потомучто если реализовывать математику её придётся отладить - понять, проверить, привести к коду, воспользоваться ею и понять что она правильно работает

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

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

Зато я знаю и умею применять много правильных инженерных методов.

В общем, не все так однозначно.

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

А вот вы, судя по описанию, обладаете математическим мышлением. А кубик Рубика 3х3х3 собрать самому за 5 минут, не зная инструкции, - это надо быть чуть ли ни гением. Сейчас есть кубики 2х2х2 (на Озоне по-дешёвке) - это уже более выполнимо.

Ну он не инструкцию читал а сам разобрался, с его слов. Не до фанатизма скоростное.

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

Возможно, вы имеете в виду математиков, которым это программирование нахрен не сдалось. Если взять, например, тех, кто занимается написанием видеоигр или computer science, то у них с кодом всё ОК. А математика там везде.

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

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

НЛО прилетело и опубликовало эту надпись здесь

Есть такое дело.

А программировать вы начали в школьные годы или уже потом? Так-то кубик Рубика собрать 3х3х3 без инструкции - это не хухры-мухры....

Программировать я начал в школьные годы.

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

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

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

Зачем вдруг? Программа – это (к моему счастью) строго линейная последовательность символов. Вот блок-схему или uml-диаграмму я уже очень плохо воспринимаю, хотя могу нарисовать. А 28 закрывающих скобочек от 29 в Лиспе я вполне хорошо отличаю :)

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

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

Я не представляю себе работу с программой как “крутить-вертеть”. Скорее, как рассматривание с лупой отдельных частей. А также у неё, помимо статического представления в виде строки символов, есть динамика во времени.

Мы как-то, например, в одном обсуждении тут с неким человеком заметили, что он рекурсию себе представляет в пространстве, а я во времени.

Головоломки я многие хорошо решал. Логические задачи, операции со словами и с числами, и вообще всё что построено вокруг текста.

Это, вроде, называется аудиальным типом восприятия.

А что, ИИ хуже разбирается в математике, чем в программировании?

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

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

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

Всё остальное это из разряда желательного, и список желательного очень динамичен :)

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

Да, разумеется. Эти вещи человек может усвоить просто из повседневной жизни.

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

Он может запомнить какие-то логические конструкции. Но не понимать их.

Может и понимать, если с умением обобщать всё в порядке.

Сталкивался с с мнением что большинство не может.

А потом вот как поняли? А потом поняли теорию игр, и то, что идиотом в некоторых ситуациях быть выгодно?) и вот тогда вообще ничего не поняли?)

Ну за последние годы ведь не сложно было это понять 😁

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

Да, на аксиоматике теории множеств построено 99% всей математики, но это "унылое легаси")) Теория множеств неконструктивна, и мало чего практически полезного от неё можно получить.

Поэтому считаю, что для программистов теория типов значительно важнее, чем теория множеств.

Без знания теории типов можно писать программы, а без знания теории множеств - сомнительно.

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

Первые программы пишт уде в школах

Да.

вообще безо всяких знаний

Нет. Как минимум основы логики и арифметику уже знают.

Знания теории множемтв не требуется

Удачи написать сколь-нибудь полезную программу без понимания операций над множествами и отображений.

основы логики
понимание операций над множествами и отображений

Ничего этого школьники не "знают". И вполне могут программировать какие-нибудь "интернет-магазины".

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

Понимать, что такое "тип" и "функция" куда важнее программисту, чем "множество" и "отображение".

Ничего этого школьники не "знают"

Если не знают, то и программировать не могут.

Понимать, что такое "тип" и "функция" куда важнее программисту, чем "множество" и "отображение"

Отображение и функция это по сути одно и то же, держу в курсе.

Но инерция мышления и накопленное легаси до сих пор тормозят развитие математики.

Ещё бы понять, каким боком это к программированию...

НЛО прилетело и опубликовало эту надпись здесь

Чтобы программировать никакие теории из математики знать не требуется

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

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

НЛО прилетело и опубликовало эту надпись здесь

Думаю, что однажды на уроках математики детям будут объяснять: множество - это... представьте массив из языка программирования. Вот это множество!

Какое ужасное объяснение. В ответ дети (фантастически представим, что они знают, что такое массив) скажут: "аааа, понятно! множество это непрерывный набор ячеек памяти!"

Самодостаточный

Нет.

Если не знают, то и программировать не могут.

Могут, не зависимо от моего или вашего мнения))

Отображение и функция это по сути одно и то же, держу в курсе.

Спасибо. Однако определение функции отличается в разных разделах математики. Я же имел ввиду "функцию" не в теории множеств, конечно, а скорее в лямбда-исчислении.

Ещё бы понять, каким боком это к программированию.

Изо всех сил стараюсь быть понятым)) Вот вы сейчас убеждаете, что программистам нужна теория множеств. Я же вижу причину этого в инертности мышления. Не вашего, но "научного сообщества". Оно большое - инерция огромная. Не смотря на все неудобства теории множеств на практике, большинство людей по-прежнему ставят её во главу угла.

Могут, не зависимо от моего или вашего мнения))

Такое невозможно в принципе.

Покажите хоть одного реального человека, который не в ладах с логикой и пишет при этом программы.

Я же имел ввиду "функцию" не в теории множеств, конечно, а скорее в лямбда-исчислении.

Лямбда-исчисление тоже не нужно, чтобы писать программы.

Вот вы сейчас убеждаете, что программистам нужна теория множеств. Я же вижу причину этого в инертности мышления. Не вашего, но "научного сообщества"

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

Покажите хоть одного реального человека, который не в ладах с логикой и пишет при этом программы.

формальной логике человек обучается автоматически, просто развиваясь в рамках социума. Это не имеет отношения к "знанию математической логики".

Лямбда-исчисление тоже не нужно, чтобы писать программы.

Об этом и говориться в данной публикации. Но "писать программы" и быть конкурентно-способным "программистом" - разные понятия.

там вовсю используются концепции теории множеств

"Вовсю используется" кем? Как раз пресловутым "научным сообществом". Но вовсе не потому, что это самый удобный способ описания, а просто потому что так они привыкли.

Это не имеет отношения к "знанию математической логики"

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

Но "писать программы" и быть конкурентно-способным "программистом" - разные понятия.

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

"Вовсю используется" кем?

Программированием как таковым.

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

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

Я почему-то думаю, что это будет дико уморительное зрелище.

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

формальной логике человек обучается автоматически, просто развиваясь в рамках социума.

Да вы неудержимый оптимист, батенька! У вас, наверное, и трактористы в полях зарождаются, как мыши. Только из мамы вылез, побегал, подрос, и на трактор - никакая 7летка не обязательна. Так?

А что такое "тип" и "функция" без теории множеств?

НЛО прилетело и опубликовало эту надпись здесь

А что такое тип и функция в программировании?

НЛО прилетело и опубликовало эту надпись здесь

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

А что такое "класс"?

Как только вы уберёте все порочные круги в своём определении, то останетесь при множествах переменных и множествах их значений.

НЛО прилетело и опубликовало эту надпись здесь

Ну так изложите альтернативно, близко к миру.

Пока что вы написали, что тип – это класс. Встаёт тогда вопрос, что такое класс.

Вы либо можете пойти чисто синтаксически, как авторы стандарта C++, и написать, что тип – это (условно) тело оператора typedef, но это, как и всякое синтаксическое определение, никак не объясняет назначение такого оператора.

Либо попытаетесь определить семантику типа, и выйдете на теорию множеств.

НЛО прилетело и опубликовало эту надпись здесь

программирование изначально описывает вещи для математики недоступные

пример — мутабельность

В чём недоступность мутабельности для математики?

НЛО прилетело и опубликовало эту надпись здесь

Не всё то, что вам неизвестно, отсутствует. Я уже давал рядом отсылку к вводному тексту на тему, например.

Вся механика - это про мутабельность: тело было тут, стало там. И прекрасно математика уже лет 300 справляется.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Что, кстати, подтверждает самое начало дискуссии - термин в логику пришёл из религии. :)

От сторонника ООП это слышать очень странно, смотрите: преобразования типов, так часто используемые в ООП, называются type conversion. Так и в религии conversion подразумевается как обращение в свою религию. То есть, ООП — это такая религиозная секта, которая стремится преобразовать всех прочих типов (уничижительное название для людей, не практикующих ООП, вроде «идёт какой-то хмурый тип») в свою веру.

А если посмотреть отладчиком на содержимое RAM, и то байтики, и это. И нафига усложнять?

"А вот это правильный вопрос"))
Посмотрите тут, или в более специализированных источниках.

То что Вы знаете ответ, я не сомневался. И сам тоже немного в курсе.

Можете пояснить, какого уровня теорию множеств вы считаете необходимой для написания программ?

Как минимум, понимание операций над множествами и отображений.

Что значит «понимание»? Интуитивное понимание операции объединения или пересечения двух множеств, как с кружочками на диаграммах? Интуитивное понимание инъективной функции? Умение построить ультрафильтр на булевых решётках?

Я код начал писать где-то в 10-11 лет, и лет в 13 уже писал даже что-то осмысленное и полезное не только мне. Понимание теории множеств у меня было не более чем интуитивное. Что я потерял?

Интуитивное понимание операции объединения или пересечения двух множеств, как с кружочками на диаграммах? Интуитивное понимание инъективной функции?

Да.

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

У нас есть только один интуитивный интерфейс - сиська. Хотя и ему приходится учить.

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

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

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

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

Считаю, что вот это

а с другой стороны, делают какую-то работу скучной

даёт куда больше минусов, чем вот это

знакомство с высоким, с одной стороны, даёт возможности что-то заметить там, где другой пройдёт мимо,

Но это, конечно, под влиянием моего личного опыта, так что YMMV.

Но это, конечно, под влиянием моего личного опыта, так что YMMV.

Лучше горькая, но правда, чем сладкая, но ложь. Нет, мне ближе позиция Ремарка, чем Юнгера.

В общем, это одна из установок.

Ложная дихотомия (или аналогия), ИМХО.

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

Все норовят ассоциировать типы с множествами, а это приводит только к когнитивному диссонансу.

Да нет, понятно всё, никакого когнитивного диссонанса.

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

Конечно нужна!

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

  • Программисты часто сталкиваются с логическими операциями, такими как булевы выражения, операторы и их комбинации, что связано с математической логикой.

  • Если программист работает с 3D-графикой, ему понадобится знание геометрии, линейной алгебры и матриц для преобразований, освещения и рендеринга объектов.

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

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

  • В процессе разработки программного обеспечения может понадобиться оптимизация вычислений, что связано с математическими методами, такими как линейное программирование или теория игр

я слышал что можно не зная на Анриале делать игры ) но не проверял

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

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

Мое мнение, автор уходит в теоретические дебри, так только оттолкнуть можно от темы. Причём вместо пояснений, отсылает к литературе...

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

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

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

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

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

Программисты разные бывают. Кто-то алгоритмы программирует, а кто-то использует готовые библиотеки.

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

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

есть даже цитата, без проблем в коде нету роста, и задача если понимать почему она интереса максимальна по сложности, даст толчок и даст опыт, наверно )

вместо вопроса: Программисту нужна математика?

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

Насколько мне кажется сейчас для программистов главное знать правильные слова, типа:

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

Современная академическая математика отвратительна! Она нарочно дистанцируется от реального мира и сконцентрирована больше на самолюбовании.

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

Хотя в тоже время программисты же как-то справляются, как пример нормальной записи формул https://scikit-learn.ru/stable/modules/generated/sklearn.metrics.DistanceMetric.html "Metrics intended for boolean-valued vector spaces".

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

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

вообще включить в базовый школьный курс :)

Оно уже там, причём по-моему лет 20, а может и больше.

Наверное у вас была хорошая школа. В остальных стали вводить некоторые полезности только недавно:

В 2024 году в российских школах ввели предмет «Вероятность и статистика».

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

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

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

Нужна не сама математика, а осознания своих возможностей в плане обработки информации, значения ошибок, "ощущения алгоритма", если можно так сказать, которые она дает. Люди без должного образования в решении задач скорее полагаются на "brute force". Да, задачу в Jira они закрыть могут, но поддерживать их продукт зачастую сложно.

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

Можно не задаваться риторическими вопросами, а нарисовать граф зависимостей. Всем, кто отвечает за различные оптимизации высоконагруженных распределеных систем, хорошо бы разбираться в теории вероятности (чтобы не было тезисов о том, что "три ноды одновременно из строя не выйдут вот вообще никогда"). Современный компилятор без сильной алгебры даже понять может быть сложно. ML без матана тоже далеко не зайдёт. 3д движок без хороших знаний вычислительной геометрии, да можно конечно писать, но нужно ли? Обработка сигналов (видео, аудио), вот и смотрим.

Вот и остаётся вопрос, а что можно сделать без математики вообще? Энтерпрайз ковырять, джейсончики перекладывать, файлики копировать. В общем пока тоже работа найдётся, острой проблемы нет.

НЛО прилетело и опубликовало эту надпись здесь

Лексер, парсер, немного теории категорий, ну или совсем много, если оптимизации (скорости выполнения кода или объёма) или мета-программирование входит в тз языка.

НЛО прилетело и опубликовало эту надпись здесь

Где-то что-то на уровне turbo Pascal как-то так и было.

Мне очень интересно, откуда у вас вылезет теоркат в разработке оптимизирующего компилятора императивного ЯП?

Даже для функциональщины для оптимизаций вроде «композиция катаморфизма F-алгебры и стрелки той же алгебры при определённых условиях выражается единым катаморфизмом» хватает совершенно базовых определений и практически школьного понимания универсального свойства (даже конусы строить не надо!), а применения всякого чуть более хардкорного теорката (codensity monad для функтора там, которая строится как right Kan extension для этого функтора вдоль него же) вполне описывается практически без теорката.

откуда у вас вылезет теоркат в разработке оптимизирующего компилятора императивного ЯП?

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

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

НЛО прилетело и опубликовало эту надпись здесь

А остальные преобразования, конечно можно выполнять и без теорката, но не превратится ли это просто в какой-то набор невнятных эвристик?

Ровно в это и превратится. Посмотрите любой промышленный компилятор вроде llvm или gcc.

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

Публикации в формате: заголовок: «Всех под одну гребенку?», содержание: «Ну, наверное, не стоит всех стричь под одну гребенку!» пусты по своей сути.  Формального повода поругать автора за категоричность нет, обсуждать нечего, но при этом в камментах  бурные философско-этимологические дискуссии. ))

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

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

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

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

Помимо различных оффтопиков немало людей высказало своё мнение и по основной теме. Да и флуд в комментариях начинают не под каждой публикацией. Кажется, хоть немножко объективности в таких доводах есть))

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

"Мнение" Алисы мне кажется более взвешенным, кратким, не вызывает желания спорить, на статью не тянет, но будет кому-то полезным: "Да, математика нужна программисту. Она развивает память, мышление, концентрацию внимания и другие важные навыки. Математика лежит в основе алгоритмов, комбинаторики и анализа данных, которые используются в программировании. Уровень математики, необходимый для программирования, зависит от специализации и отрасли, но базовые знания математики важны для всех программистов. " ))

Нужна вам дрель? Зависит от того, нужно ли что-то сверлить.

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

А что является критерием "наглости"? Для проверки истинности ведь нужны хоть какие-то аксиомы - какие тогда пройдут этот фильтр?

Мой фильтр проходят только конструктивные аксиомы))

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

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

Конструктивную математику придумал не я, но целиком и полностью согласен с её аксиоматикой.

НЛО прилетело и опубликовало эту надпись здесь

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

Но это уже оффтопик. Конструктивная математика - это не какая-нибудь "псевдонаучная альтернативщина". При желании всегда можно найти в интернете все интересующие подробности.

НЛО прилетело и опубликовало эту надпись здесь

'за' или 'против'

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

Но очередной раз порекомендую вам обратиться к более квалифицированным источникам, чем просто флудить)

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

Согласен, для меня вообще термин "программист" почему то ассоциируется с Васей из соседнего подъезда, который винду за 500 рублей переустанавливает. Тут уж надо смотреть более узко по специальностям, фронтендеры, бекендеры, дата сайнтисты и т.д

Всем нужна математика).

Всякое случается... Через 40 лет после получения высшего образования, вдруг потребовались сплайны... А так да, сложность алгоритмов, матлогика, булева алгебра - наше фсё. Ну и сплайны, как оказалось :-)))

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

Я программист , но математику терпеть не могу , у программиста должна быть логика и хорошая фантазия, а все остальное это так, плюсик ))

А логика - это раздел чего ? Пропозиционная логика - часть курса дискретной математики, если что :) А потом начнутся логика второго порядка, высшего порядка (доказательство кода и моделирование систем на ней основаны, а кое-где подключается вышка лямбда-куба - исчисление конструкций, а то и вообще HoTT/кубики) .

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

Да не из логики наука вылезла, а из философии и алхимии, логика тут была на вторых ролях, ибо объясняла чуть менее, чем ничего. А религия - от безграмотности и желания управлять массами.

А, то есть, существует "просто логика", как некая универсальная сущность? :)

Вынужден разочаровать: логика состоит из мат. логики и силлогистики, замещенной матлогикой и логикой Лукасевича (введением неоднозначностей).

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

Не совсем понятно желание отвергать математику, являющуюся мощным инструментом и первым помощником в разработке софта. Ниасилятор, што ле? :)

НЛО прилетело и опубликовало эту надпись здесь

Программирование - и есть математика, ибо является формальной записью алгоритмов и структур данных, изучаемых в курсе дискретной математики и иных дисциплин, являющихся частью математики. Что самое странное ,программирование и было изобретено математиками: Тьюрингом, Черчем, Клини, Карри, Генценом, Говардом и прочими. Но фантазировать никто не запрещает :)

НЛО прилетело и опубликовало эту надпись здесь

Выпил - отключи ингтернет (ц)

Ну тут товарищ вечно молодой, вечно пьяный.

Вопрос дефиниции "науки".
Ни логика ни философия ни математика не являются науками, если под наукой понимается сбор, анализ и систематизация фактов.

У этих трёх зверюг нету предмета который им порождает факты. Логика это способы оперирования утверждениями (математическая логика это формальные системы с аксиоматиками и разными, Аристотелева неформальная потому полна парадоксов), но сами утверждения логикой не порождаются и мир не состоит из утверждений. Философия это мета-аксиоматика для науки это в основном каркас построения аксиоматических баз, ещё философия лазает в этику и метафизику (сейчас последнее становится модным из-за ИИ и интереса к сознанию), но предмета у философии тоже нет факты это вещь упрямая, наблюдаемая, воспроизводимая и собираемая учёными :) Математика это аппарат для описания сложного и причудливого многообразия взаимодействия наших модельных представлений (зажатых в аксиоматике и языке) которые взаимодействия наблюдаемые факты порождают.

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

мне как человеку с крайне нематематическим складом ума (источник моих комплексов) математика необходима, не из за конкретных знаний а скорее как способ организации того абстрактного бардака который возникает в моей голове при изучении новых вещей или создании чего то более менее сложного

и то не особо помогает, мой мозг крайне недоволен когда сталкивается с абстракциями и логикой

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

Кратко и ёмко.

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

Менеджеру нужно знание родного языка? «Правильность» ответа существенным образом зависит от контекста. Чтобы устроиться на работу достаточно надувать щеки на собеседовании и можно обойтись жестами и мычанием. Если же менеджер стремится повышать свою квалификацию, то ему нужно копать глубже. Но преподавание родного языка – отвратительно. Это какое-то самолюбование! Оно дистанцируется от реального мира! Нужно преподавать «конструктивный язык».

НЛО прилетело и опубликовало эту надпись здесь

Требования математики с программистов - оно как предел. Стремится к нулю
Если ты безопасник, ты должен знать весь мат. анализ, криптографию и теорию чисел
Если ты геймвед, ты должен знать всю физику и 1\2 мат анализа
Если ты фронт, достаточно знать циферки 0-9

Нужна, 5 классов школы

Мне в конце 90-х понадобилось на Перле закодить массив ссылок на массивы ссылок на массивы. Именно такой массив лучше всего подошел для реализации алгоритма одного проекта. Пару дней медитировал, пока эта конструкция не устаканилась у меня в голове. Без математического аппарата мне бы и идея такая в голову не пришла.

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

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

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

И ту же математику не обязательно знать, чтобы уметь.

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

Глубже понимаешь технологии. Если знаком с математикой, можно не только нажимать на «кнопочки» библиотек, но и понимать, как они устроены. Особенно важно в областях вроде AI, криптографии, анализа данных — без математики они очень быстро становятся чёрным ящиком.

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

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

Растёшь по грейду. На позиции синьора, тимлида, архитектора — приходится работать со сложными концепциями: от распределённых систем до ML-моделей. Там без крепкой теории быстро упрёшься в потолок, потому что задачи выходят за рамки «готовых рецептов».

Публикации