Изобретаете ли вы "велосипеды"?
В IT есть священная мантра: "Не изобретай велосипед". Её цитируют на митапах, пишут в код-ревью, вдалбливают на курсах. Готовые решения экономят время, протестированы тысячами, у них есть звёздочки на GitHub.
Но есть нюанс.
Готовые решения мы используем с восторгом: "Вот же пакет на 10 тысяч звёзд!" И не замечаем абсурд. Zend Framework для лендинга? Легко. Огромный пакет валидации ради одного правила "поле не пустое"? Конечно. Монструозный CRM для учёта 15 клиентов? А почему нет? Это как забивать гвозди микроскопом. Работает. Неудобно. Дорого.
Был проект. Нужно выгрузить данные в Excel. Тысяча строк. Нашёл PHPExcel. Популярная библиотека. Тысячи звёзд. Установил, настроил. Работает. Через месяц задача изменилась - 50 тысяч строк с формулами. Ошибка памяти. Увеличил память - стало работать, но все-равно медленно. На 100 тысяч все-равно не хватало. Библиотека хранит всё в памяти. Каждая строка - объект, каждая ячейка - объект. Популярный стандарт, который падает на больших данных.
Альтернатив не нашёл. Решение было костыльным, но рабочим: HTML со стилями inline и расширение *.xls. Интерпретатор в Windows пытался загрузить это в Excel. Костыль? Бесспорно. Но время генерации - копеечное, падений по памяти - нет.
Это было в лохматые годы. Не закидывайте тапками - я не призываю плодить такие косяки. Показываю: велосипед иногда - способ впихнуть невпихуемое.
Почему боимся велосипедов?
Боимся, что не сможем сделать лучше. Боимся тратить время: своё - неделя, готовое - час. Но не считаем время на отладку чужих ошибок, адаптацию, ожидание патчей, переписывание, когда пакет перестанут поддерживать.
Готовое - это чужой код. За который отвечаешь. Но которым не управляешь.
Когда пишешь свой модуль - понимаешь, как он работает. Это понимание остаётся с тобой. Помогает принимать решения. Даже если потом используешь готовое - знаешь, как оно работает, можешь править, улучшать.
Именно в попытке изобрести "велосипед" находишь неочевидные решения. Которые не лежат на поверхности, не описаны в документации.
Я перестал бояться "велосипедов". Не потому что люблю писать с нуля. А потому что понял: готовые решения - иногда не решение, а перенос ответственности. Я писал свои модули авторизации, валидации, генераторы Excel, ORM, локализации, очереди. Не потому что хотел "изобрести". А потому что готовые не подходили.
Из этих "велосипедов" сложилась система. Целостная, работающая. На ней работают проекты - от лендингов до сложных B2B. Когда вижу, что задача решается штатно, без боли - понимаю: "велосипеды" были не зря. Я не говорю, что нужно всегда писать всё с нуля. Говорю: иногда - единственный способ сделать хорошо.
Так стоит изобретать "велосипеды"? Я не даю универсального ответа. Но самый интересный код я писал, когда отказывался от готовых решений. Иногда не получалось, возвращался. Но в каждом случае узнавал новое. О коде, данных, себе.
Готовое - экономия времени. Своё - понимание. И иногда это единственный способ решить задачу, которую не могут решить тысячи звёзд на GitHub. А вы изобретаете "велосипеды"? Или используете готовое, потому что так принято?
Я изобретаю. И не стесняюсь. Потому что "велосипед" - это не про код. Про мышление.
Сайт: https://tzlab.pro
· 09.08
Велосипеды правда часто ругают зря: в проде дорог не хватит, если тащить каждый раз чужой «универсальный» велосипед. Но я бы смотрел на стоимость владения - тесты, наблюдаемость и онбординг команды. Где у вас граница между «сделать своё» и «взять готовое»?
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён