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



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

Серед ІТ-компаній і програмістів, тим не менш, зростає конкуренція. Проте варто відзначити, що, принаймні, на ринку праці вона досить чесна. Наприклад, приймаючи на роботу програміста роботодавець в першу чергу буде оцінювати рівень реальних знань і навичок, а не колір диплома. Втім, ця ситуація сприяє поширенню «програмістів-самоучок», які обмежені вузькою спеціалізацією. Для них нерідко виявляється справедливо вираз «крок вправо, крок вліво – розстріл». Так що, зараз недостатньо сказати: ця людина – «ИТшник», або навіть програміст. Програміст програмісту ворожнечу.

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

Я навчався у Вузі, в якому раніше, років 30-40 тому, не існувало спеціальністю «Інженер-програміст». Однак люди, що займаються програмуванням, там були – їх називали «ПМщики». Справа в тому, що вони вчилися на кафедрі Прикладної математики. Але справедливо було б все-таки називати їх математиками, ніж програмістами.



Йшли роки, і згодом кафедра стала займатися нову спеціальність – «Програмне забезпечення обчислювальної техніки і автоматизованих систем». Математики в навчальній програмі стало набагато менше, а викладачі почали нарікати, що у випускників шкіл великі проблеми з математикою. Тобто, зачисляясь на перший курс, багато студентів вже мають досить слабку математичну базу, а так як часу на цей предмет тепер менше у навчальному плані, то надії на поліпшення ситуації мало.

Звичайно, можна ще згадати, що раніше і трава була зеленіша, і небо блакитніше… Але де ж програмістам прокачувати матчастину в сьогоднішніх умовах? Чи означає це, що тепер на «серйозні» позиції розробників будуть охочіше брати математиків, а не програмістів?

Нові реалії
Вже на останніх курсах університету студенти часто дізнаються, що з'явилися нові технології, які у Вузі не вивчалися: їх просто не встигли включити в навчальну програму. Однак завдяки фундаментальній освіті, закладеним основ майбутні фахівці можуть легко вивчити ці технології самостійно. Але тут і постає питання про якість цієї освіти. Всього там достатньо для сьогоднішніх вимог ринку праці?

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

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

На основі математичних моделей розробляється відповідне програмне забезпечення, що реалізує математичну модель об'єкта і математичні методи, що дозволяють знайти оптимальне рішення. І якщо ми замінюємо фізичний експеримент математичним, то повинні бути впевнені, що їх результати співпадають. «І як тут фахівця з IT-технологій обійтися без глибоких математичних знань та обчислювальних методів?», задають питання.

До початку 90-х років, неспішно розвивалася так звана прикладна статистика. Але розвивалася вона більше в теоретичному плані, ніж в практичному.

А «в один прекрасний» день настала необхідність адаптувати її до практики. У зв'язку з удосконаленням технологій запису і зберігання даних на людей обрушилися колосальні потоки інформації в самих різних областях. Діяльність будь-якого підприємства (комерційного, виробничого, медичного, наукового і тд) тепер супроводжується реєстрацією і записом всіх подробиць його діяльності.



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

Знання математики потрібні більшості програмістів, ось тільки які саме розділи потрібні для розробки того чи іншого виду? Що потрібно знати для того, щоб програмувати ігри, штучний інтелект, big data, науковий софт і так далі?

Іван Хватів, розробник, «Яндекс»:


Наскільки потрібна програмісту математика? Опишіть, будь ласка, свою історію відносин з матчастью.

В цілому, потрібна. В якихось областях — більше, в інших- менше. Після університету в теорію занурювався тільки якщо була необхідність завдань.

В яких напрямках розробки необхідна матчастину? Чому? Які розділи математики там потрібні?

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

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

Проходити онлайн-курси. Зараз з цим немає проблем.

Чим відрізняється математичне мислення від програміста (алгоритмічного)?

Не знаю, я б це не поділяв.

Які фахівці краще підходять для математикоемкой розробки: математика з основами програмування або програмісти з азами математики?

Якщо в роботі більше математики, ніж програмування, то краще підійдуть математики з азами.

Артем Кухаренко, засновник NTechLab:


Наскільки потрібна програмісту математика?

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

Якщо мається на увазі знання теорії та основ області в якій людина працює, то, на мій погляд, це must have для будь-якого експерта в своїй галузі.

Опишіть, будь ласка, свою історію відносин з матчастью.

Навчався в математичному класі однією з кращих матшкол Москви — Гімназія №1543, потім навчався на ВМК МГУ, де теж була математика, не така серйозна, звичайно, як на Мехматі МДУ наприклад, але на достатньому рівні, щоб можна було розбиратися і розуміти, наприклад, сучасні алгоритми машинного навчання. Плюс брав участь у шкільних олімпіадах з програмування, де потрібно було вивчати теорію алгоритмів, що надалі мені дуже сильно допомогло.

В яких напрямках розробки необхідна матчастину? Чому? Які розділи математики там потрібні?

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

Можете порадити, як підтягти математичний апарат програмістам, давно закінчили ВУЗ? Які курси краще відвідувати?

Зараз з'явилося багато відкритих курсів, таких як Coursera, але в них зазвичай матеріал дається дуже поверхнево, щоб охопити якомога ширшу аудиторію. Є, звичайно, й винятки, але їх мало. Є кілька ресурсів, де матеріал дається на дуже хорошому рівні, наприклад, Stanford engineering everywhere: там просто записи лекцій, які читаються в Стенфорді. На мій погляд, їх дуже корисно дивитися якщо є базова підготовка.

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

Які фахівці краще підходять для математикоемкой розробки: математика з основами програмування або програмісти з азами математики?

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

Користувач Mrrl, розмірковуючи про розділах математики, необхідних програмістам, писав наступне:

1) Математичний аналіз — без нього просто нікуди, основа всіх чисельних моделей.

2) Алгебра (вища) — застосовується досить рідко. Або у вигляді теорії груп — коли потрібно що-небудь зробити з групами обертань або рухів простору, або у вигляді кінцевих груп/полів, де вона змикається з теорією чисел. Але якщо вже довелося туди зайти, то доводиться використовувати активно. Якщо і не в коді, то в розробці алгоритмів.

3) Аналітична геометрія — думаю, вона потрібна кожному, хто пов'язаний з комп'ютерною графікою, комп'ютерної геометрії, моделюванням в 3D…

4) Лінійна алгебра та геометрія — аналогічно аналітичної геометрії. Плюс матриці вилазять у багатьох задачах обробки інформації.

5) Дискретна математика — графи сюди входять? А булева алгебра? А кінцеві автомати? Для розробки алгоритмів буде використовуватися часто, нехай і у фоновому режимі.

6) Математична логіка — хіба що на рівні розуміння логічних операцій і кванторов. Щоб довести правильність програм, і рідше — щоб спроектувати виходячи з «дано» і «отримати». Може допомогти, коли умови завдання занадто формальні і вперто не хочуть сприйматися мозком.

7) Диференціальні рівняння — якщо вони не є частиною предметної області, зустрічаються рідко. Найчастіше в якості такого ж допоміжного інструменту, як виробляють функції. Або для аналізу даних, оптимізаційних алгоритмів…

8) Диференціальна геометрія. — Буває. Коли доводиться працювати з багатопараметричної моделлю, корисно уявляти собі властивості простору параметрів. Найчастіше це обмежується метрикою — навіть геодезичні вважати не доводиться. Ну, і є один специфічний випадок — програми, в яких йдеться в просторі Лобачевского.

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

10) Функціональний аналіз — не пам'ятаю, що туди входить. Але якщо базиси сімей функцій (ряди Фур'є і більш складні системи) вивчаються там, то це корисно. Бесконечномерные простору, швидше за все, не будуть потрібні.

11) Інтегральні рівняння — не стикався. Можливо, тому, що в якості окремого предмета я їх не знаю.

12) Теорія функцій комплексного змінного — лінійні і раціональні функції дуже корисні для роботи з рухами площини і сфери, з комплексними числами працювати простіше, ніж з ортогональними матрицями. Ще в комплексному полі зручно розв'язувати системи поліноміальних рівнянь (вони рідко, але зустрічаються). І те ж простір Лобачевського в комплексних координатах виглядає приємніше.

13) Рівняння в приватних похідних — якщо не частина предметної області… можуть стати в нагоді для яких-небудь варіантів гладкою інтерполяції даних (коли роботи з базисними функціями чомусь не вистачає). Наскільки УрЧП потрібні для моделювання, скажімо, морської поверхні в комп'ютерній графіці, не знаю — не займався. Підозрюю, що потрібні.

14) Теорія ймовірностей, математична статистика, теорія випадкових процесів — різною мірою в будь-якому аналізі даних.

15) Варіаційне числення та методи оптимізації — ІІ в іграх і роботехника.

16) Методи обчислень і чисельні методи — скільки завгодно. Якщо робота пов'язана з якими-небудь речовими числами.

17) Теорія чисел — аналогічно теорії кінцевих груп. В цілому, зустрічається нечасто. Якщо, звичайно, не вважати сучасної криптографії...
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.