Математика і розробка: які знання допоможуть програмувати краще
Привіт! Мене звати Дмитро Ковригін, я відповідаю за iOS-розробку в tech/uklon. У мене немає профільної освіти у сфері розробки програмного забезпечення, і довгий час я думав, що будуватиму академічну кар’єру математика. Навіть навчався в аспірантурі за напрямом функціонального аналізу. Однак програмування було одним з моїх численних хобі, і в якийсь момент рішення було прийнято: змінити все кардинально на користь кар’єри в IT. Однак не варто поспішати з висновками, то рішення не було простим.
Якщо ви також обрали для себе майбутнє розробника, але все ще до кінця не розібрались з питанням, навіщо вам звідусіль намагаються нав’язати потребу вивчення такої, можливо, не цікавої для вас галузі знань, як математика, пропоную до вашої уваги свій поверховий огляд математичного ландшафту. Якраз зважаючи на потреби сучасного працівника IT-сфери.
Вступ
Перше, що одразу ж можна стверджувати: якщо домен не вимагає глибоких знань у математиці, це нормально, так буває. Сучасний інструментарій, доступний розробникам, сильно еволюціонував з роками і поріг входу для початку його використання знизився. Але разом з тим зросли й наші очікування від технологій. Ми хочемо гарні, інтуїтивно зрозумілі інтерфейси й не хочемо знати, які там сервери де закриті на обслуговування, нам не хочеться бачити сині екрани з помилками та все має синхронізуватися між пристроями без нашої участі через хмари, що б то не значило.
Припустимо, тим не менш, ваші амбіції не задовольняються простим використанням створених кимось інструментів, згідно написаних кимось інструкцій. І питання все ж постало: які розділи математики вам можуть знадобитись, відповідно до ваших інтересів у розробці програмного забезпечення?
Відповідаючи на питання буквально, яка математика потрібна розробнику, — передусім дискретна. Пройдемось далі по окремих розділах, спробуємо зрозуміти, що для чого може знадобитись, хоч би теоретично, а де зможемо — подивимось на конкретні приклади.
Розділи математики, які знадобляться розробнику
Алгоритми
Який би не був надворі рік, кожному розробнику варто розуміти поняття складності алгоритму. Навіть якщо не кожному з нас судилося написати власну реалізацію алгоритму сортування, треба знати, навіщо вони існують різні.
Зауважу, що для характеристики алгоритму не зовсім підходять поняття «швидкий» чи «повільний», складність алгоритму визначається через те, наскільки більше елементарних операцій знадобиться в найгіршому випадку для його завершення при зростанні обсягу вхідних даних. Визначення формулюється таким чином для того, щоб максимально стосуватись саме алгоритму, а не часу його роботи на конкретному пристрої чи часу виконання для конкретних вхідних даних.
Навіть якщо про алгоритми нам доведеться згадувати хіба що для проходження технічного інтерв’ю, погодьтесь, дивно було б бачити освічену людину, що не вміє писати. Хоч і ці навички нам потрібні дедалі рідше.
Комбінаторика
Перш ніж рухатися далі, потрібно розібратись з деякими поняттями комбінаторики. Наприклад, скільки існує варіантів розташувати в різному порядку n елементів. Або скільки існує варіантів обрати m елементів з n, зважаючи на порядок розташування між собою вибраних елементів і не зважаючи на нього? Скільки тест-кейсів додасть в регрешн-сьют n фіча-тоглів?
Вміння відповідати на подібні питання нам знадобиться, наприклад, для розрахунку ймовірностей дискретних подій.
Теорія ймовірностей
Бачу корисним орієнтуватись в поняттях теорії ймовірності, наприклад, якщо цікавитесь розробкою ігор. Зважаючи на те, що будь-яка сучасна платформа дасть вам готове рішення щодо отримання випадкової величини — то хоча б на рівні розуміння того, що ймовірність одночасного настання незалежних подій є добутком їх ймовірностей, а ймовірність настання однієї з переліку несумісних подій є сумою їх ймовірностей.
Теорія ігор
Продовжуючи та завершуючи тему розробки ігор, для балансування складності гри знадобиться розуміння понять і висновків з однойменної галузі. Якщо, звичайно, не збираєтесь винайти власний велосипед.
Теорія графів
Навіть якщо ваша діяльність не пов’язана з жодною класичною задачею теорії графів, як-от прокладання маршрутів чи побудова графів соціальних контактів, цілком можете почути про граф не вивільнених з пам’яті об’єктів. Тож як освічений розробник принаймні знайте, чого він називається графом.
Тригонометрія
Навряд чи здивую когось, якщо скажу, що для орієнтації у просторі нам знадобиться тригонометрія. Маючи на руках інформацію про кути та напрямки, довжини деяких сторін геометричних фігур, але не всіх, якщо наявна інформація описує ситуацію в повному обсязі, все, що нам залишається вміти, — це вільно виводити одні значення з інших.
Також може знадобитися вміння конвертувати полярні координати в декартові й навпаки, якщо раптом різні джерела даних використовують різні підходи.
Лінійна алгебра
Коли ми маємо фігуру у просторі й хочемо, наприклад, зобразити її обернутою вздовж вісі, аби масштабувати її, відобразити відзеркаленою чи зсунути, то нам треба скористатися афінною трансформацією. Залежно від технології, яку ми використовуємо, це може бути і неявно для нас, але така операція в загальному випадку зводиться до перемноження векторів та матриць.
Як більш просунутий приклад можна взяти доповнену реальність, адже робота з нею зводиться до маніпулювання тією ж 3D-сценою, де замість віртуальної камери маємо справжню.
Криптографія
Чи передаєте ви інформацію мережею, чи зберігаєте на персональному пристрої користувача, варто потурбуватись про необхідність гарантувати її конфіденційність, цілісність та автентичність. На такий випадок варто розібратись з прийнятою в індустрії термінологією, найкращими практиками та актуальними рекомендаціями щодо використання сучасних алгоритмів для запобігання витоку інформації та своєчасного розпізнавання спроб отримання до неї несанкціонованого доступу або модифікації.
Наприклад, для початку можна подивитись безкоштовний курс на Coursera.
Blockchain
Не будемо відходити далеко від теми криптографії та зупинимось на одному з прикладів її застосування — технології блокчейн. Яким би не було наше ставлення до найпопулярніших сьогодні прикладів використання блокчейну, сама технологія однозначно заслуговує на увагу і майже напевно ще знайде багато застосувань у майбутньому. А зводиться вона до децентралізованого механізму гарантування правдивості інформації, на відміну від досі поширеного підходу з єдиним джерелом правди, як-от серверу чи бази даних.
Статистика
Детерміністичні алгоритми можуть багато чого корисного. Але вони не зможуть розпізнати об’єкт на фотографії, впізнати мелодію, розсортувати дані за неочевидними критеріями або пройти тест Тюрінга. Для цього нам знадобляться ML або AI із недетерміністичними алгоритмами, що формулюються в статистичних термінах.
Для інтуїтивного розуміння типової задачі з машинного навчання можемо розглянути приклад задачі кореляційно-регресійного аналізу. Уявімо як вхідні дані пари числових значень, наприклад залежність якогось фактору від часу, з яких нам цікаво вивести закономірність для побудови подальших прогнозів. Що ми для цього будемо робити? Намагатись вловити тренд, для початку — лінійний, параболічний, експоненціальний тощо. Потім підберемо параметри, що дають найменшу похибку при спробі вгадати наперед відомі нам значення, і з моделлю-переможцем можна буде робити наші прогнози вже щодо невідомих значень, підставляючи в неї значення фактору, який нас цікавлять.
У складніших сценаріях факторів, що впливають на результат, ставатиме все більше, а тренди вловити на око буде все складніше. Гарна новина в тому, що ітераційний процес підбору найкращих параметрів для найбільш підхожої моделі може бути автоматизований і продовжуватись, поки не досягне бажаного рівня впевненості. Це ми й називаємо навчанням моделі. А алгоритми розв’язання подібних задач будуть спиратися на поняття моди, медіани, математичного очікування, нормального розподілення, дисперсії тощо. Моє розуміння теми базується на курсі від Coursera.
Перетворення Фур’є
Уявімо, ми маємо оцифрований аудіосигнал, записаний в термінах гучності за каналами на момент часу. Як з огляду на це відповісти на питання, яку частоту має звуковий сигнал? Як накласти фільтри на аудіосигнал, наприклад прибрати зайвий шум з відомого діапазону частот? Якщо подібні питання є для вас актуальними — вам час ознайомитися з поняттям перетворення Фур’є, зокрема з доступними вам варіантами реалізації швидкої реалізації алгоритму — FFT. Приклад джерела із загальної теорії — курс від Stanford. Попереду цікавий шлях, я вам майже заздрю!
Теорія категорій
Розробники пишуть код, який компілюється або інтерпретується спеціальною програмою — компілятором або інтерпретатором відповідно. Але і ці спеціальні програми, своєю чергою, теж пишуть програмісти. І написання компілятора — ціла галузь в комп’ютерній науці, яка має свої теоретичні обґрунтування в теорії категорій. Для тих, хто є розробником і хоче зануритися у найабстрактнішу з математичних теорій, є книга під назвою «Теорія категорій для програмістів» і курс лекцій від того ж автора.
А навіть якщо розробка власного компілятора вас не цікавить, можливо, тема DSL — мов, специфічних до домену — є ближчою. Ми натрапляємо на них частіше, ніж може здатися: регулярні вирази, LINQ, форматовані рядки, засоби задання розмітки, як-от VFL від Apple тощо.
Доменно-залежні математичні галузі
Можу собі уявити розробників, які займаються розробкою програмного забезпечення з науковою метою, де може знадобитись і теорія груп, і топологія, і диференційні рівняння, і взагалі все, що завгодно, але то вже буде зайвим у контексті нинішньої теми.
Яким ще може бути програмування
Маєте бажання навчитись програмувати на квантовому комп’ютері, але все ще не маєте свого? IBM Quantum Experience — ресурс, який не тільки пояснює, як працює квантовий комп’ютер від IBM, не тільки дає необхідний теоретичний мінімум, а й дає можливість спробувати свої сили або з симулятором, або ж геть зі справжнім дивом техніки! Щоправда, на кожному кроці нас попереджають, що через необхідність підтримувати наднизьку температуру для збереження властивостей суперпровідника нам не можуть гарантувати правильність результатів.
Щодо необхідної в цьому напрямі математики, IBM стверджує, що для роботи з квантовими бітами достатньо розуміння лінійної алгебри, адже їхні значення в суперпозиції описуються лінійною комбінацією 0 та 1, а операції над к’юбітами знову зводяться до перемноження векторів та матриць. Навіть дають посилання на курс
лінійної алгебри, якого має вистачити для початку.
Далі залишатиметься тільки розібратися з квантовою фізикою.
Обговорення домену застосування квантових комп’ютерів можна послухати у доволі свіженькому випуску подкасту Mindscape. Якщо стисло: квантові комп’ютери сьогодні надзвичайно добре підходять для моделювання квантових процесів. Однак про квантові комп’ютери загального призначення наразі мова все ще не йде.
А якою ще буває математика
Скажу ще кілька слів про математику, яка зазвичай залишається поза увагою IT-фахівців, і порекомендую деякі джерела, де можна дізнатись більше. В іншому разі може скластись хибне враження, що вся математика зводиться до формул та розрахунків.
До того ж, на думку автора, математика куди цікавіша, коли в ній з’являються нескінченності, як раз те, чого зовсім позбавлена дискретна математика.
Numberphile
Популярне джерело різних історій з буденності пересічних математиків. Типове відео від Numberphile складається з того, щоб взяти нічим, здавалось би, непримітне число і розповісти про нього те, що зазвичай мало хто очікує.
Для прикладу наведу відео про число −1/12.
3Blue1Brown
Математика часто вимагає добряче напружити увагу. Неперевершені анімації, створені на базі manim, з цим допомагають. На щастя, існує цілий канал, який цьому присвячений. Пояснення на будь-який смак: лінійна алгебра, математичний аналіз і диференціальні рівняння, фрактали, комплексні числа і кватерніони, ряди Фур’є і Тейлора та багато іншого.
Banach-Tarski paradox від Vsauce
Канал не присвячений математиці, але це конкретне відео на цілком математичну тему є доволі популярним. Хочу прокоментувати, оскільки бачу, як після перегляду цього відео люди вкладають у парадокс Банаха-Тарського більше сенсу, ніж в ньому є. Як і у випадку з числовою множиною, для якої неможливо визначити «розмір», це доволі сенсаційне твердження є лише прикладом наслідків від аксіоми вибору і більше, ніж все інше, є контраргументом до її прийняття.
Incompleteness theorem від Veritasium
Коли ми роками тільки й чуємо про математику в термінах формул і законів, зрозумілим є враження, ніби в математиці немає проблем, всі відповіді відомі, а нескінченні лише можливості. Колись так думав і дехто з математиків. Наразі нам відомо і про обмеженість можливостей будь-якої системи формальної логіки, та й список питань, що досі чекають своїх розв’язань, далеко не порожній.
То ж які знання з математики точно потрібні сучасному розробнику? Впевнений, що будь-яка спроба однозначно відповісти на це питання отримає контрприклад успішної кар’єри, де ті чи інші розділи таки не були обов’язковими. Однак доти, доки технології спиратимуться на математичний фундамент, розуміння їх теоретичних засад даватиме очевидні переваги гнучкості у виборі домену, можливості швидше розбиратись у нових технологіях, розумінні меж їх можливостей. До речі, не факт, що технології завтрашнього дня вимагатимуть розуміння курсу прикладної математики дня вчорашнього.
А чи доводилось вам у ролі розробника згадувати уроки з математики? Діліться своїми прикладами у коментарях і дякую за увагу!
139 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів