Но только в том случае, если вы проведете второй раунд и доведете его до приемлемого уровня, чтобы другие были готовы сотрудничать с ним.
Время — ограниченный ресурс, и мы должны выбирать его с умом. При создании программного продукта недостаточно места для анализа всех возможностей и постоянного принятия правильных решений.
Наш мозг имеет естественную склонность использовать следующие стратегии, когда время ограничено:
- Чтобы принять решение, мы должны быть уверены в своих силах. В противном случае мы не будем действовать.
- Чтобы оставаться сосредоточенными, мы предпочитаем то, что находится прямо перед нами, а не то, что находится далеко.
- Чтобы избежать ошибок, мы отдаем предпочтение более простому варианту, чем сложному¹.
Эти стратегии не всегда могут привести к оптимальному результату, но в целом они оказались успешными для выживания вида. Поскольку наша окружающая среда переместилась из природы в городскую жизнь, многие успешные прошлые модели мышления превратились в препятствия в сегодняшнем мире.
Ученые в области поведенческих наук классифицировали эти «ошибки мышления» в более чем 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) Избранные статьи о вычислительной технике: личная точка зрения тексты-и-моногр»