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

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

Наш мозг имеет естественную склонность использовать следующие стратегии, когда время ограничено:

  • Чтобы принять решение, мы должны быть уверены в своих силах. В противном случае мы не будем действовать.
  • Чтобы оставаться сосредоточенными, мы предпочитаем то, что находится прямо перед нами, а не то, что находится далеко.
  • Чтобы избежать ошибок, мы отдаем предпочтение более простому варианту, чем сложному¹.

Эти стратегии не всегда могут привести к оптимальному результату, но в целом они оказались успешными для выживания вида. Поскольку наша окружающая среда переместилась из природы в городскую жизнь, многие успешные прошлые модели мышления превратились в препятствия в сегодняшнем мире.

Ученые в области поведенческих наук классифицировали эти «ошибки мышления» в более чем 200 человеческих предубеждениях. Например:

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

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

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

Шаг 1. Почему написание «грязного кода» — хорошая отправная точка

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

Пожалуйста, рассмотрите следующую реализацию функции GetComputer().

Код трудно читать, и расширение этой функциональности является проблемой.

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

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

«Заставьте это работать, сделайте это лучше, сделайте это быстрее». — Кент Бек

Нет ничего плохого в написании «грязного кода» на первой итерации. Это позволяет намного легче сосредоточиться на одном аспекте, который является наиболее важным в настоящее время: «заставить это работать».

Но теперь, когда мы реализовали эту функциональность, мы должны сосредоточиться на том, чтобы сделать ее немного более ориентированной на будущее и свести к минимуму риск этой «грязной» реализации.

Что произошло

  • мы записали код так, как он пришел нам в голову
  • мы просто следовали за ходом наших мыслей

Преимущества

  • позволяет намного легче сосредоточиться на том, чтобы «заставить это работать»

Недостатки

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

Шаг 2. Применение принципа чистого кода — разделение задач (SoC)

Запись всего, что приходит нам в голову, не приводит к хорошей структуре программы, и ее трудно понять всем, кроме автора.

Принцип чистого кода: разделение ответственности (SoC)

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

«Упорядочивайте свои мысли, сосредотачиваясь на одном аспекте за раз, устанавливайте границы и организуйте систему на значимые части». - Эдсгер В. Дейкстра (1974) о роли научной мысли.

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

Изоляция аспектов также позволяет отложить работу на более позднее время и обеспечить совместную работу.

Сосредоточение внимания на одних аспектах не означает игнорирование других аспектов, только с точки зрения этого аспекта другой не имеет значения. Это одно- и многонаправленное мышление одновременно.²

Рефакторинг с использованием принципов SoC приводит к следующей структуре. Читать легче? Вы бы чувствовали себя более комфортно, добавляя функциональность?

Изменения

  • разложить на разделы по функционалу (улучшить структуру)
  • защита, тип поиска, получение компьютера, возвращаемое значение

Преимущества

  • намного легче читать
  • больше уверенности для последующих изменений

Шаг 3. Улучшите совместную работу

Давайте сделаем его более понятным и удобным для совместной работы. Вот код:

Изменения

  • извлечь магическую строку в тип enum (например, SearchType)
  • извлечь блок в отдельную функцию (например, GetSearchType())
  • удалить комментарии (пусть код говорит понятным языком)

Преимущества

  • более легкое модульное тестирование
  • более легкий рефакторинг
  • легче повторно использовать фрагменты кода (копировать-вставить)

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

Заключение

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

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

Удачного кодирования!

Рекомендации

[1]: Бастер Бенсон (1 сентября 2016 г.). Шпаргалка по когнитивным искажениям https://betterhumans.pub/cognitive-bias-cheat-sheet-55a472476b18

[2]: Эдсгер В. Дейкстра (1974) Избранные статьи о вычислительной технике: личная точка зрения тексты-и-моногр»