Навіщо програмісту математична база та які розділи знадобляться на практиці

Мене звати Олександр Катруша, я працюю Senior Engineering Manager у компанії Innovecs. Я закінчив магістратуру кафедри прикладної математики КПІ у 2003 році, але сьогодні навряд чи візьму складну похідну, не згадуючи вже про диференціальні рівняння чи перетворення Лапласа. Втім маю дещо сказати про користь математики для інженерів.

Для програмування

Виконуючи кожен рядок коду, ми використовуємо набагато більше математики, ніж може здаватися. Адже з математично-шовіністичної точки зору програмування-у-малому — це її підрозділ. Машини Тюрінга, формальні граматики та числення предикатів, алгоритми та структури даних, реляційна алгебра як основа відповідних баз даних, теорія категорій та лямбда-числення у функціональних мовах, теорія множин і теорія об’єктів як основа ООП та багато інших математичних дисциплін — це теоретичне серце програмування.

Так, колеги, коли ви пишете код — ви займаєтеся математикою, хоча наше покоління щасливо стоїть на плечах гігантів: учених, електронників, програмістів, а тому може дозволити собі перейматися прикладними та комерційно цікавими задачами, не думаючи про абстракції математичних теорій і не вигадуючи власних граматик, алгоритмів, компіляторів, процесорів, бібліотек, СУБД й операційних систем.

Неперервна математика добре моделює фізичний світ. Матан, теорія ймовірностей, лінійна алгебра, функан, ТФКЗ, диференціальні рівняння — без них неможливо змоделювати обтікання профілю крила повітрям чи розподіл тепла всередині процесора. На жаль, наша промисловість не генерує достатньо платоспроможного попиту на такі послуги, і їх рідко віддають на аутсорс. Тому більшість проєктів в ІТ-індустрії працює з базами даних, текстовими та бінарними файлами, іншими структурами, що належать до царини дискретки.

Алгоритмічне мислення притаманне всім Homo sapiens, тому програмування середнього рівня можна навчити й гуманітарія чи людину без вищої освіти. Проте рано чи пізно спеціаліст без відповідної підготовки зіткнеться зі своєю «стелею» складності. Небагато пересічних програмістів може пояснити теоретико-множинну сутність left outer join та правильно порахувати кількість записів у його результаті. А брак розуміння декартового вибуху при запитах у базу вряди-годи призводить до величезних проблем із перформансом чи, наприклад, до спроб використання NoSQL баз даних для аналітики.

Так, на наш вік роботи з клепання сайтів і прикручування фреймворків має вистачити для заробітку на хліб із маслом. Якщо ж ви прагнете самореалізації у розв’язанні справді цікавих і складних задач та певного кар’єрного зростання, то маєте оперувати абстракціями та відповідним математичним апаратом.

Спробуйте написати свій компілятор, СУБД, 3Д-моделер, трейдинговий бот, обробник сигналів томографії, контролер бойового дрона, алгоритми криптозахисту чи пошуку таксі у великому місті без застосування математики.

З-поміж прикладів математично містких задач, з якими я стикався: алгоритми українського стандарту цифрового підпису, що базується на еліптичних кривих, операції з матрицями при обробці сигналів сканера зубних і вушних протезів, обчислення рангу гравців у покер залежно від початкової комбінації карт і результату гри, математична аналітика ефективності рекламних кампаній.

Звичайно, у наших аутсорсингових реаліях не так багато задач, для яких потрібно знати теорію з підручника. Але ж і в «найфаангішових» ФААНГах науковою роботою займається чи не один відсоток спеціалістів, всі інші — цілком «галерною» інженерною реалізацією напрацьованих моделей.

Логіки, формальні мови, лінійна алгебра, матан, теорія множин, теорія графів, теорія алгоритмів, теорія складності, теорія ймовірностей та комбінаторика — ось неповний список should, якщо не must have для професійного програміста.

Для мислення

Вчорашнім і сьогоднішнім студентам важко побачити зв’язок між роками, витраченими на математичні теорії, та їх зарплатою чи кар’єрною ланкою в ІТ-індустрії за кілька років після випуску. Вони помічають сотні вакансій на Java, .NET та Angular і одиниці, де згадується математика.

Погоджуюся, що не варто інвестувати забагато часу та сил у дисципліни, які найімовірніше вам не знадобляться. Однак досвід роботи з високими абстракціями, логічне та критичне мислення — чи не найголовніший результат математичної освіти. Якщо ви любили уявляти собі нескінченновимірний простір Гілберта чи доведення теореми про нерухому точку на лекціях з функану, ви з легкістю розберетеся в задачах нині трендового машинного навчання, що є, по суті, оптимізацією у багатовимірному просторі.

Як сказав про одного зі своїх учнів великий математик Гільберт: «Він став поетом — для математики в нього бракувало уяви». І ця уява працює далеко за межами наукових чи технічних задач — це вміння оцінити проєкт, змоделювати або побудувати бізнес, архітектуру рішення, процес CI/CD, потік задач у Kanban чи поведінку партнерів із перемовин, вміння швидко розбиратися у нових парадигмах і мовах програмування та предметних галузях.

Математика впорядковує розум. Чи є щось більш практичне у нашій роботі, ніж щоденне застосування класного мислення?

Для світогляду

Найменш прикладний і формалізований, проте найцікавіший аспект. Свого часу величезне враження справили на мене теореми Геделя. Наша викладачка дискретної математики, нині покійна професорка Тетяна Архипівна Таран, дозволила собі такий філософський висновок з них: «На питання „Чи існує Бог?“ можна відповісти „Так“ чи „Ні“, водночас обидві відповіді можуть бути правильними». Адже у будь-якій достатньо повній формальній теорії, як показав Гедель, є істине твердження, яке неможливо довести у межах її самої. Свого часу це відкриття зробило революцію у математиці та загалом у науці. Виявилося, що спроби цілком формалізувати все навколо приречені на невдачу через саму сутність математики.

Важко збагнути всю глибину цих тверджень на другому курсі інституту. З життєвим досвідом помічаєш, що це стосується багатьох цікавих і важливих питань. Чому неможливо ухвалити закони про виконання законів? Чому неможливо автоматизувати роботу суддів чи законодавців? Чому не дуже працюють смартконтракти чи системи KPI у бізнесі? Чому неможливо винайти єдино правильне релігійне чи філософське вчення? Чому наука нічого не доводить? Чому неможливо написати універсальну програму, яка буде писати програми? Чи можливо створити сильний штучний інтелект на фон-нейманівських машинах? Який зв’язок між генетичним кодом і творами Баха? The truth is out there — інтерпретувати істинність у формальних системах може тільки людина (чи радше людська, поки що, свідомість).

Для зацікавлених переконливо рекомендую книги наших видатних сучасників: The Emperor’s New Mind Роджера Пенроуза, більш популярну і не менш захопливу Gödel, Escher, Bach Дугласа Гофстедтера та Mind and Nature: A Necessary Unity від культового Грегорі Бейтсона.

Теорія ігор також видавалася занадто абстрактною та незрозумілою під час навчання. А от кілька років тому на одному подиху передивився відповідний курс Єльського університету на Coursera. Чудове викладання, професорська англійська та життєві приклади. Це дало непогане розуміння складності та динаміки взаємодії покупця та продавця, гравців за гральними столом, воїнів на полі бою, менеджерів під час перемовин чи партнерів у стосунках. Крім того, це допомогло швидше ідентифікувати ігрові ситуації у житті та ухвалювати більш адекватні рішення щодо стратегії поведінки та своїх цілей у них.

Розглянемо більш нагальне питання. Яка ймовірність того, що людина хвора на К., якщо тест був позитивний, у популяції хворіє близько одного відсотка людей, а точність тесту становить 99% для істинно позитивних результатів і 95% для істинно негативних? За відсутності інших визначних симптомів правильна відповідь — 17%, а не 99%, як може здатися на перший погляд. Тобто позитивний тест підвищує ймовірність хвороби з 1% до всього лише 17%, навіть за такої високої точності! Надзвичайно контрінтуїтивне та водночас важливе під час пандемії знання.

Воно дає змогу не робити передчасних висновків та аналізувати всі можливі причини певних подій. Це приклад застосування баєсівського мислення, яке є одним із базових понять сучасної когнітивної науки та машинного навчання. Згодом починаєш бачити його майже скрізь: в інституті репутації, аналізі гіпотез про поведінку користувачів сайту, ухваленні рішення за відгуками на фейсбуці, до якого ресторану чи лікаря йти.

Математика відкриває багато таємниць фізичного та платонівського світу навколо і всередині нас. Тож любіть і вчить математику — це не тільки хліб, тренування вашого мислення та світогляду, а й неабияке естетичне задоволення.

Похожие статьи:
Сьогодні, 1 листопада, стартуємо проєкт для української геймдев-індустрії — gamedev.dou.ua. Це буде не просто ще один розділ на сайті,...
Гейміфікацію вже давно застосовують у навчанні. Наприклад, це може бути заробляння зірочок з переходом на нові рівні, якщо...
Артем Быковец — QA Lead & Scrum Master, работает в IT c 2007 года. С осени этого года решился на «волонтерство» — стал...
Здравствуйте, читатели! Меня зовут Алексей, я работаю JavaScript-программистом. Ранее я писал о том, как...
У зв’язку з повномасштабним вторгненням росії з 24 лютого в Україні діє воєнний стан, а Указом...
Яндекс.Метрика