Основы програмирования

Зачем программисту изучать алгоритмы?

За всю историю компьютерных наук сложилось понимание, какие алгоритмы и структуры данных (способы их хранения) нужны для решения практических задач — так называемый джентльменский набор, который должен знать каждый разработчик.
Например, сортировка: товары в магазине сортируют по стоимости или сроку годности, а рестораны — по удалённости или рейтингу.
Хэш-таблицы помогают проверить корректность пароля и не хранить его на сайте в открытом виде, графы — находить кратчайший путь и хранить связи между пользователями в социальных сетях.
Вклад алгоритмов в жизнь человека очень обширен. От интернета до биологии, коммерческих вычислительных систем, компьютерной графики, безопасности, мультимедиа, социальных сетей и научных применений, алгоритмы везде вокруг нас.
Они используются для фильмов и видео игр, для симуляции столкновения частиц, они используются для изучения генома и других задач.
Первый изучаемый алгоритм уходит корнями к 300 году до нашей эры. Концепция алгоритма была формализована в Принстоне, Чёрчем и Тьюрингом в 1930-е. Но немало алгоритмов были открыты в последние десятилетия.
Алгоритмы и структуры данных уже давно реализованы в библиотеках популярных языков программирования. Никто больше не пишет вручную алгоритм сортировки чисел, а чтобы пользоваться хэш-таблицами, даже не нужно знать, как они устроены.

1. Алгоритмы помогают эффективно решать задачи

Вы научились писать код, но ничего не слышали об алгоритмах. Сделали на заказ видеосервис, дали на разработку год гарантии. Проект стал успешным, но уже при первых десяти тысячах пользователей всё начало ломаться: сервера быстро выходят из строя, а видео, по ощущениям пользователей, грузится миллион лет.
Заказчик приходит к вам и просит решить проблему. Вы догадываетесь, что нужно использовать более эффективный алгоритм сжатия. Здесь и пригодится знание алгоритмов: понимая, как работает каждый из них, вы сможете подобрать наилучший вариант для решения задачи или даже написать собственный.
Наличие множества готовых библиотек не означает, что не нужно понимать, как они устроены. Фундаментальные знания помогают узнать, что внутри, как оно работает и почему решение А лучше Б в конкретной ситуации. Если вы разберётесь, как устроены классические алгоритмы, то сможете создавать собственные решения, комбинировать методы друг с другом, чтобы решать более сложные задачи.

2. Собеседование в компаниях

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

3. Тренировка мозга

Алгоритмы не обязательно использовать только в работе. Это один из вариантов «тренажёра для программистов». Алгоритмы, как математика, приводят в порядок ум, учат выражать свои мысли и решать даже самые непростые задачи.
Некоторые алгоритмы программирования эффективней других и требуют меньшего времени или ресурсов. Для простых задач, вроде сортировки чисел, тоже можно использовать разные алгоритмы. И в этом красота и креативность программирования — разные задачи, как и в реальной жизни, можно решать разными способами.
Что-то можно сделать более изящно и минималистично, но сложнее поддерживать в развитии программы. А что-то может быть более длинным решением, зато при необходимости добавить какой-то новый функционал к программе будет сделать значительно легче.

4. Выводы

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