Обновить
163.46

Качество кода *

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

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

Вечные студенты: когда программирование — это постоянная «учеба»

Время на прочтение7 мин
Охват и читатели24K

Если вы выбрали для себя профессию программиста, учеба, как правило, становится вашим постоянным спутником, хотите вы этого или нет. В этой области «выучить что-то раз и навсегда» маловероятно — постоянно появляются новые решения, новые фреймворки, в конце концов, новые языки. В сегодняшнем материале расскажем, почему разработчикам важно оставаться «вечными студентами», что говорит об изучении новых языков статистика Stack Overflow и почему программирование постепенно превращается в метод изучения других дисциплин.

Читать дальше →

Пишем свою книгу заново

Время на прочтение4 мин
Охват и читатели8K
Прошло 4 года с публикации «Пишем свою книгу» и вышло второе издание книги про Boost и C++. Настало время выпустить второе издание публикации!

В данной статье я поделюсь информацией о том, что осталось за бортом предыдущей статьи:



  • Можно ли прожить на гонорары от книги
  • Как заинтересовать людей в вашей книге
  • Как сделать примеры нагляднее и интерактивнее
  • Чем отличается выпуск второго издания, от написания первого
  • Пара простых советов для продвижения
  • Перевод книги на другие языки
Читать дальше →

Внедрение code style в существующий проект

Время на прочтение6 мин
Охват и читатели12K

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


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


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

Читать дальше →

Моки и явные контракты

Время на прочтение8 мин
Охват и читатели66K

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


Ниже представлен вольный перевод статьи, в которой José Valim — создатель языка Elixir — высказал своё мнение на проблему использования моков, с которым я полностью согласен.




Несколько дней назад я поделился своими мыслями по поводу моков в Twitter:



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

Читать дальше →

Архитектурная пирамида приложения

Время на прочтение8 мин
Охват и читатели21K
Программирование — достаточно молодая область знаний, однако, в ней уже существуют базовые принципы «хорошего кода», рассматриваемые большинством разработчиков как аксиомы. Все слышали о SOLID, KISS, YAGNI и других трех- или четырех- буквенных аббревиатурах, делающих ваш код чище. Эти принципы влияют на архитектуру вашего приложения, но помимо них существуют архитектурные стили, методологии, фреймворки и много чего еще.

Разбираясь со всем этим по отдельности, меня заинтересовал вопрос — как они взаимосвязаны? Пытаясь выстроить иерархию и вдохновившись небезызвестной пирамидой Маслоу, я построил свою пирамиду «архитектуры приложения».

О том, что из этого вышло — читайте под катом.
Войти в пирамиду

Идеальная ОС: переосмысление операционных систем для десктопа

Время на прочтение17 мин
Охват и читатели41K
TL;DR: К концу этого эссе я надеюсь убедить вас в следующих фактах. Во-первых, что современные десктопные операционные системы никуда не годятся. Они раздутые, тормознутые и напичканы легаси-хламом, а кое-как работают только благодаря закону Мура. Во-вторых, что инновации в десктопных ОС прекратились около 15 лет назад, а основные игроки вряд ли собираются много вкладывать в них снова. И наконец, я надеюсь убедить вас, что мы можем и должны начать с нуля, усвоив уроки прошлого.

«Современные» десктопные ОС раздуты


Возьмём Raspberry Pi. За 35 долларов я могу купить отличный компьютер с четырьмя процессорными ядрами, каждое на частоте более гигагерца. У него также есть 3D-ускоритель, гагабайт оперативки, встроенные WiFi с Bluetooth и Ethernet. За 35 баксов! И всё-таки для многих задач, которые я хочу на нём запустить, Raspberry Pi ничем не лучше компьютера на 66 мегагерц, который был у меня в колледже.


Читать дальше →

Чистый код на PHP

Время на прочтение19 мин
Охват и читатели117K


Это принципы разработки ПО, взятые из книги Clean Code Роберта Мартина и адаптированные для PHP. Это руководство не по стилям программирования, а по созданию читабельного, многократно используемого и пригодного для рефакторинга кода на PHP.


Не каждый из этих принципов должен строго соблюдаться, и ещё с меньшим количеством все будут согласны. Это лишь рекомендации, не более, но все они кодифицированы в многолетнем коллективном опыте автора Clean Code.


Статья вдохновлена clean-code-javascript.

Читать дальше →

Нестандартный подход к построению современного языка программирования

Время на прочтение10 мин
Охват и читатели7.9K
Со времён университета я переодически нахожу время для тестирования качества существующих продуктов и проведения исследований в разработке. Так случилось, что одним из моих исследований явилось создание современного языка программирования. К сожалению, я не преуспел в этом вопросе, но открыл для себя некоторые дверцы, которыми буду делиться в статьях.

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

В современных языках программирования что-то не так


Чтобы не было скучно, речь пойдёт именно о недостающих тонкостях языков, а не о недостатках существующих инструментов (зачастую язык сильно связан с конкретной средой разработки). Итак, ниже я отобрал 5 самых «ненужных и бесполезных» пунктов, о которых «никто не говорит», а я расскажу.
Читать дальше →

Борьба со сложностью в сетевом протоколе прикладного уровня

Время на прочтение20 мин
Охват и читатели4.3K
Доводилось ли Вам реализовывать объёмный сетевой обмен посредством TCP- или HTTP-протокола? Насколько, в случае такого опыта, Вы были удовлетворены сопровождаемостью конечного решения? Утвердительный ответ на первый вопрос (пусть даже и без «объёмистости» обмена) и недовольство гибкостью получившейся реализации позволяют рекомендовать эту статью как содержащую один из способов избавления от такого несчастья.

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

Нужно отметить, что в программном коде статьи используется Indy, однако, хотя это и может показаться странным в материале, посвящённом сетевому взаимодействию, как такового знания этой библиотеки от читателя не потребуется, ибо смысл – в знакомстве с более абстрактными, высокоуровневыми приёмами при реализации своего протокола – речь в большей степени о проектировании.
Читать дальше →

Как стать более продуктивным с плагинами Android Studio

Время на прочтение3 мин
Охват и читатели18K
image

Android Studio — очень надежный инструмент. Он имеет самый простой и вместе с тем самый гибкий интерфейс для разработки пользовательского интерфейса для всех типов устройств.
Мы можем перетаскивать элементы представления и виджеты в нашем редакторе макетов и детально настраивать через несколько строк в xml.

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

Но иногда хочется, чтобы этот инструмент делал нас еще более продуктивными.
Читать дальше →

Интересные приложения для Android с открытым исходным кодом

Время на прочтение2 мин
Охват и читатели106K
image


Используя и изучая приложения с открытым исходным кодом, вы можете научиться, как создавать хорошие приложения самостоятельно.


Ниже перечислены лучшие проекты под Android с открытым исходным кодом. Благодаря им вы сможете узнать массу отличных практик для разработки под Android.

Читать дальше →

Использование терминала при разработке под Андроид

Время на прочтение4 мин
Охват и читатели21K

image


Будучи поклонником терминала, я давно хотел написать об этой теме. Кроме того, знание того, как использовать терминал, значительно ускоряет работу.


Моя цель в этой статье — поделиться с вами тем, как я использую терминал при разработке под Android.

Читать дальше →

Тавтологические тесты

Время на прочтение7 мин
Охват и читатели20K


Привет! Меня зовут Артём, и большую часть своего рабочего времени я пишу сложные автотесты на Selenium и Cucumber/Calabash. Честно говоря, довольно часто я оказываюсь перед непростым выбором: написать тест, который проверяет конкретную реализацию функциональности (потому что это проще) или тест, который проверяет функциональность (потому что это правильнее, но намного сложнее)? Недавно мне попалась неплохая статья о том, что тесты реализации – это «тавтологические» тесты. И, прочитав её, я уже почти неделю переписываю некоторые тесты в другом ключе. Надеюсь, вас она тоже подтолкнёт к размышлениям.

Читать дальше →

Ближайшие события

Борьба с хардкодами при помощи статических анализаторов С#

Время на прочтение5 мин
Охват и читатели10K
В этой статье я расскажу, как мы написали собственные анализаторы кода и чистим с их помощью нашу кодовую базу .net от наиболее острых / частых косяков. Главный посыл — сделать это довольно просто, не бойтесь писать свои анализаторы для борьбы с именно вашими багами. Вторичный посыл — попробуйте наши анализаторы и сообщите о результатах. Полное руководство я писать не буду, их довольно много в интернете, а вот небольшой обзор, что это как и с какими проблемами я столкнулся, надеюсь, окажется вам полезным.
Читать дальше →

30+ инструментов для профессиональной разработки приложений под Android

Время на прочтение6 мин
Охват и читатели50K
image

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

Эти инструменты помогли мне сэкономить много драгоценного времени из моей повседневной жизни, а также помогли мне создавать более качественные приложения. Поэтому, не теряя времени, давайте познакомимся с новыми и потрясающими инструментами для профессиональной разработки приложений под Android.
Читать дальше →

Прагматичное функциональное программирование

Время на прочтение5 мин
Охват и читатели16K

Движение к функциональному программированию началось всерьез примерно десятилетие назад. Мы видели как такие языки как Scala, Clojure и F# стали привлекать внимание. Это движение было больше чем просто обычное восхищение «О, круто, новый язык!». Было что-то действительно побуждающее это движение — или мы так думали.

Читать дальше →

EntityFramework: (анти)паттерн Repository

Время на прочтение15 мин
Охват и читатели125K
Repository Pattern
Репозиторий является посредником между слоем доступа к данным и доменным слоем,
работая как in-memory коллекция доменных обектов. Клиенты создают декларативные
описания запросов и передают их в репозиторий для выполнения.
  — свободный перевод Мартина Фаулера

EntityFraemwork предоставляет нам готовую реализацию паттернов Repository: DbSet<T> и UnitOfWork: DbContext. Но мне часто приходится видеть, как коллеги используют в своих проектах собственную реализацию репозиториев поверх существующих в EntityFraemwork.


Чаще всего используется один из двух подходов:


  1. Generic Repository как попытка абстрагироваться от конкретного ORM.
  2. Repository как набор запросов к выбранной таблице БД (паттерн DAO).

И каждый из этих подходов содержит недостатки.

Читать дальше →

Система управления складом с использованием CQRS и Event Sourcing. Service Layer

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


В данной статье будет рассмотрен Service Layer в Magento 2 и сервисы (API интерфейсы) для управления сущностями, которые были описаны в предыдущей статье, посвященной проектированию и выделению доменных сущностей для системы управления складом (Inventory).
Читать дальше →

Хороший код — наша лучшая документация

Время на прочтение3 мин
Охват и читатели13K
Привет Хабр! Предлагаю вашему вниманию свободный перевод статьи «Good code is its own best documentation» от Amit Shekhar.

image

Хороший код, как хорошая шутка — не требует объяснений.
Читать дальше →

Атака клонов. Как бороться с дублированием кода?

Время на прочтение9 мин
Охват и читатели25K

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


В рамках данной статьи мне бы хотелось напомнить, что такое программные клоны, какие они влекут за собой проблемы и как с ними можно бороться. В статье приводятся примеры рефакторинга реальных клонов из популярного фреймворка Spring. В качестве инструментов используются Java 8, IDE IntelliJ IDEA 2017.1 и плагин Duplicate Detector 1.1.


Читать дальше →

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