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

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

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

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

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

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/ru/thing_45.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
