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

Компании проверяют кандидатов на алгоритмах не просто так. Хотя они не являются алгоритмами высокого уровня, они являются основой КАЖДОЙ сложной техники. Например, алгоритм Дейкстры — это жадный алгоритм, а алгоритм Флойда-Уоршалла — это алгоритм динамического программирования (я не буду углубляться в эти два метода, так как это не моя цель). На самом деле, для решения многих вопросов на собеседовании требуются простые (но не легкие!) алгоритмы жадного и динамического программирования.

Возвращаясь к сути этого поста, вы можете спросить, приходилось ли мне когда-либо использовать эти методы, когда я работал над веб-приложением или мобильным приложением во время стажировки. Мой ответ ДА. Например, динамическое программирование похоже на кэширование. Большинство приложений не извлекают данные с серверов повторно всякий раз, когда они им нужны, а сохраняют данные после первой выборки и используют их на протяжении всего сеанса (если данные не подвержены каким-либо изменениям со стороны внешних ресурсов, или же требуется их обновление). это снова с сервера). Принятие решения о том, следует ли хранить данные и где их хранить, чтобы их можно было получить в любое время и из любого места, похоже на решение вопроса на собеседовании. Вы можете возразить, что дело не в алгоритмах, а скорее в логике. Я согласен с тем, что 80% решений требует логического мышления, но гибкость и удобство в использовании конкретных методов облегчит жизнь, поскольку у вас есть все ресурсы и знания об этом.

Итак, что я пытаюсь сказать здесь? Не смотрите свысока на отработку алгоритмов. В колледже наступит момент, когда вы почти не будете использовать алгоритмы (возможно, после курсов по структурам данных и алгоритмам), но вложение в них своего времени сделает вас лучшим инженером в долгосрочной перспективе. Лично я обычно практикую алгоритмы в соревновательном программировании, потому что нахожу это интересным и постоянно узнаю что-то новое, соревнуясь. У меня есть пост о ресурсах, которые я использую для соревновательного программирования, поэтому, если вам нужно с чего-то начать, вы можете взглянуть на него (https://quanchau.github.io/CompetitiveProgramming.html) или связаться со мной в любое время. на LinkedIn (https://www.linkedin.com/in/quan-chau-84b168143/). Я не эксперт в алгоритмах и далеко не эксперт, но я могу дать вам несколько отличных советов и ресурсов, которые я нашел в Интернете и от людей, которых я знаю.