Решён
Какие знания по логике требует программирование?

Алгоритмист Алгоритмы
11.2k
6

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

В школе математику знал средне, логику как предмет вообще не проходили. Сейчас мне 26, работаю не в IT.

Собственно вопрос: какие конкретно разделы логики и математики нужны для программирования? Не в теории "математика развивает мышление", а прям конкретные темы которые стоит подтянуть. И насколько глубоко в них нужно погружаться?

Решение
78
Эксперт • 4 ответа

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

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

  1. Булева алгебра (логические операции, таблицы истинности, законы де Моргана). Это фундамент, без которого ты будешь писать кривые условия. Займет 2-3 дня.

  2. Дискретная математика (множества, отношения, графы, деревья). Это прям ядро Computer Science. Без понимания графов ты не поймешь ни алгоритмы поиска, ни структуры данных. Это на 2-4 недели.

  3. Математическая индукция. Рекурсия это она и есть, вид сбоку. Когда поймешь индукцию, рекурсия перестанет казаться магией.

  4. Комбинаторика (перестановки, сочетания, размещения). Базовый уровень, без погружения в генераторные функции.

  5. Основы теории сложности (O-нотация). Не нужно доказывать теоремы, но понимать почему один алгоритм работает за O(n), а другой за O(n^2) надо.

Формальная логика (предикаты, кванторы, силлогизмы) нужна только если пойдешь в функциональное программирование или верификацию. Для прикладного кодинга это overkill.

По ресурсам: курс "Математика для программистов" на Хабре, книга Кнута "Конкретная математика" (тяжелая, но лучшая), ну или Khan Academy если по-английски читаешь.

Аватар Алгоритмист

Спасибо огромное за структуру! Про математическую индукцию вообще не слышал, пошел гуглить. Курс на Хабре это который от JetBrains Academy?

43
Эксперт • 2 ответа

Программирую 15 лет и ни разу в жизни не открывал учебник по логике. Серьезно.

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

Рекурсия не понятна? Открой 20 задач на рекурсию на LeetCode easy уровня и решай. К десятой задаче щелкнет. Никакая "математическая индукция" тебе не поможет если ты руками не прочувствуешь как стек вызовов работает.

Математика нужна только тем кто пишет движки, ML или криптографию. Остальным 90% программистов хватает арифметики уровня 6 класса.

Аватар Анна Михайловна

Ну такое себе. Без понимания сложности алгоритмов ты будешь писать код который падает на 10к записей. Видел таких "практиков" на проде, потом за ними переписываешь.

Аватар Ксюша Книжный Клуб

Речь про джуна который учит питон, а не про архитектора в Яндексе. Ему сейчас важнее не бросить, а не O-нотацию зубрить.

55
Участник • 2 ответа

Вопрос по сути распадается на два уровня.

Первый: формальная логика как дисциплина. Исчисление высказываний, предикатов, кванторы, доказательства. Этот уровень тебе пока не нужен. Он пригодится если захочешь разобраться в Haskell, Coq, верификации программ или формальной семантике языков. Для 95% повседневного кодинга это избыточно.

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

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

Если нужен один ресурс: Rosen, Discrete Mathematics and its Applications. Есть русский перевод. Тяжеловато, но покрывает все нужные темы.

15
Участник • 4 ответа

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

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

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

0
Участник • 3 ответа

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

Написать ответ

Премодерация гостей

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

Будьте вежливы и соблюдайте правила платформы.