Разработка
Почему в вашем коде так сложно разобраться
Представьте, что вы оставляете за собой хлебные крошки, когда идете по ярко освещенному лесу своего кода. Поверьте мне, когда позже вам понадобится найти дорогу обратно, этот лес покажется темным, туманным и зловещим. Звучит просто, но на деле сделать это очень сложно.
Разберем подробно шесть проблем, которые ухудшают читаемость и поддерживаемость кода.
Пять продвинутых техник инициализации в 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-летним опытом и в этой статье я хочу рассказать, как пришел к мнению, что мы живем в компьютерной симуляции, почему это не тревожит, а наоборот и какие интересные возможности это предоставляет.
В этой статье я буду ссылаться на некоторые научные данные, на случаи из моей жизни и рассказы людей, которым я доверяю.