Етикет з відкритим кодом


14

Я почав працювати над своїм першим проектом з відкритим кодом над Codeplex і натрапив на жахливий код. (Я дізнався, що у C # все ще є вислів "goto"). Я почав додавати функції, які хотів "власник", і після вивчення бази коду та перегляду, що це за безлад (наприклад, за допомогою "goto"), я хотів очистити його трохи. Але я трохи стурбований, і саме тому я звертаюсь до всіх вас: чи належним мені етикетом є "виправлення" "поганого коду" чи я повинен дозволити йому працювати і працювати над новими можливостями? Як я вже говорив раніше, я новачок на всій сцені OSS і працюю над командою взагалі, тому хотів би не зіпсувати це.


13
gotoне обов’язково безлад. Є багато випадків, коли його використання цілком виправдано.
SK-логіка

1
@ SK-Logic - хоча у мене немає джерела перед собою, здавалося, ситуація, коли було б більше сенсу (і бути набагато зрозумілішим) використовувати метод замість goto. Однак мій досвід розвитку обмежений, тому я можу помилитися :)
Jetti

2
ви зв’язалися з початковим автором і запитали його, що він думає?
k3b

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

Відповіді:


18

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


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

немає одиничних тестів. Немає занять, які б справді перевірити Зараз весь код знаходиться в коді інтерфейсу користувача. (наприклад, button1_click () {// all code})
Jetti

5
@Jetti - додавання тестів на одиниці та переміщення коду з коду GUI було б цінним внеском. Після цього ви можете змінити зміст свого серця.
Скотт Вітлок

13

Мета відкритого коду - привернути увагу до проекту та вдосконалити його. Це включає покращення коду. З огляду на це, це гарна форма рекламувати у списку те, що ви маєте намір робити. Ви можете трохи відштовхнутися назад, або ви отримаєте купу +1. Ці gotoзаяви просто можуть бути там, оскільки оригінальний автор не міг придумати кращого способу зробити роботу. Якщо ви відштовхуєтесь, добре ввести діалогове вікно, щоб дізнатися, звідки тиск. Постарайтеся не допустити, щоб це стало особистим, і спробуйте вирішити проблеми.

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

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


1
+1 для спільноти важливіше коду. Багато людей для цього отримати.
Wyatt Barnett

6

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

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

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

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


6

Якщо говорити з досвіду ...

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

Що я одразу зробив, це пройти купу вихідних файлів і почати стилізацію речей за моїми особистими вподобаннями.

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

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

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

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

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

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

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

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

Чи запропоновані вами зміни базуються на доданні вартості проекту чи вони базуються на вашій власній стилістичній релігії.

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

У світі з відкритим кодом стиль не так важливий. Функція є .

Примітка. Усі ці поради передбачають, що ваш воротар - розумний та талановитий програміст. Якщо він (і) є, порахуйте себе щасливим, що ви не зациклювались на одному з кричущих b @ & # & es, єдиним клопотом яких є захист своєї «дитини». Вони дійсно існують в природі, так що не дивуйтеся , якщо ви зіткнулися з одним.


1

Якість> Етикет

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


0

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

Спілкування з оригінальним автором - також хороша ідея.


0

Немає нічого прихованого goto. Подивіться на збірний код - багато готів (стрибків та гілок) всюди.

Причиною того, gotoщо в наші дні є невірне ім'я, є те, що документ Dijkstra Go To вважається шкідливим, що визначає заяву goto як дуже погану річ.

Зауважте, що це було 50 років тому, коли інженерія програмного забезпечення ще не була названа, і більшість мов програмування, по суті, були абстракціями базової машини, так як мова машини містила goto, так і вони. Ви можете спробувати запрограмувати деякі програми в Microsoft Basic (оригінальний на Apple) [або Commodore 64), щоб отримати уявлення про те, яким чином був цей розум.

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

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


Це не дає відповіді на питання: "чи належним мені етикетом є" виправлення "" поганого коду "або я повинен дозволити йому працювати і працювати над новими можливостями?"

@Snowman, якщо код не є власне і автоматично поганий через наявність gotos, тоді питання "Чи слід виправити код, який не порушений чи ні"
Thorbjørn Ravn Andersen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.