ru
ru
Нужны ли алгоритмы программисту?
Сама постановка такого вопроса некорректна. Количество специальностей в индустрии растёт постоянно, и программистам из разных отраслей IT сферы требуются совершенно разные навыки и знания. Но следует учитывать, что практически всё в программировании основывается на алгоритмах и структурах данных.
На самом деле, программисты каждый день используют знания алгоритмов, порой даже не замечая этого. Какие бы задачи ни решал разработчик, он всегда использует структуры данных. И чтобы иметь хотя бы поверхностное представление о том, что такое структуры данных и как они работают, нужно также понимать, что такое алгоритмы.
Что же такое алгоритм в программировании? Неформально под алгоритмом понимается строго определённая процедура, которая принимает одно или несколько значений как ввод, и возвращает одно или несколько значений как результат. Таким образом, фактически любой код, который что-то делает, является алгоритмом. Получается, что вопрос «нужны ли программисту алгоритмы» можно перевести как «нужно ли программисту уметь писать код». В правильной формулировке такой вопрос должен звучать так - «Нужно ли программисту в узкоспециализированной отрасли знать продвинутые алгоритмы и детали теории вычислений?»
Программист в первую очередь должен уметь анализировать и решать проблемы. Написание кода – это просто необходимый инструмент, который используется для решения задач. Обучаясь на факультете информатики, ни один студент точно не знает, какие навыки понадобятся ему в будущем. Таким образом, учить теорию – это наиболее оптимально с точки зрения образования.
На практике оказывается, что все немногочисленные научные достижения в области вычислений за последние полвека можно собрать в одну небольшую группу. И нередко возникает другая проблема — знать, что есть готовое решение, а не «изобретать велосипед» и придумывать давно изобретенный кем-то алгоритм.
Отсюда вывод, программисту нужны алгоритмы, чтобы:
Как лучше изучать алгоритмы
Тем, кто только начинает программировать не рекомендуется сразу с головой углубляться в алгоритмы. Это сложная область computer science, и изучать ее без должной подготовки непросто. Изучение алгоритмов требует очень ответственного подхода. Поскольку алгоритмы имеют под собой математическую подоплеку, для их освоения следует обладать прочными знаниями математики и желательно алгоритмическим мышлением. Также важно сразу определить конечную цель изучения алгоритмов - расширение общего кругозора или научиться решать конкретные задачи и улучшить свой код. В первом случае вам поможет учебная литература, видеокурсы, сайты, посвящённые этой теме. Во втором случае стоит четко определить, алгоритмы из какой области знаний нужно изучить и не стесняться обратиться к более опытным коллегам, которые посоветуют с чего начать.
Какие алгоритмы нужно знать, чтобы стать хорошим программистом?
Для начала нужно освоить теоретический фундамент: основные структуры данных, их свойства и методы работы с ними, анализ и сложность алгоритмов, их основные типы и классы. Важно научиться понимать, чем они могут друг от друга отличаться и как выбрать правильный алгоритм или структуру данных в конкретном случае.
Начинать надо с основ – тех вещей, при помощи которых описываются алгоритмы:
1. Блок-схемы
2. О-нотация («О» большое и «о» малое)
3. Псевдокод
После этого можно попробовать поработать с фундаментальным типом алгоритмов — сортировкой. Такие алгоритмы не требуют специализированных знаний и используют для своей работы базовые конструкции: циклы, массивы и ветвления. Стоит изучить различные сортировки и узнать, какая из сортировок используется в вашем языке программирования.
Как только вы освоитесь с алгоритмами сортировки, нужно приступать к алгоритмам поиска. И здесь не обойтись без более сложных структур данных, таких как графы и деревья. Эти структуры изучает дискретная математика. Её идеи лежат в основе информатики и многих современных компьютерных технологий. Изучить и реализовать стоит алгоритмы:
– Беллмана-Форда
– Дейкстры
– двоичного поиска (и двоичные деревья как инструмент)
– поиска в глубину и ширину.
Вообще, алгоритмов очень много, выбрать есть из чего. Самое главное здесь – много практики и анализа полученных результатов. Если просто читать про алгоритмы и не использовать их, они быстро забудутся. Поэтому нужно научиться применять эти знания в работе над реальными задачами.
Знакомство с различными алгоритмами и их самостоятельная реализация даёт программисту совершенно иной угол взгляда на язык программирования, с которым он работает, а также на структуры данных, которые в нём используются.
Если подводить итог, то можно сказать, что хороший программист:
Хорошая алгоритмическая подготовка важна для программиста. И это вовсе не значит заучивание алгоритмов. Хорошая алгоритмическая подготовка должна стремиться дать программисту следующие три умения:
Все это дает импульс к изучению устройства внутренних механизмов языка и, как следствие, рождает более глубокое понимание самого процесса программирования.