Сьогодні розглянемо чергове досить популярне запитання від людей, які думають переходити в програмісти: “Чи потрібно програмісту знати математику?”. Останнім часом дане питання зачастило у моїй емейл скриньці та серед приватних повідомлень в соцмережах, тому саме час розширено дати відповідь.
Що розглянемо в даній статті? По-перше, розберемось із термінами, щоб зрозуміти, що таке математика і якою вона буває. Кожен із програмістів, хто дає відповідь на дане запитання, має на увазі “свою” математику. Тому важливо дане питання уточнити.
Далі розберемось, яку саме математику потрібно знати програмісту. Також, які області математики потрібно знати для різного роду програмістських задач. Поділюсь своїм досвідом. Ну і, звісно, розберемось із необхідним мінімумом для будь-якого технічного спеціаліста в IT.
Крім існуючого власного досвіду, за останні дні я перелопатив масу статей і перепитав багато знайомих програмістів, щоб дізнатись про різні області програмування та математики, спробувати співставити їх і надати вам якомога повнішу та об’єктивнішу картину.
Отже,
Яка буває математика?
Якщо спробуєте загуглити про те чи потрібна математика програмісту, то отримуватимете як позитивні, так і негативні відповіді. Справа тут не в тому, що хтось говорить неправду, а лише в тому, що кожен із опитуваних під словом “математика” має власне поняття і набір знань. Тому давайте першим ділом розберемось із тим, яка буває математика.
Елементарна математика – це та математика, яку ми вивчаємо в школі. В неї входить арифметика, алгебра і геометрія.
Вища математика – це та математика, яку ми вивчаємо у ВУЗі. Залежно від того, в якому ВУЗі ви навчались (навчаєтесь, чи будете навчатись) вища математика може бути представлена коротко одноіменним предметом Вища Математика, або містити цілий ряд предметів (як у моєму випадку, я навчався на механіко-математичному факультеті):
- математичний аналіз,
- диференціальні рівняння,
- статистика і теорія ймовірностей,
- топологія,
- дискретна математика,
- аналітична геометрія,
- лінійна алгебра і геометрія,
- дискретна математика,
- математична логіка,
- функціональний аналіз та інтегральні рівняння,
- теорія чисел;
- і ще багато інших…
Так от. Справа в тому, що частина програмістів має на увазі елементарну математику, коли стверджує, що абсолютно кожному програмісту потрібна математика. В той час, як інші думають про вищу математику і, відповідно, відповідають на дане питання негативно.
То ж давайте спочатку розберемось, що повинен знати абсолютно кожен технічний IT спеціаліст.
Необхідний мінімум для кожного
Я сам закінчив механіко-математичний факультет при Національному Університеті імені Івана Франка у Львові. Але за всю практичну діяльність в ролі веб-програміста, починаючи з середини 2005 року, використав знання вищої математики (тієї, якої мене навчали в універі) 3-4 рази. Без регулярного використання знань теорії ймовірностей, які були необхідні у цих випадках, прийшлось підняти книги і пригадати призабуту теорію.
Решту свого часу я програмував і шкільної математики в основному вистачало. Скажу більше, далеко не вся шкільна математика мені пригодилась. Не траплялись проекти, де б потрібно було застосувати знання, наприклад, шкільної геометрії.
Основна задача програміста – це пояснити комп’ютеру, що робити на одній із мов програмування. А для цього вищої математики не потрібно. Єдиний обов’язковий предмет вищої математики необхідний при цьому – це математична логіка. Без неї неможливо будувати умовні вирази. І навіть її потрібно знати не більше, ніж на 20%.
Елементарна математика потрібна усім технічним спеціалістам. Навіть верстальщикам, щоб рахувати і переводити одиниці вимірювання, обраховувати проценти і т.д.
Ось список скілів необхідний кожному технічному IT спеціалісту:
- операції додавання, віднімання, множення і ділення;
- знаходження остачі від ділення;
- розуміння парних та непарних чисел;
- робота з процентами;
- негативні числа;
- розуміння десяткової та двійкової систем числення;
- система координат;
- додайте свої елементи в коментарях.
Це короткий список, який потрібно застосовувати доволі часто. Усі інші знання математики дуже сильно залежать від тієї задачі, над якої ви працюватимете.
Тому, якщо ви вже володієте цим мінімумом, можна сміливо переходити до практики програмування. А далі, по-ходу діла, добирати того, що бракує. Включно із знаннями математики. Як елементарної, так і вищої.
Рухаємось до наступного, не менш цікавого, запитання:
Для чого вища математика?
Є цілий ряд високотехнологічних задач, які вимагають знань вищої математики. Але процент таких задач значно менший, ніж тих, які не вимагають знань вищої математики.
Тут важливо розуміти, що кожен рід завдань вимагає своєї, абсолютно іншої галузі математики. Ось кілька напрямків, в яких без знань вищої математики буде неможливо важко працювати:
- 2d/3d графіка та фізика в іграх;
- криптографія;
- аналіз даних та прогнозування;
- розпізнавання моделей: зображень, аудіо, відео;
- штучний інтелект, нейронні мережі, машинне навчання.
Я спеціально написав важко, а не неможливо. Наприклад, сучасні інструменти розробки ігор уже надають таке середовище, яке, в більшості випадків, абстрагують розробника від низькорівневих задач, де необхідна математика. Уся фізика уже закладена в середовище розробки ігор. І лише в окремих випадках приходиться самостійно допилювати те, що ігровий двигун не може зробити. Те ж саме стосується і інших напрямків, де далеко не завжди приходиться закопуватись по вуха в матан, статистику і дискретну математику.
Якщо ви вирішили, що таки бажаєте займатись подібними проектами, а знань у ВУЗі не отримали, тоді вивчати одразу усі предмети вищої математики немає особливого змісту. В різних напрямках програмування використовуються зовсім різні області математики. Зазвичай приходиться надолужувати і довчатись безпосередньо для того чи іншого проекту.
Проте, якщо є бажання підтягнути загальний рівень по математиці, то оці три предмети вищої математики використовуються в програмуванні найчастіше:
- дискретна математика,
- математична логіка,
- теорія ймовірностей.
На завершення цієї секції хочу сказати, що саме знання предметів вищої математики, навіть, якщо не використовувати їх на практиці, дасть вам переваги при розв’язуванні навіть простіших проблем. Часто буває команда різних спеціалістів, частина з яких розв’язують складні математичні завдання, а інші – чисто програмістські, інфраструктурні. В таких випадках знання вищої математики дозволяє легше розумітись із іншими в команді, говорити на спільній мові, спільними категоріями.
Також є компанії, які без знань вищої математики не приймають взагалі. Навіть, якщо ви будете фронт-енд розробником і беруть вас на посаду, яка не вимагає цих знань. Це і Гугл і Яндекс. До речі, ось стаття із інтерв’ю Яндекс спеціалістів щодо необхідності математики.
Крім того, вища математика дає вибір і перевагу над іншими для отримання складних і цікавих проектів. Знову ж таки, якщо ви хочете працювати над високотехнологічними проектами та продуктами.
Підсумуємо
Таким чином, більшість програмістів та технічних IT спеціалістів на ринку не використовують вищу математику у своїй повсякденній роботі. Я б оцінив співвідношення як 80/20% число спеціалістів, яким вистачає елементарної математики до тих, хто використовує вищу.
Відповідно, щоб стати програмістом достатньо необхідного мінімуму перечисленого у попередній секції. Цього буде вам достатньо, щоб сміливо братись за освоєння програмування.
Якщо ж, згодом, ви відчуєте, що кайфу більше від математичних задач, складних наукових проектів – підтягуєте необхідні прогалини у вищій математиці. Аналітичний склад розуму, здатність до самонавчання та базове володіння математикою – це все, що треба для початку. Все решта можна отримати в процесі. (кажуть, що вища математика найкраще освоюється лише до 25 років, але я вірю, що це дуже персонально і залежить від людини).
Тут головне зрозуміти, що вам потрібно і від чого отримуєте задоволення. Я, наприклад, володію знаннями вищої математики, але дуже рідко користуюсь ними, тому що більше отримую задоволення від роботи із користувачами та інтерфейсами.
***
На завершення даю ще кілька лінків для подальших роздумів:
- ще одна думка про необхідність вищої математики
- відповіді програмістів різних IT компаній про необхідність математики
Математику уже тому варто вивчати, що вона розум в порядок приводить. М. Ломоносов
А що ви думаєте про необхідність математики програмісту?
Віталій, спасибі за статтю. Підкажіть, чи є застосування в програмуванні набутих знань по темі:”Похідна”?
“Вчи матан, або підеш на метан” (с) Міцгол
Машинне навчання — щоб елементарно зрозуміти про, що мова треба математика.
І в багатьох інших галузях. Тут важливий сам “математичний підхід” до розв’язання проблеми.
Так математика потрібна. (Ну якщо у вас не JS головного мозку, тоді вже лікарі не врятуюють :))
Як на мене, то математика для звичайних програмістів (не аномалій, як науковці-теоретики чи низькопробні кодери) – це ще один інструмент для вирішення задач, як і різні мови, фреймворки, бази тощо. Тобто ми ж не заучуємо всі особливості всіх мов і технологій перед тим, як почати щось робити. Але в той же час тримаємось в курсі того, що відбувається.
Так само потрібно поступати з математикою: не боятися до неї звернутись, бути в курсі які є математичні моделі та апарати і “що вони приблизно роблять”. Я ось не можу назвати себе математиком, я просто іноді не боюсь формул. Але я знаю, що якщо ти робиш щось з групами, то можливо варто звернути увагу на теорію графів, а якщо маєш справу з 3д-графікою – то варто погуглить про лінійну алгебру, всякі матриці перетворень і кватерніони.
на мою думку, той, хто мав у навчальному закладі хоча б не дуже серйозний курс вищої математики (і намагався її опанувати) – має таки перевагу над тим, хто цього не мав. Але справа тут зовсім не в знанні теорем Коші чи Веєрштраса. Справа у тому, що вища математика вчить нас думати, розвиває абстрактне та конкретне мислення і просто тренує мозок, тримає його в тонусі.
цілком погоджуюсь!
Віталій, дуже дякую за статтю!
У цьому фрагменті не працює посилання: “До речі, ось стаття із інтерв’ю Яндекс спеціалістів щодо необхідності математики.”.
дякую, поправив
Віталій,а коли буде повна серйозна стаття нарахунок знання математики майбутньому програмісту?
вже є. під тою ж адресою.
Стаття схиляє до думки, що не потрібно математики, а це ІМХО не так. Чи можна користуватися пристроєм, не читаючи інструкції? Звичайно можна.
Знання математики розширить інструментарій і дозволить знаходити ефективніші способи реалізації завдань. Також думаю, що ті, що вчили математику, насправді розвивали свої аналітичні здібності в процесі навчання. Я не програміст, а замовник і різниця в підході до роботи одразу відчувається в залежності від того чи вивчав програміст вищу математику.
В статті я намагався донести дві думки: 1. потреба саме у вищій математиці залежить від типу проекту; 2. вивчення вищої математикм завжди буде плюсом і перевагою програмісту, навіть якщо він не буде щоденно нею користуватись, що і продемонстрував наприкінці статті цитатою Ломоносова.
А щодо роботи із замовниками. То наші замовники отримують більше задоволення від співпраці з програмістом, в якого відповідні софт-скіли краще розвинуті (організація, продуктивність, ефективна комунікація, рівень англійської, пунктуальність), аніж рівень знань вищої математики.
Щодо користувачів і інтерфейсів згоден. 😉
Чудова стаття. Розставляє все ніби по поличках. Можна ще згадати про Розпізнавання образів , але там вже справді треба знати цілу купу різних математик і методик.
Дякую.
дякую! розпізнавання моделей – це якраз згадав 🙂
Цікава штука, стаття із одним словом “так” набрала більше коментарів, ніж стаття в якій вкладаю 2000 слів і 4 години часу 🙂
Власне, ТАК, тому що – математика потрібна! Можливо так склалось, що mobile/embedded девелопери з нею працюють частіше аніж веб-девелопери. Але я частенько і масово нею користуюсь – і часто з підручником – бо просто вже не пам’ятаю Як 🙂 Але суть в тому, що є задачі в яких без неї нікуди 🙂 До того ж – двійковою математикою некористувався з часів навчання – не було реального застосування.
цікаво. дякую за відповідь. у мене траплялось застосування двійкової системи числення. все залежить від проекту.
Математика потрібна всім
Если мы действительно что-то знаем, то мы знаем это благодаря изучению математики. (с)Гассенді
Кто не выучил матан, того пустят на метан
Я також гадаю, що потрібно. Рано чи пізно будь-який програміст стикнеться з математикою(навіть елементарною) чи то в самій мові програмування, чи в якихось алгоритмах і т.д. Чи потрібно знати як брати інтеграли 4 порядку або знайти суму ряду і подібне, це інше питання: напевно залежить від того чим ти хочеш займатись, проте мінімальний базис має бути обов’язково.
Я думаю що потрібна.
Але не знання математики не повинно бути і не буде перешкодою, для того щоб почати, стати програмістом. Якщо ви цього дійсно хочете.
щось у цьому є! врахуємо
Їй Богу, а то я вже подумав шо тре вчити похідні))))
з того що знаю на даний момент – треба, але не всім 😉
Як ви вже мабуть здогадались. Дана стаття – це першоквітневий жарт. Хоч трохи і з запізненням.
Незабаром тут буде розширена відповідь про те, чи потрібно програмісту знати математику, які і скільки.
Stay tuned!
P.S. Коментуйте свої відповіді і думки щодо даного питання.
Виталий, это было бы шуткой если бы вы написали НЕТ! 🙂 а так все очень правильно написали, правда вопрос остается открытым, в пределах школьной программы или в пределах институтсткой, то есть надо ли знать всю высшую математику (матрицы, пределы, логарифмы и пр.)?
ну, власне на повна сттатя дасть на це запитання відповідь також. скоро буде