Чи є конкретні причини не використовувати сильно бібліотеки та фрагменти коду? [зачинено]


42

Загалом я займаюся програмуванням вже близько 8 років, і мені здається, що я все більше і більше покладаюся на бібліотеки та фрагменти з відкритим кодом (чорт забираю, GitHub!), Щоб "виконати роботу". Я знаю, що вчасно я міг написати власну реалізацію, але мені подобається зосередитися на загальному дизайні.

Це нормально (поза корпоративним середовищем)? Що може піти не так, якщо моє «програмування» - це не що інше, як склеювання різних бібліотек разом?

Я знаю про "не винаходити колесо", але що станеться, коли більше не винайдеш жодного колеса?


3
Ви мали на увазі "не корпоративне середовище", чи середовище, коли люди не співпрацюють ?
Брайан Оуклі

Я думав, що причина, яку ми пишемо в інтерфейсах та абстрактних класах, полягає в тому, що наші бібліотеки є більш універсальними, менш залежними, більш гнучкими ...
IAb Abstract

1
Настільки погано, що насправді відкладається пояс батька.
Томас Едінг

Просто пам’ятайте, щоб віддати шану і дати кредит там, де належить кредит. Якщо ви коли - небудь стверджував , що код , як ваша, тоді Пояс виразно
hanzolo

3
Ні, це не робить вас поганим програмістом, але і не робить вас кращим програмістом.

Відповіді:


85

Використання бібліотек замість винаходити колесо: Чудово! Ось так повинні робити всі. Вам не платять за те, що вже зроблено.

Використання фрагментів: Поки ви розумієте, що ви копіюєте і вставляєте, і поки ви вкладаєте час, щоб зробити все послідовним (замість клаптиків різних стилів та підходів), нічого поганого в цьому немає.


Це те, що я думав. Можливо, я повинен почати проект з відкритим кодом, щоб позбутися цього почуття :)
Генрік П. Гессел

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

5
Що стосується фрагментів, я завжди сам переписую код так, щоб переконатися, що я знаю, як він працює. Бібліотеки я ніколи не переписую, якщо це не працює для мене з будь-якої причини.
Rei Miyasaka

12
Тім: Щодо бібліотек, я не повинен розуміти, як це щось робить, доки я знаю, що робить. Наприклад, багато хто з нас використовують криптовалюти; Я не знаю, як працює AES, але я знаю, що він робить і коли ним користуватися.
користувач281377

@Rei Miyasaka Здається, що фрагменти часто мають меншу якість, ніж окрема бібліотека. Я сам потрапив до рефактора декількох використаних фрагментів.
Генрік П. Гессель

24

хороші програмісти пишуть хороший код; чудові програмісти крадуть чудовий код.


+1 для рядка. Це оригінально?
apoorv020

Я хочу, ні, це не дивна приказка.
dan_waterworth

Я на своєму iPhone, але думаю, що це цитата від Пабло Пікассо (замініть програмістів художниками)
Генрік П. Гессел

21
- сказав Пікассо Good artists copy, Great artists steal.
dan_waterworth

3
Чудова цитата. Думаю, я вкраду ^ H ^ H ^ H ^ H ^ H повторно його використовувати.
Wonko the Sane

24

Кодування - це найнижчий рівень програмування насправді. Чим вищий рівень абстракції ви можете досягти, тим краще програміст. Вибір правильних бібліотек (не обов'язково з відкритим кодом), належне їх з'єднання та підтримка конструкції набагато складніше, але ефективніше та економію часу та витрат, ніж писати все самостійно.


13

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

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

Якщо говорити, я припускаю, що ви розумієте код у бібліотеці. Я припускаю, що, якщо давати достатньо часу, ви могли б реалізувати щось подібне.

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

Отже, у використанні коду бібліотеки немає нічого поганого, якщо ви продовжуєте цікавитись та вчитися. Само собою зрозуміло, що ви не повинні використовувати код, який ви не розумієте, якщо тільки ви не використовуєте його, це намагання зрозуміти, як він працює.


Ви досить добре описали мою неприязнь до jQuery, +1.
aaaaaaaaaaaa

5

Я піду в цьому питанні краще, ніж деякі інші: я навіть не думаю, що розробник бібліотеки "клієнт" повинен "розуміти" код у цій бібліотеці.

Я (порівняно з деякими) відносно новий розробник iPhone. Є багато бібліотек, якими я користуюсь кожен день, які я ніколи не міг би створити самостійно, і код яких є над головою. Не має значення в найменшій ЗАБЕЗПЕЧЕНОМ:

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

Це # 2 стане суперечливою частиною цього, я ставлю на облік. Справа в тому, що я покладаюся на спільноту з відкритим кодом, спільноту розробників, яка, безумовно, більш досвідчена і цілком ймовірна розумніша за мене. Але в цьому вся суть відкритого коду. Отже, там ви йдете.


3

Я хотів би надати попередження про використання бібліотек. Будучи частим користувачем наукових бібліотек в Perl a R (і деяких на Яві), мені часто доводилося забиватися в бібліотеку, щоб уникнути жахливих накладних витрат. Використання бібліотек чудово, але все більше і більше бібліотек самі залежать від інших бібліотек, що викликає третю бібліотеку, яка використовує стандартну бібліотеку для виконання досить поширеного завдання. І кожен крок у процесі вимагає певних перевірок введення та виведення. Дуже багато цих чеків є абсолютно зайвими, але вони все-таки зважують заявку. А при використанні в петлі, то можна починати важити досить сильно.

Поруч із цим ви не можете бути впевнені, що бібліотеки завжди зберігають сумісність із зворотним зв'язком або не містять помилок. Насправді всі бібліотеки містять кілька помилок, така природа коду. Отже, чим більше ти залежить від бібліотек, тим більше потенційних помилок вводиш у свій код. І ті помилки, які ви не зможете легко вирішити, не вторгнувшись знову в бібліотеки.

Використання бібліотек є дуже розумним рішенням, але якщо і лише якщо ви досить добре знаєте бібліотеки та їх поведінку.

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


3

Зазвичай копіювання великої кількості вихідного коду є поганою практикою. Якщо код був розроблений для іншої програми у вашій компанії, вам слід повторно використовувати його, витягнувши його в бібліотеку, яка буде використовуватися обома програмами. Не слід копіювати код. Копіювання коду змусить вас зберігати дві копії замість однієї загальної копії.


3

Повторне використання коду - дуже гарна ідея. Це зменшує надмірність та сприяє ремонту.

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

Виникає проблема, якщо код поганий або якимось чином зламаний або заснований на моделі, яка не дуже відповідає вашій програмі. У такому випадку може бути простіше зірвати якийсь чи весь код і почати з нуля, ніж намагатися зрозуміти, чому він написаний певним чином. Зберігайте інший код навколо для довідок; ви можете зіткнутися з проблемою, яку ви не знаєте, як її вирішити. Цілком ймовірно, що інший розробник, напевно, зіткнувся з тією ж проблемою, і варто подивитися, як вони її вирішили.


Ти мене туди завів. Я також маю на увазі копіювання багатьох рядків кодів чужої роботи (а не бібліотек), оскільки в моєму випадку це законно. Що ти думаєш?
Арман

1
@Arman Це все ще гарна ідея. З точки зору технічного обслуговування, це не так добре, оскільки коли оригінальний розробник виправляє помилку в своєму / її коді, він все ще є у вашому. Це все-таки краще, ніж нічого, тому що принаймні код досить схожий для обох проектів, і ви можете застосовувати виправлення помилок окремо, не роблячи так багато.
pswg

: Останнє питання: Отже, як сказав Мейсон, якщо, наприклад, я виявив, що 2500 рядків коду (я знову наголошую, не бібліотеки) ваших дещо корисних для початку моєї роботи, і ви дозволяєте мені її скопіювати, зробіть ти думаєш, що це добре для мене? Це етично?
Арман

@Arman Якщо це законно, це, мабуть, і етично. Якщо він написаний розробником у цій самій організації, то зазвичай організація володіє кодом, і ви маєте повне право використовувати його (відповідно до політики організації). Якщо це було написано в іншій організації, вам потрібно дозволити цю організацію. Як правило, якщо код не поширюється жодною ліцензією, оригінальному розробнику не дуже важливо, як ви його використовуєте, але я завжди буду приписувати оригінальному розробнику видатні коментарі до коду (якщо можливо, посилання).
pswg

4
В ідеалі ви також повинні зрозуміти, як працює скопійований код.
Майк Партрідж

1

Це взагалі гарна ідея, тому досі не існує юридичних питань.

Однак обов’язково знайдіть час, щоб зрозуміти, що робить бібліотека та як вона працює. Використання "магічної" бібліотеки для догляду за речами, яких ви не розумієте, - це хороший спосіб змусити якусь частину висипати на вас, тому що ви неправильно використали її, і тоді ви не знаєте, як це виправити.


1
Цікаво, чи "копіювання та вставлення" сто рядків коду, зроблених моїм щедрим колегою-програмістом, все ще є етичним.
Арман

2
@Arman: Спробуйте його запитати.
Мейсон Уілер

1
Якщо ліцензія дозволяє, чому це не було б етичним? Якщо ви намагаєтеся виконати роботу, а одне колесо вже було винайдено і стало доступним для вас безкоштовно, було б неправильно (тобто неетично) для вас витрачати хвилину свого часу на його винахід. Якщо вам потрібно навчитися винаходити колесо, це зовсім інше.
Дарій X.

1

Юридичне використання коду майже не має недоліків та двох величезних переваг:

  1. Це робить роботу. Це важливіше для професійного розвитку. Зрештою, у вас добре оплачувана робота, оскільки ви знаєте, як зробити так, щоб це сталося, що спотикає більшість непрограмістів; повторне використання дозволяє досягти цієї мети швидше, тому ви стаєте більш цінними у своїй роботі.
  2. Ви дізнаєтесь речі. Це важливіша причина самовдосконалення. Немає кращого способу покращити кодування, ніж читати хороший код, написаний іншими. Навіть поганий код, написаний іншими, зазвичай вас щось вчить! І немає кращого способу зрозуміти, як працює бібліотека, API, мова чи домен, ніж читання та вдосконалення рішень, написаних іншими. Обидві речі зазвичай відбуваються , коли ви повторно використовувати існуючий код, тому що вже існуючі рішення ніколи не буде робити зовсім те , що вам потрібно - і подальше майструвати з джерелом, де приріст знань приходить.

Це дійсно моя мета - навчитися. Поки що це варто більше, ніж закінчити мій проект. Тому я відчуваю себе погано, коли намагаюся займатися чиєюсь роботою лише з невеликими зусиллями (не лише звертаючись до бібліотек).
Арман

1

Чи велике використання бібліотеки та фрагментів коду робить вас поганим програмістом?

Якщо ви використовуєте бібліотеки та фрагменти коду у відповідних місцях, то "Ні" , це не означає, що ви поганий програміст. Це означає, що ви розумний програміст, який може застосовувати мудрість інших у відповідних місцях.

Однак ...

Щоб знайти бібліотеки та фрагменти коду, потрібен час , тому якщо ви не можете самостійно написати код, і вам потрібно витратити години, щоб знайти бібліотеки та фрагменти коду, щоб реалізувати тривіальні завдання, тоді "Так" , ви поганий програміст.


0

Ні. Програмістам слід користуватися бібліотеками, які вже є там. Ніякого переосмислення колеса. Якщо у вас є кращий метод, ви можете скористатися ним, інакше, що він насправді робить, написавши той самий код. Єдине, що ви повинні знати, що таке код (і лише якщо він має значення).


0

На додаток до причин в інших відповідях, не використання коду (якщо це добре підходить для вашої проблеми) може вважатися неетичним, оскільки:

  1. Ви можете навмисно витрачати час роботодавців АБО
  2. Можливо, ви навмисно постачаєте менший товар

Майте на увазі, що обидва заздалегідь важко визначити.

Крім того, подивіться на " Не винахідливі тут" , які зазвичай називають аніт-шаблоном.


0

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

менталітет, який я називаю "Ніколи тут не винаходити" (NeIH). З огляду на цей менталітет, зовнішні активи завищуються і часто неявно довіряють, залишаючи інженерам витрачати більше часу на адаптацію до вигадок позаштатних активів, і менше часу на створення власних активів.

Завжди є баланс.


-2

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

COM (Component Object Model), відповідь 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.