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

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

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

Почему принцип единственной ответственности не всегда работает

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

Как говорил Парацельс, всё есть яд и всё есть лекарство — зависит от дозы. Например, не очень опытный разработчик обычно может из простого класса сделать три с использованием метаклассов и прочих, не так часто используемых в реальной жизни конструкций языка. И объяснит это принципом единственной ответственности так, как он его понимает — надо делить код на функции и методы, которые выполняют одну узкую и специфическую работу.

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

Читать далее
Всего голосов 26: ↑22 и ↓4+18
Комментарии33

Отрезок качества

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

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

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

Трудные коллеги

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

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

— Как-то мне не очень комфортно и приятно будет работать с человеком, который такое вот делает. Наверное, надо нам с ним расстаться.

На что мой руководитель резонно мне ответил:

— ${zloy_stas}, таких, как этот Г., в твоей работе будет много; если ты будешь увольнять каждого, кто тебе не понравился лично, ты быстро перестанешь быть руководителем. Твоя задача — не детей с ними крестить, а извлекать из них пользу и уметь с ними работать. Пусть этот Г. будет для тебя таким менеджерским челленджем.

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

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

Читать далее
Всего голосов 129: ↑107 и ↓22+85
Комментарии97

Антикоммуникации

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

Удивительно, но некоторые разработчики до сих пор считают, что коммуникации в работе не нужны или даже вредны. «Наша задача кодить, а не болтать». Конечно это эффективнее некуда, сидеть три часа и пытаться самостоятельно разобраться, как работает соседний сервис, вместо того чтобы просто спросить у коллеги и получить ответ за 15 минут. Или додумывать за ПО спорные моменты в задаче, а потом выкинуть 90 % работы и переделать заново после первого демо. Или не услышать или не понять критику на обсуждении технического решения, а потом переделывать, костылить, велосипедить и получать критические ошибки и блокеры в середине спринта. Или начать сразу разрешать инцидент, не рассказав про него владельцу продукта и бизнесу, и получить тонны негативной обратной связи от клиентов и бизнеса. Или внезапно узнать, что можно было бы обойтись меньшей кровью, ничего не разрабатывая, а решив проблему административными методами.

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

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

Чем разработчик от кодера отличается

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

Самый плохой разработчик — тот, который всё делает по ТЗ. А самый лучший код — не написанный.

«Моя задача — писать код, я разработчик!» — да, это очень удобная позиция. Но людям, которые не только программируют, но ещё и общаются с коллегами, организуют собственную работу и понимают предметную область, платят больше. Потому что они приносят бизнесу больше пользы. Разработчики, которых надо микроменеджерить, чтобы они делали свою работу, никому не нужны.

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

Это история не про любовь, мир, жвачку и миссию компании, а про простую способность сделать свою работу так, чтобы она была сделана хорошо. И да, для этого разработчик должен не только уметь программировать, но и уметь общаться с другими людьми, уметь доносить свои мысли, уточнять и понимать, что вообще происходит. То есть уметь договариваться. Да, разработчик должен уметь организовывать свою работу: раскладывать проблему на задачи. Ещё он должен интересоваться продуктом (проектом). Не потому что разработчик так его любит, и не потому, что этого требует Agile, а потому, что живой интерес к продукту и понимание его ценности увеличивает качество решений и стоимость разработчика на рынке. Знание предметной области и её ограничений — первейшее требование для того, чтобы принять правильное техническое и архитектурное решение. И очевидно, что чем меньше руководитель тратит сил на управление сотрудником и чем больше получает результат, — то есть чем выше автономность сотрудника, его самостоятельность и беспроблемность, — тем он ценнее при прочих равных.

Читать далее
Всего голосов 82: ↑65 и ↓17+48
Комментарии184

Почему здравый смысл важнее паттернов, а Active Record не так уж и плох

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

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

А наличие во фреймворке нужных паттернов никак не гарантирует их правильного и осознанного применения.


Читать дальше →
Всего голосов 46: ↑43 и ↓3+40
Комментарии23

Как сварить кашу из микросервисов

Время на прочтение10 мин
Количество просмотров11K
Одной из причин популярности микросервисов является возможность автономной и независимой разработки. По сути микросервисная архитектура — это размен возможности автономной разработки на более сложный (по сравнению с монолитом) деплой, тестирование, дебаг и мониторинг. Но нужно учитывать, что микросервисы не прощают ошибок разделения ответственности. При неправильном разделение обязанностей возникают частые зависимые изменения в разных сервисах. И это намного больнее и сложнее, чем согласованные изменения в рамках разных модулей или пакетов внутри монолита. Согласованные изменения в микросервисах осложняется согласованной выкладкой, деплоем, тестированием и т.д.

И хотелось бы рассказать о различных паттернах и антипаттернах разделении ответственностей на микросервисы.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+18
Комментарии16

Еще раз о принципе подстановки Лисков, или семантика наследования в ООП

Время на прочтение9 мин
Количество просмотров18K
Наследование — один из столпов ООП. Наследование используется для того, чтобы переиспользовать общий код. Но не всегда общий код надо переиспользовать, и не всегда наследование — самый лучший способ для переиспользования кода. Часто получается, так, что есть похожий код в двух разных куска кода (классах), но требования к ним разные, т.е. классы на самом деле друг от друга наследовать может и не стоит.
Читать дальше →
Всего голосов 27: ↑22 и ↓5+17
Комментарии32

Антисобеседования

Время на прочтение11 мин
Количество просмотров142K
Я побывал на многих плохих собеседованиях, и в качестве кандидата и в качестве ведущего, и в качестве наблюдателя. В результате сформулировался крайне субъективный набор заметок о том, как стоит и как не стоит проводить собеседование разработчиков.


Собеседование — это экзамен


Ведущий — строгий учитель, а кандидат — студент. Классический сеттинг. Обычно проходит так. Спросили откуда ты, что ты, и потом пошло техническое собеседование.

Начинается с простых вопросов на раскачку, примерно таких:
Читать дальше →
Всего голосов 221: ↑206 и ↓15+191
Комментарии677

Информация

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