Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Что ж — сделайте fork. Всяко лучше, чем писать с нуля!
+ Быстрая разработкаСкорее, быстрое прототипирование. А в длительной перспективе
+ Код оттестированный огромным количеством пользователейЭто заблуждение из той же серии, что «open source код безопасный, т.к. его постоянно просматривает множество людей». Пользователей этих зачастую не так и много, и ходят они обычно одними и теми же путями. И любая попытка использования библиотеки мало-мальски нетипичным образом приводит на нехоженные минные поля. Фактически, это утверждение верно только для базовых, основных библиотек, которыми пользуются действительно практически все.
+ Люди приходящие в команду знают как он работаетОчередная иллюзия. Вы тоже думали, что знаете, как оно работает… Кроме того это снова касается только основных библиотек.
+ Решает проблемы, которые вы возможно не предвидели бы, реализую библиотеку самостоятельноЭто правда. Особенно это критично в специфических областях, в которых лично Вы не разбираетесь — вроде криптографии. Но и здесь есть нюанс — эти проблемы могут никогда не коснуться вашего приложения, а библиотечные решения этих (для вас) несуществующих проблем могут сильно усложнить/замедлить код библиотеки (а в сложном коде больше багов, кстати — которые как раз вполне могут вас коснуться).
+ Программист концентрируется на функционале, а не на вспомогательной библиотекеПри прототипировании — да. А в реальном приложении зачастую приходится детально изучать используемые библиотеки чтобы найти причину возникших проблем, и времени на это может уходить очень много.
— Очень много классов, довольно сложная общая архитектура, поэтому тяжело разбираться в возникающих ошибкахБиблиотеки бывают разные. Для меня как раз один из основных критериев при решении использовать ли чужую библиотеку (и даже программу) — простота и ясность её реализации. Кроме того, если задача решаемая библиотекой действительно сложна, то ещё не факт, что ваша собственная реализация будет лучше и проще, и что на её написание и отладку уйдёт меньше времени и сил чем на обнаружение и исправление ошибок в чужой библиотеке… кроме того, нередко удаётся эту работу переложить на автора библиотеки или сообщество её поддерживающее.
— Возможно не делает какую-то очень специфичную штуку, которая была бы вам очень полезна для вашей конкретной задачиНередко это знак, говорящий о том, что Вы смотрите не в ту сторону, и Вам эта штука тоже не нужна. И дописать одну специфичную штуку (поверх, или внутри библиотеки) обычно проще, чем переписать все нужные вам фичи этой библиотеки только ради того, чтобы добавить к ним одну специфичную более удобным способом (в своём, а не чужом коде).
— Не может решить вашу конкретную задачу самым оптимальным способом, так как внутри содержит кучу оберток и флагов для других задачЗвучит как premature optimization, which is the root of all evil. :) И, чаще всего, именно этим и является. Так что это не является минусом до тех пор, пока профайлинг не докажет обратное.
— При самостоятельно патчинге библиотеки могут возникнуть проблемы с будущим обновлением версииНу, есть «проблемы» и «ПРОБЛЕМЫ». Обычно проблемы поддержки своих патчей несущественны по сравнению со сложностью переписывания библиотеки.
+ Члены команды знают как все работает в деталяхТоже заблуждение, выше в комментариях об этом уже сказали.
+ Легко определятся причина ошибки, так как написанный код минималенЧаще всего да, но вообще-то это сильно зависит от качества этого кода.
+ Максимально производительное решениеСнова premature optimization.
+ Возможность развития библиотеки в нужном вам направленииНадо полагать, все существующие библиотеки развиваются в других направлениях, раз возник такой фактор. Что-ж, это либо означает что Вы что-то упускаете из виду и Вам туда тоже не надо, либо NIH-синдром, либо у Вас действительно специфичная задача и существующие библиотеки Вам не подходят — но тогда вопрос выбора чужой библиотеки просто не стоит за отсутствием подходящих вариантов.
— Требуется высококвалифицированный разработчик для написания хорошей библиотекиЭто не минус, это требование. Если такого специалиста нет, то вопрос писать или не писать свою библиотеку просто не стоит. А если он есть, то это данность, а не плюс или минус.
— Длительная разработкаКак я уже упоминал выше, в длительной перспективе разработка своей библиотеки может оказаться дешевле по ресурсам (включая время) чем борьба с чужой библиотекой. Так что это однозначный минус только для прототипирования.
— Содержит достаточное количество ошибок, особенно на стадии внедренияЗависит от квалификации разработчика и сложности задачи. Зачастую своё решение содержит только необходимый лично Вам функционал, и за счёт этого во много раз проще универсальной библиотеки, а значит и содержит во много раз меньше ошибок.
— Новые люди в команде не знают как оно работаетТоже упоминалось выше. Фактически, чем сложнее система, тем меньше Вы знаете как она работает. В этом смысле своё простое частное решение обычно намного предпочтительнее чужого сложного универсального.
Писать код с нуля или использовать существующую библиотеку?