Website development
5 April 2011

Писать код с нуля или использовать существующую библиотеку?

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

Скорость и качество разработки


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

Оптимальность решения


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

Баги


В случае с библиотекой вы имеете решение оттестированное множеством пользователей. Если же вы все таки найдете ошибку, то достаточно ввести текст сообщения в Google, и вы сразу поймете, что именно делаете неправильно. С другой стороны, если с этой ошибкой никто не сталкивался, или она просто на столько очевидна, что о ней никто не пишет, то тут вы можете потратить уйму времени, чтобы разобраться почему что-то не работает. Ведь код библиотеки может быть довольно громоздким и запутанным. Вот прекрасный пример, чем может обернуться такая библиотека. Тем более его писали не вы, так что придется долго разбираться в чужом коде, а для этого нужен особый навык. Хорошо если библиотека с открытым кодом, иначе общение с поддержкой может еще удлинить поиск ошибки. Если же вы писали весь код сами, то вы знаете его вдоль и поперек, и найти там ошибку будет проще простого. Вот только ошибок, там скорее всего будет значительно больше, так как тестировали этот код только вы. Еще если вы пишете код с нуля, то есть вероятность, что вы упустите из вида какой-нибудь редкий случай, который в библиотеке со временем уже выявили и закодили.

Команда


Тут есть два аспекта. Во-первых, когда к вам в команду приходит новый человек, то есть вероятность, что он уже работал с технологией, которую вы используете как библиотеку (либо вы сразу нанимаете человека с условием, что он имеет релевантный опыт). Если же вы используете своё собственное решение, то новому сотруднику придется разбираться в деталях, как оно работает. Во-вторых, написать самому код, который обычно пишется в библиотеках, весьма не простая задача. Тут нужен высококвалифицированный специалист, или все остальные преимущества собственного решение сведутся на нет, если код будет написан пионером.

Подведем итог плюсов и минусов каждого подхода:

Библиотека
  • + Быстрая разработка
  • + Код оттестированный огромным количеством пользователей
  • + Люди приходящие в команду знают как он работает
  • + Решает проблемы, которые вы возможно не предвидели бы, реализую библиотеку самостоятельно
  • + Программист концентрируется на функционале, а не на вспомогательной библиотеке
  • — Очень много классов, довольно сложная общая архитектура, поэтому тяжело разбираться в возникающих ошибках
  • — Возможно не делает какую-то очень специфичную штуку, которая была бы вам очень полезна для вашей конкретной задачи, поэтому вы используете немного другую штуку
  • — Не может решить вашу конкретную задачу самым оптимальным способом, так как внутри содержит кучу оберток и флагов для других задач
  • — При самостоятельно патчинге библиотеки могут возникнуть проблемы с будущим обновлением версии

Собственная разработка
  • + Члены команды знают как все работает в деталях (пока не уйдут из команды)
  • + Легко определятся причина ошибки, так как написанный код минимален
  • + Максимально производительное решение
  • + Возможность развития библиотеки в нужном вам направлении
  • — Требуется высококвалифицированный разработчик для написания хорошей библиотеки
  • — Длительная разработка
  • — Содержит достаточное количество ошибок, особенно на стадии внедрения
  • — Новые люди в команде не знают как оно работает


Ваши комментарии — очень welcome. Было бы интересно услышать, на что еще нужно обратить внимание при принятии решения.

+34
2.8k 21
Comments 74
Top of the day