В целом я занимаюсь программированием уже около 8 лет, и мне кажется, что я все больше полагаюсь на библиотеки с открытым исходным кодом и фрагменты кода (черт возьми, GitHub!), Чтобы «выполнить свою работу». Я знаю, что со временем я смогу написать собственную реализацию, но мне нравится концентрироваться на общем дизайне.
Это нормально (не корпоративная среда)? Что может пойти не так, если мое «программирование» - это не что иное, как склеивание разных библиотек?
Я знаю о «не изобретай велосипед», но что происходит, когда ты больше не изобретаешь ни одного колеса?
programming-practices
libraries
code-reuse
Хенрик П. Хессель
источник
источник
Ответы:
Использование библиотек вместо изобретения колеса: отлично! Вот так все должны это делать. Вам не платят за то, что вы уже сделали.
Использование фрагментов: если вы понимаете, что копируете и вставляете, и пока вы тратите время на то, чтобы все это было согласованно (вместо пэчворка с разными стилями и подходами), в этом нет ничего плохого.
источник
источник
Good artists copy, Great artists steal
.На самом деле кодирование - это самый низкий уровень программирования. Чем выше уровень абстракции, тем лучше программист. Выбор правильных библиотек (не обязательно с открытым исходным кодом), правильное их соединение и поддержание конструкции намного сложнее, но при этом более эффективен и экономит время и затраты, чем сам все пишет.
источник
Я люблю писать свои собственные библиотеки. Я также люблю делать свои проекты вовремя. Я думаю, что со временем большинство хороших программистов создают набор полезных и повторно используемых битов. Я не знаю о вас, но у меня возникает прекрасное чувство каждый раз, когда я пользуюсь библиотекой, которую написал пять лет назад.
Нет ничего плохого в использовании библиотечного кода, который был проверен и любим со временем. Вы знаете, как это работает, можете рассчитывать на его сложность и можете быстро его реализовать.
При этом, я предполагаю, что вы понимаете код в библиотеке. Я предполагаю, что, если бы у вас было достаточно времени, вы могли бы реализовать нечто подобное.
Я знаю некоторых действительно хороших программистов на Си, которые могли бы реализовать стандартную библиотеку Си, некоторые из них просто использовали в качестве упражнения для обучения / повышения квалификации. Одной из самых забавных вещей, которые у меня были во время хобби, была работа над библиотекой C в HelenOS.
Итак, нет ничего плохого в использовании библиотечного кода, если вы продолжаете любопытствовать и учиться. Само собой разумеется, что вы не должны использовать код, который вы не понимаете, если только вы его не используете, чтобы понять, как он работает.
источник
В этом вопросе я пойду лучше, чем другие: я даже не думаю, что «клиентский» разработчик библиотеки должен «понимать» код в этой библиотеке.
Я (по сравнению с некоторыми) относительно новый разработчик iPhone. Есть много библиотек, которые я использую каждый день, которые я никогда не смог бы создать самостоятельно, и код которых у меня над головой. Не имеет значения в малейшей форме.
1) Я полностью понимаю интерфейс к этим библиотекам (я ниндзя ASIHTTPRequest!)
2) Я выбираю библиотеки, которые широко используются, поэтому я могу быть уверен, что они хорошо изучены и исследованы на наличие проблем. (например: ASIHTTP, библиотека JSON Стига Браутасета, библиотека obj-c Facebook и т. д.)
3) Сбой # 2, это достаточно просто, чтобы я мог выбрать свой путь и найти / исправить / настроить все, что нужно найти / исправить / настроить ,
Это # 2 собирается быть спорной частью этого, я держу пари. Дело в том, что я полагаюсь на сообщество разработчиков программного обеспечения с открытым исходным кодом, сообщество разработчиков, которое, безусловно, более опытно и, скорее всего, умнее меня. Но в этом весь смысл открытого кода. Итак, поехали.
источник
Я хотел бы добавить предупреждение для использования библиотек. Как частый пользователь научных библиотек в Perl и R (и некоторых в Java), мне часто приходилось взламывать библиотеки, чтобы избежать ужасных накладных расходов. Использование библиотек - это замечательно, но все больше и больше библиотек сами зависят от других библиотек, которая вызывает третью библиотеку, которая использует стандартную библиотеку для выполнения довольно распространенной задачи. И каждый шаг в этом процессе требует некоторых проверок ввода и вывода. Многие из этих проверок полностью избыточны, но, тем не менее, они влияют на работу приложения. А когда используется в петле, то может начать довольно сильно весить.
Кроме того, вы не можете быть уверены, что библиотеки всегда поддерживают обратную совместимость или не содержат ошибок. На самом деле, все библиотеки содержат несколько ошибок, такова природа кода. Следовательно, чем больше вы зависите от библиотек, тем больше потенциальных ошибок вы вводите в свой код. И эти ошибки, которые вы не можете решить самостоятельно, не взломав библиотеки снова.
Использование библиотек - очень разумное решение, но только в том случае, если вы хорошо знаете библиотеки и их поведение.
Я знаю, мышление болит и компьютеры дешевы, но все же. Не думать может причинить боль больше.
источник
Обычно копирование большого количества исходного кода является плохой практикой. Если код был разработан для другого приложения в вашей компании, вам следует повторно использовать код, распаковав его в библиотеку, которая будет использоваться обоими приложениями. Вы не должны копировать код. Копирование кода заставит вас сохранить две копии вместо одной общей копии.
источник
Повторное использование кода - очень хорошая идея. Это уменьшает избыточность и повышает ремонтопригодность.
Заголовок предполагает, что вы используете код в качестве библиотеки, но текст вашего вопроса подразумевает, что вы, возможно, копируете исходный код в новый проект. Я бы хотел использовать код других разработчиков как библиотеку в максимально возможной степени.
Существует проблема, если код плохой или каким-то образом поврежден или основан на модели, которая не очень хорошо подходит для вашего приложения. В этом случае может быть проще отказаться от части или всего кода и начать с нуля, чем пытаться понять, почему он был написан определенным образом. Держите другой код для справки, хотя; Вы можете столкнуться с проблемой, которую вы не знаете, как решить. Скорее всего, другой разработчик, вероятно, сталкивался с той же проблемой, и стоит посмотреть, как они ее решили.
источник
Как правило, это хорошая идея, так что никаких юридических проблем не существует.
Тем не менее, убедитесь, что вы нашли время, чтобы понять, что делает библиотека и как она это делает. Использование «волшебной» библиотеки для заботы о вещах, которые вы не понимаете, - это хороший способ заставить вас взорвать какую-то часть, потому что вы неправильно ее использовали, и тогда вы не знаете, как это исправить.
источник
Повторно использующийся код практически не имеет недостатков и имеет два больших недостатка:
источник
Если вы используете библиотеки и фрагменты кода в соответствующих местах, тогда «Нет» , это не значит, что вы плохой программист. Это означает, что вы умный программист, который может применить мудрость других в соответствующих местах.
Тем не мение...
Для поиска библиотек и фрагментов кода требуется время , поэтому, если вы не можете написать код самостоятельно и вам нужно часами искать библиотеки и фрагменты кода для реализации тривиальных задач, тогда «Да» , вы плохой программист.
источник
Нет. Программисты должны использовать библиотеки, которые уже существуют. Не изобретать велосипед. Если у вас есть лучший метод, вы можете пойти на это, иначе что он действительно делает при написании того же кода. Единственное, что вы должны знать, что это за код (и только если он имеет значение).
источник
В дополнение к причинам, приведенным в других ответах, отказ от использования кода (если он хорошо подходит для вашей проблемы) может считаться неэтичным, поскольку:
Имейте в виду, оба из них трудно определить заранее.
Кроме того, посмотрите на Not Invented Here , который обычно называют anit-pattern.
источник
Для целей завершения разрешите встречный аргумент: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse -sibling-оф-не-изобретено здесь /
Всегда есть баланс.
источник
Я за то, чтобы не использовать библиотеки без крайней необходимости. Зависимости ограничивают мобильность и срок службы. Я занимаюсь разработкой программного обеспечения 34 года и хотел бы, чтобы по крайней мере 1 из моих программ работала дольше, чем 3 года, и не была бы разрушена эрозией (изменением).
COM (объектная модель компонентов), ответ 17 лет назад, теоретически отличный, на практике сомнительный, многократно используемый компонент не очень, я буду использовать только самые базовые компоненты и только если придется.
API и SDK не так уж и много используются. Если я урежу количество строк кода, которые я на самом деле использую, из библиотеки, то время, которое я потрачу на то, чтобы заставить их работать, а не на написание, я думаю, что это промывка. Я полностью отказался от использования SDK, чрезмерные накладные расходы.
Фреймворки: Zend, Silverlight, WCF, .NET, многоуровневые системы, да, они могут ускорить первоначальную разработку, но когда я пересекаю их границы, время, потраченное на исправление ошибок, просто не стоит усилий. Сколько им лет и не подвержены ли они эрозии?
Я пошел на JavaScript и HTML только с моими библиотеками. Я сократил JavaScript, используя только самые распространенные типы операторов. Я надеюсь, что через 10 лет я смогу написать то, что будет длиться долго.
источник
Все это зависит. Если вы кодируете игру, то она использует библиотеку (например, Allegro), но вы не можете считаться программистом, если копируете / крадете / заимствуете (что угодно) код других людей. Я говорю не изобретать велосипед, а до разумного момента. Не делайте всю свою программу из фрагментов, написанных другими людьми. Садись за компьютер и делай это сам ... прекрати воровать код. Люди стали слишком ленивыми в эти дни и просто копируют и вставляют.
источник