Сьогодні розглянемо чергове досить популярне запитання від людей, які думають переходити в програмісти: “Чи потрібно програмісту знати математику?”. Останнім часом дане питання зачастило у моїй емейл скриньці та серед приватних повідомлень в соцмережах, тому саме час розширено дати відповідь.

Що розглянемо в даній статті? По-перше, розберемось із термінами, щоб зрозуміти, що таке математика і якою вона буває. Кожен із програмістів, хто дає відповідь на дане запитання, має на увазі “свою” математику. Тому важливо дане питання уточнити.

Далі розберемось, яку саме математику потрібно знати програмісту. Також, які області математики потрібно знати для різного роду програмістських задач. Поділюсь своїм досвідом. Ну і, звісно, розберемось із необхідним мінімумом для будь-якого технічного спеціаліста в IT.

Крім існуючого власного досвіду, за останні дні я перелопатив масу статей і перепитав багато знайомих програмістів, щоб дізнатись про різні області програмування та математики, спробувати співставити їх і надати вам якомога повнішу та об’єктивнішу картину.

Отже,

Яка буває математика?

Якщо спробуєте загуглити про те чи потрібна математика програмісту, то отримуватимете як позитивні, так і негативні відповіді. Справа тут не в тому, що хтось говорить неправду, а лише в тому, що кожен із опитуваних під словом “математика” має власне поняття і набір знань. Тому давайте першим ділом розберемось із тим, яка буває математика.

Елементарна математика – це та математика, яку ми вивчаємо в школі. В неї входить арифметика, алгебра і геометрія.

Вища математика – це та математика, яку ми вивчаємо у ВУЗі. Залежно від того, в якому ВУЗі ви навчались (навчаєтесь, чи будете навчатись) вища математика може бути представлена коротко одноіменним предметом Вища Математика, або містити цілий ряд предметів (як у моєму випадку, я навчався на механіко-математичному факультеті):

  • математичний аналіз,
  • диференціальні рівняння,
  • статистика і теорія ймовірностей,
  • топологія,
  • дискретна математика,
  • аналітична геометрія,
  • лінійна алгебра і геометрія,
  • дискретна математика,
  • математична логіка,
  • функціональний аналіз та інтегральні рівняння,
  • теорія чисел;
  • і ще багато інших…

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

То ж давайте спочатку розберемось, що повинен знати абсолютно кожен технічний IT спеціаліст.

Необхідний мінімум для кожного

Я сам закінчив механіко-математичний факультет при Національному Університеті імені Івана Франка у Львові. Але за всю практичну діяльність в ролі  веб-програміста, починаючи з середини 2005 року, використав знання вищої математики (тієї, якої мене навчали в універі) 3-4 рази. Без регулярного використання знань теорії ймовірностей, які були необхідні у цих випадках, прийшлось підняти книги і пригадати призабуту теорію.

Решту свого часу я програмував і шкільної математики в основному вистачало. Скажу більше, далеко не вся шкільна математика мені пригодилась. Не траплялись проекти, де б потрібно було застосувати знання, наприклад, шкільної геометрії.

Основна задача програміста – це пояснити комп’ютеру, що робити на одній із мов програмування. А для цього вищої математики не потрібно. Єдиний обов’язковий предмет вищої математики необхідний при цьому – це математична логіка. Без неї неможливо будувати умовні вирази. І навіть її потрібно знати не більше, ніж на 20%.

Елементарна математика потрібна усім технічним спеціалістам. Навіть верстальщикам, щоб рахувати і переводити одиниці вимірювання, обраховувати проценти і т.д.

Ось список скілів необхідний кожному технічному IT спеціалісту:

  • операції додавання, віднімання, множення і ділення;
  • знаходження остачі від ділення;
  • розуміння парних та непарних чисел;
  • робота з процентами;
  • негативні числа;
  • розуміння десяткової та двійкової систем числення;
  • система координат;
  • додайте свої елементи в коментарях.

Це короткий список, який потрібно застосовувати доволі часто. Усі інші знання математики дуже сильно залежать від тієї задачі, над якої ви працюватимете.

Тому, якщо ви вже володієте цим мінімумом, можна сміливо переходити до практики програмування. А далі, по-ходу діла, добирати того, що бракує. Включно із знаннями математики. Як елементарної, так і вищої.

Рухаємось до наступного, не менш цікавого, запитання:

Для чого вища математика?

Є цілий ряд високотехнологічних задач, які вимагають знань вищої математики. Але процент таких задач значно менший, ніж тих, які не вимагають знань вищої математики.

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

  • 2d/3d графіка та фізика в іграх;
  • криптографія;
  • аналіз даних та прогнозування;
  • розпізнавання моделей: зображень, аудіо, відео;
  • штучний інтелект, нейронні мережі, машинне навчання.

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

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

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

  • дискретна математика,
  • математична логіка,
  • теорія ймовірностей.

На завершення цієї секції хочу сказати, що саме знання предметів вищої математики, навіть, якщо не використовувати їх на практиці, дасть вам переваги при розв’язуванні навіть простіших проблем. Часто буває команда різних спеціалістів, частина з яких розв’язують складні математичні завдання, а інші – чисто програмістські, інфраструктурні. В таких випадках знання вищої математики дозволяє легше розумітись із іншими в команді, говорити на спільній мові, спільними категоріями.

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

Крім того, вища математика дає вибір і перевагу над іншими для отримання складних і цікавих проектів. Знову ж таки, якщо ви хочете працювати над високотехнологічними проектами та продуктами.

Підсумуємо

Таким чином, більшість програмістів та технічних IT спеціалістів на ринку не використовують вищу математику у своїй повсякденній роботі. Я б оцінив співвідношення як 80/20% число спеціалістів, яким вистачає елементарної математики до тих, хто використовує вищу.

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

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

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

***

На завершення даю ще кілька лінків для подальших роздумів:

Математику уже тому варто вивчати, що вона розум в порядок приводить. М. Ломоносов

А що ви думаєте про необхідність математики програмісту?