Computer Science знания, которые мне не пригодились

В культуре собеседований западных продуктовых компаний и тех кто под них косит принято гонять кандидатов по базам CS: решать алгоритмические задачи, спрашивать заковыриствую теорию. Бытует мнение, что на практике эти знания применяются крайне редко—поэтому мы, кандидаты, подгораем от необходимости этих знаний на собесах. Зачем спрашивать, если у вас формочки?

Оставив в стороне целесообразность проведения таких интервью я сфокусируюсь на своём опыте—какие знания из "базы" мне понадобились за 14 лет профессиональной карьеры. Для контекста—я долго занимался бекенд разработкой энтерпрайза, потом перекатился в фуллстек веб и инфраструктуру, потом к этому добавилась немного низкоуровневых штук в Java и Spark. Между делом немного работал с мобилами. Поехали!

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

Big O—не использовал никогда. Затрудняюсь даже придумать где и зачем это надо кроме хитрожопых сортировок которые за нас уже давно написаны в стандартных библиотеках. Цикл в цикле вместо одного запроса в базу не считаю—это проблема понимания работы баз и N+1 проблемы а не Big O. upd: много людей триггернулось на Big O, т.к. я не очень корректно сформулировал утверждение. Про Big O будет в следующей части.

Арифметика указателей, ручная работа с памятью—никогда, ведь я пишу на языках с Garbage Collection.

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

Вроде из популярных вопросов всё, укажите в комментариях что я упустил—будем дополнять.

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

В следующей части я расскажу о том, какие знания мне понадобились.


Понравился материал? Подписывайся на мой телеграм канал: https://t.me/full_of_hatred