Разработка
Почему в вашем коде так сложно разобраться
Представьте, что вы оставляете за собой хлебные крошки, когда идете по ярко освещенному лесу своего кода. Поверьте мне, когда позже вам понадобится найти дорогу обратно, этот лес покажется темным, туманным и зловещим. Звучит просто, но на деле сделать это очень сложно.
Разберем подробно шесть проблем, которые ухудшают читаемость и поддерживаемость кода.
Читать далее
Пять продвинутых техник инициализации в C++: От reserve() до piecewise_construct
От операций с динамическими контейнерами до констант времени компиляции — C++ предлагает много интересных техник. В этой статье мы рассмотрим несколько продвинутых методов инициализации: от reserve() и emplace_back для контейнеров, до piecewise_construct и forward_as_tuple для кортежей. Благодаря этим техникам мы можем уменьшить количество временных объектов и более эффективно создавать переменные.
Читать далее
21 фича современного C++
Сообщество C++ дополняет стандарт чаще, чем Apple выпускает новые iPhone. Благодаря этому C++ теперь больше похож на большого слона, а съесть целого слона за один присест невозможно. Вот почему я решил написать эту статью, чтобы дать вашему путешествию по современному C++ своего рода отправную точку. Я отобрал ряд фич современного C++ и постарался объяснить их на лаконичных примерах, чтобы вы научились определять места, где их можно использовать.
Читать далее
Модули C++20 и GCC11
Одним из главных нововведений стандарта C++20 является добавление модулей. Модули призваны радикально изменить структуру кодовых баз C++ и, возможно, сигнализируют о грядущей кончине заголовков (но, скорее всего, не на моем веку). Они также потенциально открывают дорогу для внедрения унифицированной системы сборки и менеджера пакетов, наподобие Rust Cargo; хотя я не сомневаюсь, что стандартизация унифицированной системы сборки будет тем еще кровавым побоищем.
Читать далее
Малоизвестные возможности языка C
И язык C, и его стандартная библиотека довольно близки к к минимально возможному размеру. Текущая наиболее часто используемая версия языка, c99, принесла много новых возможностей, многие из которых совершенно неизвестны большинству программистов на C (в более старых спецификациях, очевидно, тоже есть свои темные уголки).
Читать далее
Go 1.20 и арена памяти
Одной из революционных особенностей Go в сравнении с другими компилируемыми языками стала сборка мусора. В то же время она может привести к потере производительности при передаче контроля процессу управления памятью, но альтернативного механизма в Go представлено не было. Начиная с Go 1.20 появляется поддержка экспериментального решения для управления памятью, которое позволяет совместить безопасное выделение динамической памяти и уменьшить влияние интегрированного в скомпилированный код управления памятью на производительность приложения. В этой статье мы рассмотрим основные аспекты использования Memory Arena в Go 1.20.
Читать далее
5 полезных паттернов параллельного программирования в Gо
Идея, лежащая в основе параллелизма, заключается в одновременной работе над несколькими разными процессами, что помогает избежать застревания в задачах, выполнение которых занимает много времени. Среди основных инструментов, которые предлагает Gо для воплощения этого подхода программирования, можно выделить горутины и каналы, которые дают нам простой способ реализации выполнения независимых задач и общения между ними.
Читать далее
Разбираем шаблоны проектирования
Шаблоны проектирования придумали для ускорения проектирования и последующей разработки приложений. По сути, шаблоны проектирования — это проверенные и готовые к использованию решения регулярно возникающих в повседневном программировании задач. То есть, это повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.
Читать далее
Скучный Python: повышаем качество кода
Я не ставил целью перечислить в этой статье все инструменты — их слишком много. Вместо этого я расскажу о нескольких, которые я лично могу рекомендовать, вместе с объяснениями, почему я их советую. Если они вам не понравятся, есть другие способы достижения целей, которые я изложил здесь, их можно изучить отдельно.
Читать далее
Объект многоточие в Python
В этой статье мы подробнее рассмотрим объект многоточия, где можно использовать его в повседневной практике программиста, и какие известные пакеты Python используют его.
Читать далее
Функции Python — это объекты первого класса
Их можно присваивать переменным, хранить в структурах данных, передавать в качестве аргументов другим функциям и даже возвращать в качестве значений из других функций. Интуитивное понимание этих понятий значительно облегчит понимание таких продвинутых функций Python, как лямбды и декораторы. А также поможет вам продвинуться на пути к техникам функционального программирования. В этом руководстве я приведу ряд примеров, которые помогут развить это интуитивное понимание.
Читать далее
Декораторы Python: пошаговое руководство
Понимание декораторов является важной вехой для любого программиста Python. Эта статья представляет собой пошаговое руководство о том, как декораторы могут помочь вам стать более эффективным и продуктивным разработчиком на Python.
Читать далее
Разработка real-time приложений с Python и WebSocket
Real-time приложения, как следует из названия, предоставляют мгновенный обмен данных и информации между сервером и клиентом. Они встречаются повсеместно в различных сферах, начиная от социальных сетей и мессенджеров, и заканчивая финансовыми торговыми платформами, мониторингом систем, онлайн-играми и многими другими областями. Подобные приложения обеспечивают пользовательский опыт, который чрезвычайно близок к реальному времени.
Читать далее
Чтобы ускорить работу Numba и кода NumPy, нужно понять, как работают процессоры
В этой статье мы:
- Рассмотрим простую задачу обработки изображений.
- Попытаемся (поначалу безуспешно) ускорить ее с помощью Numba.
- Рассмотрим, почему современные процессоры такие быстрые, и каковы возможности компиляторов.
- Опираясь на полученные знания, мы скорректируем наш код так, чтобы он выполнялся в 25 раз быстрее по сравнению с первоначальной версией.
Читать далее
Современный способ глубокого клонирования объектов в JavaScript
Вы знали, что теперь в JavaScript есть нативный способ делать глубокие копии объектов? Это стало возможным с помощью функции structuredClone, встроенной в среду выполнения JavaScript.
Читать далее
Кастомные хуки в React
Когда я искал свою первую работу в качестве Frontend-разработчика, меня часто спрашивали, умею ли я писать кастомные хуки в React. Тогда я только начинал изучать React и только-только запомнил основы, такие как useState и useEffect. Слово «кастомный хук» для меня было новым и сложным. Но теперь, когда я уже более опытный разработчик, знаю, что это значит и как их использовать.
В этой статье я расскажу о лучших практиках при создании кастомных хуков и приведу пример создания кастомного хука для работы с API.
Читать далее
Я пробовал GitHub Copilot, и я в восторге
GitHub Copilot позиционирует себя как «ваш помощник по написанию кода на базе ИИ». Copilot выводит машинное обучение на совершенно новый уровень — он интегрируется с IDE по вашему выбору и предоставляет в ваше распоряжение мощную систему AI-driven кода, обученную на миллиардах строк опенсорсных проектов на GitHub на дюжине с лишним языков.
Читать далее
Clean Architecture
Как многие разработчики, я прекрасно понимаю, насколько важно создавать приложения, которые будет легко поддерживать, расширять и развивать в долгосрочной перспективе. Именно поэтому принципы Clean Architecture (Чистая архитектура) стали неотъемлемой частью моей работы. В этой статье я расскажу о том, почему следование принципам Clean Architecture так важно и какие преимущества эти принципы могут дать.
Читать далее
Управление командой
Зарплата по результатам собеседования — лучший способ сократить отклики на вакансию, а тестовые задания — избыточны
Какой HR (или рекрутер) не сталкивался с этой проблемой? Думаю, что все. Сколько копий сломано на эту тему? Сейчас мы сломаем еще одно! Предполагаю, что сейчас все кадровики начнут кидать в меня тапками. Но умные и опытные вполне себе поймут, что мои тезисы защищают не только интересы разработчиков, но и интересы службы персонала. И вот почему.
Читать далее
Как я провожу технические собеседования за 30 минут
Проанализировав свои предыдущие собеседования, я сформулировал для себя несколько требований и использовал несколько предпосылок к тому, чтобы сократить время одного собеседования, не слишком потеряв в результативности.
Читать далее
Почему оценка задач сломала Agile
Чтобы оставаться гибкими, нам следует знать преимущества и риски используемых инструментов, в частности плюсы и минусы оценки в Story Points. В этой статье мы рассмотрим, возможно ли точное планирование итераций и гибкость без оценки времени каждой отдельной задачи.
Читать далее
Настройка и администрирование Linux
Дисковая подсистема в ОС Linux
В сегодняшней статье мы поговорим об устройстве дисковой подсистемы в ОС Linux. Конечно, многие скажут, что на эту тему написано уже множество статей и все и так прекрасно знают, как устроен Линукс и в том числе, как он работает с дисками. Однако, как показывает практика, даже многие администраторы при работе с дисковой подсистемой ограничиваются только начальным разбиением диска при установке операционки. Да и то, с параметрами по умолчанию. Так что я предлагаю подробнее рассмотреть такие вопросы дисковой подсистемы, как: работу с правилами правила системы udev, инструменты для работы с блочными устройствами и планировщики системы ввода/вывода.
Читать далее
Сбор и анализ логов в Linux
Журналирование событий, происходящих в системе является неотъемлемой частью функционала любого серьезного программного обеспечения. Операционная система или приложение должны в обязательном порядке рассказывать о своей жизни: регистрировать входы в систему, сбои, ошибки и другие значительные события. В этой статье мы будем говорить о том, как устроено логирование событий в ОС Linux. В качестве примера будет рассматриваться Ubuntu Linux 22.04, однако в других дистрибутивах основные элементы будут сходными.
Читать далее
Тонкая настройка сети в Linux
Начнем нашу настройку мы с внесения изменений в параметры ICMP. Широковещательные ICMP пакеты могут использоваться для реализации атаки с затоплением. В чем заключается ее суть?
Читать далее
Файловая система BTRFS
Файловая система BTRFS (B-Tree Filesystem) предназначена для работы в Unix-подобных операционных системах. Она была разработана компанией Oracle в 2007 году. BTRFS построена по принципу CoW (Copy on Write), то есть при чтении области данных используется общая копия, в случае изменения данных — создается новая копия. Данная технология используется для оптимизации многих процессов, происходящих в операционной системе.
Читать далее
Тестирование
Почему хорошие разработчики пишут плохие юнит-тесты
Часто разработчики программного обеспечения подходят к юнит-тестированию с ошибочным мышлением. Они автоматически применяют все «правила» и лучшие практики, которые они усвоили из опыта написания продакшен кода, не проверяя, подходят ли они для написания тестов. В результате строят небоскребы на пляже.
Читать далее
Пишем чистые тесты на JavaScript с использованием принципов BASIC
Продакшен код — основной код, в котором находятся функции — может быть неидеальным. Это подразумевает риск или долг, которым команды управляют различными способами. Для кода тестов риск гораздо более значителен — они могут просто исчезнуть. Сотни часов кодирования и встреч могут просто пропасть.
Читать далее
Как использовать JMeter для тестирования производительности
Apache JMeter — это инструмент для проведения нагрузочного тестирования, представляющий собой десктопное приложение с открытым исходным кодом на базе Java. JMeter позволяет определить, может ли тестируемое веб-приложение удовлетворять требованиям высокой нагрузки или нет. В этом руководстве мы проводим анализ производительности Google.com для 1000 пользователей с использованием различных инструментов тестирования производительности.
Читать далее
Работа с данными и администрирование БД
Резервное копирование и восстановление СУБД PostgreSQL
Резервное копирование является одной из основных задач администрирования баз данных. Отсутствие бэкапа может привести к катастрофическим последствиям при эксплуатации базы данных. Однако недостаточно только настроить регулярное создание резервных копий, необходимо также регулярно проверять созданные копии на способность к восстановлению БД. В этой статье мы поговорим от том, как правильно настраивать резервное копирование в БД PostgreSQL.
Читать далее
Сравнение MySQL и PostgreSQL в 2023 году
PostgreSQL и MySQL — это надежные, безопасные и масштабируемые базы данных, которые существуют уже много лет. Каждая из них имеет уникальные сильные и слабые стороны, что делает какую‑либо из них более подходящей для конкретных нужд. В этой статье мы проведем их сравнение, чтобы помочь с принятием обоснованного решения.
Читать далее
Знакомимся с архитектурой Apache Kafka
Apache Kafka изначально использовалось для обеспечения функционирования работающих в реальном масштабе времени приложений и потоков данных социальной сети. Но сейчас это решение используется во многих крупных компаниях. Посмотрим подробнее, как оно устроено.
Читать далее
Малоизвестные полезные библиотеки Python для анализа данных
В этой статье мы рассмотрим некоторые полезные библиотеки Python для задач обработки данных, с которыми, возможно, вы еще не знакомы. Хотя для задач машинного обучения на ум приходят такие библиотеки, как pandas, numpy, scikit-learn, keras, tensorflow, matplotlib и т.д., но всегда полезно знать о других предложениях Python, особенно если это поможет улучшить ваши проекты.
Читать далее
Анализ и проектированием систем
Проектирование архитектуры для микросервисов с использованием gRPC
Микросервисная архитектура предлагает нам гибкость, масштабируемость и управление сложными приложениями на новом уровне. Однако, чтобы извлечь максимальную выгоду из этой архитектуры, важно правильно спроектировать микросервисы и обеспечить эффективное взаимодействие между ними. gRPC – высокопроизводительный и мощный инструмент для построения микросервисных систем.
Читать далее
Архитектура высоконагруженных телеграм-ботов на Python
Высоконагруженные боты спроектированы и оптимизированы так, чтобы обрабатывать огромное количество запросов одновременно, быстро и надежно. Они предоставляют максимально качественный пользовательский опыт и позволяют бизнесам успешно масштабировать свои услуги.
Читать далее
Архитектурные антипаттерны в микросервисах и как их избежать
Микросервисная архитектура стремительно набирает обороты благодаря своей способности обеспечивать гибкость, масштабируемость и быстрое внедрение изменений. Однако, как и в любой технологии, существуют ловушки и ошибки, которые могут подорвать преимущества микросервисов.
Читать далее
Docker и сети
Сейчас без преувеличения можно сказать, что контейнеризация прочно вошла в нашу жизнь. Контейнеры используются в различных программных продуктах, начиная от микросервисов и заканчивая решениями ИБ, такими как песочницы. Однако, контейнеры не были бы столь удобным инструментом построения распределенной архитектуры, если бы они не могли взаимодействовать между собой, а также обмениваться данными с внешними сетевыми ресурсами. В этой статье мы подробно рассмотрим механизмы, позволяющие контейнерам работать с сетями.
Читать далее
Математика
Искусство прогнозирования: погружение в Марковские цепи
Особенно интересным применением Марковских цепей является их использование в области компьютерной графики и киноиндустрии. Благодаря этой модели можно сгенерировать реалистичные анимации и эффекты спецэффектов в кино. Также Марковские цепи используются в обработке естественного языка и генерации текстов.
В данной статье мы рассмотрим основы Марковских цепей, а также реализуем Марковские цепи на Python.
Читать далее
Алгоритмы быстрого возведения в степень
В настоящее время мы уже так привыкли пользоваться готовыми решениями, что при написании высокоуровневого кода, даже не задумываемся над тем, а как вообще реализованы те или иные инструменты. И уж конечно, при возведении чисел в степень, мы никогда не задумываемся о том, а как вообще все это реализовано. И какие существуют алгоритмы для этого?
Возведение числа в степень является одной из основных операций в математике. Что вообще такое возведение в степень? Как нам известно еще со школы — это многократное умножение числа на себя. Но проблема кроется в том, что при возведении больших чисел в очень большие степени вычисления могут занять много времени.
Читать далее
Для начинающих
Самые распространенные логические ошибки
Знание о существовании логических ошибок является важной составляющей развитого критического мышления. Критическое мышление помогает принимать взвешенные решения как в личной жизни, так и в рабочих ситуациях, структурировать информацию и вести переговоры. В этой статье представляем список из 24 наиболее распространенных логических ошибок с объяснением и примерами.
Читать далее
Основы операционных систем
Цель данной статьи — разобраться в основах операционных систем. Мы рассмотрим то, что делает ОС достаточно функциональными и эффективными, поговорим об их истории и технологиях. Статья будет интересна новичкам, которым интересно разобраться в основах ОС.
Читать далее
10 игр для изучения JavaScript
Изучать язык, играя в игры, очень весело, а для некоторых людей это отличный способ наглядного восприятия языка. Без лишних слов, вот десять фантастических игр, с помощью которых вы можете изучать JavaScript.
Читать далее
Roadmap для изучения Java
В статье я перечислю ряд ресурсов вместе с описанием их содержания. Но по большому счету процесс обучение Java делится на 3 этапа: основы Java, шаблоны проектирования и производительность Java.
Читать далее
Принципы ООП в примерах для начинающих
Как создатель и руководитель курсов по C# я вижу, что часто у людей, начинающих изучать этот язык, принципы Объектно-Ориентированного Программирования вызывают затруднения в понимании. А так как один из лучших способов что-то понять, это посмотреть применение на примерах, то я решил написать статью с примерами принципов. Рекомендую найти какую-нибудь статью или книгу, где прочитать основную теорию, а в этой статье уже посмотреть примеры применения этой теории, чтобы понять её лучше.
Читать далее
Исчерпывающее руководство по различным типам API
API (Application Programming Interface, программный интерфейс приложения), является жизненно важным компонентом в современном ландшафте разработки программного обеспечения, обеспечивая строительные блоки для взаимодействия приложений друг с другом. В этой статье рассмотрим пять основных типов API: REST, SOAP, WebSocket, gRPC и GraphQL, чтобы получить более четкое представление об их функциях, особенностях и идеальных сценариях использования.
Читать далее
Научно-популярное
Зачем нам нужны колонии за пределами Земли
В последнее время занимаюсь все больше языковыми моделями и тем, что сейчас принято называть искусственным интеллектом. Ощущаю себя на передовом крае технологии. И часто задумываюсь о том, что нас, людей, движет вперед? Поэтому, сегодня захотелось поговорить на отвлеченную тему, а именно об освоении космоса. Хочу заранее предупредить, что не являюсь специалистом в данной области. Многое из того, что будет сказано в статье, не более, чем гипотезы. Так что, не судите строго. Со своей стороны могу гарантировать, что в статье будет несколько небанальных моментов, о которых вы возможно не слышали. Надеюсь, вам будет интересно.
Читать далее
Мы живем в компьютерной симуляции. Мнение программиста
Меня зовут Игорь Звягин, я профессиональный веб-разработчик, на текущий момент с 7-летним опытом и в этой статье я хочу рассказать, как пришел к мнению, что мы живем в компьютерной симуляции, почему это не тревожит, а наоборот и какие интересные возможности это предоставляет.
В этой статье я буду ссылаться на некоторые научные данные, на случаи из моей жизни и рассказы людей, которым я доверяю.
Читать далее
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Большой дайджест: лучшие статьи за 2023 год в блоге OTUS на Хабр OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Разработка Почему в вашем коде так сложно разобраться Представьте, что вы оставляете за собой хлебные крошки, когда идете по ярко освещенному лесу своего кода. Поверьте мне, когда позже вам понадобится найти дорогу обратно, этот лес покажется темным, туманным и зловещим. Звучит просто, но на деле сделать это очень сложно. Разберем подробно шесть проблем, которые ухудшают" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#article","name":"\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442: \u043b\u0443\u0447\u0448\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0437\u0430 2023 \u0433\u043e\u0434 \u0432 \u0431\u043b\u043e\u0433\u0435 OTUS \u043d\u0430 \u0425\u0430\u0431\u0440 OTUS","headline":"\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442: \u043b\u0443\u0447\u0448\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0437\u0430 2023 \u0433\u043e\u0434 \u0432 \u0431\u043b\u043e\u0433\u0435 OTUS \u043d\u0430 \u0425\u0430\u0431\u0440","author":{"@id":"https:\/\/otus.ru\/journal\/author\/k-moseenkova\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2024\/01\/oj-1080x720-kopiya.png","width":2245,"height":1587},"datePublished":"2024-01-09T12:02:59+00:00","dateModified":"2024-01-09T12:06:42+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, \u041f\u0440\u043e IT, \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442, \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0435\u0439, \u0445\u0430\u0431\u0440"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#listItem","position":2,"name":"\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442: \u043b\u0443\u0447\u0448\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0437\u0430 2023 \u0433\u043e\u0434 \u0432 \u0431\u043b\u043e\u0433\u0435 OTUS \u043d\u0430 \u0425\u0430\u0431\u0440","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/k-moseenkova\/#author","url":"https:\/\/otus.ru\/journal\/author\/k-moseenkova\/","name":"K. Moseenkova","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/5bcd16ae9d4759f7841464ca0c13ba63?s=96&d=mm&r=g","width":96,"height":96,"caption":"K. Moseenkova"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#webpage","url":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/","name":"\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442: \u043b\u0443\u0447\u0448\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0437\u0430 2023 \u0433\u043e\u0434 \u0432 \u0431\u043b\u043e\u0433\u0435 OTUS \u043d\u0430 \u0425\u0430\u0431\u0440 OTUS","description":"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u041f\u043e\u0447\u0435\u043c\u0443 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0445\u043b\u0435\u0431\u043d\u044b\u0435 \u043a\u0440\u043e\u0448\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u0438\u0434\u0435\u0442\u0435 \u043f\u043e \u044f\u0440\u043a\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u043b\u0435\u0441\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430. \u041f\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043c\u043d\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0437\u0436\u0435 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0434\u043e\u0440\u043e\u0433\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u044d\u0442\u043e\u0442 \u043b\u0435\u0441 \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u043d\u044b\u043c, \u0442\u0443\u043c\u0430\u043d\u043d\u044b\u043c \u0438 \u0437\u043b\u043e\u0432\u0435\u0449\u0438\u043c. \u0417\u0432\u0443\u0447\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043d\u0430 \u0434\u0435\u043b\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e. \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0448\u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0445\u0443\u0434\u0448\u0430\u044e\u0442","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/k-moseenkova\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/k-moseenkova\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2024\/01\/oj-1080x720-kopiya.png","@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#mainImage","width":2245,"height":1587},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/#mainImage"},"datePublished":"2024-01-09T12:02:59+00:00","dateModified":"2024-01-09T12:06:42+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/8729" /><link rel='shortlink' href='https://otus.ru/journal/?p=8729' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fbolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fbolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-8729 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-8729" class="the-post post-8729 post type-post status-publish format-standard has-post-thumbnail category-polza category-pro-it tag-dajdzhest tag-podborka-statej tag-habr-2">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Большой дайджест: лучшие статьи за 2023 год в блоге OTUS на Хабр
</h1>
<a href="https://otus.ru/journal/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr/" class="date-link" data-wpel-link="internal"><time class="post-date">9 января, 2024</time></a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" title="Разработка ">Разработка </a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D0%B2_%D0%B2%D0%B0%D1%88%D0%B5%D0%BC_%D0%BA%D0%BE%D0%B4%D0%B5_%D1%82%D0%B0%D0%BA_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D1%8C%D1%81%D1%8F" title="Почему в вашем коде так сложно разобраться">Почему в вашем коде так сложно разобраться</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9F%D1%8F%D1%82%D1%8C_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D1%85_%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA_%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2_C_%D0%9E%D1%82_reserve_%D0%B4%D0%BE_piecewise_construct" title="Пять продвинутых техник инициализации в C++: От reserve() до piecewise_construct">Пять продвинутых техник инициализации в C++: От reserve() до piecewise_construct</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#21_%D1%84%D0%B8%D1%87%D0%B0_%D1%81%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_C" title="21 фича современного C++">21 фича современного C++</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B8_C20_%D0%B8_GCC11" title="Модули C++20 и GCC11">Модули C++20 и GCC11</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%9C%D0%B0%D0%BB%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_C" title="Малоизвестные возможности языка C">Малоизвестные возможности языка C</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#Go_120_%D0%B8_%D0%B0%D1%80%D0%B5%D0%BD%D0%B0_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8" title="Go 1.20 и арена памяти">Go 1.20 и арена памяти</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#5_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85_%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D0%BE%D0%B2_%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2_G%D0%BE" title="5 полезных паттернов параллельного программирования в Gо">5 полезных паттернов параллельного программирования в Gо</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D1%80%D0%B0%D0%B5%D0%BC_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F" title="Разбираем шаблоны проектирования">Разбираем шаблоны проектирования</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%A1%D0%BA%D1%83%D1%87%D0%BD%D1%8B%D0%B9_Python_%D0%BF%D0%BE%D0%B2%D1%8B%D1%88%D0%B0%D0%B5%D0%BC_%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%BA%D0%BE%D0%B4%D0%B0" title="Скучный Python: повышаем качество кода">Скучный Python: повышаем качество кода</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%82%D0%BE%D1%87%D0%B8%D0%B5_%D0%B2_Python" title="Объект многоточие в Python">Объект многоточие в Python</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_Python_%E2%80%94_%D1%8D%D1%82%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0" title="Функции Python — это объекты первого класса">Функции Python — это объекты первого класса</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%94%D0%B5%D0%BA%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B_Python_%D0%BF%D0%BE%D1%88%D0%B0%D0%B3%D0%BE%D0%B2%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE" title="Декораторы Python: пошаговое руководство">Декораторы Python: пошаговое руководство</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_real-time_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9_%D1%81_Python_%D0%B8_WebSocket" title="Разработка real-time приложений с Python и WebSocket">Разработка real-time приложений с Python и WebSocket</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%A7%D1%82%D0%BE%D0%B1%D1%8B_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D1%8C_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83_Numba_%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0_NumPy_%D0%BD%D1%83%D0%B6%D0%BD%D0%BE_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D1%8C_%D0%BA%D0%B0%D0%BA_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D1%8B" title="Чтобы ускорить работу Numba и кода NumPy, нужно понять, как работают процессоры">Чтобы ускорить работу Numba и кода NumPy, нужно понять, как работают процессоры</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%A1%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_JavaScript" title="Современный способ глубокого клонирования объектов в JavaScript">Современный способ глубокого клонирования объектов в JavaScript</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-17" href="#%D0%9A%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%B5_%D1%85%D1%83%D0%BA%D0%B8_%D0%B2_React" title="Кастомные хуки в React">Кастомные хуки в React</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-18" href="#%D0%AF_%D0%BF%D1%80%D0%BE%D0%B1%D0%BE%D0%B2%D0%B0%D0%BB_GitHub_Copilot_%D0%B8_%D1%8F_%D0%B2_%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%B3%D0%B5" title="Я пробовал GitHub Copilot, и я в восторге">Я пробовал GitHub Copilot, и я в восторге</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-19" href="#Clean_Architecture" title="Clean Architecture">Clean Architecture</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class="ez-toc-link ez-toc-heading-20" href="#%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BE%D0%B9" title="Управление командой">Управление командой</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-21" href="#%D0%97%D0%B0%D1%80%D0%BF%D0%BB%D0%B0%D1%82%D0%B0_%D0%BF%D0%BE_%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B0%D0%BC_%D1%81%D0%BE%D0%B1%D0%B5%D1%81%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%E2%80%94_%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%B9_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1_%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C_%D0%BE%D1%82%D0%BA%D0%BB%D0%B8%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D1%8E_%D0%B0_%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%E2%80%94_%D0%B8%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B" title="Зарплата по результатам собеседования — лучший способ сократить отклики на вакансию, а тестовые задания — избыточны">Зарплата по результатам собеседования — лучший способ сократить отклики на вакансию, а тестовые задания — избыточны</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-22" href="#%D0%9A%D0%B0%D0%BA_%D1%8F_%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B6%D1%83_%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%81%D0%BE%D0%B1%D0%B5%D1%81%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0_30_%D0%BC%D0%B8%D0%BD%D1%83%D1%82" title="Как я провожу технические собеседования за 30 минут">Как я провожу технические собеседования за 30 минут</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-23" href="#%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87_%D1%81%D0%BB%D0%BE%D0%BC%D0%B0%D0%BB%D0%B0_Agile" title="Почему оценка задач сломала Agile">Почему оценка задач сломала Agile</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class="ez-toc-link ez-toc-heading-24" href="#%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B8_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Linux" title="Настройка и администрирование Linux">Настройка и администрирование Linux</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-25" href="#%D0%94%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%B2_%D0%9E%D0%A1_Linux" title="Дисковая подсистема в ОС Linux">Дисковая подсистема в ОС Linux</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-26" href="#%D0%A1%D0%B1%D0%BE%D1%80_%D0%B8_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_%D0%B2_Linux" title="Сбор и анализ логов в Linux">Сбор и анализ логов в Linux</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-27" href="#%D0%A2%D0%BE%D0%BD%D0%BA%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8_%D0%B2_Linux" title="Тонкая настройка сети в Linux">Тонкая настройка сети в Linux</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-28" href="#%D0%A4%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_BTRFS" title="Файловая система BTRFS">Файловая система BTRFS</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class="ez-toc-link ez-toc-heading-29" href="#%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Тестирование">Тестирование</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-30" href="#%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B8_%D0%BF%D0%B8%D1%88%D1%83%D1%82_%D0%BF%D0%BB%D0%BE%D1%85%D0%B8%D0%B5_%D1%8E%D0%BD%D0%B8%D1%82-%D1%82%D0%B5%D1%81%D1%82%D1%8B" title="Почему хорошие разработчики пишут плохие юнит-тесты">Почему хорошие разработчики пишут плохие юнит-тесты</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-31" href="#%D0%9F%D0%B8%D1%88%D0%B5%D0%BC_%D1%87%D0%B8%D1%81%D1%82%D1%8B%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D1%8B_%D0%BD%D0%B0_JavaScript_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D0%BE%D0%B2_BASIC" title="Пишем чистые тесты на JavaScript с использованием принципов BASIC">Пишем чистые тесты на JavaScript с использованием принципов BASIC</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-32" href="#%D0%9A%D0%B0%D0%BA_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C_JMeter_%D0%B4%D0%BB%D1%8F_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8" title="Как использовать JMeter для тестирования производительности">Как использовать JMeter для тестирования производительности</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class="ez-toc-link ez-toc-heading-33" href="#%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D0%B8_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%91%D0%94" title="Работа с данными и администрирование БД">Работа с данными и администрирование БД</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-34" href="#%D0%A0%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%A3%D0%91%D0%94_PostgreSQL" title="Резервное копирование и восстановление СУБД PostgreSQL">Резервное копирование и восстановление СУБД PostgreSQL</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-35" href="#%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_MySQL_%D0%B8_PostgreSQL_%D0%B2_2023_%D0%B3%D0%BE%D0%B4%D1%83" title="Сравнение MySQL и PostgreSQL в 2023 году">Сравнение MySQL и PostgreSQL в 2023 году</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-36" href="#%D0%97%D0%BD%D0%B0%D0%BA%D0%BE%D0%BC%D0%B8%D0%BC%D1%81%D1%8F_%D1%81_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%BE%D0%B9_Apache_Kafka" title="Знакомимся с архитектурой Apache Kafka">Знакомимся с архитектурой Apache Kafka</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-37" href="#%D0%9C%D0%B0%D0%BB%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8_Python_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" title="Малоизвестные полезные библиотеки Python для анализа данных">Малоизвестные полезные библиотеки Python для анализа данных</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class="ez-toc-link ez-toc-heading-38" href="#%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B8_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC" title="Анализ и проектированием систем">Анализ и проектированием систем</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-39" href="#%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%BB%D1%8F_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_gRPC" title="Проектирование архитектуры для микросервисов с использованием gRPC">Проектирование архитектуры для микросервисов с использованием gRPC</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-40" href="#%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%82%D0%B5%D0%BB%D0%B5%D0%B3%D1%80%D0%B0%D0%BC-%D0%B1%D0%BE%D1%82%D0%BE%D0%B2_%D0%BD%D0%B0_Python" title="Архитектура высоконагруженных телеграм-ботов на Python">Архитектура высоконагруженных телеграм-ботов на Python</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-41" href="#%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BD%D1%82%D0%B8%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B_%D0%B2_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0%D1%85_%D0%B8_%D0%BA%D0%B0%D0%BA_%D0%B8%D1%85_%D0%B8%D0%B7%D0%B1%D0%B5%D0%B6%D0%B0%D1%82%D1%8C" title="Архитектурные антипаттерны в микросервисах и как их избежать">Архитектурные антипаттерны в микросервисах и как их избежать</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-42" href="#Docker_%D0%B8_%D1%81%D0%B5%D1%82%D0%B8" title="Docker и сети">Docker и сети</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class="ez-toc-link ez-toc-heading-43" href="#%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0" title="Математика">Математика</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-44" href="#%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D0%BD%D0%BE%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B5_%D1%86%D0%B5%D0%BF%D0%B8" title="Искусство прогнозирования: погружение в Марковские цепи">Искусство прогнозирования: погружение в Марковские цепи</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-45" href="#%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B3%D0%BE_%D0%B2%D0%BE%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C" title="Алгоритмы быстрого возведения в степень">Алгоритмы быстрого возведения в степень</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class="ez-toc-link ez-toc-heading-46" href="#%D0%94%D0%BB%D1%8F_%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D1%85" title="Для начинающих">Для начинающих</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-47" href="#%D0%A1%D0%B0%D0%BC%D1%8B%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8" title="Самые распространенные логические ошибки">Самые распространенные логические ошибки</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-48" href="#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC" title="Основы операционных систем">Основы операционных систем</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-49" href="#10_%D0%B8%D0%B3%D1%80_%D0%B4%D0%BB%D1%8F_%D0%B8%D0%B7%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_JavaScript" title="10 игр для изучения JavaScript">10 игр для изучения JavaScript</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-50" href="#Roadmap_%D0%B4%D0%BB%D1%8F_%D0%B8%D0%B7%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_Java" title="Roadmap для изучения Java ">Roadmap для изучения Java </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-51" href="#%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B_%D0%9E%D0%9E%D0%9F_%D0%B2_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B0%D1%85_%D0%B4%D0%BB%D1%8F_%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D1%85" title="Принципы ООП в примерах для начинающих">Принципы ООП в примерах для начинающих</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-52" href="#%D0%98%D1%81%D1%87%D0%B5%D1%80%D0%BF%D1%8B%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D0%BC_%D1%82%D0%B8%D0%BF%D0%B0%D0%BC_API" title="Исчерпывающее руководство по различным типам API">Исчерпывающее руководство по различным типам API</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class="ez-toc-link ez-toc-heading-53" href="#%D0%9D%D0%B0%D1%83%D1%87%D0%BD%D0%BE-%D0%BF%D0%BE%D0%BF%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B5" title="Научно-популярное">Научно-популярное</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-54" href="#%D0%97%D0%B0%D1%87%D0%B5%D0%BC_%D0%BD%D0%B0%D0%BC_%D0%BD%D1%83%D0%B6%D0%BD%D1%8B_%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%B8%D0%B8_%D0%B7%D0%B0_%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B0%D0%BC%D0%B8_%D0%97%D0%B5%D0%BC%D0%BB%D0%B8" title="Зачем нам нужны колонии за пределами Земли">Зачем нам нужны колонии за пределами Земли</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-55" href="#%D0%9C%D1%8B_%D0%B6%D0%B8%D0%B2%D0%B5%D0%BC_%D0%B2_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8_%D0%9C%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0" title="Мы живем в компьютерной симуляции. Мнение программиста">Мы живем в компьютерной симуляции. Мнение программиста</a></li></ul></li></ul></li></ul></nav></div>
<h1 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0"></span><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#30399f" class="has-inline-color">Разработка</mark></strong> <span class="ez-toc-section-end"></span></h1>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D0%B2_%D0%B2%D0%B0%D1%88%D0%B5%D0%BC_%D0%BA%D0%BE%D0%B4%D0%B5_%D1%82%D0%B0%D0%BA_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D1%8C%D1%81%D1%8F"></span>Почему в вашем коде так сложно разобраться<span class="ez-toc-section-end"></span></h3>
<p>Представьте, что вы оставляете за собой хлебные крошки, когда идете по ярко освещенному лесу своего кода. Поверьте мне, когда позже вам понадобится найти дорогу обратно, этот лес покажется темным, туманным и зловещим. Звучит просто, но на деле сделать это очень сложно.</p>
<p>Разберем подробно шесть проблем, которые ухудшают читаемость и поддерживаемость кода.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/721578/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%8F%D1%82%D1%8C_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D1%85_%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA_%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2_C_%D0%9E%D1%82_reserve_%D0%B4%D0%BE_piecewise_construct"></span>Пять продвинутых техник инициализации в C++: От reserve() до piecewise_construct<span class="ez-toc-section-end"></span></h3>
<p>От операций с динамическими контейнерами до констант времени компиляции — C++ предлагает много интересных техник. В этой статье мы рассмотрим несколько продвинутых методов инициализации: от <code>reserve()</code> и <code>emplace_back</code> для контейнеров, до <code>piecewise_construct</code> и <code>forward_as_tuple</code> для кортежей. Благодаря этим техникам мы можем уменьшить количество временных объектов и более эффективно создавать переменные.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/757648/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="21_%D1%84%D0%B8%D1%87%D0%B0_%D1%81%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_C"></span>21 фича современного C++<span class="ez-toc-section-end"></span></h3>
<p>Сообщество C++ дополняет стандарт чаще, чем Apple выпускает новые iPhone. Благодаря этому C++ теперь больше похож на большого слона, а съесть целого слона за один присест невозможно. Вот почему я решил написать эту статью, чтобы дать вашему путешествию по современному C++ своего рода отправную точку. Я отобрал ряд фич современного C++ и постарался объяснить их на лаконичных примерах, чтобы вы научились определять места, где их можно использовать.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/741428/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B8_C20_%D0%B8_GCC11"></span>Модули C++20 и GCC11<span class="ez-toc-section-end"></span></h3>
<p>Одним из главных нововведений стандарта C++20 является добавление модулей. Модули призваны радикально изменить структуру кодовых баз C++ и, возможно, сигнализируют о грядущей кончине заголовков (но, скорее всего, не на моем веку). Они также потенциально открывают дорогу для внедрения унифицированной системы сборки и менеджера пакетов, наподобие Rust Cargo; хотя я не сомневаюсь, что стандартизация унифицированной системы сборки будет тем еще кровавым побоищем.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/742818/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%B0%D0%BB%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_C"></span>Малоизвестные возможности языка C<span class="ez-toc-section-end"></span></h3>
<p>И язык C, и его стандартная библиотека довольно близки к к минимально возможному размеру. Текущая наиболее часто используемая версия языка, c99, принесла много новых возможностей, многие из которых совершенно неизвестны большинству программистов на C (в более старых спецификациях, очевидно, тоже есть свои темные уголки).</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/744542/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Go_120_%D0%B8_%D0%B0%D1%80%D0%B5%D0%BD%D0%B0_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8"></span>Go 1.20 и арена памяти<span class="ez-toc-section-end"></span></h3>
<p>Одной из революционных особенностей Go в сравнении с другими компилируемыми языками стала сборка мусора. В то же время она может привести к потере производительности при передаче контроля процессу управления памятью, но альтернативного механизма в Go представлено не было. Начиная с Go 1.20 появляется поддержка экспериментального решения для управления памятью, которое позволяет совместить безопасное выделение динамической памяти и уменьшить влияние интегрированного в скомпилированный код управления памятью на производительность приложения. В этой статье мы рассмотрим основные аспекты использования Memory Arena в Go 1.20.</p>
<p><a href="https://habr.com/ru/companies/otus/articles/710124/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right"><strong>Читать далее</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="5_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85_%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D0%BE%D0%B2_%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2_G%D0%BE"></span>5 полезных паттернов параллельного программирования в Gо<span class="ez-toc-section-end"></span></h3>
<p>Идея, лежащая в основе параллелизма, заключается в одновременной работе над несколькими разными процессами, что помогает избежать застревания в задачах, выполнение которых занимает много времени. Среди основных инструментов, которые предлагает Gо для воплощения этого подхода программирования, можно выделить горутины и каналы, которые дают нам простой способ реализации выполнения независимых задач и общения между ними.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/722880/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D1%80%D0%B0%D0%B5%D0%BC_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F"></span>Разбираем шаблоны проектирования<span class="ez-toc-section-end"></span></h3>
<p>Шаблоны проектирования придумали для ускорения проектирования и последующей разработки приложений. По сути, шаблоны проектирования — это проверенные и готовые к использованию решения регулярно возникающих в повседневном программировании задач. То есть, это повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/713728/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BA%D1%83%D1%87%D0%BD%D1%8B%D0%B9_Python_%D0%BF%D0%BE%D0%B2%D1%8B%D1%88%D0%B0%D0%B5%D0%BC_%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D0%BA%D0%BE%D0%B4%D0%B0"></span>Скучный Python: повышаем качество кода<span class="ez-toc-section-end"></span></h3>
<p>Я не ставил целью перечислить в этой статье все инструменты — их слишком много. Вместо этого я расскажу о нескольких, которые я лично могу рекомендовать, вместе с объяснениями, почему я их советую. Если они вам не понравятся, есть другие способы достижения целей, которые я изложил здесь, их можно изучить отдельно.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/713992/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%82%D0%BE%D1%87%D0%B8%D0%B5_%D0%B2_Python"></span>Объект многоточие в Python<span class="ez-toc-section-end"></span></h3>
<p>В этой статье мы подробнее рассмотрим объект многоточия, где можно использовать его в повседневной практике программиста, и какие известные пакеты Python используют его.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/716174/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_Python_%E2%80%94_%D1%8D%D1%82%D0%BE_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0"></span>Функции Python — это объекты первого класса<span class="ez-toc-section-end"></span></h3>
<p>Их можно присваивать переменным, хранить в структурах данных, передавать в качестве аргументов другим функциям и даже возвращать в качестве значений из других функций. Интуитивное понимание этих понятий значительно облегчит понимание таких продвинутых функций Python, как лямбды и декораторы. А также поможет вам продвинуться на пути к техникам функционального программирования. В этом руководстве я приведу ряд примеров, которые помогут развить это интуитивное понимание.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/725374/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%B5%D0%BA%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B_Python_%D0%BF%D0%BE%D1%88%D0%B0%D0%B3%D0%BE%D0%B2%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE"></span>Декораторы Python: пошаговое руководство<span class="ez-toc-section-end"></span></h3>
<p>Понимание декораторов является важной вехой для любого программиста Python. Эта статья представляет собой пошаговое руководство о том, как декораторы могут помочь вам стать более эффективным и продуктивным разработчиком на Python.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/727590/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_real-time_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9_%D1%81_Python_%D0%B8_WebSocket"></span>Разработка real-time приложений с Python и WebSocket<span class="ez-toc-section-end"></span></h3>
<p>Real-time приложения, как следует из названия, предоставляют мгновенный обмен данных и информации между сервером и клиентом. Они встречаются повсеместно в различных сферах, начиная от социальных сетей и мессенджеров, и заканчивая финансовыми торговыми платформами, мониторингом систем, онлайн-играми и многими другими областями. Подобные приложения обеспечивают пользовательский опыт, который чрезвычайно близок к реальному времени.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/770256/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%BE%D0%B1%D1%8B_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D1%8C_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83_Numba_%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0_NumPy_%D0%BD%D1%83%D0%B6%D0%BD%D0%BE_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D1%8C_%D0%BA%D0%B0%D0%BA_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D1%8B"></span>Чтобы ускорить работу Numba и кода NumPy, нужно понять, как работают процессоры<span class="ez-toc-section-end"></span></h3>
<p>В этой статье мы:</p>
<ul>
<li>Рассмотрим простую задачу обработки изображений.</li>
<li>Попытаемся (поначалу безуспешно) ускорить ее с помощью Numba.</li>
<li>Рассмотрим, почему современные процессоры такие быстрые, и каковы возможности компиляторов.</li>
<li>Опираясь на полученные знания, мы скорректируем наш код так, чтобы он выполнялся<strong> </strong>в 25 раз быстрее по сравнению с первоначальной версией.</li>
</ul>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/756930/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_JavaScript"></span>Современный способ глубокого клонирования объектов в JavaScript<span class="ez-toc-section-end"></span></h3>
<p>Вы знали, что теперь в JavaScript есть нативный способ делать глубокие копии объектов? Это стало возможным с помощью функции <code>structuredClone</code>, встроенной в среду выполнения JavaScript.</p>
<p><a href="https://habr.com/ru/companies/otus/articles/719460/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%B5_%D1%85%D1%83%D0%BA%D0%B8_%D0%B2_React"></span>Кастомные хуки в React<span class="ez-toc-section-end"></span></h3>
<p>Когда я искал свою первую работу в качестве Frontend-разработчика, меня часто спрашивали, умею ли я писать кастомные хуки в React. Тогда я только начинал изучать React и только-только запомнил основы, такие как <code>useState</code><em> и </em><code>useEffect</code>. Слово «кастомный хук» для меня было новым и сложным. Но теперь, когда я уже более опытный разработчик, знаю, что это значит и как их использовать.</p>
<p>В этой статье я расскажу о лучших практиках при создании кастомных хуков и приведу пример создания кастомного хука для работы с API. </p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/729596/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%AF_%D0%BF%D1%80%D0%BE%D0%B1%D0%BE%D0%B2%D0%B0%D0%BB_GitHub_Copilot_%D0%B8_%D1%8F_%D0%B2_%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%B3%D0%B5"></span>Я пробовал GitHub Copilot, и я в восторге<span class="ez-toc-section-end"></span></h3>
<p>GitHub Copilot позиционирует себя как «ваш помощник по написанию кода на базе ИИ». Copilot выводит машинное обучение на совершенно новый уровень — он интегрируется с IDE по вашему выбору и предоставляет в ваше распоряжение мощную систему AI-driven кода, обученную на миллиардах строк опенсорсных проектов на GitHub на дюжине с лишним языков.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/725044/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Clean_Architecture"></span>Clean Architecture<span class="ez-toc-section-end"></span></h3>
<p>Как многие разработчики, я прекрасно понимаю, насколько важно создавать приложения, которые будет легко поддерживать, расширять и развивать в долгосрочной перспективе. Именно поэтому принципы Clean Architecture (Чистая архитектура) стали неотъемлемой частью моей работы. В этой статье я расскажу о том, почему следование принципам Clean Architecture так важно и какие преимущества эти принципы могут дать.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/732178/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h1 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BE%D0%B9"></span><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#30399f" class="has-inline-color">Управление командой</mark></strong><span class="ez-toc-section-end"></span></h1>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%97%D0%B0%D1%80%D0%BF%D0%BB%D0%B0%D1%82%D0%B0_%D0%BF%D0%BE_%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B0%D0%BC_%D1%81%D0%BE%D0%B1%D0%B5%D1%81%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%E2%80%94_%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%B9_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1_%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C_%D0%BE%D1%82%D0%BA%D0%BB%D0%B8%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%B2%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D1%8E_%D0%B0_%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%E2%80%94_%D0%B8%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B"></span>Зарплата по результатам собеседования — лучший способ сократить отклики на вакансию, а тестовые задания — избыточны<span class="ez-toc-section-end"></span></h3>
<p>Какой HR (или рекрутер) не сталкивался с этой проблемой? Думаю, что все. Сколько копий сломано на эту тему? Сейчас мы сломаем еще одно! Предполагаю, что сейчас все кадровики начнут кидать в меня тапками. Но умные и опытные вполне себе поймут, что мои тезисы защищают не только интересы разработчиков, но и интересы службы персонала. И вот почему.</p>
<p><a href="https://habr.com/ru/companies/otus/articles/711904/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right"><strong>Читать далее</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D1%8F_%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B6%D1%83_%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%81%D0%BE%D0%B1%D0%B5%D1%81%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0_30_%D0%BC%D0%B8%D0%BD%D1%83%D1%82"></span>Как я провожу технические собеседования за 30 минут<span class="ez-toc-section-end"></span></h3>
<p>Проанализировав свои предыдущие собеседования, я сформулировал для себя несколько требований и использовал несколько предпосылок к тому, чтобы сократить время одного собеседования, не слишком потеряв в результативности.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/718410/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87_%D1%81%D0%BB%D0%BE%D0%BC%D0%B0%D0%BB%D0%B0_Agile"></span>Почему оценка задач сломала Agile<span class="ez-toc-section-end"></span></h3>
<p>Чтобы оставаться гибкими, нам следует знать преимущества и риски используемых инструментов, в частности плюсы и минусы оценки в Story Points. В этой статье мы рассмотрим, возможно ли точное планирование итераций и гибкость без оценки времени каждой отдельной задачи.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/706692/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h1 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B8_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Linux"></span><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#30399f" class="has-inline-color">Настройка и администрирование Linux</mark></strong><span class="ez-toc-section-end"></span></h1>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%B2_%D0%9E%D0%A1_Linux"></span>Дисковая подсистема в ОС Linux<span class="ez-toc-section-end"></span></h3>
<p>В сегодняшней статье мы поговорим об устройстве дисковой подсистемы в ОС Linux. Конечно, многие скажут, что на эту тему написано уже множество статей и все и так прекрасно знают, как устроен Линукс и в том числе, как он работает с дисками. Однако, как показывает практика, даже многие администраторы при работе с дисковой подсистемой ограничиваются только начальным разбиением диска при установке операционки. Да и то, с параметрами по умолчанию. Так что я предлагаю подробнее рассмотреть такие вопросы дисковой подсистемы, как: работу с правилами правила системы udev, инструменты для работы с блочными устройствами и планировщики системы ввода/вывода.</p>
<p><a href="https://habr.com/ru/companies/otus/articles/713112/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right"><strong>Читать далее</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B1%D0%BE%D1%80_%D0%B8_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2_%D0%B2_Linux"></span>Сбор и анализ логов в Linux<span class="ez-toc-section-end"></span></h3>
<p>Журналирование событий, происходящих в системе является неотъемлемой частью функционала любого серьезного программного обеспечения. Операционная система или приложение должны в обязательном порядке рассказывать о своей жизни: регистрировать входы в систему, сбои, ошибки и другие значительные события. В этой статье мы будем говорить о том, как устроено логирование событий в ОС Linux. В качестве примера будет рассматриваться Ubuntu Linux 22.04, однако в других дистрибутивах основные элементы будут сходными.</p>
<p><a href="https://habr.com/ru/companies/otus/articles/714266/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right"><strong>Читать далее</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A2%D0%BE%D0%BD%D0%BA%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8_%D0%B2_Linux"></span>Тонкая настройка сети в Linux<span class="ez-toc-section-end"></span></h3>
<p>Начнем нашу настройку мы с внесения изменений в параметры ICMP. Широковещательные ICMP пакеты могут использоваться для реализации атаки с затоплением. В чем заключается ее суть?</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/716962/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A4%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_BTRFS"></span>Файловая система BTRFS<span class="ez-toc-section-end"></span></h3>
<p>Файловая система BTRFS (B-Tree Filesystem) предназначена для работы в Unix-подобных операционных системах. Она была разработана компанией Oracle в 2007 году. BTRFS построена по принципу CoW (Copy on Write), то есть при чтении области данных используется общая копия, в случае изменения данных — создается новая копия. Данная технология используется для оптимизации многих процессов, происходящих в операционной системе.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/725424/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h1 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"></span><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#30399f" class="has-inline-color">Тестирование</mark></strong><span class="ez-toc-section-end"></span></h1>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B8_%D0%BF%D0%B8%D1%88%D1%83%D1%82_%D0%BF%D0%BB%D0%BE%D1%85%D0%B8%D0%B5_%D1%8E%D0%BD%D0%B8%D1%82-%D1%82%D0%B5%D1%81%D1%82%D1%8B"></span>Почему хорошие разработчики пишут плохие юнит-тесты<span class="ez-toc-section-end"></span></h3>
<p>Часто разработчики программного обеспечения подходят к юнит-тестированию с ошибочным мышлением. Они автоматически применяют все «правила» и лучшие практики, которые они усвоили из опыта написания продакшен кода, не проверяя, подходят ли они для написания тестов. В результате строят небоскребы на пляже.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/768494/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%B8%D1%88%D0%B5%D0%BC_%D1%87%D0%B8%D1%81%D1%82%D1%8B%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D1%8B_%D0%BD%D0%B0_JavaScript_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D0%BE%D0%B2_BASIC"></span>Пишем чистые тесты на JavaScript с использованием принципов BASIC<span class="ez-toc-section-end"></span></h3>
<p>Продакшен код — основной код, в котором находятся функции — может быть неидеальным. Это подразумевает риск или долг, которым команды управляют различными способами. Для кода тестов риск гораздо более значителен — они могут просто исчезнуть. Сотни часов кодирования и встреч могут просто пропасть.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/769362/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C_JMeter_%D0%B4%D0%BB%D1%8F_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8"></span>Как использовать JMeter для тестирования производительности<span class="ez-toc-section-end"></span></h3>
<p>Apache JMeter — это инструмент для проведения нагрузочного тестирования, представляющий собой десктопное приложение с открытым исходным кодом на базе Java. JMeter позволяет определить, может ли тестируемое веб-приложение удовлетворять требованиям высокой нагрузки или нет. В этом руководстве мы проводим анализ производительности Google.com для 1000 пользователей с использованием различных инструментов тестирования производительности.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/746504/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h1 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D0%B8_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%91%D0%94"></span><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#30399f" class="has-inline-color">Работа с данными и администрирование БД</mark></strong><span class="ez-toc-section-end"></span></h1>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%A3%D0%91%D0%94_PostgreSQL"></span>Резервное копирование и восстановление СУБД PostgreSQL<span class="ez-toc-section-end"></span></h3>
<p>Резервное копирование является одной из основных задач администрирования баз данных. Отсутствие бэкапа может привести к катастрофическим последствиям при эксплуатации базы данных. Однако недостаточно только настроить регулярное создание резервных копий, необходимо также регулярно проверять созданные копии на способность к восстановлению БД. В этой статье мы поговорим от том, как правильно настраивать резервное копирование в БД PostgreSQL.</p>
<p><a href="https://habr.com/ru/companies/otus/articles/710094/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right"><strong>Читать далее</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_MySQL_%D0%B8_PostgreSQL_%D0%B2_2023_%D0%B3%D0%BE%D0%B4%D1%83"></span>Сравнение MySQL и PostgreSQL в 2023 году<span class="ez-toc-section-end"></span></h3>
<p>PostgreSQL и MySQL — это надежные, безопасные и масштабируемые базы данных, которые существуют уже много лет. Каждая из них имеет уникальные сильные и слабые стороны, что делает какую‑либо из них более подходящей для конкретных нужд. В этой статье мы проведем их сравнение, чтобы помочь с принятием обоснованного решения.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/722304/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%97%D0%BD%D0%B0%D0%BA%D0%BE%D0%BC%D0%B8%D0%BC%D1%81%D1%8F_%D1%81_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%BE%D0%B9_Apache_Kafka"></span>Знакомимся с архитектурой Apache Kafka<span class="ez-toc-section-end"></span></h3>
<p>Apache Kafka изначально использовалось для обеспечения функционирования работающих в реальном масштабе времени приложений и потоков данных социальной сети. Но сейчас это решение используется во многих крупных компаниях. Посмотрим подробнее, как оно устроено.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/725168/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%B0%D0%BB%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8_Python_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85"></span>Малоизвестные полезные библиотеки Python для анализа данных<span class="ez-toc-section-end"></span></h3>
<p>В этой статье мы рассмотрим некоторые полезные библиотеки Python для задач обработки данных, с которыми, возможно, вы еще не знакомы. Хотя для задач машинного обучения на ум приходят такие библиотеки, как pandas, numpy, scikit-learn, <a href="https://otus.ru/journal/keras-opisanie-i-osobennosti/" data-wpel-link="internal">keras</a>, tensorflow, matplotlib и т.д., но всегда полезно знать о других предложениях Python, особенно если это поможет улучшить ваши проекты.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/769376/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h1 class="wp-block-heading"><span class="ez-toc-section" id="%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%B8_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC"></span><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#30399f" class="has-inline-color">Анализ и проектированием систем</mark></strong><span class="ez-toc-section-end"></span></h1>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%BB%D1%8F_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_gRPC"></span>Проектирование архитектуры для микросервисов с использованием gRPC<span class="ez-toc-section-end"></span></h3>
<p>Микросервисная архитектура предлагает нам гибкость, масштабируемость и управление сложными приложениями на новом уровне. Однако, чтобы извлечь максимальную выгоду из этой архитектуры, важно правильно спроектировать микросервисы и обеспечить эффективное взаимодействие между ними. gRPC – высокопроизводительный и мощный инструмент для построения микросервисных систем.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/767724/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%82%D0%B5%D0%BB%D0%B5%D0%B3%D1%80%D0%B0%D0%BC-%D0%B1%D0%BE%D1%82%D0%BE%D0%B2_%D0%BD%D0%B0_Python"></span>Архитектура высоконагруженных телеграм-ботов на Python<span class="ez-toc-section-end"></span></h3>
<p>Высоконагруженные боты спроектированы и оптимизированы так, чтобы обрабатывать огромное количество запросов одновременно, быстро и надежно. Они предоставляют максимально качественный пользовательский опыт и позволяют бизнесам успешно масштабировать свои услуги.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/760890/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%BD%D1%8B%D0%B5_%D0%B0%D0%BD%D1%82%D0%B8%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B_%D0%B2_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%B0%D1%85_%D0%B8_%D0%BA%D0%B0%D0%BA_%D0%B8%D1%85_%D0%B8%D0%B7%D0%B1%D0%B5%D0%B6%D0%B0%D1%82%D1%8C"></span>Архитектурные антипаттерны в микросервисах и как их избежать<span class="ez-toc-section-end"></span></h3>
<p>Микросервисная архитектура стремительно набирает обороты благодаря своей способности обеспечивать гибкость, масштабируемость и быстрое внедрение изменений. Однако, как и в любой технологии, существуют ловушки и ошибки, которые могут подорвать преимущества микросервисов.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/754712/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Docker_%D0%B8_%D1%81%D0%B5%D1%82%D0%B8"></span>Docker и сети<span class="ez-toc-section-end"></span></h3>
<p>Сейчас без преувеличения можно сказать, что контейнеризация прочно вошла в нашу жизнь. Контейнеры используются в различных программных продуктах, начиная от микросервисов и заканчивая решениями ИБ, такими как песочницы. Однако, контейнеры не были бы столь удобным инструментом построения распределенной архитектуры, если бы они не могли взаимодействовать между собой, а также обмениваться данными с внешними сетевыми ресурсами. В этой статье мы подробно рассмотрим механизмы, позволяющие контейнерам работать с сетями. </p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/730798/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h1 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0"></span><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#30399f" class="has-inline-color">Математика</mark></strong><span class="ez-toc-section-end"></span></h1>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D0%BD%D0%BE%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE%D0%B3%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B5_%D1%86%D0%B5%D0%BF%D0%B8"></span>Искусство прогнозирования: погружение в Марковские цепи<span class="ez-toc-section-end"></span></h3>
<p>Особенно интересным применением Марковских цепей является их использование в области компьютерной графики и киноиндустрии. Благодаря этой модели можно сгенерировать реалистичные анимации и эффекты спецэффектов в кино. Также Марковские цепи используются в обработке естественного языка и генерации текстов.</p>
<p>В данной статье мы рассмотрим основы Марковских цепей, а также реализуем Марковские цепи на Python.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/732424/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B3%D0%BE_%D0%B2%D0%BE%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C"></span>Алгоритмы быстрого возведения в степень<span class="ez-toc-section-end"></span></h3>
<p>В настоящее время мы уже так привыкли пользоваться готовыми решениями, что при написании высокоуровневого кода, даже не задумываемся над тем, а как вообще реализованы те или иные инструменты. И уж конечно, при возведении чисел в степень, мы никогда не задумываемся о том, а как вообще все это реализовано. И какие существуют алгоритмы для этого?</p>
<p>Возведение числа в степень является одной из основных операций в математике. Что вообще такое возведение в степень? Как нам известно еще со школы — это многократное умножение числа на себя. Но проблема кроется в том, что при возведении больших чисел в очень большие степени вычисления могут занять много времени.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/779396/https://habr.com/ru/companies/otus/articles/779396/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h1 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%BB%D1%8F_%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D1%85"></span><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#30399f" class="has-inline-color">Для начинающих</mark></strong><span class="ez-toc-section-end"></span></h1>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B0%D0%BC%D1%8B%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8"></span>Самые распространенные логические ошибки<span class="ez-toc-section-end"></span></h3>
<p>Знание о существовании логических ошибок является важной составляющей развитого критического мышления. Критическое мышление помогает принимать взвешенные решения как в личной жизни, так и в рабочих ситуациях, структурировать информацию и вести переговоры. В этой статье представляем список из 24 наиболее распространенных логических ошибок с объяснением и примерами.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/747938/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC"></span>Основы операционных систем<span class="ez-toc-section-end"></span></h3>
<p>Цель данной статьи — разобраться в основах операционных систем. Мы рассмотрим то, что делает ОС достаточно функциональными и эффективными, поговорим об их истории и технологиях. Статья будет интересна новичкам, которым интересно разобраться в основах ОС.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/728394/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="10_%D0%B8%D0%B3%D1%80_%D0%B4%D0%BB%D1%8F_%D0%B8%D0%B7%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_JavaScript"></span>10 игр для изучения JavaScript<span class="ez-toc-section-end"></span></h3>
<p>Изучать язык, играя в игры, очень весело, а для некоторых людей это отличный способ наглядного восприятия языка. Без лишних слов, вот десять фантастических игр, с помощью которых вы можете изучать JavaScript.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/739946/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Roadmap_%D0%B4%D0%BB%D1%8F_%D0%B8%D0%B7%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_Java"></span>Roadmap для изучения Java <span class="ez-toc-section-end"></span></h3>
<p>В статье я перечислю ряд ресурсов вместе с описанием их содержания. Но по большому счету процесс обучение Java делится на 3 этапа: основы Java, шаблоны проектирования и производительность Java.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/742158/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B_%D0%9E%D0%9E%D0%9F_%D0%B2_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B0%D1%85_%D0%B4%D0%BB%D1%8F_%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D1%85"></span>Принципы ООП в примерах для начинающих<span class="ez-toc-section-end"></span></h3>
<p>Как создатель и руководитель курсов по C# я вижу, что часто у людей, начинающих изучать этот язык, принципы Объектно-Ориентированного Программирования вызывают затруднения в понимании. А так как один из лучших способов что-то понять, это посмотреть применение на примерах, то я решил написать статью с примерами принципов. Рекомендую найти какую-нибудь статью или книгу, где прочитать основную теорию, а в этой статье уже посмотреть примеры применения этой теории, чтобы понять её лучше.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/764266/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D1%81%D1%87%D0%B5%D1%80%D0%BF%D1%8B%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D0%BC_%D1%82%D0%B8%D0%BF%D0%B0%D0%BC_API"></span>Исчерпывающее руководство по различным типам API<span class="ez-toc-section-end"></span></h3>
<p>API (Application Programming Interface, программный интерфейс приложения), является жизненно важным компонентом в современном ландшафте разработки программного обеспечения, обеспечивая строительные блоки для взаимодействия приложений друг с другом. В этой статье рассмотрим пять основных типов API: REST, SOAP, WebSocket, gRPC и GraphQL, чтобы получить более четкое представление об их функциях, особенностях и идеальных сценариях использования.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/737610/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h1 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D1%83%D1%87%D0%BD%D0%BE-%D0%BF%D0%BE%D0%BF%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B5"></span><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#30399f" class="has-inline-color">Научно-популярное</mark></strong><span class="ez-toc-section-end"></span></h1>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%97%D0%B0%D1%87%D0%B5%D0%BC_%D0%BD%D0%B0%D0%BC_%D0%BD%D1%83%D0%B6%D0%BD%D1%8B_%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%B8%D0%B8_%D0%B7%D0%B0_%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B0%D0%BC%D0%B8_%D0%97%D0%B5%D0%BC%D0%BB%D0%B8"></span>Зачем нам нужны колонии за пределами Земли<span class="ez-toc-section-end"></span></h3>
<p>В последнее время занимаюсь все больше языковыми моделями и тем, что сейчас принято называть искусственным интеллектом. Ощущаю себя на передовом крае технологии. И часто задумываюсь о том, что нас, людей, движет вперед? Поэтому, сегодня захотелось поговорить на отвлеченную тему, а именно об освоении космоса. Хочу заранее предупредить, что не являюсь специалистом в данной области. Многое из того, что будет сказано в статье, не более, чем гипотезы. Так что, не судите строго. Со своей стороны могу гарантировать, что в статье будет несколько небанальных моментов, о которых вы возможно не слышали. Надеюсь, вам будет интересно.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/761044/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D1%8B_%D0%B6%D0%B8%D0%B2%D0%B5%D0%BC_%D0%B2_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8_%D0%9C%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0"></span>Мы живем в компьютерной симуляции. Мнение программиста<span class="ez-toc-section-end"></span></h3>
<p>Меня зовут Игорь Звягин, я профессиональный веб-разработчик, на текущий момент с 7-летним опытом и в этой статье я хочу рассказать, как пришел к мнению, что мы живем в компьютерной симуляции, почему это не тревожит, а наоборот и какие интересные возможности это предоставляет.</p>
<p>В этой статье я буду ссылаться на некоторые научные данные, на случаи из моей жизни и рассказы людей, которым я доверяю.</p>
<p><strong><a href="https://habr.com/ru/companies/otus/articles/751350/" target="_blank" rel="noopener nofollow external noreferrer" title="Читать далее" data-wpel-link="external" class="wpel-icon-right">Читать далее<span class="wpel-icon wpel-image wpel-icon-6"></span></a></strong></p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/events/near/?utm_source=oj&utm_medium=affilate&utm_campaign=otus&mxm=[[hash_metrika]]&relogin=True&token=[[token]]" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img fetchpriority="high" decoding="async" width="1024" height="370" src="https://otus.ru/journal/wp-content/uploads/2024/01/Habr_banner-1024x370.png" alt="Большой дайджест: лучшие статьи за 2023 год в блоге OTUS на Хабр" class="wp-image-8733" srcset="https://otus.ru/journal/wp-content/uploads/2024/01/Habr_banner-1024x370.png 1024w, https://otus.ru/journal/wp-content/uploads/2024/01/Habr_banner-300x108.png 300w, https://otus.ru/journal/wp-content/uploads/2024/01/Habr_banner-150x54.png 150w, https://otus.ru/journal/wp-content/uploads/2024/01/Habr_banner-768x278.png 768w, https://otus.ru/journal/wp-content/uploads/2024/01/Habr_banner-1536x555.png 1536w, https://otus.ru/journal/wp-content/uploads/2024/01/Habr_banner.png 1560w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/dajdzhest/" rel="tag" data-wpel-link="internal">дайджест</a><a href="https://otus.ru/journal/tag/podborka-statej/" rel="tag" data-wpel-link="internal">подборка статей</a><a href="https://otus.ru/journal/tag/habr-2/" rel="tag" data-wpel-link="internal">хабр</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fbolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fbolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr%2F&text=%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B9%20%D0%B4%D0%B0%D0%B9%D0%B4%D0%B6%D0%B5%D1%81%D1%82%3A%20%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%B5%20%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8%20%D0%B7%D0%B0%202023%20%D0%B3%D0%BE%D0%B4%20%D0%B2%20%D0%B1%D0%BB%D0%BE%D0%B3%D0%B5%20OTUS%20%D0%BD%D0%B0%20%D0%A5%D0%B0%D0%B1%D1%80" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fbolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fbolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2024%2F01%2Foj-1080x720-kopiya.png&description=%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B9%20%D0%B4%D0%B0%D0%B9%D0%B4%D0%B6%D0%B5%D1%81%D1%82%3A%20%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%B5%20%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8%20%D0%B7%D0%B0%202023%20%D0%B3%D0%BE%D0%B4%20%D0%B2%20%D0%B1%D0%BB%D0%BE%D0%B3%D0%B5%20OTUS%20%D0%BD%D0%B0%20%D0%A5%D0%B0%D0%B1%D1%80" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/proekt-sistema-dlya-podderzhki-raboty-barov-kursa-highload-architect/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/proekt-sistema-dlya-podderzhki-raboty-barov-kursa-highload-architect/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Проект «Система для поддержки работы баров» курса «Highload Architect»" decoding="async" data-srcset="https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-1-1-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-1-1-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-1-1-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-1-1-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-1-1-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-1-1-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="Проект «Система для поддержки работы баров» курса «Highload Architect»" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/proekt-sistema-dlya-podderzhki-raboty-barov-kursa-highload-architect/" data-wpel-link="internal">Проект «Система для поддержки работы баров» курса «Highload Architect»</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/proekt-sistema-dlya-podderzhki-raboty-barov-kursa-highload-architect/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2024-01-07T20:52:05+00:00">7 января, 2024</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">3 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/vhod-v-it-cherez-testirovanie-2/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/vhod-v-it-cherez-testirovanie-2/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Вход в IT через тестирование" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-kopiya-2-150x106.png 150w, https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-kopiya-2-300x212.png 300w, https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-kopiya-2-1024x724.png 1024w, https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-kopiya-2-768x543.png 768w, https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-kopiya-2-1536x1086.png 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2024/01/oj-1080x720-kopiya-2-150x106.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Вход в IT через тестирование" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/vhod-v-it-cherez-testirovanie-2/" data-wpel-link="internal">Вход в IT через тестирование</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/vhod-v-it-cherez-testirovanie-2/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2024-01-11T14:58:22+00:00">11 января, 2024</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">1 Min Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/proekt-tg-autoposter-na-nest-js/" title="Проект «TG Autoposter на Nest.JS»" class="image-link" data-wpel-link="internal">
</a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/proekt-tg-autoposter-na-nest-js/" class="post-link" data-wpel-link="internal">Проект «TG Autoposter на Nest.JS»</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-12-23T00:44:53+00:00">23 декабря, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/langtrainee-razrabotka-mvp-ai-platformy-dlya-personalizirovannogo-izucheniya-yazykov/" title="LangTrainee: разработка MVP AI-платформы для персонализированного изучения языков" class="image-link" data-wpel-link="internal">
</a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/langtrainee-razrabotka-mvp-ai-platformy-dlya-personalizirovannogo-izucheniya-yazykov/" class="post-link" data-wpel-link="internal">LangTrainee: разработка MVP AI-платформы для персонализированного изучения языков</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-12T04:39:47+00:00">12 ноября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/bolshoj-dajdzhest-luchshie-stati-za-2023-god-v-bloge-otus-na-habr\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Mon, 09 Mar 2026 16:00:36 GMT -->