Яке фактичне значення послідовного стилю коду


47

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

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

Приклад 1 (разові вбудовані функції)

React.createClass({
  render: function () {
    var someFunc = function () {
      ...
      return someValue;
    };
    return <div>{someFunc()}</div>
  }
});

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

Приклад 2 (незв'язані функції)

function renderSomePart(props, state) {
    return (
      <div>
        <p>{props.myProp}</p>
        <p>{state.myState}</p>
      </div>
    );
}

React.createClass({
  render: function () {
    return <div>{renderSomePart(this.props, this.state)}</div>;
  }
});

Так ми зазвичай робимо це (уникає переходу стану та реквізиту):

React.createClass({
  renderSomePart: function () {
    return (
      <div>
        <p>{this.props.myProp}</p>
        <p>{this.state.myState}</p>
      </div>
    );
  },
  render: function () {
    return <div>{this.renderSomePart()}</div>;
  }
});

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

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

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

Питання:

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


50
Яка цінність послідовної орфографії? Постійне, постійне прискорення читання та написання текстів. Яке значення послідовного стилю коду? Постійне, послідовне прискорення читання та написання коду. Що ще можна захотіти?
Кіліан Фот

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

1
У Джоеля є кілька хороших ідей на цю тему. Коротше кажучи, хороший стандарт кодування робить помилки легко зрозуміти. joelonsoftware.com/articles/Wrong.html

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

1
@yoniLavi, ви повинні запитати це про мета.
RubberDuck

Відповіді:


48

Перевага передачі коду

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

Потенційні проблеми зворотної сумісності

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

Нові члени команди починають бути продуктивнішими

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

Потенційні нерозкриті проблеми

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

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


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

2
+1 "rather than teaching new patterns"- процедурне навчання - це дуже велика раковина часу з новими наймами. Завжди прагніть мінімізувати витрати часу,
накопичивши

1
@Alexus: Щодо зворотної сумісності, React все ще не є версією 1.0. Поточна версія, 0,13, порушила сумісність деякими досить різкими способами, хоча, чи відбудуться ці збої, залежить від того, який механізм використовується для виклику компонентів React. Маючи дуже узгоджені правила, як викликати React, можливо, не заважає оновленням React порушити код, але виправити послідовний код простіше, швидше та надійніше. Ваші занепокоєння щодо проблем зворотної сумісності безумовно виправдані у випадку React. Наприклад, дивіться мій коментар на stackoverflow.com/a/20913637/18192
Брайан

53

Невідповідності змушують вас зупинитися і подумати, чому , що і де :

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

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

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

  • Коли стиль є послідовним, легко пересуватися навколо коду, оскільки послідовність допомагає швидко знайти місце, де розміщені речі. З непослідовним стилем навіть прив'язування стає складніше, оскільки ви не знаєте, в якому стилі використовується річ, яку ви шукаєте.


6
Чудова, фанстастична проникливість. Чому деякі розробники, здається, просто "отримують" це, а інші борються проти цього?
Dogweather

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

4

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

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

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

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


2

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

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

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

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

Що ви шукаєте - це щасливий засіб вашої власної команди.


2

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

У мене складається враження, що в глибині душі ви вже знаєте відповідь на це питання, і ви навіть не зіткнулися б із цим, якби не це:

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

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

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

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


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

2

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

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

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

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

Про клієнтів

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


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

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.