Изобретаете ли вы "велосипеды"?

В IT есть священная мантра: "Не изобретай велосипед". Её цитируют на митапах, пишут в код-ревью, вдалбливают на курсах. Готовые решения экономят время, протестированы тысячами, у них есть звёздочки на GitHub.

Но есть нюанс.

Готовые решения мы используем с восторгом: "Вот же пакет на 10 тысяч звёзд!" И не замечаем абсурд. Zend Framework для лендинга? Легко. Огромный пакет валидации ради одного правила "поле не пустое"? Конечно. Монструозный CRM для учёта 15 клиентов? А почему нет? Это как забивать гвозди микроскопом. Работает. Неудобно. Дорого.

Был проект. Нужно выгрузить данные в Excel. Тысяча строк. Нашёл PHPExcel. Популярная библиотека. Тысячи звёзд. Установил, настроил. Работает. Через месяц задача изменилась - 50 тысяч строк с формулами. Ошибка памяти. Увеличил память - стало работать, но все-равно медленно. На 100 тысяч все-равно не хватало. Библиотека хранит всё в памяти. Каждая строка - объект, каждая ячейка - объект. Популярный стандарт, который падает на больших данных.

Альтернатив не нашёл. Решение было костыльным, но рабочим: HTML со стилями inline и расширение *.xls. Интерпретатор в Windows пытался загрузить это в Excel. Костыль? Бесспорно. Но время генерации - копеечное, падений по памяти - нет.

Это было в лохматые годы. Не закидывайте тапками - я не призываю плодить такие косяки. Показываю: велосипед иногда - способ впихнуть невпихуемое.

Почему боимся велосипедов?

Боимся, что не сможем сделать лучше. Боимся тратить время: своё - неделя, готовое - час. Но не считаем время на отладку чужих ошибок, адаптацию, ожидание патчей, переписывание, когда пакет перестанут поддерживать.

Готовое - это чужой код. За который отвечаешь. Но которым не управляешь.

Когда пишешь свой модуль - понимаешь, как он работает. Это понимание остаётся с тобой. Помогает принимать решения. Даже если потом используешь готовое - знаешь, как оно работает, можешь править, улучшать.

Именно в попытке изобрести "велосипед" находишь неочевидные решения. Которые не лежат на поверхности, не описаны в документации.

Я перестал бояться "велосипедов". Не потому что люблю писать с нуля. А потому что понял: готовые решения - иногда не решение, а перенос ответственности. Я писал свои модули авторизации, валидации, генераторы Excel, ORM, локализации, очереди. Не потому что хотел "изобрести". А потому что готовые не подходили.

Из этих "велосипедов" сложилась система. Целостная, работающая. На ней работают проекты - от лендингов до сложных B2B. Когда вижу, что задача решается штатно, без боли - понимаю: "велосипеды" были не зря. Я не говорю, что нужно всегда писать всё с нуля. Говорю: иногда - единственный способ сделать хорошо.

Так стоит изобретать "велосипеды"? Я не даю универсального ответа. Но самый интересный код я писал, когда отказывался от готовых решений. Иногда не получалось, возвращался. Но в каждом случае узнавал новое. О коде, данных, себе.

Готовое - экономия времени. Своё - понимание. И иногда это единственный способ решить задачу, которую не могут решить тысячи звёзд на GitHub. А вы изобретаете "велосипеды"? Или используете готовое, потому что так принято?

Я изобретаю. И не стесняюсь. Потому что "велосипед" - это не про код. Про мышление.

Сайт: https://tzlab.pro