Введение
Кодирование в стиле "ковбоя" – это подход к разработке программного обеспечения, при котором программисты обладают полной свободой действий в процессе разработки. Это подразумевает контроль над графиком проекта, используемыми языками, алгоритмами, инструментами, фреймворками и стилем кодирования. Как правило, координация с другими разработчиками или заинтересованными сторонами минимальна или отсутствует вовсе. Программист, работающий в стиле "ковбоя", может быть как одиноким разработчиком, так и членом команды, работающей с минимальным количеством процессов и дисциплины. Обычно это происходит при недостаточной вовлеченности бизнес-пользователей или когда руководство контролирует лишь нетехнические аспекты проекта, такие как общие цели, сроки, объем и визуальное оформление ("что" нужно сделать, но не "как"). Термин "кодирование в стиле "ковбоя"" чаще всего используется в негативном контексте, противопоставляясь более структурированным методологиям разработки программного обеспечения.
Cowboy coding is software development where programmers have autonomy over the development process. This includes control of the project's schedule, languages, algorithms, tools, frameworks and coding style. Typically, little to no coordination exists with other developers or stakeholders. A cowboy coder can be a lone developer or part of a group of developers working with minimal process or discipline. Usually it occurs when there is little participation by business users, or fanned by management that controls only non development aspects of the project, such as the broad targets, timelines, scope, and visuals (the "what", but not the "how"). "Cowboy coding" commonly sees usage as a derogatory term when contrasted with more structured software development methodologies.
Недостатки
В кодировании в стиле "ковбоев" отсутствие формальных методологий управления программными проектами может свидетельствовать (хотя и не обязательно) о небольшом размере проекта или его экспериментальном характере. Программные проекты, обладающие такими характеристиками, могут проявлять:
Отсутствие структуры выпуска
Отсутствие оценки или планирования реализации может привести к задержке проекта. Срочные сроки или стремление к быстрому выпуску программного обеспечения могут спровоцировать использование "сырых" методов, которые потребуют доработки в дальнейшем.
Неопытные разработчики
Кодирование в стиле "ковбоя" часто встречается среди любителей или студентов, когда разработчики могут быть незнакомы с технологиями, такими как тестирование, контроль версий и/или инструменты сборки, что выходит за рамки простого кодирования, необходимого для программного проекта. Это может привести к недооценке времени, необходимого для освоения этих технологий, и, как следствие, к задержкам в процессе разработки. Неопытность также может привести к игнорированию общепринятых стандартов, что затрудняет чтение исходного кода проекта или вызывает несоответствия между семантикой языковых конструкций и результатом их выполнения.
Неопределенные требования к конструкции
Заказные программные приложения, даже при использовании проверенного цикла разработки, могут столкнуться с проблемами с заказчиком в отношении требований. Бессистемное кодирование может усугубить эту проблему, не адаптируя требования к реалистичным срокам, и привести к созданию неиспользуемых или непригодных компонентов до завершения проекта. Подобным образом, проекты с менее определенными заказчиками (часто экспериментальные проекты, как, например, в независимой разработке игр) могут начинаться сразу с написания кода, без предварительного формального анализа требований к дизайну. Отсутствие анализа дизайна может привести к неверному или недостаточному выбору технологий, что в итоге может потребовать от разработчика переноса или переписывания программного обеспечения для завершения проекта.
Неполный список
Многие модели разработки программного обеспечения, такие как экстремальное программирование, используют инкрементный подход, который подчеркивает, что программное обеспечение должно быть готово к выпуску по окончании каждой итерации. В неорганизованных проектах может быть мало модульных тестов или рабочих итераций, что делает незавершенный проект непригодным для использования. Поэтому гибкие методологии сравнивают с программированием в стиле "ковбоя", однако гибкие методологии имеют формальные процессы, процедуры, измерения, управление проектами и другие механизмы контроля, в то время как программирование в стиле "ковбоя" лишено всего этого.
Преимущества
Разработчики поддерживают свободную рабочую среду, способствующую экспериментам, обучению и свободному распространению результатов. Она позволяет разработчикам преодолевать архитектурные и/или уровневые границы для решения проблем проектирования и исправления дефектов. Поскольку обсуждение архитектуры, написание спецификаций и проверка кода требуют времени, один разработчик (при наличии достаточной квалификации) вполне может быстрее создать работающее приложение, прибегая к методу "ковбойского кодирования". Задачи, такие как исследования или прототипирование, могут не требовать того уровня качества кода, который обеспечивают более сложные подходы. Благодаря возможности программировать в свободное время, проект может быть успешно завершен, даже если в других условиях он бы не состоялся.