HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Хороший тимлид должен знать, как разглядеть Джуна за милю и понимать, почему Senior'ы пишут "тупой" код. Именно этому посвящена небольшая, но важная<a>статья</a>на Hackernoon. Точнее, она посвящена стремлению к простоте и лаконичности. Как сторонник тех же стремлений, я спешу поделиться с вами её переводом.</p>
1 <p>Хороший тимлид должен знать, как разглядеть Джуна за милю и понимать, почему Senior'ы пишут "тупой" код. Именно этому посвящена небольшая, но важная<a>статья</a>на Hackernoon. Точнее, она посвящена стремлению к простоте и лаконичности. Как сторонник тех же стремлений, я спешу поделиться с вами её переводом.</p>
2 <p>Одной из моих любимых цитат являются слова Брайна Гётца, умного парня из мира Java, среди прочего, являющегося соавтором книги "Многопоточность в Java на практике". Фраза появилась в интервью, которое Oracle опубликовал под названием "Пишите тупой код". Гётца спросили о том, как писать хороший производительный код. Вот, что он ответил:</p>
2 <p>Одной из моих любимых цитат являются слова Брайна Гётца, умного парня из мира Java, среди прочего, являющегося соавтором книги "Многопоточность в Java на практике". Фраза появилась в интервью, которое Oracle опубликовал под названием "Пишите тупой код". Гётца спросили о том, как писать хороший производительный код. Вот, что он ответил:</p>
3 <p><strong><em>"Зачастую, способ написания быстродействующего кода приложений на Java состоит в создании простого (тупого) кода - кода прямолинейного, понятного, чистого и следующего наиболее очевидным принципам объектно-ориентированного программирования".</em></strong></p>
3 <p><strong><em>"Зачастую, способ написания быстродействующего кода приложений на Java состоит в создании простого (тупого) кода - кода прямолинейного, понятного, чистого и следующего наиболее очевидным принципам объектно-ориентированного программирования".</em></strong></p>
4 <p>Оставшаяся тысяча слов посвящена объяснению того, почему попытка оптимизировать код и казаться умнее, является распространенной ошибкой программиста -<strong>ошибкой новичка</strong>, если можно так выразиться.</p>
4 <p>Оставшаяся тысяча слов посвящена объяснению того, почему попытка оптимизировать код и казаться умнее, является распространенной ошибкой программиста -<strong>ошибкой новичка</strong>, если можно так выразиться.</p>
5 <h2>Код ведущего разработчика</h2>
5 <h2>Код ведущего разработчика</h2>
6 <p>Если вы, как и я, когда-то были джуном, то наверняка помните свой опыт чтения кода ведущего разработчика с мыслями вроде: "Я тоже могу так написать. Почему я не Senior?"</p>
6 <p>Если вы, как и я, когда-то были джуном, то наверняка помните свой опыт чтения кода ведущего разработчика с мыслями вроде: "Я тоже могу так написать. Почему я не Senior?"</p>
7 <p>Тем не менее, тогда я долго пытался написать такой же код, но не смог. Для меня было загадкой то, что я понимаю код, но ведь он максимально прост! Должно быть что-то ещё.</p>
7 <p>Тем не менее, тогда я долго пытался написать такой же код, но не смог. Для меня было загадкой то, что я понимаю код, но ведь он максимально прост! Должно быть что-то ещё.</p>
8 <p>"Где всё остальное?" - думал я. "Как вот ЭТО делает всю работу?"</p>
8 <p>"Где всё остальное?" - думал я. "Как вот ЭТО делает всю работу?"</p>
9 <p>С тех пор я выучил все принципы и качества кода, которые делали его простым: YAGNI, Принцип единственной ответственности (SRP), DRY, Принцип единого уровня абстракций (SLAP), слабое зацепление (low coupling), и т. д. И я стал "ведущим разработчиком". (Вообще, я ненавижу словосочетание "Ведущий программист" ("Senior Dev") и называю себя просто "разработчиком" ("software engineer"), но это совсем другая история).</p>
9 <p>С тех пор я выучил все принципы и качества кода, которые делали его простым: YAGNI, Принцип единственной ответственности (SRP), DRY, Принцип единого уровня абстракций (SLAP), слабое зацепление (low coupling), и т. д. И я стал "ведущим разработчиком". (Вообще, я ненавижу словосочетание "Ведущий программист" ("Senior Dev") и называю себя просто "разработчиком" ("software engineer"), но это совсем другая история).</p>
10 <p>Самый важный урок, который я вынес, состоит в том, что<strong>написание простого кода - это по-настоящему сложно</strong>, но это приносит в разы большую пользу в будущем.</p>
10 <p>Самый важный урок, который я вынес, состоит в том, что<strong>написание простого кода - это по-настоящему сложно</strong>, но это приносит в разы большую пользу в будущем.</p>
11 <h2>Как распознать Джуна за милю?</h2>
11 <h2>Как распознать Джуна за милю?</h2>
12 <p>В книге "Рефакторинг: Улучшение существующего кода" Кент Бек отмечает:</p>
12 <p>В книге "Рефакторинг: Улучшение существующего кода" Кент Бек отмечает:</p>
13 <p><strong><em>"Любой идиот может написать код, который поймёт компьютер. Хорошие программисты пишут код, который могут понимать люди".</em></strong></p>
13 <p><strong><em>"Любой идиот может написать код, который поймёт компьютер. Хорошие программисты пишут код, который могут понимать люди".</em></strong></p>
14 <p>Вы всегда опознаете джуна, когда будете читать код, полный замудрёных однострочных выражений, неявных абстракций с уймой применений всех возможностей языка. Я бы сказал, что последнее встречается чаще всего. Это код, который кричит: "Посмотрите на меня! Мой создатель реально шарит в языке! Я использую стандартные интерфейсы синхронизированных ThreadLocal JavaBean-копий с кастомными обобщёнными исключениями и JAXB Lombok для генерации кода!"</p>
14 <p>Вы всегда опознаете джуна, когда будете читать код, полный замудрёных однострочных выражений, неявных абстракций с уймой применений всех возможностей языка. Я бы сказал, что последнее встречается чаще всего. Это код, который кричит: "Посмотрите на меня! Мой создатель реально шарит в языке! Я использую стандартные интерфейсы синхронизированных ThreadLocal JavaBean-копий с кастомными обобщёнными исключениями и JAXB Lombok для генерации кода!"</p>
15 <p>Да, я написал ерунду, потому что ерунда - это то, во что может превратиться код, попади он в руки того, кто думает только об аспектах программирования, а не о людях.</p>
15 <p>Да, я написал ерунду, потому что ерунда - это то, во что может превратиться код, попади он в руки того, кто думает только об аспектах программирования, а не о людях.</p>
16 <p>Код участвует в общении с другими людьми, а также даёт указания компьютерам. И сейчас первого гораздо больше, чем последнего. Компилятор позаботится о том, как перевести написанное программистами в машинный язык. И часто существует несколько уровней этого перевода, например, когда Java компилируется в байт-код, который считывается виртуальной машиной Java во время выполнения, где он в конечном итоге преобразуется только в нули и единицы. Но код - это человеческий язык. Он должен сообщать кому, что, когда, где, как и почему делается указанное действие, а также обучать ему компьютер. Он должен иметь смысл и через пять лет после того, как компания была перепродана, а новая команда, которая никогда не видела этот код раньше, должна понять его и доработать или исправить ошибку.</p>
16 <p>Код участвует в общении с другими людьми, а также даёт указания компьютерам. И сейчас первого гораздо больше, чем последнего. Компилятор позаботится о том, как перевести написанное программистами в машинный язык. И часто существует несколько уровней этого перевода, например, когда Java компилируется в байт-код, который считывается виртуальной машиной Java во время выполнения, где он в конечном итоге преобразуется только в нули и единицы. Но код - это человеческий язык. Он должен сообщать кому, что, когда, где, как и почему делается указанное действие, а также обучать ему компьютер. Он должен иметь смысл и через пять лет после того, как компания была перепродана, а новая команда, которая никогда не видела этот код раньше, должна понять его и доработать или исправить ошибку.</p>
17 <p>Очевидно, написание простого кода - это сложно. Я чувствую, как со временем все больше и больше овладеваю этим навыком. Я чувствую удовлетворение, когда получаю комментарии типа "Чистый код!" в ревью. Я знаю, что лучшее, что я могу сделать для своей команды и будущих разработчиков кода - это писать тупой код.</p>
17 <p>Очевидно, написание простого кода - это сложно. Я чувствую, как со временем все больше и больше овладеваю этим навыком. Я чувствую удовлетворение, когда получаю комментарии типа "Чистый код!" в ревью. Я знаю, что лучшее, что я могу сделать для своей команды и будущих разработчиков кода - это писать тупой код.</p>
18 <h2>Рецензия от меня</h2>
18 <h2>Рецензия от меня</h2>
19 <p>Разумеется, в названии своей статьи Скот Шип использует словосочетание "тупой код" для привлечения внимания. Тем не менее, он прав - в современных решениях мы часто встречаем стремление разработчиков получить не максимально лаконичное решение, а решение максимально крутое. И это идёт в ущерб функциональности. Этакий iPhone в кредит, не находите?</p>
19 <p>Разумеется, в названии своей статьи Скот Шип использует словосочетание "тупой код" для привлечения внимания. Тем не менее, он прав - в современных решениях мы часто встречаем стремление разработчиков получить не максимально лаконичное решение, а решение максимально крутое. И это идёт в ущерб функциональности. Этакий iPhone в кредит, не находите?</p>
20 <p>Я полностью разделяю мнение автора на тему стремления к простоте. И оно касается не только кода. Во всём - в архитектуре, в повседневной деятельности, в жизни - нужно понимать функциональное назначение того или иного элемента. И если вам удастся побороть этот зоопарк из технологий/конструкций/вещей, вы сэкономите энергию, время и деньги!</p>
20 <p>Я полностью разделяю мнение автора на тему стремления к простоте. И оно касается не только кода. Во всём - в архитектуре, в повседневной деятельности, в жизни - нужно понимать функциональное назначение того или иного элемента. И если вам удастся побороть этот зоопарк из технологий/конструкций/вещей, вы сэкономите энергию, время и деньги!</p>
21 <p>В завершение я бы хотел поделиться цитатой Леонардо да Винчи.</p>
21 <p>В завершение я бы хотел поделиться цитатой Леонардо да Винчи.</p>
22 <p><strong><em>"Простота - это то, что труднее всего на свете; это крайний предел опытности и последнее усилие гения."</em></strong></p>
22 <p><strong><em>"Простота - это то, что труднее всего на свете; это крайний предел опытности и последнее усилие гения."</em></strong></p>
23  
23