# О пользе изобретения велосипеда

(В оригинале - Reinvent the Wheel Often)

«Используйте уже написанное – глупо изобретать велосипед...»

Приходилось ли вам слышать что-то подобное? Конечно же! Каждый разработчик не один раз слышал такое. Хотя почему? Почему так плохо изобретать велосипед? Потому что, чаще всего, уже существующий код – это работающий код. Он уже прошел через контроль качества, тестирование и успешное использование. К тому же, усилия, затраченные на разработку аналога уже существующего кода, скорее всего, не окупятся. Так стоит ли изобретать велосипед?

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

Изобретение велосипеда – это не только упражнение на написание кода. Это способ получить глубокие знания внутреннего устройства различных уже существующих компонент. Знаете ли вы, как работают менеджеры памяти? А виртуальные страницы? А сможете это реализовать самостоятельно? А двойные списки? А динамические массивы? ODBC клиенты? А получится ли у вас написать графический интерфейс пользователя, работающий так же, как и ваш любимый? А как насчет отличия мультизадачной и мультипотоковой систем? А правильно выбрать размещение базы данных – на диске или в памяти? Большинство разработчиков никогда самостоятельно не разрабатывало эти базовые вещи и поэтому не имеет глубоких знаний о том, как они все работают. Для них это все – лишь загадочные черные ящики, которые просто как-то работают. Понимание лишь того, что происходит на поверхности воды, недостаточно для избегания всех опасностей, скрывающихся в глубине. Непонимание глубины основ в разработке ПО послужит серьезным препятствием для написания чего-либо выдающегося.

Изобрести велосипед неправильно – более ценно, чем сразу узнать о том, как это надо делать, прочитав книгу. В этом случае вы получите урок по принципу «попробовал – не получилось», что гораздо более эмоционально, чем просто чтение технической книги.

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

Автор оригинала - [Jason P Sage](http://programmer.97things.oreilly.com/wiki/index.php/Jason_P_Sage)
