Принцип DRY (Do not Repeat Yourself) давно всем вполне очевиден и любим многими программистами. И многие согласны, что Copy/Paste это совсем не круто. В этой статье я хочу привести пример того, в каких случаях в промышленном программировании использование Copy/Paste более уместно и помогает красиво реализовать Open-Closed принцип из SOLID.
Читать полностью »
Рубрика «Совершенный код» - 24
Так ли хорош DRY или все же он может нарушать O из SOLID
2018-09-17 в 8:26, admin, рубрики: copy-paste, DRY, open-closed, solid, Анализ и проектирование систем, Программирование, Промышленное программирование, Совершенный кодПаттерны проектирования в Kotlin
2018-09-10 в 12:53, admin, рубрики: code complete, design patterns, devcolibri, kotlin, никто не читает теги, паттерны проектирования, перевод с английского, Программирование, Проектирование и рефакторинг, разработка, Совершенный код
Говорят, что «паттерны проектирования — это обходные пути недостатков определенного языка программирования». Самое забавное, что это сказали сторонники Lisp и Scheme, у которых в языках всё было в порядке.
Но, похоже, разработчики языка Kotlin восприняли это высказывание по-настоящему близко к сердцу.
Борьба с грязными побочными эффектами в чистом функциональном JavaScript-коде
2018-09-07 в 10:19, admin, рубрики: javascript, Блог компании RUVDS.com, разработка, Разработка веб-сайтов, Совершенный код, функциональное программированиеЕсли вы пробуете свои силы в функциональном программировании, то это значит, что вы довольно скоро столкнётесь с концепцией чистых функций. Продолжая занятия, вы обнаружите, что программисты, предпочитающие функциональный стиль, похоже, прямо-таки одержимы этими функциями. Они говорят о том, что чистые функции позволяют рассуждать о коде. Они говорят, что чистые функции — это сущности, которые вряд ли будут работать настолько непредсказуемо, что приведут к термоядерной войне. Ещё вы можете узнать от таких программистов, что чистые функции обеспечивают ссылочную прозрачность. И так — до бесконечности.
Кстати, функциональные программисты правы. Чистые функции — это хорошо. Но есть одна проблема…
Автор материала, перевод которого мы представляем вашему вниманию, хочет рассказать о том, как бороться с побочными эффектами в чистых функциях.
Читать полностью »
Процесс ревью кода в HH.RU
2018-09-06 в 8:29, admin, рубрики: code review, Git, github, HH, hh.ru, Блог компании HeadHunter, Программирование, разработка, ревью, ревью кода, Совершенный код, хедхантерМне на глаза попался документ с правилами и рекомендациями по процессу ревью кода внутри компании. Я решил, что такой полезной информацией надо поделиться с внешним миром. С благословения автора я публикую работу
Читать полностью »
Сортировки выбором
2018-09-03 в 0:28, admin, рубрики: python, Алгоритмы, алгоритмы сортировки, визуализация данных, Программирование, Совершенный кодВ чём идея сортировок выбором?
- В неотсортированном подмассиве ищется локальный максимум (минимум).
- Найденный максимум (минимум) меняется местами с последним (первым) элементом в подмассиве.
- Если в массиве остались неотсортированные подмассивы — смотри пункт 1.
Что нужно знать о понятии лаконичность для написания хорошего кода?
2018-09-01 в 18:13, admin, рубрики: Совершенный кодХороший код понятие не формализуемое, сегодня. Существует множество практик сомнительных и не очень которые позволяют или нет, вам написать хороший код. Многое зависит от того как вы для себя определяете понятие хороший код.
Есть один важный параметр который присутствует почти всегда. Это способность других людей понимать написанный вами код. И чем проще его понять тем лучше. Это позволяет новому члену команды быстро влиться в проект, быстрее найти баг или выполнить рефакторинг. Простота позволяет тратить меньше интеллектуальных ресурсов для решения задачи, а значит и быстрее решить её с точки зрения временных затрат.
Читать полностью »
Когда не нужно использовать алгоритмы из STL
2018-08-28 в 7:38, admin, рубрики: c++, stl, Алгоритмы, Блог компании Инфопульс Украина, высокая производительность, Совершенный кодЯ боролся с соблазном назвать статью как-то типа «Ужасающая неэффективность алгоритмов STL» — ну, знаете, просто ради тренировки в мастерстве создания кричащих заголовков. Но всё же решил оставаться в рамках приличий — лучше получить от читателей комментарии по содержанию статьи, чем негодование по поводу её громкого названия.
В этом месте я предположу, что вы немного знаете С++ и STL, а также заботитесь об используемых в вашем коде алгоритмах, их сложности и соответствия поставленным задачам.
Алгоритмы
Одним из хорошо известных советов, которые вы можете услышать от современного сообщества разработчиков на С++, будет не придумывать велосипеды, а использовать алгоритмы из стандартной библиотеки. Это хороший совет. Данные алгоритмы безопасны, быстры, проверены годами. Я тоже часто даю совет применять их.
Каждый раз, когда вам хочется написать очередной for — следует сначала вспомнить, нет ли в STL (или в boost) чего-то, что уже решает эту задачу в одну строку. Если есть — чаще лучше использовать это. Нам, однако, и в этом случае следует понимать, что за алгоритм лежит за вызовом стандартной функции, каковы его характеристики и ограничения.
Обычно, если наша проблема в точности совпадает с описанием алгоритма из STL, будет хорошей идеей взять и применить его «в лоб». Беда только в том, что данные не всегда хранятся в том виде, в котором их хочет получить реализованный в стандартной библиотеке алгоритм. Тогда у нас может возникнуть идея сначала преобразовать данные, а потом всё же применить тот же алгоритм. Ну, знаете, как в том анекдоте про математика «Затушить огонь из чайника. Задача сведена к предыдущей».
Читать полностью »
Как я написал и защитил диплом по DEVOPS и инженерным практикам в 1С с нуля
2018-08-19 в 7:25, admin, рубрики: 1c:предприятие, allure, bdd, CICD, devops, IDEF0, tdd, имплементация, инженерные практики, Программирование, Совершенный код, Тестирование IT-систем, ТУСУР, управление проектамиПредисловие
Все началось более 2-х лет тому назад, и я перешел на 4-й курс специальности "Бизнес-информатика" Томского Государственного Университета Систем Управления и Радиоэлектроники (ТУСУР). До окончания ВУЗА оставалась не много времени, и перспектива написания диплома уже маячила перед глазами. Мысль о покупке готовой работы не рассматривалась. Хотелось реально что-то сделать самому. Вариантов тем дипломных проектов рассматривалось много: и проекты конфигураций для автоматизации производственных нужд компании и проект внедрения Документооборота своими силами на 3 территориальные единицы и более 500 активных пользователей и внедрение ЭДО. Короче много всего что было в голове, но ничего из этого не вдохновляло. А это было главное.
Вы не умеете работать с транзакциями
2018-08-13 в 8:46, admin, рубрики: 1c, 1c:предприятие, ERP-системы, Программирование, серебряная пуля, Совершенный код, управление проектами, управление разработкой, чистый код
Заголовок вышел броским, но накипело. Сразу скажу, что речь пойдет об 1С. Дорогие 1С-ники, вы не умеете работать с транзакциями и не понимаете что такое исключения. К такому выводу я пришел, просматривая большое количество кода на 1С, рождаемого в дебрях отечественного энтерпрайза. В типовых конфигурациях с этим все достаточно хорошо, но ужасающее количество заказного кода написано некомпетентно с точки зрения работы с базой данных. Вы когда-нибудь видели у себя ошибку "В данной транзакции уже происходили ошибки"? Если да — то заголовок статьи относится и к вам. Давайте под катом разберемся, наконец, что такое транзакции и как правильно с ними обращаться, работая с 1С.
Ребусы в коде, и как их расшифровать. Тайная сила идентификаторов
2018-08-06 в 6:38, admin, рубрики: выразительные средства кода, длина функции, идентификаторы, метод ребуса, намерение и реализация, понятный код, Программирование, Проектирование и рефакторинг, ребусы, Совершенный код, хорошая прозаЧистый код читается, как хорошо написанная проза.
Грэди Буч в книге «Чистый код»
Ребус как код
Что такое ребус? Это зашифрованное послание. Автор ребуса берёт обычный человеческий текст и кодирует его при помощи рисунков, чисел и букв. А мы разглядываем такую шифровку и пытаемся прочесть исходный текст.
У ребуса есть две ипостаси. С одной стороны ребус — это исходный незашифрованный текст, а с другой — шифрорисунки. Текст — это «что» ребуса, его смысл, сообщение. Рисунки — это «как»: как именно зашифровано сообщение, с помощью каких средств. Отгадывая ребус, мы переводим «как» в «что».
Читать полностью »