Нужны ли программистам алгоритмы
Всем привет. Меня не раз спрашивали за мою карьеру, нужны ли программистам алгоритмы и структуры данных. Мнения об этом кардинально разные, кто-то считает, что дальше пузырьковой сортировки можно не идти, кто-то - что если вы за полчаса не набросаете алгоритм решения Судоку через бэктрэкинг, делать вам в программировании нечего. Мое личное отношение к этому вопросу постепенно менялось от начала карьеры ("нахер не надо, и так тонну всего учить") через середину ("бля, походу, все-таки надо, но впадлу") к нынешнему моменту ("алгоритмы это круто и интересно, учу по 4 часа в день, включая праздники и выходные"). Но нужны ли алгоритмы конкретно вам? Что ж, это зависит от постановки вопроса:
Нужны ли алгоритмы для того, чтобы стать программистом? Ответ простой - нет. Множество людей, включая меня, становились программистами, написав только ту самую пузырьковую сортировку. В целом на стадии становления программистом (если вы самоучка, университетская программа - другой вопрос с другими сроками обучения) они скорее даже вредны - сил будет потрачено ОЧЕНЬ много при сомнительном на этом этапе выхлопе. Хотя простенькие сортировки можно и глянуть.
Другой вопрос - нужны ли алгоритмы для того, чтобы стать хорошим программистом? Ответ - снова нет. Множество людей вполне успешно гоняют json'ы, шлепают CRUD'ы или формы без особых знаний об алгоритмах и структурах данных. При этом они могут писать вполне хороший, лаконичный, структурированный и покрытый тестами код. Хотя хорошему программисту все же лучше понимать, потому алгоритмы с time complexity >= O(N^2) - это плохо (не всегда и не везде), и как радикально может повлиять переход от O(N) к O(log N) на производительность.
Ок, двигаемся дальше. Нужны ли алгоритмы, чтобы получить хорошую работу? Ответ - не помешают, но не критичны. За все мое время работы в России меня где-то пару-тройку раз спрашивали по этой теме. В целом большинству компаний интереснее прогнать вас по более актуальным вопросам, чтобы убедиться, что вы знаете стек и можете как можно быстрее приступить к работе с как можно меньшим участием других прогеров. Исключение - Яндекс, там алгоритмы спрашивают железобетонно.
А вот нужны ли алгоритмы, чтобы получить очень хорошую работу? Ответ - однозначно да. Все, наверное, слышали про FAANG (MAANG). Вообще этим термином принято обозначать только входящие в него компании (Facebook/Meta, Apple, Amazon, Netflix, Google), но в целом есть еще пучок компаний типа Microsoft, Uber, Airbnb, Ebay и множество других, которые в акроним не поместились, но по зарплатам не особо уступают. Так вот - этим компаниям в массе своей глубоко пофиг на ваши знания разных фреймворков, очередей, баз данных и т.д и т.п - они достаточно велики и богаты, чтобы писать все себе самим (опять же, не везде и не всегда, но still). И алгоритмические задачи для них - по сути единственный способ проверить скилл кандидата. Правильный или нет - вопрос дискусионный, но прокачанный problem solving - это единственный способ получить такую работу.
Собственно, самым амбициозным можно начинать потихоньку сидеть на LeetCode / читать Кнута (Седжвика, Лафоре, etc) / проходить один из 100500 курсов на эту тему в интернете еще на этапе джуна. Остальным - по желанию и интересу.