> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Computer Science знания, которые мне не пригодились
- URL: https://www.rozhkov.me/useless-computer-science-knoweledge/
- Published: 2021-03-01T07:00:00.000Z
- Updated: 2021-03-01T13:47:51.000Z
- Author: Vova Rozhkov
- Tags: робота

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

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

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

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

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

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

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

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

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