Що таке красивий код? [зачинено]


30

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

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



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

Можливо, вам буде цікаво прочитати Beautiful Code: Провідні програмісти пояснюють, як вони думають тоді!
UncleZeiv

Відповіді:


55

"Краса купується судженням очей".

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

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

  • Елегантність : існує багато способів реалізації більшості алгоритмів, але деякі способи незграбні, а інші - акуратні та витончені. Стислість часто додає елегантності, але надмірна стислість може зменшити чіткість.

  • Ефективність : уникати зайвого використання ресурсів (таких як час процесора, пам'ять та введення / виведення).

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


11
гарне пояснення, +1
koenmetsu

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

@Jubbat Дійсно - іноді найефективніше рішення насправді призводить до дуже потворного коду. (Наприклад, класична функція швидкого зворотного квадратного кореня)
Даррель Гофман

@DarrelHoffman Право, хоча цей компроміс також відповідає більшій кількості змінних, які визначають хороший код, а не лише ефективність та решта (є досить довге пояснення цього в "Кодексі завершено" - на жаль, я не пам'ятаю, у якому розділі книга, майже на початку, мабуть,)
DPM

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

20

Не дозволяйте людям обманювати вас, думаючи, що прекрасний код такий:

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

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

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

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


То який тоді гарний код?

Красивий код = підтримуваний код. ЦЕ ВОНО!
ЦЕ ФОРМУЛА!

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

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


4
Для боротьби з проблемами, які ви порушили,
jk.

4

Я вважаю, що "Красивий код" не є об'єктивним або особливо корисним терміном. І ми не повинні намагатися це визначити.


Типові визначення словника англійського слова "краса" виглядають так:

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

(Джерело http://dictionary.com )

Спільною ниткою є те, що "краса" - це те, що естетично приємно. Це обов'язково суб'єктивно ... як проілюстровано висловом "Краса в очах глядача".


Ми можемо застосувати слово "краса" до коду, і очевидний сенс полягає в тому, що код "естетично приємний".

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

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

Що стосується мене, красивий код - це код, який я вважаю прекрасним, і це все. Це суб'єктивно та індивідуально, і давайте просто залишити це.


2

Ось моя порада.

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

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


1

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

Для мене гарним кодом є:

  • Виразний
  • Стислі

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

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


0

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

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

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

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

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

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

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


0

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

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

Отже, з цієї точки зору, у вашій кар'єрі програміста ви можете зробити відкриття прекрасного коду, які інші можуть і не зрозуміти, оскільки їм не вистачає знань або, можливо, вже не знайдете уваги, оскільки їх зіпсувала занадто велика краса;)

Гарний код має всі прагматичні якості, про які говорилося інакше, я повністю згоден.


0

У мене є три критерії:

  • Просто: Принаймні, воно повинно бути читабельним для людини. Наприклад, ви можете написати код, який працює в O (1) для рішення з тоннами рядків, але я віддаю перевагу коду, який працює з 0 (n) вирішує з кількома рядками. Це може змінитися в екстремальних ситуаціях, але для початку важлива простота.
  • Багаторазове використання: Код повинен бути багаторазовим, але не перезаписаним. Якщо вам потрібна операція, вам слід визначити її так, як ви зможете використовувати її через роки.
  • Відступ: Можливо, це не для вас проблема, але для початкового рівня це перше, що потрібно вирішити.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.