Pull to refresh

Comments 50

Программист, как специалист по применению алгоритмов и логики, есть математик

Полнейшая чушь. Из такой логики следует, что любой человек использующий математику - математик.

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

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

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

Но если ставить вопрос: "должен ли программист быть математиком" - ответ "однозначно нет".

А математик, в каком-то смысле, и есть программист

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

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

А как вы так легко отделяете доказательства от алгоритмов? Доказательство - логически непротиворечивый алгоритм. И наоборот. Нет? Программа - алгоритм записанный на формальном языке для абстрактного вычислителя. Вывод: программист - человек занимающийся доказательствами. По вашему же определению - математик. Или вы намекаете на теоремы Гёделя о неполноте или о тезисе Чёрча - Тьюринга?

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

Это в, что называется, в общем случае, неверно.

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

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

UFO just landed and posted this here

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

UFO just landed and posted this here

> Доказательство - логически непротиворечивый алгоритм. И наоборот. Нет?

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

UFO just landed and posted this here

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

если хотите пример - возможно Вы слышали про Maryam Mirzakhani, она получила Fields в 2014, вообще была супер талантлива, это реальная современная математика, посмотрите ее статьи, например начните с линка ниже, и подумайте сможете ли Вы применить Карри-Говард, будет интересно какой получится логически непротиворечивый алгоритм

https://www.mathunion.org/fileadmin/IMU/Prizes/Fields/2014/news_release_mirzakhani.pdf

UFO just landed and posted this here

> К любым доказательствам применим Карри-Говард. Те, которым он неприменим, записаны не на математическом языке.

или возможно Вы просто не знаете математики, довольно часто упоминаете Карри-Говард в своих комментариях, пожалуйста приведите пример применения к доказательству любой теоремы Maryam Mirzakhani, если сможете, желаю успеха

ps

список работ найдете по уже приведенной ссылке (см references)

UFO just landed and posted this here

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

UFO just landed and posted this here

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

В моей голове: "Я беру байтики отсюда и кладу вот сюда... А, да тут память будет лишний раз выделяться, впилю предвыделенный буфер...".

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

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

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

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


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

И это плохо

UFO just landed and posted this here

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

UFO just landed and posted this here

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

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

UFO just landed and posted this here
UFO just landed and posted this here

Есть виды деятельности, а есть профессия. Нет профессий писатель кода и разработчик ПО - есть программист. Есть профессия математик, а есть виды деятельности математиков начиная от преподавания, до расчета взрывов ядерных бомб и траекторий полета к Марсу.

UFO just landed and posted this here
Умение доказывать те или иные утверждения, используя математику как инструмент — это вообще не то же самое, что уметь использовать готовые решения не парясь о доказательстве. И вот первое делает из человека математика, а второе — нет.
Ещё более надёжный способ отличить математика от программиста — если математик доказал, что решение существует, то находить собственно само решение уже необязательно. А программист увы, одними доказательствами отделаться не сможет — вынь и положь готовый экзешник.

... Программирование - раздел математики ...

Вы ошибаетесь. :)

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

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

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

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

"Будьте проще и народ к вам потянется!". Сначала пойдите на мехмат, допустим, в МГУ, по специальности "математика", потом, параллельно, осваивайте программирование. И все сразу станет ясно.


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


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


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


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


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

Скажу лишь с первого взгляда кажется что математика сложнее программирования, но есть нюанс - сложно написать программу как можно более короткую и работающую со всех возможных сторон для математика чем для программиста. Но есть еще веб где не надо даже 2+2 складывать, но в вузах не учат вебу - если только сам не займешься.Да и веб это гроши по сравнению с остальным, а математик не хочет гроши зарабатывать - он велик! Как минимум вдвое выше и компания не "рога и копыта", а с именем, но и там тоже есть болваны - ведь нормальное распределение тоже работает даже для отобранной группы людей - пара умных, есть еще менее умные и остальные которым либо корочка либо нафиг ничего не нужно, лишь бы от армии откосить, а они ничего почти не хотят понимать и не поймут из нового вузовского и спишут у ребят по умнее - так любую группу любого факультета возьмите также будет, посидеть у родителей на шее еще 4 года.

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

там не цифры там буквы

Это вы ещё 3D не учли. По вашей логике любой 3D художник/дизайнер - математик. Но ведь это не так. Быть математиком и уметь применять математику - разные профессии.

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

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

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

строит алгоритмы. Делает ли так дизайнер? Какой-то может и делает, но в большинстве это не так

Когда речь идёт о 3D, то рано или поздно приходится не просто работать с математикой, а работать именно с векторной математикой. Пример терминологии: карты нормалей. Приходится воле-неволей изучать векторную математику. Но изучать именно для применения. Доказывать ничего не нужно.

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

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

В статье вы написали такое определение:

Программист, как специалист по применению алгоритмов и логики, есть математик. А математик, в каком-то смысле, и есть программист

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

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

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

Если математики это аналог рационального множества, а программисты целые числа

Ваши рассуждения понятны, только вы не объяснили, почему математики и программисты принадлежат к указанным множествам? Вы не дали чёткого определения признака по которому математик является множеством рациональных чисел, а программист - целые числа. Есть ещё комплексные числа. )))

левое и правое два разных феномена

Симметрии бывают разные, например, есть ещё круговые симметрии (например, снежинка).

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

Прошу вас ответить на мой исходный вопрос: в чём разница между программистами и математиками?

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

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

Математики оперируют исходной логикой и переводят её на язык формул, а программисты переводят с языка формул на алгоритмический языки конкретных исполнителей вычислений.

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

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

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

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

"Математику уже затем учить надо, что она ум в порядок приводит".

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

Люди с вышкой имеют научный склад ума. Для них мир вокруг, программирование в частности не является магией. Они стремятся понимать, почему так. Программист с вышкой стремится к упрощению (это не размещение выражения в return!). Писать как можно меньше кода. "Что это за херня?" - вот его самый главный вопрос.

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

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

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

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

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

Что это, если не математика?

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

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

Не могу не согласиться!
Много раз видел это сам.

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

Боюсь, все несогласные, худо-бедно школьный курс математики прослушали (а это, как не крути, -- не мало). Недавно читал статью про проблемы обучения детей из африканских племён. Для них сложение бананов и сложение бататов, две АБСОЛЮТНО разные операции! Мне кажется, что для этих детей вопрос: "Нужна ли программисту математика?", -- имеет более определённый ответ.

Математика, конечно в целом хорошо организует ум, но её роль в этом изрядно переоценена. Когда на практике сталкиваешься с необходимостью "поднять" кватернионы или транспонирование - берешь, и поднимаешь. Достаточно иметь способность соображать и работать с информацией, чтобы закрыть пробелы в предметной области своих задач. Вот эта способность и есть must have программиста. И она никак не тождественна его математическому складу

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

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

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

Sign up to leave a comment.

Articles