Просмотров-1537
2

Как изучать алгоритмы решения задач?

Как изучать алгоритмы

Нужны ли знания алгоритмов программисту?

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

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

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

Именно понимание принципов работы алгоритмов и используемых структур данных формирует специфическое мышление программиста и позволяет создавать высокопроизводительные и качественные программы.

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

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

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

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

Знания базовых алгоритмов решения задач обязательны

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

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

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

  • когда можно написать программу, используя множество существующих программных средств, таких как сортировка массивов самыми различными способами(метод sort() есть во всех библиотеках);
  • когда, имеется возможность встроенными средствами языка программирования (отладчик, оптимизатор и т.п.) определить какой из существующих методов работает лучше и где в программе появляются проблемы с быстродействием, использованием памяти и т.п.

В обоих этих случаях надо хорошо знать платформу(среду программирования) и умело  использовать ее возможности.
Резюмируя приведенные доводы, можно сказать – каждый по-своему прав. Любая точка зрения имеет право на существование.

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

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

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

Примечание. Для более эффективного усвоения изучаемого материала познакомьтесь с методикой и стилем познания.

Сущность основных рекомендаций сводится в следующему:

  • изучать алгоритмы решения задач лучше всего по книжкам, но с реальными задачами, а не просто читать про алгоритмы и не использовать их, они быстро забудутся, а ещё интереснее пытаться модифицировать существующий алгоритм и разработать подобный алгоритм самостоятельно;
  • в процессе изучения теории алгоритмов важно абстрагироваться от инструментария, «забыть» о языках программирования; недаром лучшие книги по алгоритмам содержат в себе примеры «программ», реализованных на псевдоязыках, так называемом псевдокоде, что позволяет не задумываться о реализации и тонкостях языка программирования и сконцентрироваться на логике;
  • для начала нужно освоить теоретический фундамент: основные структуры данных, их свойства и методы работы с ними, анализ и сложность алгоритмов, их основные типы и классы, не надо заучивать наизусть все виды сортировок или мудрёных деревьев — это вряд ли возможно и абсолютно бесполезно;
  • после изучения теоретического материала обязательно нужно научиться применять эти знания, используя для этого специализированные ресурсы типа HackerRank, в которых рассматриваются алгоритмы разного уровня сложности, начиная с самого базового, и затрагивающие много разных тем, или свои собственные задачи, но главное для решения любых задач недостаточно знать какой-то базовый алгоритм, нужно уметь приспособить его к конкретной ситуации, модифицировать, совместить с другими подходами;
  • не стоит ориентироваться исключительно на теорию: после изучения каждого алгоритма старайтесь реализовывать его, находить ему применение для какой-либо первой пришедшей в голову задачи и главное, конечно,понимание теории алгоритмов и структур данных поможет вам быстрее находить решения многих повседневных задач, правильно оценивать формальную корректность программ и принципиальную достижимость желаемого результата, не писать код, который тормозит на ровном месте, более глубоко понимать, как работают базы данных и тому подобное;
  • на начальном этапе программирования вообще не рекомендуется углубляться в алгоритмы решения задач и изучать их, потому что это сложная область computer science, и изучать ее без должной подготовки непросто;
  • — если Вы хотите что-то понимать в алгоритмах, то Вам поможет учебная литература, например, книга «Грокаем алгоритмы», если знания нужны для подготовки к собеседованию, то полезно повторить основные понятия и алгоритмы и поупражняться в их использовании. Для тренировки решения алгоритмических задач на любом из языков программирования есть специализированные сервисы: HackerRank, Codewars и LeetCode. Используя их возможности надо научиться решать задачи среднего уровня и выше;
  • если Вы хотите лучше решать поставленные задачи, то надо четко определить, алгоритмы из какой области знаний нужно изучить в первую очередь, при этом обращайте внимание на книги с алгоритмами на вашем языке программирования Python, Java и C, C++, С# и т.п.

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

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

Как изучать алгоритмы решения задач на онлайн курсах

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

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

Именно понимание принципов работы алгоритмов и структур данных позволяет повысить производительность программ и улучшить качество кода.

Хорошо известная команда beONmax подготовила набор из 30 курсов, которые выйдут (или уже вышли) на beONmax в 2021 году.

Сточки зрения изучения алгоритмов и структур данных следует обратить внимание на курс от beONmax «Алгоритмы и структуры данных от А до Я«. Это достаточно полное руководство по алгоритмам и структурам данных. Курс практический с домашними заданиями и разбором решений. Присоединяйтесь.

С полным перечнем курсов компании beONmax можно познакомиться, перейдя по ссылке.

Заключение

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

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

Вот таковы краткие рекомендации. Успехов всем в этом трудном деле.

Связанные материалы

Внимание! Кто хочет своевременно узнавать о выходе новой статьи на сайте должен подписаться.

ПОДПИСКА НА РАССЫЛКУ

Статьи об онлайн курсах обучения

Дистанционное обучение
Обучение программированию
Проектирование информационных систем
 

brasm

Пенсионер с 33 - летним педагогическим стажем

2 комментария

  1. Можно ли зная результат выполнения программы раскрыть уровень абстракции по формальным признакам. Например, условно: есть машина которая делает шарики, условно. Можно ли исследуя вкус, запах, цвет шарика понять, хотя бы примерно, что именно происходит в машине? Пожалуйста, ответь.

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

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

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