Ресурсы по изучению математики для программистов

Содержание:

Роман Моисеенко, технический директор и сооснователь Мерката:

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

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

Где можно изучить математику

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

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

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

Например, в Едином Центре Высшего Дистанционного образования специалисты помогут определиться с курсом и учебным заведением. Всю работу по подаче документов они берут на себя. Вы знакомитесь с программой курса, стоимостью и сроками обучения. Если вас все устраивает, то оплачиваете курс и приступаете к учебе.

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

Для самостоятельной практики можно купить или скачать из Интернета сборник задач.

Для чего используется машинное обучение?

В 2020 году машинное обучение использует набор операций, называемый алгоритмом, который основан на вычислениях и решении проблем. Математические знания находятся на переднем крае написания алгоритмов. Ниже приведены несколько примеров того, где найти машинное обучение в обществе и в Интернете.

  • Компания создала алгоритм распознавания лиц по фотографиям. Исследователи Facebook открывают способы реализовать глубокое обучение в алгоритме Facebook, чтобы упростить пометку себя и своих друзей на фотографиях.
  • Uber. Приложения Uber используют машинное обучение, чтобы улучшить взаимодействие с пользователем. Машинное обучение используется для оценки времени прибытия и прогнозирования того, куда вы хотите отправиться.
  • Переводчик Google. Google Translate использует тысячи переведённых текстов, чтобы помочь людям преодолеть языковой барьер. Хотя этот алгоритм не всегда полностью точен, он является чрезвычайно полезным инструментом для путешественников.
  • KUKA. Немецкий производитель использует машинное обучение в своих роботизированных манипуляторах, предназначенных для автоматизации производства. Эти инновационные руки могут легко перемещать объекты благодаря аналитике данных и машинному обучению.
  • Amazon Ads. Использование алгоритмов означает, что вы будете видеть рекомендованные рекламные объявления на различных веб-сайтах для товаров, аналогичных тем, которые вы искали ранее. ML может рекомендовать продукты или услуги на основе данных из вашей истории поиска.

Необходимые профессиональные умения и знания

Всему перечисленному можно научиться. Да, развиваться нужно постоянно, но базовый навык кодирования можно развить до совершенства всего за несколько лет учебы по качественно проработанной образовательной программе.

Другой вопрос, что нужно знать чтобы поступить на программиста. Здесь невозможно за 2−5 лет вырасти в профессионала, если подойти к профильному образованию с минимальным набором школьных знаний. Желая опередить соперников, со старта карьеры получить преимущество, каждый программист (будущий) должен приступать к освоению профессии с отличной базой:

  • по математике (здесь же — логика, теория вероятности);
  • физике;
  • информатике;
  • английскому, русскому.

Что должен знать программист для работы на перспективу (карьера, зарплата, репутация)? Нужно глубокое понимание архитектуры программной среды, где предстоит работать, принципов кодирования, знание простейших методов создания программ.

Знать нужно очень много: стандарты программирования, концепцию проектирования задач, методологию тестирования ресурсов. Чем глубже студент погружается в основы математики (анализ, графы), тем сильнее его позиции, шире арсенал применяемых инструментов.

Павел Чистов, руководитель отдела обучения компании «Инфостарт»:

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

Для разного уровня программирования полезны свои разделы математики. Для низкоуровневого программирования, для 3D моделирования, для задаче-ориентированного программирования — будут полезны свои разделы. Кому геометрия, кому дискретная математика. К примеру, без знаний линейной алгебры и статистики невозможно программировать в области шифрования.

Даже без математики: профессия «Веб-разработчик».Освоить востребованную профессию в Data Science можно всего за полтора года на курсах GeekBrains. После учёбы вы сможете работать по специальностям Data Scientist, Data Analyst, Machine Learning, Engineer Computer Vision-специалист или NLP-специалист.

Какая математика нужна программистам

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

  • статистика и комбинаторика – основу этого раздела проходят в старших классах. Для каждого программиста must have;
  • логика и дискретная математика; раздел посвящен основам теории числе, множеств, база изучается в школе;
  • математический анализ – самостоятельно изучить раздел, который нужен для работы в Computer Science, довольно трудно;
  • теория алгоритмов, чтобы разобраться с эти разделом, нужно хорошо знать математику в целом. Знания раздела необходимы для анализа алгоритмов – основных понятий в программировании;
  • линейная алгебра поможет развить абстрактное мышление. Программистам в сфере графики, разработки игр и виртуальной реальности без нее никуда.

Программирование активизирует центры обучения в мозге

Согласно исследованию доктора Джанет Зигмунд (Janet Siegmund), одного из ведущих мировых экспертов в области создания исследовательских компьютерных программ, анализ программного кода активизирует в мозге сразу пять зон.

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

Изображение: Carnegie Mellon University


В опыте Джанет Зигмунд у программистов, проверяющих синтаксис в коротких фрагментах кода, активизировались эти пять зон мозга. Изображение: Carnegie Mellon University

Комментирует переводчик

BA47 — это орбитальная часть нижней лобной извилины. Она отвечает за язык и рабочую память.
BA44 и BA40 — оперкулярная часть нижней лобной извилины и нижняя теменная доля соответственно

Они отвечают тоже за рабочую память.
BA6 — средняя лобная извилина (внимание, язык и рабочая память).
BA21 — средняя височная извилина (семантический поиск в памяти).

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

Это похоже на протаптывание тропинки. (По такому же принципу улучшается мышечная память при регулярном повторении монотонных движений.) В результате мозг быстрее реагирует на изменения, а мы быстрее обучаемся

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

Комментирует переводчик

Японские учёные в другом эксперименте выяснили, что чем выше квалификация программиста, тем более активны эти зоны и менее нагружены все «неспецифические».

Ещё одно исследование провёл аспирант Университета Джона Хопкинса Юнь-Фэй Люа (Yun-Fei Liua). В нём пятнадцати подопытным программистам делали фМРТ-сканирование.

«Есть так много способов научиться программировать: от самостоятельного обучения до курсов. А вот мозговые зоны у людей, когда они работают с кодом, всегда активизируются одни и те же. Это удивительно», — подвёл итог Юнь-Фэй.

Комментирует переводчик

В этой серии экспериментов учёные сравнивали, какие зоны активируются при анализе программного кода и при решении других задач: на логику, математику и понимание естественного языка.

Выяснилось, что программистские задачки по рисунку активации похожи на логические (левый лобный полюс) и математические (внутритеменная борозда и правый лобный полюс), в то же время при восприятии кода больше включаются «лингвистические» отделы мозга.

Занятия вроде программирования стимулируют мозг, это отличная тренировка для него. Они улучшают способность запоминать информацию и решать задачи.

Роман Моисеенко, технический директор и сооснователь Мерката:

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

Александр Баталов, технический директор Zavento:

Особенно рекомендую книгу «Совершенный код» Стива Макконнелла, ее можно назвать азбукой программирования. В ней описаны многие аспекты разработки, начиная от именования переменных и заканчивая личностными качествами инженера. Они будет полезна для прочтения как новичкам, так и опытным разработчикам (об этом, кстати, пишет и сам автор). В своей работе я ее нередко использую, ссылаясь на отдельные главы при обучении молодых специалистов. Эту книгу надо штудировать от корки до корки, даже предисловие является интересным и полезным. Читается легко, информация представлена в структурированном виде. Кстати, глава 35 этой книги прекрасно ответит на вопрос: «Какие книги и ресурсы стоит изучать».

Ну, и кончено, нельзя обойтись без реального общения. Я сейчас говорю про профильные конференции, где можно пообщаться вживую, расширять свой профессиональный круг знакомств, а также найти потенциального работодателя (если это необходимо). Лично мне нравится it-конференция «Стачка», ежегодно проводимая в Ульяновске в апреле.

Необходимая математика для машинного обучения

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

Многомерное исчисление

В математическом анализе вы узнаете об интегралах, производных и градиентном спуске. Интегралы и производные важны для моделирования различных типов распределений данных и создания симуляций. Градиентный спуск — ключ к изучению нейронных сетей.

Статистика

Первое, что нужно понять в статистике, — это теория вероятностей и теорема Байеса. Вероятность — это идея распределений и случайности, которые лежат в основе алгоритмов.

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

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

Дискретная математика — фундаментальное знание информатики. Он включает в себя индуктивные и дедуктивные рассуждения, теорию графов, рекурсию и сложность алгоритмов. Речь идёт об оценке моделей на основе времени и сложности их изготовления.

Линейная алгебра

Линейная алгебра является неотъемлемой частью многих алгоритмов машинного обучения, таких как глубокое обучение. Наиболее важными частями являются матрицы и векторы, поскольку они являются основным компонентом Python. Вы также узнаёте об умножении матриц, собственных значениях и собственных векторах.

Все программисты знают весь существующий софт

Олег тяжело вздохнул, собрался с мыслями и ещё раз попытался донести до психолога, что он в полном порядке, что это просто накопилось, что он слегка разозлился, что это была всего лишь шутка и что он ни в коем случае не всерьёз собирался «починить» отвёрткой своего брата. Психолог недоверчиво покачала головой и спросила:

— Тогда зачем вы накинулись на него с отвёрткой?

— Да потому что мне надоело это всё! Почини, переустанови, сделай! Всю жизнь вот так! А я… я занимаюсь разработкой сайтов, понимаете?! Я понятия не имею, как перепрошивать андроиды! Это мой брат должен здесь сидеть — кто вообще покупает смартфоны на AliExpress за четверть реальной цены?!

— Скажите, у вас были в детстве какие-то конфликты…

— Да не было ничего! — уже рявкнул Олег. — Вам что ни говори, всё без толку. Я про то, что люди не понимают, чем я занимаюсь, а вы про детство, конфликты, родителей… Я бы с радостью ему помог, если бы знал как, понимаете? Но я просто не знаю, как это делать!

— Послушайте, — сказала психолог, выдержав паузу. — Но ведь вы же программист…

Правый глаз Олега резко задёргался. Психолог продолжала что-то объяснять, но он уже не слышал. Перед ним сидел Билл Гейтс, который заканчивал рассказывать историю о том, как он познакомился с Олегом и как Microsoft начал сотрудничать с O’Leg Inc.

А как на самом деле?

Программисты знают только тот софт, которым пользуются сами. Я сам сталкивался со свифтерами, которые не знали ни одного дистрибутива Linux и пользовались Windows на уровне компуктер-бабушки. Эти люди — настоящие профессионалы в разработке для iOS и macOS, но знание операционных систем Linux и Windows никак не относится к их специальности.

Альтернативный экспресс-тест на склонность к программированию

А вы сможете создать алгоритм приготовления яичницы, не только в «идеальных» условиях, но и придумать несколько успешных альтернативных вариантов, а также создать алгоритм приготовления при исключительных, ошибочных исходных условиях? 

«Если человек сможет расписать по шагам как приготовить яичницу, указав не только happy путь, а так же exceptional и alternative, тогда точно сможет стать программистом» — утверждает Николай Каштанов, ИТ-эксперт ICL Services по предоставлению сервиса. 

Если говорить о личностных качествах, то Федор Зубарев, руководитель программ компании Bell Integrator считает, что чаще всего эти два типа людей потенциально могут стать хорошими программистами:
«1-й: дотошные, пунктуальные, иногда занудные. Люди, готовые разбираться с любой мелочью, вникающие во все детали. 
2-й: люди творческие, немного неаккуратные в различных, в том числе и в бытовых, вопросах. Образование — профильное или чисто математическое»

Узнаете себя в одном из типов? Записывайтесь на бесплатный курс по программированию!

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

«Уверен, что добиться успеха в том или ином виде деятельности можно только упорным трудом, который всегда приносит должное вознаграждение. Разработка софта — не исключение. Если такая работа продолжает радовать, если хочется еще что-то поделать „для себя“ — поисследовать, изучить что-то новое — признаки таланта налицо.» — убежден Сергей Стрелков, руководитель направления собственных разработок компании КРОК.

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

Начало усердной работы: профессия «Веб-разработчик».

Николай Добровольский, вице-президент Parallels:

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

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

Подобные навыки можно получить на курсах product management, program management и других дисциплинах. Десять, двадцать, тридцать лет назад слово «программист» объединяло в себе все, что так или иначе было связано с компьютерами, системами связи, программированием и так далее. Сейчас же все очень быстро развивается. Огромное количество технологий появляются каждый день. Что-то появляется, что-то умирает достаточно быстро.

Цикл порой может быть в год-два. Например, с точки зрения пользовательского опыта или web-технологий, то что сейчас считается мейнстримом, через три года может быть никому не нужно

При этом, крайне важно оставаться в информационном поле, следить за трендами, осваивать новые технологии

Правило «10 000 часов», предполагающее трансформацию специалиста из «чайника» в профессионала» через практический опыт никто не отменял. Если говорить о книгах, то, на мой взгляд, одна из интереснейших работ в области эргономики была написана Дональдом Норманом и называется «Дизайн привычных вещей» (Designer everyday things). Написанная в 1988 году, она и по сей день дает основные ответы на вопросы создания удобных вещей. 

Программирование — фундаментальный навык

Известный автор-фантаст ХХ века Артур Кларк сказал, что «любая достаточно развитая технология неотличима от магии». Программирование действительно можно сравнить с волшебством, но только пока не научишься творить его сам.


Цитата из книги А.Г. Гайштута «Калькулятор — твой помощник и соперник в играх», 1988 год.

Если говорить серьезно, то программирование — фундаментальный навык по той простой причине, что оно заставляет мыслить абстрактно. В его основе лежат принципы анализа и синтеза, или композиции и декомпозиции — это одно и то же по своей сути. В английском языке существует понятие “computational thinking”, которое можно определить как совокупность умений мыслить абстрактно, критически и разделять задачу на небольшие части. Именно этому может научить программирование, по мнению экспертов.

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

У вас математический склад ума

«По своей сути программирование очень похоже на „инженерные специальности“, человек с „математическим складом ума“ может с одинаковым успехом заниматься проектированием колесных машин либо написанием кода. Если из этого исходить, то один из главных признаков того, что у человека есть талант к программированию — это наличие аналитического склада ума, то есть склонности к изучению, анализу и выстраиванию в „законченные формы“ любой информации, которую он получает» — говорит Антон Енакиев, Вице-президент Acronis по разработке.

«Нужно дружить с математикой, как говорил один русский ученый, „она ум в порядок приводит“» — соглашается Сергей Стрелков, руководитель направления собственных разработок компании КРОК.

Любимый вопрос новичков или «насколько программисту нужно знать математику?»

«„Математический склад ума“ в контексте программирования вовсе не синонимичен типичному представлению об „ученом-математике“, которых обычно изображают в фильмах. Программист — это не Рассел Кроу в роли нобелевского лауреата Джона Нэша, погруженный в цифры и постоянную аналитику. В 90-95% своей работы программисты используют только базовый математический аппарат, и лишь в 5-10% задач необходимы глубокие знания математики. Поэтому, мне кажется, что нет особого требования к наличию чересчур глубоких познаний в теории графов или теории вероятности для программиста, но это всегда будет считаться плюсом» — считает Антон Енакиев, Вице-президент Acronis по разработке.

Какая именно нужна математика рассказывает Алексей Светлов, руководитель отдела разработки технического департамента ООО «Стрим»: «Основа программирования — дискретная математика. И хороший программист должен любить и понимать этот предмет. Это база для развития. Математика дисциплинирует человека и учит искать рациональный выход из любого положения. Иначе любая нестандартная ситуация поставит программиста в тупик и он, не найдя ответа на всех известных ресурсах, сложит руки и распишется в своей беспомощности».

«Можно не знать досконально теорию вероятностей и высшую математику, но линейная алгебра должна быть неотъемлемой частью мышления в решении большинства задач или „записана на подкорке мозга“ (как говорят некоторые учителя) — это врожденная грамотность, но в математическом смысле» — считает Воротников Денис, ведущий веб-программист Mercaux Inc. 

Советы студентам

Итак, мы закончили с общими рекомендациями. Мои советы студентам будут следующими:

1. Изучайте фундаментальные вещи сразу. Не тратьте время на технологии — это успеется! Алгоритмы, структуры данных, практика решения стандартных задач — это три столпа. Переступив через эти темы сейчас, вы либо погубите свою карьеру в будущем, либо вам придётся возвращаться к этой теме и с трудом выкраивать время для изучения.

Книги для параллельного чтения:

  • Седжвик Р. Фундаментальные алгоритмы на С++
  • C. Скиена. Алгоритмы. Руководство по разработке.
  • Т. Кормен. Алгоритмы. Построение и анализ.
  • Лааксонен А. Олимпиадное программирование.
  • Скиена С., Ревилла М. Олимпиадные задачи по программированию.

Не помешает обращаться к курсам и видео, например, на платформах Stepik или просто на Youtube.

Обязательно нужно практиковаться в решении реальных задач. Для этого создано множество платформ, вот самые популярные:

  • topcoder.com
  • official.contest.yandex.ru
  • LeetCode.com

Все эти знания позволят вам проще и быстрее подготовиться к интервью в любую крупную компанию. При этом не стоит спешить. Лучше разобраться детальнее и порешать больше задач для лучшего понимания темы.

2. Постарайтесь найти несколько интересующих вас проблем и написать более-менее реальные приложения, которые:

  • Решают ясную поставленную задачу.
  • Имеют хорошо оформленный открытый исходный код на GitHub.
  • Можно описать в статье со схемами, графиками и картинками.

Если вам трудно определиться с такой темой, то вот ресурсы, где можно почерпнуть идеи:

  • Попробуйте поучаствовать в хакатоне (как онлайн, так и офлайн) и заразиться идеей оттуда. Вы сможете даже продолжить проект, начатый во время ивента.
  • Прочитайте мега-список проектов тут.
  • Посмотрите список проектов тут.

Коротко опишите свои проекты в резюме. Даже простые вещи покажут вашу активность и заинтересованность. Нанимающий руководитель лучше возьмёт неопытного, но активного разработчика, нежели пассивного «нахлебника».

3. Начинайте проходить интервью в компании. Выбирайте работу в компании, в которую:

  • Были сложнее и интереснее интервью.
  • Есть практика обучения молодых специалистов.

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

К тому же, высокий уровень зарплаты, пока вы начинающий специалист, затмевает разум и расслабляет. Идите туда, где вам дадут знания и опыт. Не переживайте, к хорошим деньгам вы вскоре придёте, а вот чтобы стать настоящим профессионалом нужно много времени, и не стоит его терять ради быстрой выгоды.

Как правило, чем сложнее и интереснее было интервью, тем более перспективна работа в компании. Даже если после интервью вы чувствуете себя «лузером», но компания готова вас взять «в подмастерье» — это великолепный шанс!

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector