Введение

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

"Переизобретать колесо" – это попытка воссоздать – скорее всего, с худшим результатом – базовый метод, который уже был создан или оптимизирован другими. Вдохновение для этой идиоматической метафоры заключается в том, что колесо является древнейшим архетипом человеческой изобретательности (настолько фундаментальным, что оно продолжает лежать в основе многих современных технологий). Поскольку оно уже изобретено и не имеет существенных недостатков, попытка его переизобрести не принесет никакой пользы и будет пустой тратой времени, отвлекая ресурсы от, возможно, более значимых задач.

Использование

Фраза иногда используется без иронии, когда чья-то деятельность может показаться просто повторным изобретением колеса, хотя на самом деле она имеет дополнительную ценность. Например, "изобретение колеса заново" – полезный инструмент при обучении сложным концепциям. Вместо того чтобы просто предоставлять студентам список известных фактов и техник и ожидать, что они мгновенно и безупречно их усвоят, преподаватель выстраивает материал с нуля, позволяя студентам самостоятельно прийти к ключевым этапам, отражающим логику, свойственную данной области знаний. "Изобретение колеса заново" может быть ироничным клише – неясно, когда колесо было изобретено впервые. Современное "изобретение" колеса вполне может оказаться "переизобретением" очень древнего изобретения. Более того, постоянно разрабатываются и выводятся на рынок различные модификации колеса, улучшающие существующие конструкции (например, множество типов шин). Эта метафора подчеркивает важность понимания существующих решений, но не обязательно соглашаться с ними или останавливаться на них.

В разработке программного обеспечения

В разработке программного обеспечения часто бывает необходимо изобретать велосипед, чтобы обойти несовместимость лицензий или технические и политические ограничения, присутствующие в компонентах или модулях, предоставляемых сторонними разработчиками. Например, может потребоваться реализовать быструю сортировку для скрипта на JavaScript, предназначенного для встраивания в веб-страницу. Алгоритм быстрой сортировки хорошо известен и легко доступен в библиотеках для разработчиков, пишущих приложения общего назначения на C++ или Java, но некоторые реализации JavaScript не содержат этого конкретного алгоритма. Следовательно, если разработчик хочет надежно использовать быструю сортировку на своей веб-странице, ему придется "изобрести велосипед", повторно реализовав алгоритм. Он мог бы скопировать его с другой веб-страницы, но тогда может столкнуться с проблемами авторского права и лицензирования. В этом случае изобретение велосипеда обеспечивает необходимую функциональность и позволяет избежать проблем с авторскими правами. Кроме того, новички в языке программирования (и особенно в программировании вообще) часто пытаются самостоятельно написать множество функций, для которых уже существуют более надежные и оптимизированные аналоги в стандартной библиотеке или других легкодоступных библиотеках. Хотя это может быть полезно в качестве учебного упражнения, если это делается неосознанно, результат часто представляет собой менее читаемый, менее надежный, менее протестированный и менее оптимизированный код, на написание, тестирование, поддержку и отладку которого требуется больше времени.

Связанные фразы

Переизобретение квадратного колеса — это практика ненужной разработки артефактов, которые предоставляют функциональность, уже обеспечиваемую существующими стандартными артефактами (переизобретение колеса), и в итоге приводят к худшему результату, чем стандартный (квадратное колесо). Это антипаттерн, возникающий, когда инженер не знаком или пренебрегает стандартным решением, либо недостаточно понимает проблему или стандартное решение, чтобы избежать проблем, которые уже были решены стандартом. Чаще всего это свойственно неопытным инженерам или является проявлением эффекта второй системы. Многие проблемы содержат нюансы, которые были разрешены давно в общепринятой инженерной практике (например, важность гладкости обода колеса). Любой, кто начинает с нуля, игнорируя существующие наработки, неизбежно столкнется с этими проблемами заново и для достижения удовлетворительного результата ему придется потратить время на разработку решений (вероятнее всего, тех же самых, которые уже хорошо известны). Однако, когда переизобретение колеса предпринимается как подзадача более крупного инженерного проекта, а не как самостоятельный проект с целью создания лучшего колеса, инженер часто не предполагает, что это потребует значительных затрат времени. В результате используется недоработанная, плохо функционирующая версия, в то время как использование стандартного колеса было бы быстрее, проще и дало бы лучшие результаты. Предупредительное изобретение колеса подразумевает отсрочку задачи, если ожидается, что она будет выполнена позже. Например, можно сказать: «Мы не хотим изобретать велосипед», обсуждая решение проблемы, когда известно, что решение разрабатывается в другом месте. Это не всегда имеет негативный оттенок. Переопределение колеса — это практика придумывания новых и часто запутанных способов описания вещей, когда существующий способ описания был вполне достаточным.