20  
программирование
Search  
Always will be ready notify the world about expectations as easy as possible: job change page
24 марта

Остановись, мгновенье. Медленное программирование — тренд для уставших разработчиков

Остановись, мгновенье. Медленное программирование — тренд для уставших разработчиков
Author:
Александр Клименков
Source:
Views:
992

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

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

Медленная жизнь

Медленное программирование — это часть большого «медленного движения» (Slow Movement). Это культурный тренд, к которому осознанно обращаются всё больше людей. Медленное движение имеет множество течений и направлений, которые объединены одной общей идеей: люди устали от сумасшедшего ритма жизни, хотят замедлиться и снова получать удовольствие от работы, образования, чтения, питания и других повседневных занятий.

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

Медленное чтение борется с противоестественным скорочтением и агитирует за медленное и вдумчивое изучение книг, перечитывание и анализ текстов.

Медленное питание — это просто обычное здоровое питание безо всяких фастфудов и полуфабрикатов. Сторонники этого направления ратуют за возврат культуры застолья и за сохранение национальных и региональных кулинарных традиций.

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

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

Есть ещё медленное садоводство, медленное образование, медленное воспитание, медленная наука, медленная мода… Количество направлений этого движения постоянно растёт. Люди хотят, чтобы их наконец оставили в покое и дали пожить в своё удовольствие.

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

Медленное программирование

Концепция медленного программирования подразумевает:

  • продуманное и вдумчивое проектирование;
  • большое внимание к деталям;
  • тщательное тестирование;
  • стремление к совершенству.

Попробуем разобраться, что это означает на практике.

1. Тщательное проектирование

Для того, чтобы запрограммировать что-нибудь ненужное, требуется сначала всё как следует спроектировать. Это означает, что нужно:

  • как следует проанализировать пользовательский опыт;
  • провести поиск оптимальных решений;
  • обдумать и проверить различные варианты реализации.

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

2. Программирование без компьютера

Помните мемы о «ленивых» программистах, которые вместо того, чтобы усердно стучать по клавиатуре, занимаются неизвестно чем? С точки зрения эффективного менеджера стороннего наблюдателя они просто плюют в потолок и зря получают зарплату.

Сложно бывает объяснить, что:

  • почти любой фрагмент кода требует обдумывания и нескольких внутренних итераций его улучшения;
  • программист не должен начинать разработку сразу после получения ТЗ;
  • обдумывание алгоритмов вдали от клавиатуры — важная часть его работы.

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

3. Стремление к совершенству

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

  • тщательное проектирование дизайна и оформления приложения;
  • кропотливый поиск наиболее эффективных решений;
  • проведения НИР — поиск наилучшего решения путём экспериментов.

Один из способов улучшения качества кода — это парное программирование. Для менеджеров это кошмар: двойное увеличение ресурсов на решение поставленной задачи.

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

4. Качество и отказ от долгов

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

Термин «технический долг» лучше всего вообще исключить из лексикона:

  • всё, что требуется для проекта, делается сразу, а не откладывается на потом;
  • никаких временных компромиссов, «костылей» и «велосипедов» в угоду срокам.

5. Получение удовольствия от процесса

Этот пункт — самый «эгоистичный», но, пожалуй, самый важный. Медленное программирование — это способ снова превратить разработку кода в искусство. Это путь к тому, чтобы вернуть программисту:

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

Быстрее — не значит лучше

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

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

Снимаем розовые очки

Теперь попробуем рассмотреть другую сторону проблемы. Перестанем мечтать об идеальном мире с бирюзовыми единорогами бездонными бочками трудозатрат. В современной корпоративной реальности медленное программирование — это утопия:

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

Существует также опасность уйти в штопор перфекционизма — любой проект можно совершенствовать до бесконечности. Здесь важно уметь вовремя остановиться.

Вдобавок на горизонте замаячило нечто — как нас стращают в СМИ, ChatGPT скоро сможет заменить разработчиков. Достаточно будет лишь правильно поставить задание, и решение — раз и готово! Безо всяких сроков и затрат — полная противоположность медленному программированию. Дело за малым: знать бы только, как это задание корректно сформулировать.

Однако есть всё же оазисы, где медленное программирование не будет белой вороной:

  • пет-проекты, где медленный программист — сам себе хозяин;
  • НИР в рамках больших коммерческих проектов — выделенная песочница для неторопливых поисков истины.

• • •

Сергей Павлович Королёв однажды сказал: «Можно сделать быстро, но плохо, а можно — медленно, но хорошо. Через некоторое время все забудут, что было быстро, но будут помнить, что было плохо. И наоборот». Концепция медленного программирования — это одна из попыток неравнодушных профессионалов вернуть качество, надёжность и красоту в наш мир недолговечных пластмассовых решений.

Similar
24 марта
Умные программисты пишут STUPID-код, ведь они понимают, что неожиданно возникшая сложность может привести к провалу проекта. ▍ Страдание На момент написания этой статьи на моих часах 21:30. Этим утром я проснулся в хорошем, оптимистичном настроении, рассчитывая на прекрасный день, но...
12 июня
Есть один курс, который я бы добавил в программу обучения по всякой инженерной специальности, и он не о компиляторах или сложности алгоритмов. Это “Введение в реальность индустрии”, ибо об этом не говорят и это приводит к никому не нужным обломам....
Nov 30, 2021
Author: Hayden Marchant
Many programmers wonder whether they will still be hired as they enter their golden years. If you are a programmer and have been working for more than a few years, I won’t be surprised if thoughts have gone through your...
Dec 1, 2022
Author: Devyani Borade
Said no manager ever. Money is the one thing every candidate at any job interview is advised never to mention. The salary on offer for the role is treated almost like a *dirty secret. Job advertisements only reveal a band...
Send message
Email
Your name
*Message


© 1999–2024 WebDynamics
1980–... Sergey Drozdov
Area of interests: .NET Framework | .NET Core | C# | ASP.NET | Windows Forms | WPF | HTML5 | CSS3 | jQuery | AJAX | Angular | React | MS SQL Server | Transact-SQL | ADO.NET | Entity Framework | IIS | OOP | OOA | OOD | WCF | WPF | MSMQ | MVC | MVP | MVVM | Design Patterns | Enterprise Architecture | Scrum | Kanban