Много лет всё глубже и глубже погружаюсь в темку "нужна ли математика программисту".

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


2021-07-22 12:46

разработка по

Много лет всё глубже и глубже погружаюсь в темку "нужна ли математика программисту". Ну то есть, абсолютно точно знаю, что абсолютно точно нужна, но пока не могу доказать это ни формально, ни инженерно. Имею в виду конечно хорошую математику, уровня выпускных курсов топовых университетов мира уровня MIT CMU etc по computer science.

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

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

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

https://vk.com/wall-152484379_3406

что было доказано научно.

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

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

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

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

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

Но вы зря смеётесь, кстати.

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

=

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

C ходу для начала, уже много раз говорил, и не устану рекомендовать: Рэймонда Смаллиана прорешайте все задачи из его книг "Алиса в Стране Смекалки", "Принцесса или Тигр", " Чародей и магия бесконечности. Развивающие загадки", "Все дело в логике" и др., и все остальные вдумчиво изучите, особенно два тома "Вовеки неразрешимое".

Кстати, за последние годы переведён ещё десяток его лучших книг!

Всё наследие Смаллиана, в общем, изучайте. Начьните! )))

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

=

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

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


Источник: vk.com

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