Любое программное обеспечение состоит из множества компонентов, каждый из которых выполняет свою задачу: один компонент работает с файловой системой, другой — преобразует изображения из одного формата в другой, и так далее. Чтобы ускорить разработку ПО, программисты часто используют в качестве отдельных компонентов готовые решения. Хорошо это или плохо? Давайте разберемся вместе.

Мне не раз доводилось слышать от своих коллег, что нет смысла разрабатывать то, что уже давно сделано до меня. И действительно, готовые решения позволяют разработчику не тратить время на повторение стандартного функционала. У готовых решений обычно есть документация, позволяющая разработчику решить свои прикладные задачи достаточно быстро. Хорошая документация также помогает с передачей проекта на поддержку или доработку другим разработчикам. Кроме того, готовые решения без проблем справятся со множеством более мелких задач, возникающих в процессе работы. А если готовое решение, которое использует разработчик, достаточно популярно и активно развивается, то и задачи по исправлению ошибок ложатся на чужие плечи.

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

В некоторых случаях интегрирование готового решения в ПО приводит к возникновению уязвимых мест в системе безопасности. И хотя часто это происходит из-за недостатка именно готовых решений, ответственность за устранение таких уязвимостей ложится на плечи авторов конечного ПО. За примером далеко ходить не надо: в том же Wordpress регулярно находят уязвимости, позволяющие злоумышленникам загружать и выполнять на сервере произвольный код, используя недоработки в WYSIWYG-редакторе, который интегрирован в Wordpress.

Другой пример, уже из личного опыта: во время разработки сайта мы столкнулись с ошибками в работе JavaScript. В процессе отладки выяснилось, что виновником проблем был плагин для jQuery, модифицировавший поведение стандартных функций самого фреймворка. В результате нам пришлось заменять этот плагин другим.

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

Подведем итоги:

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