Я нахожусь в ситуации, когда я могу использовать плагин JavaScript с открытым исходным кодом для выполнения задачи. Но когда я попытался его использовать, я обнаружил, что мне нужно переделать много вещей из того, что я уже сделал, и это добавляет определенную сложность, по моему скромному мнению, проекту. Принимая во внимание, что я могу выполнить ту же задачу с чистым кодом, который я могу создать сам, без необходимости изменять то, что я сделал до сих пор.
Стоит ли в любом случае выбрать библиотеку в этой ситуации (например, ради лучшего качества кода?)
code-quality
libraries
Биллаль Бегерадж
источник
источник
Ответы:
Как инженер, возможно, уместно думать об этом как о проблеме оптимизации. Естественно, у нас должна быть цель оптимизации . Распространенным в такой ситуации будет минимизация совокупной стоимости владения .
Если вы считаете, что добавление стороннего компонента в долгосрочной перспективе сэкономит средства, его следует использовать. Если вы этого не сделаете, вы не должны. Убедитесь, что вы учитываете стоимость текущего обслуживания (например, когда выпускается новая версия O / S, или обнаруживается уязвимость системы безопасности, или выпускается какая-то новая спецификация W3C).
Для многих тривиальных проблем будет дешевле снизить свои собственные затраты, но для умеренно сложных задач, выходящих за рамки основной компетенции вашей организации, часто имеет смысл обратиться к третьей стороне.
Есть и другие цели, которые следует учитывать (например, риск), но TCO является большой.
источник
Билл Гейтс однажды сказал:
Эта цитата приходит на ум, потому что то же самое можно сказать и о количестве библиотек. Как правило, я не использую библиотеки, если:
В идеале все три условия выполнены, но я бы согласился на любые два. Суть в том, что вы не должны добавлять библиотеку в вашу программу, если она не служит какой-либо цели. Если вам нужно спросить, какова эта цель, вам, вероятно, не следует добавлять ее в свою программу. Поэтому качество кода вашей программы выигрывает, потому что он элегантно обращается к каждой библиотеке, не отвлекаясь на необходимость обязательно переписывать библиотеки внутри вашей программы.
Удачи!
источник
(Примечание. Первоначальный вопрос был следующим: улучшает ли количество библиотек качество кода?)
Вы, вероятно, можете ответить на этот вопрос сами: нет, конечно, сам факт использования библиотек не улучшает ваш код. Если бы это было так, было бы легко написать отличный код для всего без усилий.
Что люди имеют в виду, когда они рекомендуют повторное использование поверх roll-your-own, так это то, что код в известной библиотеке, вероятно, является более правильным, эффективным и / или пригодным для использования, чем тот, который вы сами придумали, просто потому, что авторы потратили гораздо больше времени на одну конкретную область функциональности, которую вы можете себе позволить (с вашим крайним сроком для всего проекта).
Но это всего лишь тенденция, а не закон. Конечно, могут быть библиотеки, которые не так полезны для использования, как roll-your-own. Часто это происходит, когда библиотека на самом деле делает гораздо больше, чем вам нужно, и делает это таким образом, чтобы заставить вас адаптировать свою собственную кодовую базу к их соглашениям гораздо больше, чем разумно. Похоже, что это именно то, что вы нашли в этом случае.
источник
Хотя использование правильных библиотек может сэкономить вам много работы, существует также много скрытых затрат:
Поэтому, прежде чем добавить в свой проект еще одну зависимость, чтобы включить что-то, что вы могли бы написать сами, сделайте анализ затрат и выгод.
источник
Это не должно быть двоичным решением: либо используйте только библиотеку OSS, либо запрограммируйте новое решение с нуля. Другим вариантом может быть повторное использование частей библиотеки, если лицензия позволяет это.
Например, в моей области (числовое программное обеспечение) библиотека может иметь прекрасные основные модули и некоторые специализированные модули, которые меня устраивают только на 80%. Поэтому я бы использовал основные модули и написал обертку для специализированных модулей. Или я могу разработать свои собственные специализированные модули, используя дизайн и код модулей OSS. Самые сложные, алгоритмические биты обычно используются повторно, только с измененным кодом скаффолдинга. Я также могу убрать часть исходного кода. Это оказалось хорошим опытом обучения и экономит время по сравнению с разработкой с нуля.
источник
Если кто-то уже сделал работу за вас, конечно, вы должны использовать ее.
Исключением из правил является JavaScript. Там, где они импортировали дюжину других библиотек (конечно, устаревшие версии), чтобы добавить языковые функции, которые они хотят использовать, а затем сделали всю работу за вас.
Выберите свою структуру и оставайтесь в ней. Если библиотека работает с вашим фреймворком или просто js, хорошо. Но если для этого нужна другая структура, ищите другой вариант.
источник
Библиотеки и когда их использовать - сложное решение.
С одной стороны, вы хорошо протестировали, почти стандартные вещи (в моей области, например, FFTW попадает в эту категорию, или что-то вроде libsndfile), которые, как правило, признаны просто работающими, и были стандартными вещами в течение последних 20 лет, которые все используют.
С другой стороны, у вас есть случайные вещи из github, без набора тестов и только с одним сопровождающим, обычно зачем?
Кислотный тест для меня - это, во-первых, вписывается ли библиотека в мою архитектуру (иногда, если вы знаете, что хотите использовать определенную библиотеку, вы в конечном итоге разрабатываете ее), и я думаю, что я собираюсь завершить отладку чьего-либо другого кода библиотеки ? Хороший прокси для второго вопроса: «Есть ли автоматизированный набор тестов и какова документация?».
Небольшая отладка не является серьезной проблемой, но с этого момента код библиотеки начинает сравниваться с моим собственным размером кода с точки зрения обслуживания (особенно если мои исправления по какой-то причине не могут быть переданы в апстрим).
Я также хотел бы провести различие между библиотеками и фреймворками, при том, что различие иногда бывает не таким четким, фреймворки в моем (маленьком ядре, DSP тяжелом) мире, как правило, являются проблемой в заднице, особенно если вы пытаетесь объединить больше один или сделать что-то немного за пределами строк, библиотеки иногда полезны. Я знаю, что это заметно по-другому на сцене веб-разработчика.
В конце концов, это решение, которое приходит по вкусу и опыту, и даже опытный человек иногда выбирает плохо, по крайней мере, с библиотекой, вы всегда можете вырвать его и написать свою собственную реализацию, если она слишком раздражает.
Решения, Решения ....
источник