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

Совершенный код *

Как Макконнелл завещал

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

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

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

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

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

Читать далее
Всего голосов 21: ↑15 и ↓6 +9
Просмотры 4.4K
Комментарии 23

Новости

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

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

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

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

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

Как помочь компилятору повысить быстродействие вашей программы

Блог компании МойОфис Программирование *Совершенный код *C++ *Компиляторы *
Перевод

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

Под катом старший разработчик ПО компании Google, Minhaz A V*, рассказывает об оптимизации производительности кода. Менее чем за час работы автор ускорил код на 18%, добавив в него всего пару строк. Несмотря на то, что в большинстве примеров этого материала используется C++, статья может быть полезна широкому кругу читателей.

*Обращаем ваше внимание: позиция автора не всегда может совпадать с мнением МойОфис.

Читать далее
Всего голосов 29: ↑25 и ↓4 +21
Просмотры 4.7K
Комментарии 8

Пирамида инспекции кода

Блог компании Productivity Inside Совершенный код *
Перевод
При инспекции кода часто складывается такая ситуация: какие-то обыденные моменты вроде форматирования или стиля рассматриваются очень тщательно, вокруг них ведутся бесконечные обсуждения, в то время как важным аспектам (выполняет ли код те функции, на которые рассчитан, производителен ли он, есть ли у него обратная совместимость с существующими клиентами и многое другое) уделяется гораздо меньше внимания.

Недавно я разместил в своем Твиттере небольшую иллюстрацию, которая проливает свет на эту проблему и дает наводку, на каких аспектах следует сосредоточиться прежде всего, и назвал ее «Пирамида инспекции кода». Ее назначение – помочь держать в приоритете составляющие инспекции кода, имеющие первостепенную важность (по крайней мере, на мой взгляд), а так же указать, какие составляющие можно и нужно автоматизировать.

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



Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Просмотры 5.4K
Комментарии 7

SOLID – это не правила, а гайдлайны

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

В этой статье автор высказывает личное мнение, сформулированное на основе его собственного опыта и вкуса. Поэтому просьба не обижаться, если вы с ним не согласны. Конечно, оно может быть ошибочным – но это и стоит обсудить. 

Читать далее
Всего голосов 29: ↑25 и ↓4 +21
Просмотры 15K
Комментарии 21

Когда разница адресов имеет значение

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

Среди бесчисленных режимов адресации архитектуры х86 существует один такой…
Впрочем, почему «бесчисленных» режимов? Если разобраться, то их немного. Со времен первого процессора 8086 адресация укладывалась в байт, который имел аббревиатуру MODRM, где «MOD» - это собственно режим адресации (т.е. mode), «R» - регистр и «M» - очевидно, память (memory).
Если не рассматривать дальнейшее совершенствование системы адресации с помощью SIB-байта, то, поскольку под MODE в MODRM-байте выделено всего два бита, получается, что возможны всего-навсего четыре режима адресации.

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

Есть ли жизнь без тестов?

Разработка веб-сайтов *Программирование *Совершенный код *.NET *C# *
Это история про то, как нам удалось написать довольно сложную business-critical систему, и добиться, чтобы она была стабильной даже без юнит-тестов (WAT?!).
Читать дальше →
Всего голосов 37: ↑33 и ↓4 +29
Просмотры 10K
Комментарии 58

О чем вы даже не подозреваете, решая стать программистом

Блог компании Хекслет Совершенный код *Учебный процесс в IT Карьера в IT-индустрии

Меня зовут Кирилл Мокевнин, я CEO и сооснователь онлайн-школы программирования Хекслет. Мы помогаем людям с самым разным бэкграундом стать разработчиками уже 10 лет. За это время я не раз замечал, что зачастую студенты плохо представляют себе профессию. Вещи, не относящиеся напрямую к технической составляющей программирования, но имеющие огромное значение для успеха в будущей специальности, становятся для них сюрпризами еще во время обучения.

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

Читать далее
Всего голосов 43: ↑34 и ↓9 +25
Просмотры 35K
Комментарии 68

Как разработчику перестать быть потребителем технологий

Блог компании Sportmaster Lab Программирование *Совершенный код *Карьера в IT-индустрии
Перевод

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

Почему ты выбрал такой подход к решению?

  • Не знаю. Прочитал в какой-то статье.
  • Не знаю. Скопипастил его из X.
  • Не знаю. Такой же подход я использовал в предыдущем проекте.
  • Не знаю. Кто-то мне посоветовал.

Этот паттерн можно назвать "потреблением вместо творчества". Потреблением без сомнений и вопросов. Потреблением, потому что можно спрятаться за чьим-то авторитетом.

Я видела разработчиков, берущих решение других людей как должное. Без малейших раздумий о выбранном подходе, не заморачиваясь анализом. Да, конечно, когда Дэн Абрамов говорит мне, как правильно использовать React, или в документации написано, что это единственный способ применения API, то с этим нужно согласиться. Тем не менее, когда вы используете какой-то технический контент без хотя бы доли скептицизма, то вы всё равно сможете продвинуться в своей карьере, но есть вероятность, что это вам помешает.
Читать дальше →
Всего голосов 36: ↑28 и ↓8 +20
Просмотры 9.2K
Комментарии 13

10 вредных привычек в программировании, с которыми нужно покончить прямо сейчас

Программирование *Совершенный код *
Перевод

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

Читать далее
Всего голосов 16: ↑5 и ↓11 -6
Просмотры 15K
Комментарии 16

Приглашаем на онлайновый митап про системы сборки С++ кодовой базы

Блог компании «Лаборатория Касперского» Программирование *Совершенный код *Отладка *
В четверг, 28 апреля, в 16 часов (МСК) мы проведем онлайновый митап под названием «Kaspersky Tech: Из CMake в Bazel. Переход для большой кодовой базы С++». Наши C++-разработчики из команд Engineering Productivity, которые используют системы сборки плюсового кода CMake и Bazel и переводят большие проекты с одной на другую, расскажут о своем опыте и проблемах, с которыми им довелось столкнуться.



Читать дальше →
Всего голосов 10: ↑8 и ↓2 +6
Просмотры 1.3K
Комментарии 0

Баги в Hello World

Python *Программирование *Совершенный код *C *
Перевод

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

Конечно же эта простая программа не должна иметь баги. Верно?

Читать далее
Всего голосов 31: ↑25 и ↓6 +19
Просмотры 8.3K
Комментарии 21

Scala: Гексагональная архитектура и DDD на Free Monad в функциональном программировании

Совершенный код *Проектирование и рефакторинг *Scala *Функциональное программирование *

Привет Хабр! Пятничного тру ФП хардкора с Free Monad, Таглес Финал, Монад трансформерами, Refined Types, Smart Constructors и прочим таким вам в ленту. Хардкор сам себя в ленту не принесет так что погнали.

Гексагональная архитектура делит наш код на три основные части.

1) Primary Adapters,

2) Secondary Adapter

3) Logic aka Domain.

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

Mapper Contexts и Supercontexts: Разделение domain-specific и domain-generic ограниченных контекстов

Программирование *Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *Управление разработкой *
Перевод

Эта статья является переводом материала «Mapper Contexts & Supercontexts: Decoupling Domain-Specific and Domain-Generic Bounded Contexts».

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

Первый разработчик предлагает модель push: ограниченный контекст должен дать указание Notifications отправить уведомление. Notifications должен просто подчиняться командам и отправлять указанные уведомления.

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

Как бы вы спроектировали решение? Что еще более важно, как бы вы приняли это решение в команде? Как вы будете разрабатывать наиболее эффективную архитектуру, которая поддерживает краткосрочные цели и долгосрочное развитие?

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

Способы переписать логические параметры в С++

Блог компании SkillFactory Программирование *Совершенный код *C++ *IT-стандарты *
Перевод

Программисты читают код намного чаще, чем пишут его, поэтому важно писать понятный, последовательный, однозначный код. Автор книги С++17 in detail написал о способах избегать путаницы. Делимся его материалом к старту курса по разработке на С++.

Читать далее
Всего голосов 17: ↑15 и ↓2 +13
Просмотры 7.4K
Комментарии 35

Почему я начал использовать аннотации типов в Python – и вам тоже советую

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

С появлением подсказок типов (type hints) в Python 3.5+ добавилась опциональная статическая типизация – поэтому эти подсказки так мне нравятся. Теперь я аннотирую ими все мои проекты.

Читать далее
Всего голосов 34: ↑33 и ↓1 +32
Просмотры 15K
Комментарии 25

Нет такого понятия — чистый код

Программирование *Совершенный код *Терминология IT Управление продуктом *
Из песочницы
Перевод

Кажется, все сейчас стремятся к «чистому» коду. Нет почти ни одной статьи в блогах, где автор не скажет о том, насколько «чист» его подход. Команды собираются обсудить, какое из возможных решений самое чистое. Разработчики вокруг заверяют, что практикуют «чистый код».

Тем не менее, я осознал: нет такого понятия — чистый код.

Читать далее
Всего голосов 44: ↑36 и ↓8 +28
Просмотры 14K
Комментарии 29

О чем вам не расскажут на курсах по Реакту. Вредные советы, как стать незаменимым разработчиком

JavaScript *Программирование *Совершенный код *ReactJS *

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

Всем привет, меня зовут Макс Кравец, я CEO IT-компании Holyweb, и сегодня хочу поделиться вредными советами о том, как стать незаменимым React-разработчиком. Поехали!

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

Статический анализ и уже выросший проект: внедрять нельзя откладывать

Блог компании Rusprofile PHP *Совершенный код *

Зачем нужен статический анализ кода, кажется, никому объяснять сегодня уже не нужно. Но одно дело — поддерживать код «чистым» с первого коммита, и совсем другое — встраивать новый инструмент в проект, который за несколько лет успел разрастись и пережить несколько итераций глобального рефакторинга. Мы работаем с большим количеством плохо документированных источников данных, а статический анализ кода помогает учитывать самые разные граничные случаи.

И ещё один момент: Rusprofile почти целиком написан на PHP, языке со слабой динамической типизацией. Статический анализ кода на PHP уже несколько лет набирает популярность, сказывается здесь и движение самого языка в сторону более строгой типизации. Но мы опасались, что без предварительной подготовки кода пользы от него мало. Аннотировать типами весь код в реальных бизнес-условиях тоже нереально. Сильно медлить с внедрением в рабочий процесс тоже нельзя: чем дальше, тем сложнее что-то кардинально улучшать. Поэтому нужно было оперативно запускаться, чем-то пожертвовав.

Что нам пришлось преодолеть?
Всего голосов 32: ↑32 и ↓0 +32
Просмотры 5.4K
Комментарии 9

5% из 666 репозиториев Python содержат ошибки из-за запятых (в том числе Tensorflow, PyTorch, Sentry и V8)

Блог компании QIWI Python *Программирование *Совершенный код *TensorFlow *
Перевод
Мы выяснили, что в 5% из 666 исследованных нами репозиториев Python с открытым исходным кодом на GitHub есть три бага, вызванных ошибочным использованием запятых.

Слишком мало запятых


Случайно пропущенная запятая в строке списка/кортежа/множества, приводящая к ненужной конкатенации строк.

Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Просмотры 5.2K
Комментарии 7

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