Есть ли конкретные причины не использовать библиотеки и фрагменты кода? [закрыто]


42

В целом я занимаюсь программированием уже около 8 лет, и мне кажется, что я все больше полагаюсь на библиотеки с открытым исходным кодом и фрагменты кода (черт возьми, GitHub!), Чтобы «выполнить свою работу». Я знаю, что со временем я смогу написать собственную реализацию, но мне нравится концентрироваться на общем дизайне.

Это нормально (не корпоративная среда)? Что может пойти не так, если мое «программирование» - это не что иное, как склеивание разных библиотек?

Я знаю о «не изобретай велосипед», но что происходит, когда ты больше не изобретаешь ни одного колеса?


3
Вы имели в виду «не корпоративную среду» или среду, в которой люди не сотрудничают ?
Брайан Оукли

Я думал, что причина, по которой мы пишем в интерфейсах и абстрактных классах, в том, что наши библиотеки более универсальны, менее зависимы, более гибки ...
IAbstract

1
Настолько плохо, что на самом деле ремень отца отрывается.
Томас Эдинг

Просто не забудьте отдать дань уважения и отдать должное, где кредит должен. Если вы когда-либо утверждали, что этот код принадлежит вам, то «Пояс» определенно
hanzolo

3
Нет, это не делает вас плохим программистом, но и не делает вас лучшим программистом.

Ответы:


85

Использование библиотек вместо изобретения колеса: отлично! Вот так все должны это делать. Вам не платят за то, что вы уже сделали.

Использование фрагментов: если вы понимаете, что копируете и вставляете, и пока вы тратите время на то, чтобы все это было согласованно (вместо пэчворка с разными стилями и подходами), в этом нет ничего плохого.


Это то, о чем я думал. Может быть, я должен начать проект с открытым исходным кодом, чтобы избавиться от этого чувства :)
Хенрик П. Хессель

25
+1 от меня. Люди никогда не должны использовать код, который они не понимают. Это касается фрагментов и библиотек.
Тим Пост

5
Что касается фрагментов, я всегда сам переписываю код, чтобы быть уверенным, что знаю, как он работает. Библиотеки, я никогда не переписываю, если это не работает для меня по любой причине.
Рей Миясака

12
Тим: Что касается библиотек, мне не нужно понимать, как они что-то делают, если я знаю, что они делают. Например, многие из нас используют крипто-библиотеки; Я не знаю, как работает AES, но я знаю, что он делает и когда его использовать.
user281377

@Rei Miyasaka Кажется, что фрагменты часто менее качественны, чем отдельная библиотека. Я сам должен провести рефакторинг нескольких частей фрагментов, которые я использовал.
Хенрик П. Хессель

24

хорошие программисты пишут хороший код; великие программисты воруют отличный код.


+1 за линию. Это оригинально?
apoorv020

Я хочу, нет, это странная пословица.
dan_waterworth

Я на своем iPhone, но я думаю, что это цитата из Пабло Пикассо (замените программистов художниками)
Хенрик П. Хессель

21
Пикассо сказал Good artists copy, Great artists steal.
dan_waterworth

3
Отличная цитата. Думаю, я украду ^ H ^ H ^ H ^ H ^ H, чтобы использовать его снова.
Вонко вменяемый

24

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


13

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

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

При этом, я предполагаю, что вы понимаете код в библиотеке. Я предполагаю, что, если бы у вас было достаточно времени, вы могли бы реализовать нечто подобное.

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

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


Вы в значительной степени описали мое отвращение к jQuery, +1.
аааааааааааа

5

В этом вопросе я пойду лучше, чем другие: я даже не думаю, что «клиентский» разработчик библиотеки должен «понимать» код в этой библиотеке.

Я (по сравнению с некоторыми) относительно новый разработчик iPhone. Есть много библиотек, которые я использую каждый день, которые я никогда не смог бы создать самостоятельно, и код которых у меня над головой. Не имеет значения в малейшей форме.

1) Я полностью понимаю интерфейс к этим библиотекам (я ниндзя ASIHTTPRequest!)
2) Я выбираю библиотеки, которые широко используются, поэтому я могу быть уверен, что они хорошо изучены и исследованы на наличие проблем. (например: ASIHTTP, библиотека JSON Стига Браутасета, библиотека obj-c Facebook и т. д.)
3) Сбой # 2, это достаточно просто, чтобы я мог выбрать свой путь и найти / исправить / настроить все, что нужно найти / исправить / настроить ,

Это # 2 собирается быть спорной частью этого, я держу пари. Дело в том, что я полагаюсь на сообщество разработчиков программного обеспечения с открытым исходным кодом, сообщество разработчиков, которое, безусловно, более опытно и, скорее всего, умнее меня. Но в этом весь смысл открытого кода. Итак, поехали.


3

Я хотел бы добавить предупреждение для использования библиотек. Как частый пользователь научных библиотек в Perl и R (и некоторых в Java), мне часто приходилось взламывать библиотеки, чтобы избежать ужасных накладных расходов. Использование библиотек - это замечательно, но все больше и больше библиотек сами зависят от других библиотек, которая вызывает третью библиотеку, которая использует стандартную библиотеку для выполнения довольно распространенной задачи. И каждый шаг в этом процессе требует некоторых проверок ввода и вывода. Многие из этих проверок полностью избыточны, но, тем не менее, они влияют на работу приложения. А когда используется в петле, то может начать довольно сильно весить.

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

Использование библиотек - очень разумное решение, но только в том случае, если вы хорошо знаете библиотеки и их поведение.

Я знаю, мышление болит и компьютеры дешевы, но все же. Не думать может причинить боль больше.


3

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


3

Повторное использование кода - очень хорошая идея. Это уменьшает избыточность и повышает ремонтопригодность.

Заголовок предполагает, что вы используете код в качестве библиотеки, но текст вашего вопроса подразумевает, что вы, возможно, копируете исходный код в новый проект. Я бы хотел использовать код других разработчиков как библиотеку в максимально возможной степени.

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


Тут ты меня подловил. Я также имею в виду копирование многих строк кодов чужой работы (не библиотек), поскольку в моем случае это законно. Что вы думаете?
Арман

1
@Arman Это все еще хорошая идея. С точки зрения обслуживания, это не так хорошо, потому что, когда первоначальный разработчик исправляет ошибку в своем коде, он все равно остается в вашем. Это по-прежнему лучше, чем ничего, потому что, по крайней мере, код довольно похож в обоих проектах, и вы можете применить исправление ошибки отдельно, не выполняя столько работы.
PSWG

И последний вопрос: как сказал Мейсон, если, например, я обнаружил, что ваши 2500 строк кода (опять же, я подчеркиваю, не библиотеки) несколько полезны для начала моей работы, и вы позволите мне их скопировать, сделайте ты думаешь это хорошо для меня? Это этично?
Арман

@ Arman Если это законно, возможно, это и этично. Если он написан разработчиком в рамках одной организации, то, как правило, организация владеет кодом, и вы имеете полное право использовать его (в соответствии с политикой организации). Если вы были зарегистрированы в другой организации, вам нужно разрешение этой организации. Как правило, если код не покрыт какой-либо лицензией, первоначальному разработчику на самом деле все равно, как вы его используете, но я всегда буду указывать первоначального разработчика в заметных комментариях к коду (со ссылкой, если это возможно).
PSWG

4
В идеале вы также должны понимать, как работает скопированный код.
Майк Партридж

1

Как правило, это хорошая идея, так что никаких юридических проблем не существует.

Тем не менее, убедитесь, что вы нашли время, чтобы понять, что делает библиотека и как она это делает. Использование «волшебной» библиотеки для заботы о вещах, которые вы не понимаете, - это хороший способ заставить вас взорвать какую-то часть, потому что вы неправильно ее использовали, и тогда вы не знаете, как это исправить.


1
Интересно, все же этично ли «копирование и вставка» сотен строк кода, сделанных моим щедрым коллегой-программистом?
Арман

2
@ Арман: Попробуйте спросить его.
Мейсон Уилер

1
Если лицензия позволяет это, почему это не было бы этично? Если вы пытаетесь выполнить работу, и одно колесо уже было изобретено и предоставлено вам бесплатно, было бы неправильно (то есть неэтично) потратить впустую минуту вашего переизобретения. Если вам нужно научиться изобретать велосипед, это совсем другое.
Дарий X.

1

Повторно использующийся код практически не имеет недостатков и имеет два больших недостатка:

  1. Это делает работу. Это наиболее важный для профессионального развития. В конечном счете, у вас хорошо оплачиваемая работа, потому что вы знаете, как добиться того, что могло бы поставить в тупик большинство непрограммистов; повторное использование позволяет быстрее достичь этой цели, что повышает ценность вашей работы.
  2. Вы учите вещи. Это более важная причина для самосовершенствования. Нет лучшего способа улучшить кодирование, чем читать хороший код, написанный другими. Даже плохой код, написанный другими, обычно чему-то учит! И нет лучшего способа понять, как работает библиотека, API, язык или домен, чем чтение и улучшение решений, уже написанных другими. Обе вещи обычно происходят , когда вы повторно использовать существующий код, потому что уже существующие решения никогда не будет делать совсем то , что вам нужно - и последующее мастерить с источником, где прирост знаний приходит.

Это действительно моя цель - учиться. На данный момент это стоит больше, чем завершение моего проекта. Вот почему я чувствую себя плохо, когда пытаюсь заставить кого-то работать без особых усилий (а не просто ссылаться на библиотеки).
Арман

1

Делает ли использование тяжелых библиотек и фрагментов кода плохим программистом?

Если вы используете библиотеки и фрагменты кода в соответствующих местах, тогда «Нет» , это не значит, что вы плохой программист. Это означает, что вы умный программист, который может применить мудрость других в соответствующих местах.

Тем не мение...

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


0

Нет. Программисты должны использовать библиотеки, которые уже существуют. Не изобретать велосипед. Если у вас есть лучший метод, вы можете пойти на это, иначе что он действительно делает при написании того же кода. Единственное, что вы должны знать, что это за код (и только если он имеет значение).


0

В дополнение к причинам, приведенным в других ответах, отказ от использования кода (если он хорошо подходит для вашей проблемы) может считаться неэтичным, поскольку:

  1. Вы можете намеренно тратить время работодателей ИЛИ
  2. Возможно, вы намеренно поставляете меньший продукт

Имейте в виду, оба из них трудно определить заранее.

Кроме того, посмотрите на Not Invented Here , который обычно называют anit-pattern.


0

Для целей завершения разрешите встречный аргумент: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse -sibling-оф-не-изобретено здесь /

менталитет, который я называю «никогда не изобретать здесь» (NeIH). Благодаря такому менталитету внешние активы переоцениваются и зачастую неявно пользуются доверием, в результате чего инженеры тратят больше времени на адаптацию к причудам готовых активов и меньше времени на создание собственных активов.

Всегда есть баланс.


-2

Я за то, чтобы не использовать библиотеки без крайней необходимости. Зависимости ограничивают мобильность и срок службы. Я занимаюсь разработкой программного обеспечения 34 года и хотел бы, чтобы по крайней мере 1 из моих программ работала дольше, чем 3 года, и не была бы разрушена эрозией (изменением).

COM (объектная модель компонентов), ответ 17 лет назад, теоретически отличный, на практике сомнительный, многократно используемый компонент не очень, я буду использовать только самые базовые компоненты и только если придется.

API и SDK не так уж и много используются. Если я урежу количество строк кода, которые я на самом деле использую, из библиотеки, то время, которое я потрачу на то, чтобы заставить их работать, а не на написание, я думаю, что это промывка. Я полностью отказался от использования SDK, чрезмерные накладные расходы.

Фреймворки: Zend, Silverlight, WCF, .NET, многоуровневые системы, да, они могут ускорить первоначальную разработку, но когда я пересекаю их границы, время, потраченное на исправление ошибок, просто не стоит усилий. Сколько им лет и не подвержены ли они эрозии?

Я пошел на JavaScript и HTML только с моими библиотеками. Я сократил JavaScript, используя только самые распространенные типы операторов. Я надеюсь, что через 10 лет я смогу написать то, что будет длиться долго.


Часть этой проблемы не столько в библиотеках, сколько в постоянном технологическом оттоке языков и инструментов программирования, что означает, что вам нужно искать новые библиотеки в новой технологии, чтобы делать то же самое.
gbjbaanb

-2

Все это зависит. Если вы кодируете игру, то она использует библиотеку (например, Allegro), но вы не можете считаться программистом, если копируете / крадете / заимствуете (что угодно) код других людей. Я говорю не изобретать велосипед, а до разумного момента. Не делайте всю свою программу из фрагментов, написанных другими людьми. Садись за компьютер и делай это сам ... прекрати воровать код. Люди стали слишком ленивыми в эти дни и просто копируют и вставляют.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.