Так же можно парировать что в общем то программа в общем служит часто одной цели
Ваша утверждение базируется на рассмотрении одной программы. И оно очевидно. Каждая конкретная программа будет делать только то что в ней запрограммировано, одна цель (цели), и не более.
Я же рассматриваю все программы и математические теоремы одновременно. И на этом базирую различие между этими классами.
Все программы могут делать что угодно каждая по отдельности. У них нету базового закона для всех сразу.
В то время как в математике этот закон есть. Вся математика предназначена для одной цели. Нахождение закономерностей. Нахождение любых закономерностей где угодно. Многие "сумасшедшие" математики придумывают свои вселенные со своими законами и ищут там математические закономерности.
Как бы выглядела вселенная в которой п равнялось бы 4? И подобное.
Математика это слишком широкое определение и, как видно, для каждого свое.
Да. И современное программирование это тоже от веба до mobile, от эмбедит до софта, от геймдева до квантмеха и ещё куча всего.
Собственно получаем две огромные кучи которые тут и там начинаю приравнивать друг другу, т.к. начинают сравнивать частности.
Я же, в дискуссии, пытаюсь предложить варианты различий всей кучи. Опять же дискуссия ради поболтать, не более )
Ну это аксиома. Т.е. недоказательные утверждения. Они настолько логичны что не требуют доказательств. Вообще все теоремы доказываются на основании других теорем. А вот начало этой доказательной цепочки это как раз аксиомы.
И да вы не докажете ваш пример "коммутативность сложения" а по простому "от перемены мест слагаемых сумма не меняется" с точки зрения математики. Математика говорит так есть и всё тут. Опять же с помощью чисел вы можете доказать только какой то предел. Вплоть до бесконечности не получится.
Зачем тут бесконечная точность?
Про бесконечную точность я говорю исходя из того что математика предоставляет нам формулы. Которые оперирую переменными. Подставляй любое число (хоть бесконечность), и формула выдаст правильный ответ. Ну или должна выдать.
Программирование в свою очередь оперирует с конкретными числами. И предел точности работы программы будет всегда в пределе точности этих чисел.
Я просто декламирую отличие математики от программирования. А то тут в процессе дискуссии постоянно поднимается вопрос про их тождественности.
Вот я и ищу фундаментальные отличия.
Наверно это вырвано из контекста, но приведённая в данном виде вызывает некоторое недоумение.
Честно говоря я не уверен что на земле существует реальная программа доказывающая теорему. Ну т.е. последовательно выполнение операторов процессора.
Потому как программа это компьютер. А он работает с переменными конечной точности.
Математические доказательства никогда не оперирует числами, а оперирует абстракциями в виде переменных. x,y и прочее.
Все операции проводятся над этими абстракциями что бы получить в конечном счёте математическую формулу, которая может обеспечить бесконечную точность. Т.к. не оперирует цифрами, а абстракциями.
Кстати это ещё одно фундаментальное отличие программы от математики. Программа всегда будет выполнятся на процессоре и оперировать с переменными конечной точности.
Математика всегда будет оперировать абстракциями бесконечной точности. Т.к. точности как таковой у них и не будет. Нет чисел, нет точности либо точность бесконечная.
Процессоры не работают с абстракциями, они работают с битами.
Что то я дописался до того, что доказательство теорем с многостраничной записью это есть программа. Если рассматривать каждый шаг доказательства как шаг программы.
Уроборос какой то )))
Ладно добавим ещё одно фундаментальное отличие, но уже математики.
Любое доказательство теоремы, собственно любая математическая единица служит только 1 цели. Нахождение природной зависимости в числах. Фундаментального закона. Свойства нашей вселенной или вообще всех вселенных. Придумайте как сами это назвать.
Целью же программы может быть абсолютно любая. Или вообще без цели.
Можно долго спорить где и как пересекаются программирование и математика. С разных углов они либо похожи, либо одно и тоже, либо разные вещи.
Однако я хотел бы обозначить одну фундаментальную особенность чем программирование отличается от математики.
И это:
Как не странно результатом программирования будет программа.
И главная особенность программы — это то что она состоит из последовательно выполняющихся шагов.
Результатом математики будет теорема и следующая из неё формула.
Отсюда любой шаг программы — может быть как раз математической, формулой. Т.е. шаг может быть как раз той самой математикой.
Получается что программирование может включать в себя математику как шаг программы. В тоже время по этому принципу математика не будет является программированием.
Опять же шаги это как правило вызов готовых функций, в которых и реализована математика. Поэтому программист напрямую не работает с математикой а только с её результатами.
Это как например человек использует автомобиль, но это не делает его конструктором автомобилей.
И да. Оппонент сразу может придраться к моему определению математики. Мол простои использование теорем в качестве инструмента для получения результата. В данном случае такая писанина как не странно будет похожа на программирование. Только записанная на листе бумаге. Последовательное выполнение шагов с использованием формул теорем для получения конечного результата. Точно также как это бы делала программа.
Вы применили крайность. А крайности как правило не валидны.
Понятно что любой человек в той или иной степени оперирует каким то объёмом информации у себя в памяти. Иначе это и не человек вообще.
Вся разница в количестве и разновидности этой информации.
И программисту для выполнения работы требуется запредельное количество специфической информации. Это алгоритмы, коды, абстракции.
Так вот по моим наблюдением оперирование этой информацией для мозга чрезвычайно затратно. И если человеку не нравиться, т.е. нету дофаминовой поддержки, мозг сопротивляется максимально сильно.
И программисты со временем развивают свою нейросеть для работы с этой специфической информацией. Т.е. со временем, когда дофаминовая поддержка уже сводится на нет, мозг уже натренирован. и можно работать дальше без поддержки.
Вот вы привели другие примеры информации. Например есть люди которым легко даются языки. Или люди актёры, которые запоминают сценарий фильма, пьесы.
Они тоже тренируют свой мозг. И если это им нравится, то им легко даётся манипулирование информацией специфичного для себя класса.
Как я уже говорил много раз. Все способности — это желание изучать конкретную информацию. А уж что тебе нравится или нет — это уже матушка природа и батюшка геном решают.
Не знаю как это работает в голове. Но если долго работать над проектом где есть тысячи функций и если кликнуть в любое место проекта сразу будет понятно что и как тут работает. Видимо подгружается из памяти.
Одновременно в быстрой памяти смысла держать всё это нет. Однако пытаясь разобраться с алгоритмом в программе приходится одновременно держать в голове пару десятков функций. И в течении рабочего дня к этим десяткам прибавляются другие десятки, а уже ненужные выгружаются из головного кеша.
Часто находишься в состоянии когда в голову нужно загрузить ещё информации, но уже не можешь, смотришь на очередной код, а он расплывается перед глазами. После этого просто включаешь на пару минут какой нибудь развлекательный сайт. Даже не особо вчитывавшийся что там. Но это позволяет разгрузить кеш в голове. Потом переключаешься обратно на проект.
И да всё это относится к сложным проектам. В программировании есть куча задач линейных. Те же формошлёпства. Там подход линейный, мозг практически не загружается, и ты просто отдыхаешь на таких задачах.
С геймдевом вообще не пересекался, но со всем остальным наверно со всем.
Разве в геймдеве сейчас не рулят движки? Юнити там разные. Где игрописатели фактически только API движков дёргают.
Хотя если новый движок писать, то согласен там прилично математики, например туже физику земного притяжения описать. Полёт стрелы там и прочего. Или геометрию пространства.
Но разве это реализуют с нуля? Наверняка уже написано 100500 библиотек которые реализуют всю эту физику.
Я только знаю что делает алгоритм. Но как он это делает? Я пытался разобраться. Но просто прочитав это — я понял что этого не достаточно. И так как мне это не надо было просто бросил.
Мне была достаточна абстракция — подаю на вход числа, получаю на выходе.
А вот дальше эти числа уже использовались в вышестоящем алгоритме.
Который я уже реализовывал сам. И математики по моим внутренним убеждениям там не было.
Хорошо пусть будет логика. Да логику я использую всюду. Собственно программирование без логики не может быть. А вот без математики ))) Тут как раз и ведём дискуссию, может или нет.
Я это отношу как раз к математике. Однако я это использую в своей работе. Просто я беру функцию где реализована вся эта математика и просто пользуюсь результатами. И т.к. я сам не реализовываю эту математику — то считаю что я не пользуюсь математикой. Но получается что я пользуюсь только результатами математики ))) Как минимум мне надо знать о существовании таких алгоритмов и где о ни используются.
Опять же вы пишите что в соей работе используете мат анализ. Но реализуете ли вы алгоритмы этого анализа? Или просто используете готовые функции? Глупо писать свою реализацию cos() или sin(), когда можно просто вызвать функцию.
И так как в библиотеках есть практически всё, то в типичной программе нету математики. Только вызов функций. И архитектура программы.
Современные абстракции в программировании задрали процесс программирования слишком высоко. Туда где математики не осталось.
Жёсткая математика, нативная, будет только в чём то новом. Что крайне редко встречается и большинство программистов не встречают за всю свою IT карьеру.
Думаю этот вопрос не имеет смысла. Т.к. для его ответа нужно устанавливать какую то черту, до — программирование. После — математика. Опять же если эта не черта а широкая область, то в этой области это будет какая то химера — матепрограммировани или программатика ))
Шутка.
Получается что это чистая субективщина.
Но опять же изначально вопрос стоял — нужна ли математика для современного программиста. И на этот вопрос может ответить только опыт. Статистика.
Моя статистика мне показывает что я не помню когда я использовал что то из высшей математики в проектах. Я постоянно встречаю такое мнение.
Но проекты от этого не перестают быть сложными. Их сложность в абстракциях. Тысячи функций складываются в абстракции. Всё это нужно держать в голове и уметь ими манипулировать.
Это как с мозгом. Работа одного нейрона — примитивна. Не будем рассматривать биохимию нейрона как клетки. Алгоритмически нейрон примитивен. Есть куча дендритов и аксон. Суммарный сигнал на дендритах превышает уровень срабатывания нейрона, сигнал уходит в аксон.
Но миллиарды этих простейших автоматов строят такие абстракции — что весь человеческий мозговой потенциал до сих пор не может разобраться как это работает в целом.
Вопрос сколько времени нужно находится в состоянии когда мозг пухнет. Вот вы привели пример 2 дня.
У программиста такое состоянии собственно каждый рабочий день. Десятилетия подряд.
Поэтому я и писал — что неподготовленный человек на это не способен. А так же на это не способен человек которому не нравится программирование. Даже если ему предложить 1$ миллион и он будет напрягаться изо всех сил, ничего не получится.
Сужу по себе. Когда мой мозг не хочет вникать в проект как бы я не напрягался я только заработаю головную боль. Просто смотришь в код, пытаешься понять что было 5 минут назад, не помнишь и просто лезешь в какой нибудь youtube.
В такие моменты лучше просто день потерять. Выспаться хорошо. И стартовать сначала.
И кстати очень часто попадаешь в полосу, когда выжимаешь себя за день, ничего не сделал, а делать надо, следующий день такой же потому как вчера себя выжал. И так по крупицам плетёшься вперёд.
Могу сказать что продуктивность у одного и того же человека может отличатся на 1000% за одну и туже работу в зависимости от твоего состояния и нравится ли тебе проект.
Отсюда около нулевая продуктивность у войтиВайти. Т.к. в принцип им не нравится программирование. Они пришли сюда ради денег и хайпа. В противном случае они вошли бы в IT уже давно.
Разумеется это не относится к молодым парням. Среди них есть небольшой процент которым нравится IT. И они только начинают свой путь. Разумеется этот процент небольшой так же как и раньше.
Если по простому, когда приступаешь к работе, открываешь проект, то начинается работа по загрузке этого проекта в мозг. Быструю память. У программистов есть даже понятия — погрузиться в контекст или выпасть из контекста.
Пока ты не в контексте — то на проект смотришь как на египетские иероглифы. Но спустя час, пробежавшись по десяткам — сотням функций, уже примерно представляешь как работает кусок программы в котором ты находишься.
Так вот. Ты должен находится в контексте, по идеи все 8 часов работы. На практике — думаю у человека поедет крыша от такой работы. Поэтому это разбавляют всякими… переговорами. У некоторых ничего не делание переговоры занимают целый рабочий день )
Однако если тебе интересно — то ты можешь находится в контексте и 18 часов. Если не интересно — то вообще не сможешь погрузится. Мозг будет сопротивляться настолько что ты впадёшь в прострацию.
Отсюда кстати я смотрю с умилением на десятки тысяч "войтиВайти". Люди просто не понимают на что они подписываются. И раз до модных времён они так и не связали свою жизнь с IT, значит это не их. Их мозг просто не будет способен на многочасовой контекст.
И да у "настоящих" программистов проработавших по 20 лет, не войти в контекст — сплошь и рядом. И ты тратишь неделю на простенькую задачу при этом изнасиловав свой мозг и чувствую себя как будто ты разгружал вагоны. Это всякое легаси, индуский код, да и просто звёзды не сошлись или ты встал не стой ноги.
Поэтому программист это очень тяжёлый труд, и к старости лучше им не быть.
И написал я это к тому, что бы задать вопрос. А где у гуманитариев происходит примерно такой же экспирианс?
Но опять же — гуманитарии, это очень расплывчатое понятие. Без конкретных определений вопрос не имеет смысла. А с конкретными скорее всего потеряет актуальность как риторический.
Я про это и написал. В математику вообще всё можно запихнуть при желании и программирование целиком. Куча споров идёт только потому что никто из спорщиков не дал изначально чётких определений критериев вокруг которых ведутся споры.
И по этому сам вопрос может звучать глупо — нужна ли математика программисту. С одной стороны да, потому как всякие сложение или умножение уж точно используется.
Но где та грань где математика считается используемая по умолчанию, а где считается что программист уже не использует математику.
Программист использует формулу площади круга, но когда смотрит на доказательства теоремы Ферма ему кажется что он смотрит на египетские иероглифы. Где грань?
Я привёл эту грань с моей точки зрения как практика по программированию. Разумеется эта не истина в последней инстанции, а только мнение.
Отвечу вам и geher.
Нету формулы которая дала бы точный ответ. Вот и всё. В противовес другим математическим формулам которые давали бы точный ответ, и не важно сколько знаков после запятой.
И вообще я привёл только для примера как наверно наиболее известную нерешаемую задачу.
А то что приблизительно решается — так и тот программный способ с аппроксимацией времени тоже даёт приблизительный результат.
Я лишь показал чем с моей точки зрения отличается математика от программирования.
И да математика часто бессильна. Например задача трёх тел
Математически не решается.
Но вот программированием пожалуйста. Нарезай время как можно меньше. Рассчитывай кванты изменения положения для всех тел. Далее процедуру повторяем с новыми данными по положению. Как видим — время непосредственный участник в процессе программирования.
Конечно со временем (опять будь оно не ладно) накапливается неточность. Но на то они и программы что бы глючить ))))
Подводя итог хотел бы добавить. Программа эта про время и состояния. Это про мегабайты информации и как эта информация будет меняться с каждым тиком процессора, проходя через тысячи функций.
Математика это про числа. Могу ошибаться, не математик, но вроде в математике нету времени, т.е. там не будет зависеть результат на выходе в формуле от времени. И да я не имею ввиду когда время — это переменная в формуле. Математика это конечный автомат. Но даже в ПЛИС на высоких частотах начинается гонка сигналов и время начинает вмешиваться в казалось бы чисто математические функции.
Программа это про взаимодействие между частями.
Математика это нахождение и использование особенностей в числах. В законах нашей реальности. Пример — площадь круга.
Можно поделить круг мелкой сеткой. Посчитать площадь ячейки сетки и посчитать количество ячеек. Это по "программистки"
Как уже много лет "в IT" и собрав так сказать статистику могу ответить следующее.
Во первых нужно сначала уточнить что подразумевается под "математикой"? Потому как сама она тоже состоит из десятков разделов. Так вот под ней я буду иметь ввиду всякие там косинусы, синусы и прочие чисто математические абстракции которые тянут за собой целый пласт всяких теорем, которые тянут за собой опять же всякие формулы. Это математические уравнения на которые если смотрит обычный человек, то он выпадает в прострацию.
А теперь про программирование. Программы состоят из функций, процедур, методов — суть одна.
Современные программы на 99,9 состоят из достаточно простых функций. Но количество их в 1 программе может достигать сотен, тысяч, миллионов. Огромное количество взаимодействующих друг с другом функций.
И вся сложность — это как раз написать (подключить из библиотеки) эти тысячи функций и соединить их воедино что бы они не глючили между собой. А это сложно. Архисложно. Когда работают параллельные потоки. Когда функции вызывают сами себя (рекурсия). Когда функции пользуются одной памятью, и начинается то утечка, то одна функция рандомно портит память другой. Баги можно искать годы, и часто они остаются навсегда. Ну и архитектура. Связь всех функций — это архитектура программы. И сделать её правильно тоже архисложная задача. Обычно архитектура допиливается годами. И никогда не достигает совершенства. Всегда есть что улучшать.
Как видите математика тут не нужна.
Однако существует ряд задач, алгоритм которой умещается в 1 функцию. Как правило это алгоритм получения минимально конкретного результата максимально эффективно (быстро и не жрало памяти). И уже этот алгоритм можно реализовать с помощью математики. Например алгоритм шифрование на эллиптических кривых. На которых работает современный интернет (Это шифроканал в TLS).
Большинство пользователей за десятки лет в IT подобное не пишут. Они просто берут готовые функции из библиотеки. Собственно специализированных алгоритмов — единицы, по сравнению с миллионами обычных программ.
Поэтому могу смело говорить что для современного IT — математика не нужна.
И да. И в том и другом случае надо иметь аналитический склад ума, это как бы по умолчанию. Потому как удержать в голове десятки тысяч взаимодействующих функций между собой — обычно нормальный человек на такое не способен. По этому IT-шники и получают тысячи долларов за свою работу.
Ваша утверждение базируется на рассмотрении одной программы. И оно очевидно. Каждая конкретная программа будет делать только то что в ней запрограммировано, одна цель (цели), и не более.
Я же рассматриваю все программы и математические теоремы одновременно. И на этом базирую различие между этими классами.
Все программы могут делать что угодно каждая по отдельности. У них нету базового закона для всех сразу.
В то время как в математике этот закон есть. Вся математика предназначена для одной цели. Нахождение закономерностей. Нахождение любых закономерностей где угодно. Многие "сумасшедшие" математики придумывают свои вселенные со своими законами и ищут там математические закономерности.
Как бы выглядела вселенная в которой п равнялось бы 4? И подобное.
Да. И современное программирование это тоже от веба до mobile, от эмбедит до софта, от геймдева до квантмеха и ещё куча всего.
Собственно получаем две огромные кучи которые тут и там начинаю приравнивать друг другу, т.к. начинают сравнивать частности.
Я же, в дискуссии, пытаюсь предложить варианты различий всей кучи. Опять же дискуссия ради поболтать, не более )
Ну это аксиома. Т.е. недоказательные утверждения. Они настолько логичны что не требуют доказательств. Вообще все теоремы доказываются на основании других теорем. А вот начало этой доказательной цепочки это как раз аксиомы.
И да вы не докажете ваш пример "коммутативность сложения" а по простому "от перемены мест слагаемых сумма не меняется" с точки зрения математики. Математика говорит так есть и всё тут. Опять же с помощью чисел вы можете доказать только какой то предел. Вплоть до бесконечности не получится.
Про бесконечную точность я говорю исходя из того что математика предоставляет нам формулы. Которые оперирую переменными. Подставляй любое число (хоть бесконечность), и формула выдаст правильный ответ. Ну или должна выдать.
Программирование в свою очередь оперирует с конкретными числами. И предел точности работы программы будет всегда в пределе точности этих чисел.
Я просто декламирую отличие математики от программирования. А то тут в процессе дискуссии постоянно поднимается вопрос про их тождественности.
Вот я и ищу фундаментальные отличия.
Наверно это вырвано из контекста, но приведённая в данном виде вызывает некоторое недоумение.
Честно говоря я не уверен что на земле существует реальная программа доказывающая теорему. Ну т.е. последовательно выполнение операторов процессора.
Потому как программа это компьютер. А он работает с переменными конечной точности.
Математические доказательства никогда не оперирует числами, а оперирует абстракциями в виде переменных. x,y и прочее.
Все операции проводятся над этими абстракциями что бы получить в конечном счёте математическую формулу, которая может обеспечить бесконечную точность. Т.к. не оперирует цифрами, а абстракциями.
Кстати это ещё одно фундаментальное отличие программы от математики. Программа всегда будет выполнятся на процессоре и оперировать с переменными конечной точности.
Математика всегда будет оперировать абстракциями бесконечной точности. Т.к. точности как таковой у них и не будет. Нет чисел, нет точности либо точность бесконечная.
Процессоры не работают с абстракциями, они работают с битами.
Не знаю может квантовые работают?
Что то я дописался до того, что доказательство теорем с многостраничной записью это есть программа. Если рассматривать каждый шаг доказательства как шаг программы.
Уроборос какой то )))
Ладно добавим ещё одно фундаментальное отличие, но уже математики.
Любое доказательство теоремы, собственно любая математическая единица служит только 1 цели. Нахождение природной зависимости в числах. Фундаментального закона. Свойства нашей вселенной или вообще всех вселенных. Придумайте как сами это назвать.
Целью же программы может быть абсолютно любая. Или вообще без цели.
Профдеформация )
Можно долго спорить где и как пересекаются программирование и математика. С разных углов они либо похожи, либо одно и тоже, либо разные вещи.
Однако я хотел бы обозначить одну фундаментальную особенность чем программирование отличается от математики.
И это:
Как не странно результатом программирования будет программа.
И главная особенность программы — это то что она состоит из последовательно выполняющихся шагов.
Результатом математики будет теорема и следующая из неё формула.
Отсюда любой шаг программы — может быть как раз математической, формулой. Т.е. шаг может быть как раз той самой математикой.
Получается что программирование может включать в себя математику как шаг программы. В тоже время по этому принципу математика не будет является программированием.
Опять же шаги это как правило вызов готовых функций, в которых и реализована математика. Поэтому программист напрямую не работает с математикой а только с её результатами.
Это как например человек использует автомобиль, но это не делает его конструктором автомобилей.
И да. Оппонент сразу может придраться к моему определению математики. Мол простои использование теорем в качестве инструмента для получения результата. В данном случае такая писанина как не странно будет похожа на программирование. Только записанная на листе бумаге. Последовательное выполнение шагов с использованием формул теорем для получения конечного результата. Точно также как это бы делала программа.
Вы применили крайность. А крайности как правило не валидны.
Понятно что любой человек в той или иной степени оперирует каким то объёмом информации у себя в памяти. Иначе это и не человек вообще.
Вся разница в количестве и разновидности этой информации.
И программисту для выполнения работы требуется запредельное количество специфической информации. Это алгоритмы, коды, абстракции.
Так вот по моим наблюдением оперирование этой информацией для мозга чрезвычайно затратно. И если человеку не нравиться, т.е. нету дофаминовой поддержки, мозг сопротивляется максимально сильно.
И программисты со временем развивают свою нейросеть для работы с этой специфической информацией. Т.е. со временем, когда дофаминовая поддержка уже сводится на нет, мозг уже натренирован. и можно работать дальше без поддержки.
Вот вы привели другие примеры информации. Например есть люди которым легко даются языки. Или люди актёры, которые запоминают сценарий фильма, пьесы.
Они тоже тренируют свой мозг. И если это им нравится, то им легко даётся манипулирование информацией специфичного для себя класса.
Как я уже говорил много раз. Все способности — это желание изучать конкретную информацию. А уж что тебе нравится или нет — это уже матушка природа и батюшка геном решают.
Не знаю как это работает в голове. Но если долго работать над проектом где есть тысячи функций и если кликнуть в любое место проекта сразу будет понятно что и как тут работает. Видимо подгружается из памяти.
Одновременно в быстрой памяти смысла держать всё это нет. Однако пытаясь разобраться с алгоритмом в программе приходится одновременно держать в голове пару десятков функций. И в течении рабочего дня к этим десяткам прибавляются другие десятки, а уже ненужные выгружаются из головного кеша.
Часто находишься в состоянии когда в голову нужно загрузить ещё информации, но уже не можешь, смотришь на очередной код, а он расплывается перед глазами. После этого просто включаешь на пару минут какой нибудь развлекательный сайт. Даже не особо вчитывавшийся что там. Но это позволяет разгрузить кеш в голове. Потом переключаешься обратно на проект.
И да всё это относится к сложным проектам. В программировании есть куча задач линейных. Те же формошлёпства. Там подход линейный, мозг практически не загружается, и ты просто отдыхаешь на таких задачах.
С геймдевом вообще не пересекался, но со всем остальным наверно со всем.
Разве в геймдеве сейчас не рулят движки? Юнити там разные. Где игрописатели фактически только API движков дёргают.
Хотя если новый движок писать, то согласен там прилично математики, например туже физику земного притяжения описать. Полёт стрелы там и прочего. Или геометрию пространства.
Но разве это реализуют с нуля? Наверняка уже написано 100500 библиотек которые реализуют всю эту физику.
Так я и не спорю что в математику всё входит.
И все программисты пользуются в той или иной мере математикой.
Собственно это даже не обсуждается.
Однако вопрос пользуются ли программисты математикой постоянно возникает. И даже в этой статье есть.
И что бы на него ответить — надо определить какой то критерий.
И этот критерий будет чисто субъективный.
Я из своего субъективного опыта написал. Что реализация алгоритмов высшей математики в программировании сегодня практически не бывает.
Однако дискуссия нас привела к выводу — что не бывает скорее всего из за того что все алгоритмы уже реализованны в библиотеках.
А программистам только и остаётся что просто пользоваться результатами тех или иных алгоритмов.
Я только знаю что делает алгоритм. Но как он это делает? Я пытался разобраться. Но просто прочитав это — я понял что этого не достаточно. И так как мне это не надо было просто бросил.
Мне была достаточна абстракция — подаю на вход числа, получаю на выходе.
А вот дальше эти числа уже использовались в вышестоящем алгоритме.
Который я уже реализовывал сам. И математики по моим внутренним убеждениям там не было.
Хорошо пусть будет логика. Да логику я использую всюду. Собственно программирование без логики не может быть. А вот без математики ))) Тут как раз и ведём дискуссию, может или нет.
Поэтому я и определил точные критерии что бы вопрос "нужно ли знать математику программисту" имел смысл.
Я под математику поставил использование "жёстких" математических теорем и формул.
Например я упомянул алгоритм эллиптических кривых
Я это отношу как раз к математике. Однако я это использую в своей работе. Просто я беру функцию где реализована вся эта математика и просто пользуюсь результатами. И т.к. я сам не реализовываю эту математику — то считаю что я не пользуюсь математикой. Но получается что я пользуюсь только результатами математики ))) Как минимум мне надо знать о существовании таких алгоритмов и где о ни используются.
Опять же вы пишите что в соей работе используете мат анализ. Но реализуете ли вы алгоритмы этого анализа? Или просто используете готовые функции? Глупо писать свою реализацию cos() или sin(), когда можно просто вызвать функцию.
И так как в библиотеках есть практически всё, то в типичной программе нету математики. Только вызов функций. И архитектура программы.
Современные абстракции в программировании задрали процесс программирования слишком высоко. Туда где математики не осталось.
Жёсткая математика, нативная, будет только в чём то новом. Что крайне редко встречается и большинство программистов не встречают за всю свою IT карьеру.
Думаю этот вопрос не имеет смысла. Т.к. для его ответа нужно устанавливать какую то черту, до — программирование. После — математика. Опять же если эта не черта а широкая область, то в этой области это будет какая то химера — матепрограммировани или программатика ))
Шутка.
Получается что это чистая субективщина.
Но опять же изначально вопрос стоял — нужна ли математика для современного программиста. И на этот вопрос может ответить только опыт. Статистика.
Моя статистика мне показывает что я не помню когда я использовал что то из высшей математики в проектах. Я постоянно встречаю такое мнение.
Но проекты от этого не перестают быть сложными. Их сложность в абстракциях. Тысячи функций складываются в абстракции. Всё это нужно держать в голове и уметь ими манипулировать.
Это как с мозгом. Работа одного нейрона — примитивна. Не будем рассматривать биохимию нейрона как клетки. Алгоритмически нейрон примитивен. Есть куча дендритов и аксон. Суммарный сигнал на дендритах превышает уровень срабатывания нейрона, сигнал уходит в аксон.
Но миллиарды этих простейших автоматов строят такие абстракции — что весь человеческий мозговой потенциал до сих пор не может разобраться как это работает в целом.
Вопрос сколько времени нужно находится в состоянии когда мозг пухнет. Вот вы привели пример 2 дня.
У программиста такое состоянии собственно каждый рабочий день. Десятилетия подряд.
Поэтому я и писал — что неподготовленный человек на это не способен. А так же на это не способен человек которому не нравится программирование. Даже если ему предложить 1$ миллион и он будет напрягаться изо всех сил, ничего не получится.
Сужу по себе. Когда мой мозг не хочет вникать в проект как бы я не напрягался я только заработаю головную боль. Просто смотришь в код, пытаешься понять что было 5 минут назад, не помнишь и просто лезешь в какой нибудь youtube.
В такие моменты лучше просто день потерять. Выспаться хорошо. И стартовать сначала.
И кстати очень часто попадаешь в полосу, когда выжимаешь себя за день, ничего не сделал, а делать надо, следующий день такой же потому как вчера себя выжал. И так по крупицам плетёшься вперёд.
Могу сказать что продуктивность у одного и того же человека может отличатся на 1000% за одну и туже работу в зависимости от твоего состояния и нравится ли тебе проект.
Отсюда около нулевая продуктивность у войтиВайти. Т.к. в принцип им не нравится программирование. Они пришли сюда ради денег и хайпа. В противном случае они вошли бы в IT уже давно.
Разумеется это не относится к молодым парням. Среди них есть небольшой процент которым нравится IT. И они только начинают свой путь. Разумеется этот процент небольшой так же как и раньше.
Если по простому, когда приступаешь к работе, открываешь проект, то начинается работа по загрузке этого проекта в мозг. Быструю память. У программистов есть даже понятия — погрузиться в контекст или выпасть из контекста.
Пока ты не в контексте — то на проект смотришь как на египетские иероглифы. Но спустя час, пробежавшись по десяткам — сотням функций, уже примерно представляешь как работает кусок программы в котором ты находишься.
Так вот. Ты должен находится в контексте, по идеи все 8 часов работы. На практике — думаю у человека поедет крыша от такой работы. Поэтому это разбавляют всякими… переговорами. У некоторых
ничего не деланиепереговоры занимают целый рабочий день )Однако если тебе интересно — то ты можешь находится в контексте и 18 часов. Если не интересно — то вообще не сможешь погрузится. Мозг будет сопротивляться настолько что ты впадёшь в прострацию.
Отсюда кстати я смотрю с умилением на десятки тысяч "войтиВайти". Люди просто не понимают на что они подписываются. И раз до модных времён они так и не связали свою жизнь с IT, значит это не их. Их мозг просто не будет способен на многочасовой контекст.
И да у "настоящих" программистов проработавших по 20 лет, не войти в контекст — сплошь и рядом. И ты тратишь неделю на простенькую задачу при этом изнасиловав свой мозг и чувствую себя как будто ты разгружал вагоны. Это всякое легаси, индуский код, да и просто звёзды не сошлись или ты встал не стой ноги.
Поэтому программист это очень тяжёлый труд, и к старости лучше им не быть.
И написал я это к тому, что бы задать вопрос. А где у гуманитариев происходит примерно такой же экспирианс?
Но опять же — гуманитарии, это очень расплывчатое понятие. Без конкретных определений вопрос не имеет смысла. А с конкретными скорее всего потеряет актуальность как риторический.
Я про это и написал. В математику вообще всё можно запихнуть при желании и программирование целиком. Куча споров идёт только потому что никто из спорщиков не дал изначально чётких определений критериев вокруг которых ведутся споры.
И по этому сам вопрос может звучать глупо — нужна ли математика программисту. С одной стороны да, потому как всякие сложение или умножение уж точно используется.
Но где та грань где математика считается используемая по умолчанию, а где считается что программист уже не использует математику.
Программист использует формулу площади круга, но когда смотрит на доказательства теоремы Ферма ему кажется что он смотрит на египетские иероглифы. Где грань?
Я привёл эту грань с моей точки зрения как практика по программированию. Разумеется эта не истина в последней инстанции, а только мнение.
Отвечу вам и geher.
Нету формулы которая дала бы точный ответ. Вот и всё. В противовес другим математическим формулам которые давали бы точный ответ, и не важно сколько знаков после запятой.
И вообще я привёл только для примера как наверно наиболее известную нерешаемую задачу.
А то что приблизительно решается — так и тот программный способ с аппроксимацией времени тоже даёт приблизительный результат.
Я лишь показал чем с моей точки зрения отличается математика от программирования.
И да математика часто бессильна. Например задача трёх тел
Математически не решается.
Но вот программированием пожалуйста. Нарезай время как можно меньше. Рассчитывай кванты изменения положения для всех тел. Далее процедуру повторяем с новыми данными по положению. Как видим — время непосредственный участник в процессе программирования.
Конечно со временем (опять будь оно не ладно) накапливается неточность. Но на то они и программы что бы глючить ))))
Подводя итог хотел бы добавить. Программа эта про время и состояния. Это про мегабайты информации и как эта информация будет меняться с каждым тиком процессора, проходя через тысячи функций.
Математика это про числа. Могу ошибаться, не математик, но вроде в математике нету времени, т.е. там не будет зависеть результат на выходе в формуле от времени. И да я не имею ввиду когда время — это переменная в формуле. Математика это конечный автомат. Но даже в ПЛИС на высоких частотах начинается гонка сигналов и время начинает вмешиваться в казалось бы чисто математические функции.
Программа это про взаимодействие между частями.
Математика это нахождение и использование особенностей в числах. В законах нашей реальности. Пример — площадь круга.
Можно поделить круг мелкой сеткой. Посчитать площадь ячейки сетки и посчитать количество ячеек. Это по "программистки"
А можно применить формулу п*r2
Как уже много лет "в IT" и собрав так сказать статистику могу ответить следующее.
Во первых нужно сначала уточнить что подразумевается под "математикой"? Потому как сама она тоже состоит из десятков разделов. Так вот под ней я буду иметь ввиду всякие там косинусы, синусы и прочие чисто математические абстракции которые тянут за собой целый пласт всяких теорем, которые тянут за собой опять же всякие формулы. Это математические уравнения на которые если смотрит обычный человек, то он выпадает в прострацию.
А теперь про программирование. Программы состоят из функций, процедур, методов — суть одна.
Современные программы на 99,9 состоят из достаточно простых функций. Но количество их в 1 программе может достигать сотен, тысяч, миллионов. Огромное количество взаимодействующих друг с другом функций.
И вся сложность — это как раз написать (подключить из библиотеки) эти тысячи функций и соединить их воедино что бы они не глючили между собой. А это сложно. Архисложно. Когда работают параллельные потоки. Когда функции вызывают сами себя (рекурсия). Когда функции пользуются одной памятью, и начинается то утечка, то одна функция рандомно портит память другой. Баги можно искать годы, и часто они остаются навсегда. Ну и архитектура. Связь всех функций — это архитектура программы. И сделать её правильно тоже архисложная задача. Обычно архитектура допиливается годами. И никогда не достигает совершенства. Всегда есть что улучшать.
Как видите математика тут не нужна.
Однако существует ряд задач, алгоритм которой умещается в 1 функцию. Как правило это алгоритм получения минимально конкретного результата максимально эффективно (быстро и не жрало памяти). И уже этот алгоритм можно реализовать с помощью математики. Например алгоритм шифрование на эллиптических кривых. На которых работает современный интернет (Это шифроканал в TLS).
Большинство пользователей за десятки лет в IT подобное не пишут. Они просто берут готовые функции из библиотеки. Собственно специализированных алгоритмов — единицы, по сравнению с миллионами обычных программ.
Поэтому могу смело говорить что для современного IT — математика не нужна.
И да. И в том и другом случае надо иметь аналитический склад ума, это как бы по умолчанию. Потому как удержать в голове десятки тысяч взаимодействующих функций между собой — обычно нормальный человек на такое не способен. По этому IT-шники и получают тысячи долларов за свою работу.