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

В прошлом материале я перечислил вещи, которые я не использую на практике. Сегодня поговорим о том, что важно и нужно. Поехали.

Как устроены и работают разные базы данных и хранилища, как работают индексы, зайчатки CAP, как работают транзакции, что такое план запроса, что такое N+1—на мой взгляд это одни из важнейших знаний которыми должен обладать любой разработчик имеющий дело с хранением данных. В современной разработке именно хранилище данных чаще всего является узким местом системы а так же довольно легко оптимизируется, если знать как. Вся веб- и энтерпрайз-разработка сводится к тому чтобы взять данные из одного места и положить в другое. Необходимо уметь это делать грамотно, иначе получите неработающее на реальных данных приложение. Эти вещи я применяю каждый день.

Оценка производительности кода, умение пользоваться профайлерами и анализаторами памяти. Еще одно важнейшее умение, которое должно быть прошито в каждого. Сюда можно записать ошибочно добавленный в прошлый список Big-O. Как работают циклы, почему желательно обрабатывать данные за один проход. Как пользоваться профилировщиком для вашей платформы или хотя бы как профилировать вручную через логи. Как расходует память приложение, как поковырять дамп если приложение падает с OOM. Как понять почему приложение тормозит или не отвечает. Как грамотно пользоваться компромиссом память-vs-скорость. Всё это я многократно применял и продолжаю применять.

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

Менее теоретические и более практические знания HTTP протокола, сетей, сетевого стека, как траффик от пользователя попадает на ваше приложение, SSL, DNS, что такое и зачем облачная инфраструктура, контейнеры, оркестраторы, 12-factor—это обязательно для тех у кого приложение ходит в интернет. На собесах любят задавать вопрос "что происходит когда пользователь в браузере нажимает на ваш сайт". Вопрос конечно ни о чем, потому что надо его конкретно уточнять, но понимать как оно все работает надо обязательно.

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


Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred