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

*Математика и программирование

Автор mnashe, июля 2, 2015, 10:53

0 Пользователи и 1 гость просматривают эту тему.

mnashe

Цитата: Даниэль от июля  2, 2015, 00:32
Я, например, отлично понимаю, что программирование - намного более низкий уровень интеллектуального развития, чем чистая математика, и знаю, что в свое время просто "не потянул".
Ты напомнил мне недавнюю историю.
Передо мной встала задача: расположить все 20 возможных сочетаний двух чисел из пяти (порядок в паре имеет значение) по кругу так, чтобы рядом (включая диагональ) не оказывались одинаковые числа.
Пример решения для 5 сочетаний:
1 3 5 2 4
2 4 1 3 5
Но нужно уложить все 20.
Я пару часов пытался решить эту задачу в уме. Ничего не получалось.
Потом я взял двухцветные палочки и стал пытаться сложить из них. Провозился ещё полтора часа, ничего не вышло, я предположил, что задача неразрешима, но доказать этого не смог.
На следующий день я за пару часов написал программу из 70 строчек, и она мне менее чем за минуту выдала 38568 решений!
(Причём программа работает в виртуальной машине вроде явы, что заведомо снижает скорость как минимум на порядок).
Spoiler: программа ⇓⇓⇓
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

From_Odessa

Цитата: Даниэль от июля  2, 2015, 00:32
Я, например, отлично понимаю, что программирование - намного более низкий уровень интеллектуального развития, чем чистая математика, и знаю, что в свое время просто "не потянул". При этом, на самом деле, я немного занимаюсь математикой, но я отчетливо понимаю: в целом математика труднее и интеллектуально выше, чем моя профессия.
Мне кажется, тут не все так просто. На самом деле, программирование, как мне кажется, это вообще отдельная отрасль, по сути, хоть ее и называют прикладной математикой. Программирование нередко требует тех умений и склонностей, которые "чистая" математика требует в меньшей степени. Умение создавать алгоритмы, алгоритмически мыслить, умение, охватывать программу взором и выделять в ней ошибки и нерациональности - это особая сфера. И великолепный "чистый" математик может быть к этому не так уж склонен. Программирование, я бы сказал, в определенные моменты превращается в искусство. Мне кажется, что математическое мышление и алгоритмические - это разные вещи. Я понимаю, что Вы хотите сказать, понимаю, что в глубине своей математика требует очень мощные интеллектуальные способности. Я просто хотел сказать, что такое сравнение лоб в лоб не очень верно, как мне видится.

mnashe

Цитата: From_Odessa от июля  2, 2015, 10:58
На самом деле, программирование, как мне кажется, это вообще отдельная отрасль, по сути, хоть ее и называют прикладной математикой. Программирование нередко требует тех умений и склонностей, которые "чистая" математика требует в меньшей степени. Умение создавать алгоритмы, алгоритмически мыслить, умение, охватывать программу взором и выделять в ней ошибки и нерациональности - это особая сфера. И великолепный "чистый" математик может быть к этому не так уж склонен. Программирование, я бы сказал, в определенные моменты превращается в искусство. Мне кажется, что математическое мышление и алгоритмические - это разные вещи. Я понимаю, что Вы хотите сказать, понимаю, что в глубине своей математика требует очень мощные интеллектуальные способности. Я просто хотел сказать, что такое сравнение лоб в лоб не очень верно, как мне видится.
Ага.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Lodur

Цитата: From_Odessa от июля  2, 2015, 10:58Мне кажется, тут не все так просто. На самом деле, программирование, как мне кажется, это вообще отдельная отрасль, по сути, хоть ее и называют прикладной математикой.
Как-то читал у кого-то из великих американских программистов (не помню, у кого... то ли создателя Паскаля, то ли создателя Си), что программирование отнесено к прикладной математике по ошибке. На самом деле, это область прикладной лингвистики, и из линвистов получаются намного лучшие программисты, чем из математиков. :) Мысль парадоксальна, но только на первый взгляд.
8-й Девственник Лингвофорума

If the doors of perception were cleansed, everything would appear to man as it is: infinite. (W. Blake)
Какая потребителю разница, какой продукт лучше не работает?.. (Awwal12)

Даниэль

Цитата: mnashe от июля  2, 2015, 10:53
Цитата: Даниэль от июля  2, 2015, 00:32
Я, например, отлично понимаю, что программирование - намного более низкий уровень интеллектуального развития, чем чистая математика, и знаю, что в свое время просто "не потянул".
Ты напомнил мне недавнюю историю.
Передо мной встала задача: расположить все 20 возможных сочетаний двух чисел из пяти (порядок в паре имеет значение) по кругу так, чтобы рядом (включая диагональ) не оказывались одинаковые числа.
Пример решения для 5 сочетаний:
1 3 5 2 4
2 4 1 3 5
Но нужно уложить все 20.
Я пару часов пытался решить эту задачу в уме. Ничего не получалось.
Потом я взял двухцветные палочки и стал пытаться сложить из них. Провозился ещё полтора часа, ничего не вышло, я предположил, что задача неразрешима, но доказать этого не смог.
На следующий день я за пару часов написал программу из 70 строчек, и она мне менее чем за минуту выдала 38568 решений!
(Причём программа работает в виртуальной машине вроде явы, что заведомо снижает скорость как минимум на порядок).
Долго работает твоя программа :)

Математик сразу бы вспомнил про коды Грея. За пару минут я уже нашел решение твоей задачи для сочетаний. Остается сделать то же для размещений (твои комбинации называются размещениями из 5 элементов по 2 без повторений).

Проблема твоего примера в том, что он явно придуман искусственно. Если на практике встретится что-то подобное, то там будут не 2 цифры из 5, а, скажем, 4 цифры из 4 миллиардов. И без теории ты просто не сможешь написать программу, работающую приемлемое время.

В реальности, разумеется, программирование иногда помогает математике. Так, иногда случается, что доказать некую теорему в общем виде не удается, но можно доказать, скажем, что если она выполнена вот для такого количества частных случаев, то она верна всегда. И если повезет, случается, что этих частных случаев, во-первых, конечное число, а во-вторых, не астрономическое (вроде 10 в миллиардной степени). Чаще всего, собственно, это количество вообще измеряется единицами, и таким образом математика развивалась до появления компьютеров: их проверяли вручную. Сейчас же стало возможным выходить из положения также и в случае, когда их количество, допустим, триллионы. Если не ошибаюсь, это использовали при доказательстве теоремы Ферма. Я сам недавно именно так доказал важную для алгоритмики теорему: http://algart.net/ru/discrete_geometry/connectivity_theorem.html Правда, возникает еще один неизбежный (и неприятный с точки зрения доказательства) вопрос: правильность программы тоже нуждается в доказательстве.

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

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

Кстати, в порядке офтопика: я только что прочитал у Йешайаhу (20-я глава), что, оказывается, 5 городов Мицраима обратятся к Единому Богу и будут служить Ему, не больше и не меньше, вместо с Ашуром, а Исраэль для них будет третьим. Это пророчество когда-то сбылось? О чем рассказывает пророк? В моем комментарии про это ничего не сказано, может быть ты знаешь.
Программист из Израиля, Кармиэль

mnashe

Цитата: Даниэль от июля  2, 2015, 14:43
Математик сразу бы вспомнил про коды Грея. За пару минут я уже нашел решение твоей задачи для сочетаний. Остается сделать то же для размещений (твои комбинации называются размещениями из 5 элементов по 2 без повторений).
Ничего не понял :(
Ни что дают мне коды Грея, ни чем помогут решение задачи для сочетаний в решении задачи для размещений.

Цитата: Даниэль от июля  2, 2015, 14:43
Проблема твоего примера в том, что он явно придуман искусственно.
А вот и не угадал :)
Задача как раз-таки совершенно практическая.
Начну с самого начала.
Имеется трёминутный таймер. В ванной висит. Помогает детям чистить зубы три минуты.
Таймер бесконечный, как часы. «Циферблат» — 20 цветных светодиодов. В верхней половине — белый, красный, оранжевый, жёлтый, ЖЗ, белый, зелёный, СЗ, синий, сиреневый; в нижней половине то же самое в том же порядке. Нужно просто запомнить точку начала отсчёта и ждать возвращения в ту же точку.
Сейчас схема таймера такова: сигнал мультивибратора, построенного на элементе микросхемы триггера Шмидта 74HC14, поступает на вход микросхемы десятичного счётчика CD4017, последовательно переключающего 10 выходов, к каждому из которых подключено по два соседних светодиода. Второй вывод каждого нечётного светодиода подключается к выходу триггера Шмидта напрямую, а каждого чётного — туда же через инвертор. В результате получается, что первые 9 секунд горит первый светодиод в паре, вторые 9 секунд — второй, потом счётчик активирует следующую пару.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

mnashe

Я хочу переделать схему так, чтобы она работала на микроконтроллере. На самом дешёвом, за 35 центов. У него 6 выводов (не считая питания): 5 входов-выходов и один только-вход.
Пять выводов могут переключать 20 светодиодов методом charlie-plexing (по имени изобретателя), где на каждое сочетание двух выходов МК вешается по два противоположно направленных светодиода. Чтобы выбрать пару, нужно всех выходы, кроме двух, относящихся к данной паре, переключить на вход («высокоимпедансное состояние», а на эти два подать либо плюс и минус, либо минус и плюс. Таким образом n выводов МК могут адресовать n•(n−1) светодиодов. На три вывода вешается 6 штук, на четыре — 12, на пять — 20.
Что мне даёт замена схемы управления?
Во-первых, можно избавиться от нужды в выключателе: микроконтроллер может автоматически выключаться через несколько кругов, а его потребление в режиме сна ничтожно. Можно поместить таймер в герметичной коробке и включать его встряхиванием или переворачиванием. Ну или просто кнопку нажимать, защитив её плёнкой.
Во-вторых, используя на выходе ШИМ, я могу сделать включение и выключение каждого светодиода плавным (программу на ассемблере для PIC написал уже давно).
В-третьих, у charlie-plexing, начиная с 4 выводов, есть «скрытая возможность» — можно включать одновременно два светодиода, если они висят на разных каналах. Например, одновременно с 1-2 можно включать 3-4 или 4-3 или 3-5 или 5-3.
Я хочу применить эту фичу для того, чтобы каждая фаза длилась не 9 секунд, а 4,5. Так интереснее смотрится.
1 Первый светодиод горит.
2 Первый и второй.
3 Второй.
4 Второй и третий.
5 Третий.
6 Третий и четвёртый.
...
39 Двадцатый.
40 Двадцатый и первый.
Вот отсюда и возникла описанная математическая задача.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

_Swetlana

Цитата: mnashe от июля  2, 2015, 10:53
Цитата: Даниэль от июля  2, 2015, 00:32
Я, например, отлично понимаю, что программирование - намного более низкий уровень интеллектуального развития, чем чистая математика, и знаю, что в свое время просто "не потянул".
Ты напомнил мне недавнюю историю.
Передо мной встала задача: расположить все 20 возможных сочетаний двух чисел из пяти (порядок в паре имеет значение) по кругу так, чтобы рядом (включая диагональ) не оказывались одинаковые числа.
Пример решения для 5 сочетаний:
1 3 5 2 4
2 4 1 3 5
Но нужно уложить все 20.
Я пару часов пытался решить эту задачу в уме. Ничего не получалось.
Потом я взял двухцветные палочки и стал пытаться сложить из них. Провозился ещё полтора часа, ничего не вышло, я предположил, что задача неразрешима, но доказать этого не смог.
На следующий день я за пару часов написал программу из 70 строчек, и она мне менее чем за минуту выдала 38568 решений!
(Причём программа работает в виртуальной машине вроде явы, что заведомо снижает скорость как минимум на порядок).
Spoiler: программа ⇓⇓⇓
А если программа бы не выдала ни одного решения? Где гарантия, что их действительно нет?
Слабонервным под спойлер не лазить. Запутаетесь в жёнах, детях и мужьях.
🐇

Даниэль

Цитата: mnashe от июля  2, 2015, 15:58
Цитата: Даниэль от июля  2, 2015, 14:43
Математик сразу бы вспомнил про коды Грея. За пару минут я уже нашел решение твоей задачи для сочетаний. Остается сделать то же для размещений (твои комбинации называются размещениями из 5 элементов по 2 без повторений).
Ничего не понял :(
Ни что дают мне коды Грея, ни чем помогут решение задачи для сочетаний в решении задачи для размещений.
Коды Грея - просто самое близкое, первое, что приходит на ум. А через 5 минут Гугла становится ясно, что алгоритмы их генерации можно положить в основу генерации сочетаний, перестановок и размещений, если хочется, чтобы соседи отличались.

Цитата: mnashe от июля  2, 2015, 15:58
Цитата: Даниэль от июля  2, 2015, 14:43
Проблема твоего примера в том, что он явно придуман искусственно.
А вот и не угадал :)
Задача как раз-таки совершенно практическая.
Начну с самого начала.
Имеется трёминутный таймер. В ванной висит. Помогает детям чистить зубы три минуты.
Таймер бесконечный, как часы. «Циферблат» — 20 цветных светодиодов. В верхней половине — белый, красный, оранжевый, жёлтый, ЖЗ, белый, зелёный, СЗ, синий, сиреневый; в нижней половине то же самое в том же порядке. Нужно просто запомнить точку начала отсчёта и ждать возвращения в ту же точку.
Сейчас схема таймера такова: сигнал мультивибратора, построенного на элементе микросхемы триггера Шмидта 74HC14, поступает на вход микросхемы десятичного счётчика CD4017, последовательно переключающего 10 выходов, к каждому из которых подключено по два соседних светодиода. Второй вывод каждого нечётного светодиода подключается к выходу триггера Шмидта напрямую, а каждого чётного — туда же через инвертор. В результате получается, что первые 9 секунд горит первый светодиод в паре, вторые 9 секунд — второй, потом счётчик активирует следующую пару.
Жуть какая :) Мне казалось, такие развлечения ушли в прошлое лет 30 назад. А поди ж ты... Любители вроде тебя все еще такое конструируют.
Сейчас как-то более принято написать приложение на чем-нибудь вроде Objective C или Java, которая делает в точности то, что тебе нужно. И использовать какое-нибудь устройство, для которого такой язык - входной. Скоро, наверно, других микроустройств и вовсе не останется.

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

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

mnashe

Цитата: _Swetlana от июля  2, 2015, 16:26
А если программа бы не выдала ни одного решения? Где гарантия, что их действительно нет?
Это исключено, поскольку программа перебрала все возможные варианты (больше миллиарда — 1,147,715,240).
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Даниэль

Цитата: _Swetlana от июля  2, 2015, 16:26
Цитата: mnashe от июля  2, 2015, 10:53
Цитата: Даниэль от июля  2, 2015, 00:32
Я, например, отлично понимаю, что программирование - намного более низкий уровень интеллектуального развития, чем чистая математика, и знаю, что в свое время просто "не потянул".
Ты напомнил мне недавнюю историю.
Передо мной встала задача: расположить все 20 возможных сочетаний двух чисел из пяти (порядок в паре имеет значение) по кругу так, чтобы рядом (включая диагональ) не оказывались одинаковые числа.
Пример решения для 5 сочетаний:
1 3 5 2 4
2 4 1 3 5
Но нужно уложить все 20.
Я пару часов пытался решить эту задачу в уме. Ничего не получалось.
Потом я взял двухцветные палочки и стал пытаться сложить из них. Провозился ещё полтора часа, ничего не вышло, я предположил, что задача неразрешима, но доказать этого не смог.
На следующий день я за пару часов написал программу из 70 строчек, и она мне менее чем за минуту выдала 38568 решений!
(Причём программа работает в виртуальной машине вроде явы, что заведомо снижает скорость как минимум на порядок).
Spoiler: программа ⇓⇓⇓
А если программа бы не выдала ни одного решения? Где гарантия, что их действительно нет?
Слабонервным под спойлер не лазить. Запутаетесь в жёнах, детях и мужьях.
:) Бывает. Хотя обычно программу написать легче, но только писать ее надо правильно: доказав перед этим, что она и правда перебирает все возможные замощения. Процесс такого доказательства нередко приводит к тому, что программа оказывается не нужна: замощение находится в процессе обдумывания, все ли варианты учла программа.

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

Timiriliyev

Цитата: From_Odessa от июля  2, 2015, 10:58
Мне кажется, тут не все так просто. На самом деле, программирование, как мне кажется, это вообще отдельная отрасль, по сути, хоть ее и называют прикладной математикой. Программирование нередко требует тех умений и склонностей, которые "чистая" математика требует в меньшей степени. Умение создавать алгоритмы, алгоритмически мыслить, умение, охватывать программу взором и выделять в ней ошибки и нерациональности - это особая сфера. И великолепный "чистый" математик может быть к этому не так уж склонен. Программирование, я бы сказал, в определенные моменты превращается в искусство. Мне кажется, что математическое мышление и алгоритмические - это разные вещи. Я понимаю, что Вы хотите сказать, понимаю, что в глубине своей математика требует очень мощные интеллектуальные способности. Я просто хотел сказать, что такое сравнение лоб в лоб не очень верно, как мне видится.
Отличная мысль. Я-то думаю, почему чистое программирование, никаким боком не относящееся к математике, а больше к лингвистике, даётся мне относительно легко, а математика всегда давалась с трудом — видимо, тип мышления под неё не заточен.
Правда — это то, что правда для Вас.

Даниэль

Цитата: mnashe от июля  2, 2015, 16:38
Цитата: _Swetlana от июля  2, 2015, 16:26
А если программа бы не выдала ни одного решения? Где гарантия, что их действительно нет?
Это исключено, поскольку программа перебрала все возможные варианты (больше миллиарда — 1,147,715,240).
Потому что у тебя задача тривиальная. Да и то, глядя на программу, я бы не взялся быстро доказать ее правильность.

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

mnashe

Цитата: Даниэль от июля  2, 2015, 16:32
Сейчас как-то более принято написать приложение на чем-нибудь вроде Objective C или Java, которая делает в точности то, что тебе нужно.
Делать больше нечего.
С задачей переключения прекрасно справляется и программа на ассемблере. Там вообще всё тривиально.
Нетривиально, правда, плавное (логарифмическое) управление яркостью с помощью ШИМ. Это действительно была интересная задача. Но я её уже давно решил.
Задача, которую мне сейчас надо было решить, к програмиированию не имеет никакого отношения. Мне нужно было правильно подключить каждый из 20 светодиодов, расположенных по кругу.
Печатная плата уже нарисована (по одному из множества вариантов, выданных программой).

Цитата: Даниэль от июля  2, 2015, 16:32
И использовать какое-нибудь устройство, для которого такой язык - входной. Скоро, наверно, других микроустройств и вовсе не останется.
Пока что обычные 8-битные микроконтроллеры и не думают умирать.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

mnashe

Цитата: Даниэль от июля  2, 2015, 16:48
Потому что у тебя задача тривиальная.
Конечно.

Цитата: Даниэль от июля  2, 2015, 16:48
Да и то, глядя на программу, я бы не взялся быстро доказать ее правильность.
Та не, там всё просто.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

_Swetlana

Цитата: mnashe от июля  2, 2015, 16:38
Цитата: _Swetlana от июля  2, 2015, 16:26
А если программа бы не выдала ни одного решения? Где гарантия, что их действительно нет?
Это исключено, поскольку программа перебрала все возможные варианты (больше миллиарда — 1,147,715,240).
Про ту программу автор тоже думал, что она перебрала все возможные варианты. Перебор геометрических вариантов вещь довольно сложная, можно и обшибицца. Ещё более интересен перебор всех вариантов замощения бесконечной плоскости.

Но прецедент, однако, был - программе был присвоен статус доказательства для NP-полной задачи раскраски неориентированного графа в минимальное число цветов (конкретно, её частного случая - задачи о четырёх красках).
ЦитироватьК. Аппель и В. Хакен доказали в 1976 г., что так можно раскрасить любую карту. Это была первая крупная математическая теорема, для доказательства которой был применён компьютер. Несмотря на последующие упрощения, доказательство практически невозможно проверить, не используя компьютер. Поэтому некоторые математики отнеслись к этому доказательству с недоверием, что объяснялось не только использованием компьютера, но и громоздкостью описания алгоритма первых доказательств (741 страница), впоследствии были предложены более компактные алгоритмы и скорректирован ряд ошибок[1]. Проблема четырёх красок является одним из известнейших прецедентов неклассического доказательства в современной математике.

Новое доказательство, основанное на алгебраических и топологических методах, дал индийский математик Ашей Дарвадкер[2] в 2000 году.
🐇

Даниэль

Цитата: From_Odessa от июля  2, 2015, 10:58
Цитата: Даниэль от июля  2, 2015, 00:32
Я, например, отлично понимаю, что программирование - намного более низкий уровень интеллектуального развития, чем чистая математика, и знаю, что в свое время просто "не потянул". При этом, на самом деле, я немного занимаюсь математикой, но я отчетливо понимаю: в целом математика труднее и интеллектуально выше, чем моя профессия.
Мне кажется, тут не все так просто. На самом деле, программирование, как мне кажется, это вообще отдельная отрасль, по сути, хоть ее и называют прикладной математикой. Программирование нередко требует тех умений и склонностей, которые "чистая" математика требует в меньшей степени. Умение создавать алгоритмы, алгоритмически мыслить, умение, охватывать программу взором и выделять в ней ошибки и нерациональности - это особая сфера. И великолепный "чистый" математик может быть к этому не так уж склонен. Программирование, я бы сказал, в определенные моменты превращается в искусство. Мне кажется, что математическое мышление и алгоритмические - это разные вещи. Я понимаю, что Вы хотите сказать, понимаю, что в глубине своей математика требует очень мощные интеллектуальные способности. Я просто хотел сказать, что такое сравнение лоб в лоб не очень верно, как мне видится.
Программирование - неустоявшийся термин, ему всего полвека. Поэтому этим словом называют что угодно, от верстки сайта до разработки алгоритма быстрой сортировки.

Я бы выделил в данном случае две области (на самом деле их больше, и они имеют друг к другу отдаленное отношение).
1) Алгоритмическое программирование. По сути, это действительно область математики. Разработка алгоритма, собственно, может начаться и закончиться на бумаге, не подходя к компьютеру (это, конечно, не рекомендуется, но встречается). Книга Кнута "Искусство программирования" - прекрасный образец алгоритмического программирования, и если вы помните, Великая теорема Ферма там значилась в качестве одного из упражнений еще во "Введении".
2) Системное программирование. Только не в смысле "ковыряние в железяках", а в смысле - проектирование сложных систем. Это умение грамотно спроектировать архитектуру пакетов, классов, интерфейсов, методов, решающих задачу, так чтобы программа получилась понятной, доступной для развития и сопровождения, расширяемой и т.д. Это знание так называемых паттернов и антипаттернов проектирования для данного языка (а сегодня это обычно ООП). Это владение собственно языками, знание их сильных и слабых мест, понимание производительности. Это знание существующих и разрабатывающихся сегодня библиотек, умение быстро найти готовое решение в интернете. Некоторое место здесь занимает и умение оптимизировать программу (не алгоритм, а именно программу), но это умение играет все меньшую роль по мере развития "интеллекта" платформ, при этом оно всегда и во все времена было менее важным, чем умение создать эффективный алгоритм (область №1).

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

_Swetlana

Цитата: Даниэль от июля  2, 2015, 16:41
Скорее всего, эта задача (она же математикам предлагалась) допускала решение путем "просто подумать".
Конечно. Задачи были взяты из журнала "Квант".
🐇

Даниэль

Цитата: mnashe от июля  2, 2015, 16:51
Цитата: Даниэль от июля  2, 2015, 16:32
Сейчас как-то более принято написать приложение на чем-нибудь вроде Objective C или Java, которая делает в точности то, что тебе нужно.
Делать больше нечего.
С задачей переключения прекрасно справляется и программа на ассемблере. Там вообще всё тривиально.
Нетривиально, правда, плавное (логарифмическое) управление яркостью с помощью ШИМ. Это действительно была интересная задача. Но я её уже давно решил.
Задача, которую мне сейчас надо было решить, к програмиированию не имеет никакого отношения. Мне нужно было правильно подключить каждый из 20 светодиодов, расположенных по кругу.
Печатная плата уже нарисована (по одному из множества вариантов, выданных программой).
Вот это тебе делать нечего, уж прости :) Если бы я взялся заниматься чем-то подобным на работе, меня бы шеф сразу остановил. Просто потому, что там вопрос звучит так: что дешевле - потратить 100 долларов на готовое устройство и 10 минуты на его программирование или же потратить 100 долларов на час работы программиста. Потому, собственно, у нас и нет устройств с языком Java за 35 центов: не потому, что их производить дороже, а потому, что это никого не интересует. Просто некому будет для них программировать - не найдется программистов, работа которых будет оцениваться в таких единицах. Исключение, конечно, составляют сверхпопулярные устройства, где одна и та же программа тиражируется в миллионах экземпляров; там цена и правда может быть очень маленькой.
Программист из Израиля, Кармиэль

Flos

Offtop
Цитата: mnashe от июля  2, 2015, 15:58
Имеется трёминутный таймер. В ванной висит. Помогает детям чистить зубы три минуты.

Цитата: Даниэль от июля  2, 2015, 16:32
Жуть какая :) Мне казалось, такие развлечения ушли в прошлое лет 30 назад. А поди ж ты... Любители вроде тебя все еще такое конструируют.

У меня для тех же целей в ванной песочные часы на 3 минуты.
:-[

Даниэль

Цитата: _Swetlana от июля  2, 2015, 16:57
Цитата: mnashe от июля  2, 2015, 16:38
Цитата: _Swetlana от июля  2, 2015, 16:26
А если программа бы не выдала ни одного решения? Где гарантия, что их действительно нет?
Это исключено, поскольку программа перебрала все возможные варианты (больше миллиарда — 1,147,715,240).
Про ту программу автор тоже думал, что она перебрала все возможные варианты. Перебор геометрических вариантов вещь довольно сложная, можно и обшибицца. Ещё более интересен перебор всех вариантов замощения бесконечной плоскости.

О чем я и говорю.
ЦитироватьА вот на доказательство того, что этот набор и правда достаточен, т.е. что перебрал ВСЕ возможные случаи, у меня ушло полгода.
Программист из Израиля, Кармиэль

_Swetlana

Цитата: Даниэль от июля  2, 2015, 16:57
А что касается искусства, то математика всегда и с самого начала - чистое искусство.
Когда я пришла на форум, захотелось мне где-то что-то написать. О чём знаю. Вот нашла я какую-то математическую тему и написала, что математика не является естественной наукой. Меня повалили и дружно пинали ногами  ;D
🐇

antic

— Боже мой, боже мой, чем вы вынуждены заниматься! Но я спрашиваю вас, кто-то все-таки летит ведь к звёздам! Где-то строят мезонные реакторы! Где-то создают новую педагогику! Боже мой, совсем недавно я понял, что мы даже не захолустье, мы — заповедник! В глазах всего мира мы — заповедник глупости, невежества и порнократии.
АБС «Хищные вещи века»

VLX

Цитата: _Swetlana от июля  2, 2015, 17:05
Меня повалили и дружно пинали ногами  ;D
Интересно, чем пинали аргументировали...

Даниэль

Цитата: _Swetlana от июля  2, 2015, 17:05
Цитата: Даниэль от июля  2, 2015, 16:57
А что касается искусства, то математика всегда и с самого начала - чистое искусство.
Когда я пришла на форум, захотелось мне где-то что-то написать. О чём знаю. Вот нашла я какую-то математическую тему и написала, что математика не является естественной наукой. Меня повалили и дружно пинали ногами  ;D
Разумеется, не является! Вы разве не знали?
Все науки делятся на 4 группы.
1) Естественные науки. Физика там, химия, биология, геология.
2) Неестественные науки. К примеру, шекспироведение. Шекспира читать надо, а не науки вокруг него разводить.
3) Противоестественные науки. Ну это все знают: научный атеизм, история КПСС и т.п. Сегодня я бы добавил "науку каббалу" Лайтмана.
4) Сверхъестественные науки. Это, по сути, одна наука, и это математика.
Программист из Израиля, Кармиэль

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр