Как стать автором
Обновить
-1
0

Пользователь

Отправить сообщение

Принципы проектирования SOLID с примерами на Python

Время на прочтение 9 мин
Количество просмотров 54K

Эффективный алгоритм – основа работы эффективного программного обеспечения. Когда алгоритм уже есть, следующая задача – сделать так, чтобы ПО было разработано с использованием лучших методов проектирования и лучшей архитектуры. Специалисты, исследователи и эксперты определили лучшие практики эффективного проектирования программных приложений. Одной из наиболее популярных среди них являются принципы проектирования, известные под аббревиатурой SOLID.

Читать далее
Всего голосов 20: ↑19 и ↓1 +18
Комментарии 13

Находим более качественные решения при помощи boost

Время на прочтение 9 мин
Количество просмотров 16K

Каждый C++-разработчик хотя бы слышал о Boost – это, пожалуй, наиболее распространенный набор внешних библиотек, используемый в мире C++. Истоки большинства стандартных библиотек восходят к Boost, поскольку многие разработчики Boost также входят в состав комитета по стандартам C++ и именно они определяют, в каком направлении будет развиваться язык – поэтому можете считать Boost своеобразным дорожным указателем. Возвращаясь к заголовку этой статьи - 'Boost' содержит много популярного функционала, вспомогательных библиотек, так, что, если вы столкнулись с какой-нибудь распространенной проблемой – первым делом обращайтесь к Boost, так как велики шансы, что там для вас найдется готовое решение.

Читать далее
Всего голосов 23: ↑15 и ↓8 +7
Комментарии 5

Погромист. Мои самые эпичные провалы за всю карьеру

Время на прочтение 13 мин
Количество просмотров 103K

Я люблю критику. Если вы не заметили, я, как старый дед, всё поливаю грязью и всем недоволен.

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

Читать далее
Всего голосов 287: ↑278 и ↓9 +269
Комментарии 204

Разработка веб приложений на C/С++

Время на прочтение 6 мин
Количество просмотров 12K
В этой статье я бы хотел рассказать про создание веб приложений на С/С++ с использованием стека Nginx+fastcgi. Если быть более точным, то статья больше относится к сайтам, то есть к отдаче контента. Есть достаточно старая, но хорошая статья habr.com/ru/post/154187 Хотя тех пор прошло много времени, вышли новые стандарты С++. Я хочу в этой статье описать некоторое логическое продолжение, так как думаю, что тема будет многим интересна.
Читать дальше →
Всего голосов 16: ↑9 и ↓7 +2
Комментарии 21

Куда катятся зарплаты разработчиков в IT?

Время на прочтение 7 мин
Количество просмотров 96K

Грустный юмор HR: «Проводите собеседования быстрее, потому что к концу интервью стоимость разработчика может сильно увеличиться».

Рост ценности рук и мозгов IT-шников за последний год шел бурно и скачкообразно. Это, конечно, греет душу их обладателям — всегда приятно, когда твой труд хорошо оплачивается. Но стремительный взлет окладов в космические дали наводит на мысли о перегреве, о пузыре, который рано или поздно схлопнется. А это уже напрягает, потому что непонятно, на что рассчитывать в перспективе.

Читать далее
Всего голосов 77: ↑56 и ↓21 +35
Комментарии 290

Как и чем живёт современный Токио

Время на прочтение 16 мин
Количество просмотров 30K
В предыдущем материале я рассмотрел причины, привёдшие к образованию Токайдo, а также основы японского городского планирования. Сегодня расскажу о том, как и чем живёт современный Токио, ядро этого громадного мегалополиса: жилищный вопрос, постепенный отход от эгалитаризма в эпоху post bubble economy, несколько социальных феноменов.

Читать дальше →
Всего голосов 120: ↑118 и ↓2 +116
Комментарии 20

Python: самое короткое решение 41 задачи из проекта Эйлера

Время на прочтение 5 мин
Количество просмотров 15K

Сегодня мы решим 41-ю задачу из Проекта Эйлера в 6 строк кода. Сделаем это сначала в развёрнутом виде, а потом максимально сократим решение.

Читать далее
Всего голосов 13: ↑11 и ↓2 +9
Комментарии 13

Осваиваем кросс-компиляцию с помощью Clang и LLVM

Время на прочтение 21 мин
Количество просмотров 20K

Каждый, кто когда-либо пробовал собрать программу на C/C++ через кросс-компиляцию знает, насколько болезненным может быть этот процесс. Главными причинами столь печального положения вещей являются недружелюбность систем сборки при конфигурации кросс-компиляции, а также запутанность процесса настройки набора утилит (тулчейна).


Одним из основных виновников этих проблем, по моему опыту, является тулчейн GNU — древний мамонт, на котором много десятилетий строится весь мир POSIX. Подобно многим компиляторам былых времён, семейство GCC и binutils никогда не ориентировалось на поддержку множества различных целей сборки в одной установке, и единственным способом хоть как-то добиться желаемого была настройка полной кросс-билд-системы для каждой целевой платформы на каждом хосте.

Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 8

Базовые концепции аллокаторов

Время на прочтение 10 мин
Количество просмотров 17K

Находясь в поисках какой-то агрегированной информации о стандартных приёмах, используемых при проектировании кастомных аллокаторов, я обнаружил, что существует достаточное количество статей о том, как аллокаторы работают в C++, каких-то базовых вариантах или наоборот очень специфических версиях, но ничего достаточно общего. Попался только замечательный доклад замечательного Андрея Александреску про неправильную архитектуру std::allocator и собственно базовые концепции построения своего нового самого крутого в мире аллокатора. Эта статья является довольно вольным переводом второй части его выступления с моими небольшими дополнениями. Конечно же, категорически рекомендую посмотреть оригинальный доклад, но, если вы любитель текстовых версий, прошу под кат.

Выделить знания...
Всего голосов 40: ↑40 и ↓0 +40
Комментарии 5

C++ велосипедостроение для профессионалов

Время на прочтение 36 мин
Количество просмотров 46K
Классы, которые люди самостоятельно пишут, а потом копируют из одного проекта в другой, хотя они уже есть в стандартных библиотеках, в простонародье называются велосипедами. Первый вопрос, который возникает при встрече с таким «велосипедом» — зачем люди переписывают что-то заново? Вариантов может быть несколько.

  • Некоторые делают это для самообучения: берут класс стандартной библиотеки, пишут его сами с нуля, сравнивают то, что получилось, с тем, что есть в стандартной библиотеке — в процессе узнают для себя что-то новое.
  • Некоторые проекты имеют особое требования к коду. В embedded-разработке принято работать без RTTI и без exception, поэтому части стандартной библиотеки, которые используют RTTI и exception, необходимо переписать без них.
  • Редко, но бывает, когда велосипед пишут, потому что могут написать лучше, чем в стандартной библиотеке. Как правило, такие нововведения рано или поздно попадают в стандартную библиотеку.
  • Другим только кажется, что они могут написать лучше, и таких людей больше. Но в процессе они обучаются, выясняют для себя что-то новое и что-то интересное открывают.
  • Могут быть другие причины.

Сегодня мы не будем говорить о том, что велосипеды — это плохо, это не обязательно так. Мы поговорим о том, что действительно плохо:

  • бездумно переносить устаревшие технологии 20-30-летней давности в современные проекты;
  • пользоваться «вредными» бенчмарками и оптимизациями.

А также затронем «вредные» советы, обсудим новейшие практики программирования (C++ 11 и позднее), подумаем, что делать с «идеальным» велосипедом.

Всего голосов 76: ↑76 и ↓0 +76
Комментарии 102

Руководство Google по стилю в C++. Часть 7

Время на прочтение 40 мин
Количество просмотров 9K
Часть 1. Вступление

Часть 6. Специфика Google
Часть 7. Ещё возможности C++
Часть 8. Именование


Это последняя переведённая часть руководства Google по стилю в C++.
Спасибо за замечания и комментарии к переводу.
Надеюсь это руководство будет полезным подспорьем для программистов на C++.
Исходная статья (fork на github), обновляемый перевод.
И ещё здесь много букв.
Читать дальше →
Всего голосов 6: ↑4 и ↓2 +2
Комментарии 0

Оптимизация математических вычислений и опция -ffast-math в GCC 11

Время на прочтение 9 мин
Количество просмотров 7.8K
В этом материале речь пойдёт об оптимизациях, которые включает опция -ffast-math при компиляции кода, написанного на C или C++, с использованием GCC 11 для x86_64 Linux (при применении других языков, операционных систем, процессоров могут использоваться немного другие оптимизации).


Читать дальше →
Всего голосов 46: ↑45 и ↓1 +44
Комментарии 5

Как определить C и C++-программистов по коду, который они пишут

Время на прочтение 4 мин
Количество просмотров 39K

Так уж случилось, что я пишу код для разных IoT-железок, связанных с электричеством, типа зарядных станций автомобилей. Поскольку аппаратных ресурсов, как правило, вполне достаточно, то основным фокусом является не экономия каждого байта и такта процессора, а понятный и надежный код. Поэтому в проекте разрабатывают под Embedded Linux и в качестве основного языка используют C++ в его современном варианте - C++17, активно поглядывая на фичи из стандарта 20-го года и новее.

Иногда запускаются новые проекты на той же платформе, с теми же процессами и с переиспользованием многих уже существующих компонентов, и тогда в эти проекты мы ищем программистов, с учетом вышесказанного - программистов на C++. В embedded, тем не менее, чистый C все еще очень популярен, и нередко собеседоваться на вакансию C++ Developer'а приходят именно сишники. Логика у человека простая: языки, на первый взгляд, довольно близкие, базовый синтаксис одинаков, про ООП кандидат что-то слышал, и значит, основная база уже есть и он сможет легко освоить C++ за 21 день в процессе работы, поэтому можно наплести про "с C++ тоже работал", начать писать на "Си с классами" и все получится.

Но нет, не получится.
Всего голосов 110: ↑86 и ↓24 +62
Комментарии 404

Шифры замены

Время на прочтение 9 мин
Количество просмотров 6.1K

В предыдущей статье были рассмотрены простые шифры, использующие алфавиты естественных языков (ЕЯ). Автоматическая обработка сообщений в компьютерных и сетях связи предусматривает использование искусственных языков (ИЯ), что более эффективно во многих отношениях. Ранее описывалась классификация шифров и для некоторых из них было показано как они применяются в области информационной безопасности. Здесь продолжим такое рассмотрение, но для более сложных шифров.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 4

20 вещей, которые я узнал за 20 лет работы инженером-программистом

Время на прочтение 8 мин
Количество просмотров 99K

Наткнулся на любопытный материал, в котором автор систематизировал и записал свой опыт инженера-программиста в 20 тезисов. Я работаю в коммерческой разработке ПО больше 25 лет, и этот текст отозвался во мне практически каждой буквой — большинство советов я тоже регулярно практикую, не облекая их в формат ёмких афоризмов. В общем, решил сделать перевод.

Особенно отзываются пункты «стройте компактные системы» и «лучший код — это отсутствие кода». Последний совет я превращаю в цитату из какого-то второсортного фильма про самураев: «Лучшая победа — та, которую ты одержал, не доставая меч из ножен» (думаю, сослуживцы за моей спиной уже закатывают глаза). И, конечно, бесконечные разговоры про легендарных 10x-программистов постоянно хочется прервать советом не связываться с 0,1x-программистами (которые реально существуют, в отличие от 10x).

Читать далее
Всего голосов 186: ↑181 и ↓5 +176
Комментарии 158

Создание и использование динамических библиотек в Rust

Время на прочтение 9 мин
Количество просмотров 10K

Динамические библиотеки подключаются к программе во время выполнения. Это позволяет обновлять их реализацию и компилировать независимо от использующих программ. Такой подход открывает ряд дополнительных возможностей при разработке ПО. Например, написание разных модулей приложения на разных языках. Или создание системы динамически подключаемых плагинов. В данной статье мы рассмотрим, как создавать и загружать динамические библиотеки в Rust.

Читать далее
Всего голосов 34: ↑34 и ↓0 +34
Комментарии 0

Развитие инструментария С++ программистов: статические анализаторы кода

Время на прочтение 13 мин
Количество просмотров 9.4K

Развитие инструментария С++ программистов: статические анализаторы кода
Размер современных приложений и сложность языка C++ превышают возможности людей по всестороннему анализу текста программ на обзорах кода. Компенсационная методология – статический анализ кода.

Читать дальше →
Всего голосов 23: ↑19 и ↓4 +15
Комментарии 7

Особенности работы с POSIX-сигналами

Время на прочтение 10 мин
Количество просмотров 13K

Как и любой другой инструмент, POSIX-сигналы имеют свои правила, как их использовать грамотно, надежно и безопасно. Они испокон веков описаны в самом стандарте POSIX, в стандартах языков программирования, в manpages, однако и по сей день я нередко встречаю связанные с этим грубые ошибки даже в коде опытных разработчиков, что в коммерческих проектах, что в открытых. Поэтому давайте поговорим о важном еще раз.

Читать далее
Всего голосов 64: ↑64 и ↓0 +64
Комментарии 18

Начинающему сетевому программисту

Время на прочтение 17 мин
Количество просмотров 105K

Тема сетевого программирования является для разработчиков одной из важнейших в современном цифровом мире. Правда, надо признать, что большая часть сетевого программирования сосредоточена в области написания скриптов исполнения для web-серверов на языках PHP, Python и им подобных. Как следствие - по тематике взаимодействия клиент-сервер при работе с web-серверами написаны терабайты текстов в Интернете. Однако когда я решил посмотреть, что же имеется в Интернете по вопросу программирования сетевых приложений с использованием голых сокетов, то обнаружил интересную вещь: да, такие примеры конечно же есть, но подавляющее большинство написано под *nix-системы с использованием стандартных библиотек (что понятно – в области сетевого программирования Microsoft играет роль сильно отстающего и менее надежного «собрата» *nix-ов). Другими словами все эти примеры просто не будут работать под Windows. При определенных танцах с бубнами код сетевого приложения под Linux можно запустить и под Windows, однако это еще более запутает начинающего программиста, на которого и нацелены большинство статей в Интернете с примерами использования сокетов.

Ну а что же с документацией по работе с сетевыми сокетами в Windows от самой Microsoft? Парадоксальность ситуации заключается в том, что непосредственно в самой документации приведено очень беглое описание функций и их использования, а в примерах имеются ошибки и вызовы старых «запрещенных» современными компиляторами функций (к примеру, функция inet_addr() - https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-listen ) - такие функции конечно же можно вызывать, заглушив бдительность компилятора через #define-директивы, однако такой подход является полным зашкваром для любого даже начинающего программиста и категорически не рекомендуется к использованию. Более того, фрагмент кода в примере от Microsoft по ссылке выше.

Читать далее
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 50

9 команд для проверки информации о CPU в Linux

Время на прочтение 6 мин
Количество просмотров 103K

Информация об аппаратном обеспечении CPU

Информация о CPU (Central Processing Unit. Центральный процессор) включает в себя подробные сведения о процессоре, такие как архитектура, название производителя, модель, количество ядер, скорость каждого ядра и т.д.

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

Читать далее
Всего голосов 10: ↑7 и ↓3 +4
Комментарии 3

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность