Алгоритмы для разработчика

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

Но нужны ли они для самой работы? — Ведь есть куча готовых библиотек, а остальное можно найти на stackoverflow… Мой любимый пример из жизни: одному моему коллеге поручили реализовать поиск кратчайших путей на карте в нашем городе. Он, конечно же, нашел что-то типа алгоритма Дейкстры и начал реализовывать, потом оптимизировать. Сдался он через 2 недели. Не знал он что такое асимптотическая сложность алгоритма, потому что в ВУЗе учился не на программиста и никаких обучающих курсов тоже не проходил.

Дак вот, завтра начинается очень хороший учебный курс по алгоритмам на OTUS. Рекомендую. Записаться на курс могут не все, вам сначала надо пройти вступительное тестирование (по ссылке), заниматься с вами будут только если у вас уже есть база.

Кстати, история с поиском путей кончилась прикручиванием OpenStreetMap, т.е. тоже готового решения. Однако, соль в том, что по соответствующим запросам в поисковике вы получите скорее всего несколько страниц алгоритмов с трудоемкостью O(V*E), но а оценить его работу на большом графе человек без специальных знаний не может.

Кое-чему можно научиться бесплатно. Есть множество книг и статей по алгоритмам, однако, сильно сомневаюсь, что хотя бы 5% программистов самостоятельно смогли осилить хоть одну книгу по программированию (читать их обычно ооочень сложно). Что касается статей, то их часто пишут абсолютно некомпетентные люди (причем, на хабре тоже):

Статья на хабре по алгоритмам: https://habrahabr.ru/post/310038/. Автор статьи, …, был глубоко удивлен глупостями, которые писали с умным видом на хабре про оценку алгоритмов еще в августе (две статьи — https://habrahabr.ru/post/309394/ и https://habrahabr.ru/post/308818/). Автор указывает на то, что (как оказалось) не понимает значительная часть хабрасообщества (а значит и программистов, вообще). …

(Источник)

Если вам повезло учиться в ВУЗе по соответствующему профилю — очень рекомендую не упустить возможность и задавать побольше вопросов преподавателю. Опять же, если вам повезло с преподавателем. Что касается курса OTUS — его содержание значительно шире и глубже чем подавляющее большинство аналогичных курсов в ВУЗах. В частности, вы узнаете как работает сборщик мусора в популярных языках программирования. В рамках курса каждый учащийся выполняется проект под руководством ментора. Этим курс серьезно отличается от бесплатных.

Некоторые материалы курса были неплохо оформлены в виде статей на хабрахабре:
Реализация словаря в Python и Универсальное и идеальное хеширование.

Курс ведут 3 компетентных преподавателя, в частности, из лаборатории Касперского, вам дадут:
— Понимание принципов работы разнообразных алгоритмов, структур данных;
— Умение использовать готовые алгоритмы и структуры данных и создавать свои под поставленную задачу;
— Владение техникой вычисления сложности алгоритмов;
— Освоение продвинутых структур данных: хэш-таблиц, графов, деревьев поиска и многих других;
— Умение решать алгебраические задачи и задачи динамического программирования.

Комментарии 4

  • Там такой тест, после успешной сдачи которого не нужен никакой курс, тем более когда стоит вопрос — нужны ли вообще алгоритмы программисту.

    • В статье помимо вопроса о том «нужны ли», находится и ответ.
      Тест там вроде бы достаточно простой. Из 20 вопросов штук 5 вообще из курса алгебры класс так за 8-9. Если вы его завалили — то, таки да, вам рано интересоваться алгоритмами. Чтобы сравнить эффективность двух алгоритмов вычисляется предел отношения производных от функций их асимптотической сложности. Никакой преподаватель курса алгоритмизации не будет вас учить вычислять производную.

      • У меня была алгебра, я закончил технический ВУЗ, правда математики там было не много. Я занимаюсь прикладным веб-программированием, не связанным с алгоритмами, как и подавляющее большинство прикладных программистов. Я забыл всю математику, кроме простейшей, достаточно давно. Так что на данный момент программистам, за редким исключением, не нужны алгоритмы, так получилось, так сложился рынок. Слишком много другой информации нужно держать в голове. «Для устройства на работу» нужна информация из теста, не более.

        • Насчет веба — соглашусь (хотя я не специалист в этой области).

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

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

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