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


60

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

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

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

Але все ще я жодного разу не бачив жодного з цих "оглядів коду". Чому? Чи є подібні речі, і я їх пропускаю? Речі, які виконують ту саму роботу, як я описав? Або це абсолютно марна ідея, оскільки всі, крім мене, легко розуміють проекти з тисячами рядків коду?


7
Ви маєте на увазі проект проекту? Я бачив рідкісний проект з описом кожного пакету, але зазвичай це вже API.
храповик виродка

14
Чому? Тому що мало проектів, чиї технічні працівники хочуть вкласти зусилля, щоб написати та підтримувати якісну документацію, і часто вони також не можуть зрозуміти переваги.
Алекс Д

9
Документація може бути застарілою або неточною щодо фактичної поведінки. Код не може. Тому більшість проектів віддають перевагу коду.
Пол Дрейпер

5
Крім того, легко недооцінити, скільки ви можете дізнатися про проект, якщо встановити кухонний таймер на 2 години і так і просто прочитати його (тм).
Кос

43
Ласкаво просимо у світ, керований громадою: якщо це не зроблено, це тому, що ви цього не зробили :)
mgarciaisaia

Відповіді:


60

Тому що додаткові зусилля для створення та підтримки такого документа, і занадто багато людей не розуміють супутніх переваг.

Багато програмістів не є хорошими технічними письменниками (хоча багато); вони рідко пишуть документи строго для споживання людиною, тому не мають практики і не люблять це робити. Написання огляду коду вимагає часу, який ви не можете витратити на кодування, і початкова користь для проекту завжди більша, якщо ви можете сказати "Ми підтримуємо всі три варіанти кодування", а не "У нас дійсно чіткі пояснення нашого коду!" Думка про те, що такий документ приверне більше розробників, так що в кінцевому рахунку більше коду буде записано не зовсім чуже для них, але він сприймається як невизначена гра; чи справді цей текст змінить різницю між співавтором чи ні? Якщо я продовжую кодувати зараз , закінчіть цю справу.

Документ з оглядом коду також може змусити людей відчувати себе захищеними; важко описати рішення вищого рівня, не відчуваючи необхідності їх виправдовувати, і дуже часто люди приймають рішення без причини, яка "звучить досить добре", коли насправді написана власноруч. Також є ефект, пов'язаний із вищезгаданим: оскільки оновлення тексту відповідно до змінного коду спричиняє додаткові зусилля, це може перешкодити широким змінам коду. Іноді ця стабільність є хорошою справою, але якщо код дійсно потребує перезапису середнього рівня, це перетворюється на відповідальність.


6
Що ж, здається, відповідь так: gnunet.org/gnunet-source-overview
fiatjaf

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

8
@keshlam - це має сенс, якщо ти вже є учасником проекту ... але якщо ти потенційний дописувач, який намагається отримати базове уявлення про те, як працює код, ти можеш написати найгіршу людину той документ ....
Історія Йона

13
@JonStory Ваша думка хороша, але на практиці я виявив, що навпаки іноді теж. У деяких проектах я закінчив писати купу документації, заснованої на замітках, які я робив під час вивчення бездокументованої бази коду. Це була краща документація, тому що я повинен був почати з API, який я міг бачити, а потім копати все глибше і глибше. У розробників, які написали код, вже була модель коду в головах, і тому було багато припущень про те, що хтось уже знатиме. Документація кимось новим у проекті може бути кращою документацією для когось нового в проекті.
Джошуа Тейлор

6
@JonStory: Якщо ви берете участь у проекті, який не є документально задокументованим, вам все одно доведеться розбиратися в цьому. Внесення заміток до проекту допомагає зберегти роботу наступної людини. (Я не знаю, що хтось використовував би присутність чи відсутність документів як вирішальний фактор щодо того, чи потрібно робити внесок.) Просто поліпшення коментарів javadoc (або еквівалент) може бути цінним способом розпочати свій внесок. Серйозно, це основний принцип, що лежить у відкритому коді: Якщо ви бачите щось, що потрібно зробити, робіть це, а не чекайте, коли хтось інший зробить.
кешлам

14

Суха сувора правда?

Документація не робиться, оскільки проекти можуть обійтися без неї.

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

Таким чином, вони не можуть дозволити собі час та витрати на наймання людських документообігів, навіть якщо вони запропонували співпрацювати безкоштовно. Задокументований проект, інфакт, зазвичай спочатку пройшов кілька початкових ітерацій. Часто це починається з 1-3, можливо, 5 хлопців записують свою ідею роману і показують її світові як доказ концепції. Якщо ідея виявиться хорошою, тоді "послідовники" можуть додати, вони, як правило, починають просити розширення, нові параметри, переклади ... На даний момент код все ще є прототипом, як правило, із жорстко кодованими параметрами та повідомленнями.

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

Вже тоді керівник проекту може вирішити не створювати документацію.

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

Зазвичай це:

  1. Складено короткий вступний документ про те, що таке проект і куди він рухається (знаменита «дорожня карта»).
  2. Якщо можливо, розробляється API, і він обирається як "задокументований код" на більшій частині основного коду.
  3. Зокрема, API, а також інший код переформатуються та додаються спеціальні коментарі "PHPdoc" / "Javadoc" тощо. Вони пропонують гідний компроміс між витраченим часом та винагородою: навіть скромний програміст зазвичай знає, як написати один вкладиш із описом його функцій, а також параметри отримують "автоматичне" документування, і ціле прив'язується до відповідного коду, і таким чином вони уникають документації " дезінсування "та відставання розвитку.
  4. Найчастіше створюється форум. Це потужне соціальне медіа, де кінцеві користувачі та програмісти можуть спілкуватися між собою (і між своїми однолітками, можливо, у підфорумах "лише для розробників"). Це дозволяє поступово з'являтися та консолідувати багато знань за допомогою створених спільнотою (читайте: не зважування на команду розробників) FAQ та HOWTO.
  5. У дійсно великих проектах також створюється вікі. Я заявляю про "великі проекти", тому що вони часто є тими, хто має достатньо послідовників, щоб створити вікі (дев є), а потім фактично заповнити його поза "голими кістками" (громада робить).

2
ОГО!! ми живемо (і працюємо) у двох абсолютно різних світах. Де б ви не працювали, швидше виходьте звідти і знайдіть компанію (їх багато), де це зробити правильно, оскільки це фактично економить ваші гроші. Ніколи не дозволяйте чітко очолюваним керівникам / ковбойським кодерам намагатися сказати вам інакше.
Mawg

6
+1, я погоджуюся з майже всіма вашими пунктами, єдине твердження, яке я категорично відкидаю, - це те, що параметри "автоматично" задокументовані . Коли ми думаємо про пояснення, а не про обмеження синтаксису / типу, нічого не отримується «автоматично документовано»; згенерований коментар у стилі Повертає X. для методу getX - це не корисна документація, це лише наповнювач без зайвої інформації.
АБО Mapper

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

Чи не можливо ці проекти провалюватися, тому що вони не документують? І під документом я маю на увазі план, так що ви розумієте, а не сідайте за клавіатуру та фунт. Ось моя оцінка життєвого циклу проекту, всі показники +/- 5%. Попередній матеріал (вимоги та випадки використання, архітектура, детальний дизайн) 50%, кодування від 10 до 15%, тестування, решта. "Якщо ви не плануєте, ви плануєте зазнати невдач"
Mawg

6

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

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

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

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

Для мов, які надають масштабування, ви можете змінити приватні методи масштабування. У цьому випадку вам може знадобитися змінити абонентів, а також метод або методи рефактора. Це вимагає більш широкого, але все ж обмеженого розуміння бази коду.

Дивіться мою статтю Додавання SHA-2 до tinyca для прикладу того, як можна зробити такі зміни. Я дуже розумію код, який використовується для створення інтерфейсу.


1
Важливим моментом тут було не стверджувати, скільки потрібно знати про код, щоб внести зміни. Звичайно, це буде залежати від багатьох речей, але вам ніколи не потрібно буде розуміти весь код, ані огляд не дасть вам розуміння, але навіть для того, щоб знайти рядок коду, який ви зміните, потрібні певні знання про загальна структура проекту.
fiatjaf

+1 У відкритому коді немає нічого особливого. За свій понад 10-річний досвід роботи в галузі я жодного разу не бачив оглядового документа. Зазвичай відбувається те, що роботодавці очікують, що перший місяць вашої зайнятості матиме нульову продуктивність, оскільки ви вивчаєте кодову базу. "Огляди" зазвичай реалізуються як запитання ваших колег
slebetman

5

Чи є подібні речі, і я їх пропускаю? Речі, які виконують ту саму роботу, як я описав?

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


це читає більше як коментар, див. Як відповісти
gnat

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

1
Я вважаю, що відповіді на поставлене запитання бракує: "Чому не існує оглядів коду для проектів з відкритим кодом?"
гнат

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

1
Питання, як написано, запитує: "Чи є такі речі, і я їх пропускаю?" Ця відповідь відповідає остаточно, вказуючи на існуючу колекцію таких оглядів коду. Я вважаю, що це чудова (і відповідна) відповідь на питання.
Джим Гаррісон

4

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

Документація потребує обслуговування та часу, щоб бути в курсі. Чим об’ємніша документація, тим більше потрібно. А документація, яка не синхронізована з кодом, гірша за марну: вона вводить в оману та приховує замість того, щоб розкривати.

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

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

Це не означає, що речі поруч із доставкою мають значення. Документація додає цінність проекту, і при досить великому проекті вартість взаємозв’язку на додавання іншого розробника може бути набагато вище, ніж додавання документатора. І, як зазначалося, документація може збільшити інвестиції в проект (полегшивши приєднання нових програмістів).

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

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

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

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


+1 "Документація може легко зайняти стільки часу, скільки написання коду в першу чергу" - або довше!
Марко

-1

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

Просто назвіть одну досить популярну: bluez. Удачі в пошуку хорошого підручника, окрім того, щоб перевірити наявні пристрої.


8
Незалежно від того, скільки прикладів можна навести для погано задокументованих проектів з відкритим кодом, на мою думку, твердження про те, що вони "цілеспрямовано калікують свої документації", має бути підтверджене переконливими доказами (і навіть тоді це, мабуть, не вважається загальне твердження).
АБО Mapper

@ORMapper Давайте почнемо з "Bluez - найбільшої таємниці Linux" . Як єдину бібліотеку Bluetooth для Linux, мені важко повірити, що це не документація, оскільки це додаткові зусилля. Чорт, є доксиген, і як важко писати прості підручники?
BЈович

@ORMapper Потім є ядро ​​Linux. Якщо вам щось не вистачає (наприклад, драйвер ядра), якщо вашій компанії не вистачає досвіду, ви можете або найняти когось, або знайти фрілансера або компанію, яка зробить це за вас. Так, він є відкритим кодом, але приходить з ціною
BЈович

@ORMapper Потім є проект з відкритим кодом, з документацією у паперовому форматі. Тож ви купуєте книгу, а іншої документації не дається. Ця документація калічить, чи ні?
BЈович

2
Для чого це варто, я бачив достатньо прибутків із сором'язливої ​​документації, щоб принаймні замислитися, чи це навмисне. Коли ті самі групи, які розміщують напівзрозумілу документацію в Інтернеті, з радістю продають тобі книгу чи навчальний клас, для цими висновками зовсім не потрібно багато цинізму.
cHao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.