Требования:
- знание классических алгоритмов и структур данных;
- опыт программирования на Scala (не обязательно в коммерческих целях);
- опыт разработки многопоточных приложений;
- опыт сетевой разработки;
- знание командной строки и стандартных утилит Linux;
- знание средств разработки и отладки для JVM.
Плюсами будут:
- опыт программирования на C++;
- опыт программирования на JVM-языках (Java, Scala, Clojure и так далее);
- знание функциональной парадигмы программирования;
- опыт создания высоконагруженных распределённых систем;
- опыт работы с NoSQL;
- опыт работы с Apache Kafka.
Нафига его вообще писать? Большинство алгоритмов такого типа давно вшиты в стандартные библиотеки языков программирования. Да, знать о существовании таких алгоритмов надо чтобы оценивать их сложность и целесообразность их использования. Но писать его по памяти? Кто за это платит сейчас?
Досконально? Упрлс? С вероятностью в 99% тебя не будут просить на собеседовании пересказывать Окасаки. Есть база, которая, во-первых, общеизвестна, во-вторых, довольно компактна, так что разобраться можно за весьма небольшое время.
Веселье заключается что единственные выборки и сортировки я делаю или через функциональные коллекции, либо на уровне запросов к БД, либо они делаются на стороне фронта. Не будь у меня уже готовых инструментов, я бы поискал что и как правильно делать.
Быдлокодеры как раз и будут зубрить все эти детали реализации алгоритмов. А инженер будет решать поставленную задачу в контексте какой-то промышленности, а также задаваться вопросами «зачем?» и «почему?». Нужно примерно представлять сложность работы алгоритмов и иметь представление о структурах данных.
Если ты согласен с ТСом, что в течение часа ты сможешь реализовать бинарный поиск или подобную фигню, то добро пожаловать в стадо роботов.
Эм, зачем зубрить детали реализации, если можно знать принцип работы а остальное дописать. Простое бинарное дерево на плюсах укладывается в пару десятков строк кода. Больше на собеседованиях и не надо. Простое бинарное дерево в сорцах мускуля занимает 15к строк. Фил, как говорится, зэ дифференс.
Ну смотри, возьмём тот же бинарный поиск. Если ты не можешь его реализовать, значит не понимаешь досконально, как он устроен — следовательно, ты и не сможешь определить границы применимости наивной реализации в библиотеках, а главное причины их возникновения. Например, при частых запросах и при больших объёмах данных ты тупо всосёшь на кэш-промахах, здесь уже нужна предобработка и более хитрая реализация. При выборе структуры данных, ты никогда не вспомнишь про skip list. А при решении задач ты и не догадаешься использовать идеи бинарного поиска. Взять хотя бы подсчёт дубликатов элемента в отсортированном списке.
Можно зубрить тригонометрические формулы, можно уметь их вывести, например. И так со всем. Если человек зубрит, а не вникает в суть, то от такого человека мало толку. И если человек просто тупо берет готовые функции/классы, то да, он суть макака.
А чтоб примерно представлять сложность алгоритмов в стандартных либах, нужно, как ни странно, представлять, как они работают, а если представляешь — сможешь воспроизвести, если нормальный программист, логично же.
Если учесть что алгоритмы сортировки и поиска я сам реализую меньше чем никогда(м.б. только возможности ЯП какого ни будь проверить), а использую библиотечные. То и смысла мне их заучивать нету.
И да, скачать табличку сложности алгоритмов например сортировки, проще и быстрее чем изучать все алгоритмы и рассчитывать самому сложность. Не понимаю как можно мыслить что-бы придти к обратному.
По вашему значит надо знать все WEB фреймворки для того что-бы создать сайт. Ведь скачать табличку с +/- это ад и боль. А выучить их все разом как 2 пальца об асфальт вытереть, так?
А при чем тут стандартные алгоритмы? Иди ка ты спать подруга . . . Может быть когда проспишься твои когнитивные способности активизируются(по крайней мере мы будем надеяться).
Он имел в виду зарплаты разработчиков. Джавист может работать за доширак, а вот Scala мало кто знает, на этих разработчиков дефицит, и им приходится платить много. По этой же самой причине до сих пор самый популярный в вебе язык - PHP.