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



Книга Нужна ли математика программисту?

Многие начинающие программисты и просто желающие войти в эту профессию задают себе один и тот же вопрос. Студенты, только что закончившие школу или университет, стремятся сразу же создавать удивительные программы, завоевывать мир и зарабатывать огромные суммы денег, не желая тратить время на скучную математику с ее множеством примеров. Многих привлекает мысль о том, что можно успешно начать карьеру программиста, обходя фундаментальные знания и навыки.

Можно ли достичь успеха в программировании без глубоких знаний математики? Смогу ли я найти работу в сфере IT без solide основ? Что важнее - теоретические знания или практический опыт? Эти вопросы заставляют задуматься. Ответы на них ищут как только что окончившие учебу школьники, так и те, кто уже давно закончил свое образование, но решил резко изменить свою карьеру. Интересно, что для второй категории эти вопросы могут быть еще более актуальными - ведь как часто бывает, "я что-то там учил давным-давно, и кажется что уже совершенно ничего не помню".

В общем, чтобы сказать кратко. Ответ на вопрос "нужна ли математика программисту" - да, несомненно. Но, вероятно, это не то, что хотели бы услышать все, верно? Поэтому давайте рассмотрим более детально, что и как, и разберем все по порядку.

Такая разная наука

При обсуждении российских учебных заведений, наиболее распространенными предметами являются: (1) математический анализ, (2) дискретная математика, (3) математическая логика, (4) теория вероятностей и математическая статистика, и наконец (5) теория алгоритмов. У меня был именно такой набор предметов. Конечно, в разных учебных заведениях он может немного отличаться. Иногда помимо основной программы могут предлагать дополнительные курсы. Однако в целом, уровень обучения везде примерно одинаковый. Сейчас предлагаю рассмотреть каждый предмет более подробно и выяснить, где он может быть применен в практическом программировании и информационных технологиях.

Математический анализ

В общем, этот раздел математики занимается изучением пределов, производных и интегралов. Многие, кто изучал математику, наверняка помнят таблицы интегралов, а может быть, даже вспомнят теорему Лагранжа или теорему Коши. Все это и есть основные понятия этого раздела. В IT математика также находит широкое применение, особенно в задачах, где можно построить математическую модель для их решения.

Одним из самых востребованных направлений в области информационных технологий являются data science, компьютерное зрение, криптография и моделирование. Например, популярный алгоритм A* (произносится как "А звезда") используется для нахождения оптимального маршрута от одной точки графа к другой. Проще говоря, это поиск наименьшего пути от точки А до точки Б. Не нужно объяснять, где это может пригодиться. Этот раздел полезен при разработке игр, картографических приложений и навигационных систем.

Дискретная математика

Этот раздел посвящен изучению дискретных математических структур, таких как графы, абстрактные автоматы и комбинаторика. Эти концепции играют важную роль в области информационных технологий и программирования. Один из наиболее известных примеров использования этих структур - аудиоспектр в музыкальных проигрывателях, который отображает анимации в соответствии с музыкой. В большинстве случаев для этого используются быстрые преобразования Фурье.

Математическая логика

Проще говоря, формализация знаний и рассуждений - это процесс перевода их в математический язык для исследования логических выводов. Этот раздел в математической логике включает в себя использование таблиц истинности, конъюнкций, дизъюнкций и других логических операций. Я считаю, что это очень важный и полезный раздел для любого программиста (и для специалиста в области информационных технологий в целом).

Примерно такая же ситуация возникает в программировании при использовании конструкции if else then - это, по сути, математическая логика. Существует подход, который считается не очень хорошим, когда if-ы вкладывают друг в друга, создавая громоздкую структуру с множеством "если если если", которую сложно разобрать. В математической логике также существует раздел, который помогает упростить сложные и длинные логические выражения до более простых.

Теория вероятностей

Данный раздел посвящен изучению случайных вероятностей и случайных величин. Теория вероятностей отвечает на вопрос о вероятности того, что монета упадет на ребро. Часто мы можем увидеть результаты работы этого раздела в видеоиграх, где случайно выпадающие предметы и бонусы играют важную роль. Одним из интересных примеров применения является игра "Акинатор", которая использует Байесовскую вероятность. Еще одним примером полезного применения являются спам-фильтры, которые могут быть менее интересными, но не менее важными.

Математическая статистика

Этот раздел рассматривает способы организации и анализа статистических данных для получения научных и практических выводов. Он пользуется популярностью не только среди специалистов в области информационных технологий. Сюда входят ученые, социологи, маркетологи и другие. Сегодня практически все эти процессы автоматизированы, что означает, что и IT-специалисты используют статистику. Это отражается в создании красивых графиков в рекламных кампаниях, анализе трендов и т.д.

Теория алгоритмов

Данный раздел посвящен изучению алгоритмов и различных формальных моделей их представления. Из одного слова "алгоритмы" уже понятно, как важен этот раздел для специалистов в области программирования. Ведь в основе любой программы лежит алгоритм. Большинство выпускников ВУЗов по IT-специальностям знакомы с машиной Тьюринга. Это абстрактная вычислительная машина, предложенная Аланом Тьюрингом в 1936 году. Суть заключается в том, что любой интуитивный алгоритм может быть реализован с помощью машины Тьюринга. Понимание этой абстрактной машины способствует лучшему пониманию алгоритмов и работы программ и компьютеров в целом. Кстати, в одной из предыдущих статей мы упоминали язык программирования Brainfuck, который тесно связан с принципом работы машины Тьюринга.

В заключение, можно отметить, что математика и её различные области широко применяются в сфере информационных технологий. В повседневной жизни мы сталкиваемся с математикой, используя все современные IT удобства, хотя часто этот факт остается незамеченным. При этом математика, которая активно применяется в IT, может сильно отличаться от той, с которой мы знакомы из школьной программы. Более того, не все математические знания, полезные для IT, могут быть получены в университетах. Во-первых, потому что образовательные программы не всегда отражают последние тенденции и достижения. Во-вторых, из-за ограниченности академического времени приходится выбирать, на что уделять больше внимания, а на что меньше.

Теперь, когда мы осознали важность и разнообразие математики в области информационных технологий, возникает вопрос: необходима ли она для того, чтобы стать прикладным программистом? И если да, то какие конкретно разделы математики применимы в этой области и насколько они важны.

Немного о учебе и образовании

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

Давайте рассмотрим, например, "стандартную" ситуацию - когда молодой специалист проходит через все трудности после окончания университета. Здесь, в основном, никто не интересуется желаниями начинающего специалиста. Есть учебный план, есть сдача зачетов и экзаменов. Хочешь не хочешь, придется изучать все это. Однако, я все же поддерживаю образовательные учреждения. Ведь, как правило, после окончания большинства специальностей в области программирования, выпускники становятся не просто программистами, а техниками-программистами или инженерами-программистами. И в случае с инженером - необходимость знания математики вызывает меньше вопросов.

Несмотря на различные мнения о российских образовательных программах, учебных заведениях и преподавателях, стоит отметить, что теоретические знания, включая математику, преподаются на высоком уровне. Я сам прошел обучение в колледже и профильном ВУЗе, и могу сказать, что лучшими и наиболее интересными для меня были именно математики. Однако в некоторых учебных программах иногда встречаются предметы, которые кажутся не совсем подходящими для выбранной специальности. Например, зачем инженеру изучать экономику стартапа или рассчитывать ФОТ – вопрос, на который я так и не смог найти ответа и не применил на практике.

Еще один вариант - это популярные сегодня различные курсы. Важно выбирать курсы и преподавателей с умом. Некоторые курсы предоставляют базовые знания по математике, которые полезны для любого программиста, такие как математическая логика и теория алгоритмов. Курсы по Data Science и нейросетям предоставляют более глубокие теоретические знания. Эти специализации тесно связаны с математикой, поскольку нейросеть в своей сути является математической моделью.

Последний вариант, который стоит учитывать, - это самообразование. Здесь все зависит от личности и ее подхода к обучению. Одни предпочтут учиться по книгам, самоучителям и другим материалам. Важно правильно выбрать литературу и составить программу обучения.

Предположим, что вы решаете изучать только самоучители определенных ЯП (или технологий, если речь идет о сисадминах, devops и т.д.), в этом случае вам, вероятно, не предоставят основы и теоретические знания из перечисленных областей математики. Обычно цель таких книг заключается исключительно в изучении конкретного предмета плюс сопутствующих навыков. То есть, хотя автор может упомянуть некоторые отдельные аспекты, я бы не рассчитывал, что помимо информации о конкретном ЯП вам также предоставят информацию о машине Тьюринга. Конечно, все зависит от автора и самой книги, но стоит понимать, что материал, в первую очередь ориентированный на изучение ЯП или определенной технологии, методологии и т.д., будет представлять именно это. Поэтому при самостоятельном обучении важно систематизировать и структурировать всю усваиваемую информацию. И честно говоря, хотя многие учебные заведения отстают от современных тенденций в IT, они все же обучают навыкам самообучения довольно хорошо.

А надо ли оно лично мне?

В сфере IT математика играет ключевую роль. Существует множество способов узнать эту науку, особенно в нашу эпоху интернета. Однако необходимы ли каждому программисту глубокие знания в этой области? Может быть, достаточно ограничиться базовыми знаниями? Ответы на эти вопросы могут быть разнообразными, и нет однозначного решения, подходящего для всех специалистов. Границу между необходимыми и лишними знаниями провести сложно. Но давайте попробуем!

Во-первых, важно отметить огромное разнообразие разделов в математике. Некоторые из них широко применяются в различных областях IT, в то время как другие являются более специализированными и необходимы для решения конкретных задач. Например, знание основ теории алгоритмов будет полезно любому программисту, так как это поможет развить логическое мышление и направить его в нужное русло. Также стоит упомянуть математическую логику, поскольку логические выражения встречаются во многих частях программного кода. Конечно, знание других разделов математики также ценно, но, скорее всего, теория вероятностей и математическая статистика не понадобятся вам на повседневной основе.

Не каждой профессии требуется глубокое понимание математики. Например, Data Science и искусственный интеллект тесно связаны с математикой. Поэтому логично предположить, что для работы в этих областях необходимо иметь хорошее знание математики.

Во-первых, помимо вопроса о том, какие конкретно знания в области математики необходимы, необходимо также понимать, насколько глубоким должно быть это понимание. Здесь все зависит от желаний начинающего специалиста и его амбиций. По моему мнению, очевидно, что для тех, кто стремится к хорошей заработной плате в веб-проекте типа среднестатистической CRM, преобразование Фурье, скорее всего, не пригодится (личный опыт подтверждает это). В этом случае достаточно базовых знаний. Даже в разработке прикладного программного обеспечения это обычно бывает достаточно. Есть даже истории о том, что 80-90% времени большинство программистов тратят на решение рутинных задач, не требующих глубоких знаний математики. Однако, если вы заинтересованы в низкоуровневом программировании, например, в создании компиляторов, или в разработке игровых движков, 3D-редакторов (CAD), знание математики и геометрии будет полезно. В общем, примеров можно привести бесконечно. В большинстве областей, где можно получить хорошую зарплату, глубокие знания математики не являются обязательными.

Подводя итог всему вышесказанному, можно сказать, что математика является важным навыком для программиста. Базовые знания, полученные в школе, вполне достаточны для большинства задач. Однако дополнительные знания также будут полезны. Математика помогает развивать мышление и логику, поэтому не стоит слишком беспокоиться, если не все задачи из высшей математики у вас получаются легко. Важно не забрасывать математику, особенно если вы обучаетесь в университете по специальности, а не самостоятельно или на курсах.

Этот материал был подготовлен совместно с Андреем Сорокиным, который является соавтором нашего блога. Редакцию осуществил Виталий Петров.

🔥 Нравится? Подпишись! Вместе мы одержим победу над восстанием машин! 🔥

🚀 P.S. Если вы хотите не только читать о программировании, но и начать свой путь джедая прямо сейчас, приглашаю вас на Boosty! Там представлен уникальный обучающий материал по программированию для всех уровней подготовки. Кроме того, вы сможете увидеть, как автор выглядит в реальной жизни. Нажмите здесь и отправляйтесь в путь!🚀

У меня также имеется Telegram-канал, где публикуются более простые и веселые посты. Ссылка на него доступна в моем профиле.
150   0  

Comments

    Ничего не найдено.