Как стать автором
Обновить
678.68
Рейтинг

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга

Объектно-ориентированный антипаттерн

Программирование *Совершенный код *C++ *Проектирование и рефакторинг *ООП *
Перевод

Довольно часто у студентов, изучающих C++ в определённых учебных кругах, складывается мировоззрение о том, что всё должно быть объектами. Попросите их написать программу, которая считает некоторое значение - и они начнут с создания объекта ValueComputer и метода vc.computeResult().

Например: дана задача с помощью динамического программирования посчитать количество способов замостить костяшками домино прямоугольник w \times h. Студент пишет:

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

Новости

Тыж программист. Ада Лавлейс

Блог компании Timeweb Cloud Программирование *История IT
Вернёмся к вопросу о компьютерах. Вопроса, что следует считать первым (или не совсем) компьютером, мы успели коснуться в статье про разностную машину Бэббиджа. А там, где есть первый компьютер, есть и первый программист. И кто же был этим супергероем, чинящим всё — от холодильника до лыж? А ответ, между тем, лежит недалеко от механического зверя Чарльза Бэббиджа, и в какой-то мере даже с ним связан. Итак, на сцену выходит леди Августа Ада Кинг Байрон, графиня Лавлейс!

image
Мать вычислений, бесподобная леди Лавлейс
Читать дальше →
Всего голосов 17: ↑14 и ↓3 +11
Просмотры 3.8K
Комментарии 10

Ловим Енотисов при отладке на PHP: руководство для программистов

PHP *Программирование *
Из песочницы

Если вы владелец сайта и думаете, что на нём нет ошибок, то вы ошибаетесь. Если вы программист и думаете, что некоторые ошибки можно не обрабатывать, то вы тоже ошибаетесь. В обоих случаях речь идёт о Енотисах (E_NOTICE). Далее вы узнаете, почему им нужно уделять внимание и как сделать удобный инструмент для хранения и обработки ошибок.

Читать далее
Всего голосов 7: ↑3 и ↓4 -1
Просмотры 2K
Комментарии 9

Микросервисы и неизбежная боль?

Программирование *Разработка под Linux *DevOps *Микросервисы *Kubernetes *

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

Эта статья является моим авторским текстом и не является переводом. Если вы со мной не согласны, желаете дополнить или поделиться своим мнением, я буду рад обсудить вашу взвешенную и аргументированную позицию в комментариях.

Читать далее
Всего голосов 47: ↑45 и ↓2 +43
Просмотры 9.1K
Комментарии 95

Go против Rust — производительность вне конкуренции

Программирование *Go *Rust *

В статье Наблюдение за выполнением конкурирующих задач в Go и Rust коллега cpmonster привёл весьма интересные результаты:


Программа на Rust показала намного большую производительность при вычислении членов возвратной последовательности, чем программа на Go: 367 млн. итераций в секунду против 44 млн.

Ну, в 1.5 раза… Ну, в 2 раза… Но семь гвардейцев за два дня — это слишком, тем более что тут "гвардейцев" больше восьми!


Или нет, не слишком? В общем, потенциал любопытства пересилил другие потенциалы и я провёл своё исследование.

Читать дальше →
Всего голосов 88: ↑86 и ↓2 +84
Просмотры 19K
Комментарии 83

RVO и NRVO в C++17

Блог компании VK Программирование *C++ *

Предположим, что в программе на C++ вы возвращаете из функции локальную переменную. Что происходит при вызове оператора return: копирование, перемещение или ни то, ни другое? От этого зависит длительность вызова функции и эффективность наших программ. Я постарался разобраться с этим вопросом и дам рекомендации по написанию функций так, чтобы повысить шансы на применение этой оптимизации компиляторами. Ну, а сокращения в названии статьи — это Return Value Optimization (RVO) и Named Return Value Optimization (NRVO).

Читать далее
Всего голосов 17: ↑17 и ↓0 +17
Просмотры 2.4K
Комментарии 22

Как буткиты внедряются в современные прошивки и чем UEFI отличается от Legacy BIOS

Блог компании Positive Technologies Информационная безопасность *Программирование *Реверс-инжиниринг *Софт

Привет, Хабр! На связи Антон Белоусов и Алексей Вишняков, и мы продолжаем вместе с вами изучать буткиты — наиболее опасный класс вредоносного ПО. Гонка вооружений между разработчиками решений в области ИБ и вирусописателями не останавливается ни на секунду: первые активно внедряют новые механизмы противодействия киберугрозам, а вторые — инструменты их обхода. Как раз с точки зрения безопасности нас заинтересовал современный стандарт предзагрузки операционных систем UEFI. Поэтому в этом посте мы решили:

разобраться, чем загрузка в режиме UEFI отличается от загрузки в режиме Legacy BIOS;

рассказать о новых экземплярах буткитов, нацеленных на компрометацию UEFI;

выяснить, похожи ли они на своих предшественников (обширную группу так называемых legacy-буткитов мы подробно изучили в прошлый раз);

рассмотреть используемые злоумышленниками техники и слабые места систем на платформе UEFI.

Подробнее
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 3.9K
Комментарии 4

GreenPlum. PostGIS

Программирование *Администрирование баз данных *Читальный зал

Всем привет! Рассмотрим расширение для баз данных, которое добавляет поддержку географических объектов, а значит появляется возможность выполнять запросы местоположения

Читать далее
Всего голосов 4: ↑2 и ↓2 0
Просмотры 663
Комментарии 0

Работа с фреймворками Python: преимущества и проблемы

Блог компании Southbridge Python *Программирование *IT-инфраструктура *Карьера в IT-индустрии

Фреймворки помогают ускорить разработку и сделать её приятнее. Программу, которая раньше писалась неделю и занимала 1000 строк, с помощью фреймворка вы можете создать за пару часов и уместить в 50 строчках кода. Некоторые решения даже поставляются в виде подписки на сервисы, и программисту остаётся только написать шаблонный код — остальное сервис сделает сам. Несмотря на всё это, в российском IT всё равно чаще выбирают писать что-то своё, тратя на это много сил, времени и денег. Почему так происходит, попытались разобраться с Денисом Наумовым, Techlead и Data Engineer в Skyeng. 

Читать далее
Всего голосов 18: ↑12 и ↓6 +6
Просмотры 4K
Комментарии 2

Контроль переполнения. Как уменьшить длину, увеличивая путь

Программирование *Совершенный код *Assembler *Компиляторы *

Я уже упоминал, каким неприятным сюрпризом оказалось исключение команды INTO из системы команд x86-64, когда я переводил компилятор на эти команды. Давайте разберемся, нужна ли сейчас команда, которая отвечала за контроль целочисленного переполнения еще со времен процессора 8086.

Кстати, а чего вообще прицепились к этому целочисленному переполнению? И зачем для него иметь еще какую-то отдельную проверку? Например, ну, нет же никакой отдельной команды INTD проверки деления на число с нулевым значением.

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 1.5K
Комментарии 4

Dart 2.17: Продуктивность и интеграция

Блог компании Surf Программирование *Разработка мобильных приложений *Dart *Flutter *
Перевод

Языковые фичи. Инструменты, повышающие продуктивность. Более глубокая и масштабная интеграция с платформами. Представляем перевод статьи о свежей версии Dart с комментариями Евгения Сатурова, Head of Flutter в Surf.

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Просмотры 2K
Комментарии 4

Распределение вычислительной мощности между несколькими ПК

Python *Программирование *

В ходе работы возникла задач обработки огромного объема (~500 Гб) аудиозаписей в условиях ограниченного времени. На одном ПК обработка заняла бы не менее месяца, что не вписывалось в установленные заказчиком сроки. Возникла идея подключения компьютеров коллег, у которых ночью ПК «отдыхают».

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 2.2K
Комментарии 6

Все самые крутые решения в моей жизни — импульсивные. Как я стал senior-разработчиком в 17 лет

Блог компании Beeline Казахстан Программирование *Учебный процесс в IT Карьера в IT-индустрии Читальный зал

Привет! Меня зовут Жан, мне 17 лет, я senior Java-разработчик в Beeline Казахстан и ученик 11 класса (из 12-ти) Назарбаев Интеллектуальной школы (НИШ) физико-математического направления в Алматы. 

Да, всё верно, я ещё учусь в школе.

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

Как школьник стал разработчиком
Всего голосов 86: ↑53 и ↓33 +20
Просмотры 26K
Комментарии 151

Зачем нужен протокол языкового сервера (LSP)?

Блог компании Издательский дом «Питер» Программирование *API *ООП *Emacs *
Перевод

LSP (протокол языкового сервера) сегодня весьма популярен. Есть стандартное объяснение этого феномена. Возможно, ранее вам уже попадалась эта картинка, у нас также являющаяся заглавной.

Считаю, что такое стандартное объяснение популярности LSP – неверное. Ниже предложу вам альтернативную трактовку.

Читать далее
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 1.8K
Комментарии 5

Многомодульный BDSM: стоит ли внедрять Gradle модули и какие типы модулей бывают?

Блог компании Циан Программирование *Разработка мобильных приложений *Разработка под Android *

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

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

Надеюсь, к концу статьи вы станете на чуточку ближе к ответам на вопросы: «Каким образом вообще можно внедрить многомодульность в свой проект?», «Какие типы модулей есть?» и «Нужна ли многомодульность в моём проекте?»

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 2K
Комментарии 0

React hooks, как не выстрелить себе в ноги. Часть 1: работа с состоянием

Блог компании OTUS Программирование *ReactJS *

Статья поможет новичкам понять как работать с хуками, а также будет полезна и опытным разработчикам. Этой статьей открываю серию статей про хуки.

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

Читать далее
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 2.2K
Комментарии 6

Как наиболее эффективно хранить и запрашивать сотни string-int словарей на одной машине. Часть 1

Блог компании OTUS Программирование *
Перевод

Эта статья повествует об эволюции структур данных, которые мы использовали при выполнении запросов в исторической части базы данных временных рядов Agoda, и демонстрирует примеры реализации нескольких дисковых индексных баз данных.

Читать далее
Всего голосов 5: ↑4 и ↓1 +3
Просмотры 802
Комментарии 1

Итоги хакатона по синтезу речи и голосовым дипфейкам

Блог компании Наносемантика Программирование *Хакатоны Искусственный интеллект Natural Language Processing *

22-24 апреля 2022 года в Российском Технологическом Университете МИРЭА при поддержке компании «Наносемантика» прошел студенческий хакатон по разработке алгоритмов генерации голосовых фейков. В течение 3-х дней 17 команд соревновались в разработке программы, которая копирует голос конкретного человека. Под катом — подробности и результаты прошедшего мероприятия.

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Просмотры 762
Комментарии 1

gRPC — безопасность или жесть?

Программирование *Java *API *

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

В одном из проектов мы решили попробовать упростить процесс валидации данных при внешней интеграции, соблюдая все правила безопасности. Шалость удалась:)

Наш backend-разработчик — Александр — нашел-таки то самое «оригинальное» инженерное решение. Решили поделиться с вами, чтобы и вам страдать не приходилось.

Оригинальное инженерное решение для упрощения аутентификации при вызове удаленных процедур по gRPC: proto-файл и реализация на Java.

Читать далее
Всего голосов 11: ↑7 и ↓4 +3
Просмотры 2.8K
Комментарии 1

Любит или не любит: парное программирование

Блог компании T1 Cloud Программирование *Управление разработкой *Управление проектами *Учебный процесс в IT

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

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

Читать далее
Всего голосов 4: ↑4 и ↓0 +4
Просмотры 1.5K
Комментарии 10

Вклад авторов