Supervillain Team
Блогер та розробник Джозеф Круз продовжує вивчати темні сторони програмування. Цього разу він задумався про те, які лиходії існують у мультивсесвіті програмування.
Пропонуємо вам переклад його його авторського блогу від нашої редакції. Далі — слово автору.
Я подумав про те, що може налякати досвідченого програміста. І це антипатерни в коді. Розповідаю про найвідоміші з них і пояснюю, як їх уникати.
Спагеті-код — це програмний код без структури. Всередині панує повний хаос: функції, цикли та інші елементи переплітаються без будь-якої логіки. Уявіть собі миску спагеті: всі макаронини настільки переплутані, що знайти початок або кінець майже неможливо. У той час як у структурованому коді потік плавно рухається від одного фрагмента до іншого, код спагеті перескакує з частини на частину через надлишкові умови.
Як правило, цей спагетті-монстр виникає через непродуману архітектуру. Розробник пише код, поспішає його протестувати і не дуже дотримується правил написання коду. Програма росте, і ви бачите неохайну структуру: розкидані глобальні змінні, перевантажені методи, хаотичні рядки. Це схоже на читання роману, в якому глави йдуть у неправильному порядку.
Програму зі спагеті-кодом майже неможливо підтримувати, а спроба додати нові функції до заплутаної бази даних — справжній кошмар. Зміна однієї частини може випадково зламати іншу. До того ж, чим заплутаніший код, тим важче знаходити помилки.
Як уникнути:
Пишіть код тільки після того, як дизайн та архітектура програмного забезпечення повністю продумані. Так ви уникнете плутанини і не накопичите технічний борг — це дрібні недоліки і сміття, які рано чи пізно доведеться виправляти або видаляти.
Проводьте огляди коду. Це допоможе вам виявити проблему до того, як код розростеться в спагеті.
Спробуйте парне програмування — метод, коли один програміст пише код і коментує свої дії вголос, а його колега одразу ж робить рев’ю коду.
Якщо значна частина коду залежить від одного об’єкта, ви маєте справу з об’єктом-богом. Він з’являється, коли один клас «відповідає за все і одразу», наприклад, за ім’я, прізвище, ідентифікатор користувача, суму переказу та список покупок. В результаті в системі починає діяти сутність, яка відповідає за все і всіх.
В теорії все виглядає зручно: ви призначаєте нові функції одному об’єкту і не створюєте новий. Але на практиці, з Об’єктом-богом, система повністю залежить від громіздкого коду, де всі частини тісно пов’язані між собою.
Тому важко виокремити і протестувати конкретну функцію. А без цього архітектура додатку стане крихкою і вразливою до помилок. Ще один недолік полягає в тому, що окремі компоненти коду Об’єкту-богу практично неможливо використовувати повторно, їх занадто складно витягти.
Як уникнути:
Корабельний якір створюється, коли програмісти залишають непотрібний код у базі даних. Логіка така: «А раптом колись стане в нагоді?». Спочатку ідея може здатися гарною, але час іде, а зоряний час для цього рішення так і не настає. В результаті розробники тягнуть цей «іржавий спадок» з нульовою цінністю в продукт.
Такий підхід приносить більше шкоди, ніж користі: Корабельний якір уповільнює роботу і заплутує інших розробників. Незрозуміло, який код використовувати, а який не варто чіпати. Можна годинами читати і налагоджувати непотрібні рядки.
Як наслідок, збільшується час збірки. І найгірший сценарій: якщо код «про всяк випадок» помилково відправити в продакшн. Це збільшить технічні ризики в додатку.
Як цього уникнути:
Золотий молот виникає, коли програмісти використовують одне й те саме «ідеальне» рішення для різних проблем. Все починається так: програміст знаходить гарне рішення для однієї проблеми, наприклад, загальний шаблон для створення додатків, і застосовує його ще кілька разів. Все вийшло чудово, і тепер розробник намагається вирішувати всі подібні проблеми таким чином.
Проблема в тому, що один і той самий інструмент може дати абсолютно різні результати. Вибране рішення може не відповідати логіці, ускладнювати код, призводити до помилок і невідповідностей, які необхідно виправляти. Розробник буде обмежений своїми інструментами, які можуть не відповідати потребам проекту. Як наслідок, багато вимог не будуть виконані.
Ну і остання пастка Золотого молотка: якщо ви використовуєте одне і те ж рішення багаторазово, ви можете перестати розуміти нові методи і технології. В результаті Золотий молоток не спрощує роботу, а лише додає нових проблем.
Як уникнути:
Виникає, коли програміст копіює раніше написаний код — свій або чужий — і бездумно вставляє його у файл. Зазвичай цим методом користуються джуніори або стажери, яким складно писати код з нуля або створювати якісь функції.
Тому вони «позичають» потрібні фрагменти у своїх колег або шукають приклади в інтернеті. Іноді до копіпасту вдаються і більш досвідчені розробники, яким потрібно швидше закінчити проект.
Проблема полягає в тому, що оригінальний код може містити помилку, яка дублюється у всій програмі. Її доводиться виправляти у всіх частинах, де з’являються «клони». Крім того, якщо над проектом працює ціла команда, дефекти часто виявляються лише в одному місці, і тільки його «виправляють».
Ще один наслідок копіпасту — поява надлишкових гілок коду, які збільшують його розмір без жодної користі. Читати і обслуговувати такий колосс буде вкрай незручно.
Як уникнути:
Антипатерн у програмі — це не смертний вирок. Якщо ви помітили проблеми на самому початку, то, як правило, код можна виправити. Існує багато способів та інструментів, щоб захистити свою роботу та уникнути помилок. Ось кілька прикладів:
Дотримуйтесь принципів SOLID. Вони допоможуть вам писати елегантний код, який при бажанні можна масштабувати. Щоб дізнатися більше про те, як працює кожен принцип, прочитайте статтю.
Використовуйте узгоджений формат і синтаксис у всьому коді. Це зробить його більш читабельним для вас і всіх, хто працює над проектом.
Використовуйте тільки необхідні дані. Так ви уникнете помилок, які можуть з’явитися через зайву інформацію в коді.
Використовуйте зрозумілі імена для методів і змінних. І краще не скорочуйте їх, інакше ваші колеги можуть не зрозуміти і написати той самий код, але з іншими іменами.
Швейцарська компанія з кібербезпеки Prodaft запустила ініціативу під назвою «Продай своє джерело», в рамках якої…
Презентовано JRuby 10 — останню версію реалізації мови програмування Ruby на основі JVM. Вона має…
Компанія Ілона Маска xAI презентувала новий онлайн-інструмент під назвою Grok Studio. Він призначений для редагування…
В освітній платформі «Мрія» планують впровадити генератор тестів на основі штучного інтелекту. Про це в…
OpenAI працює над власною X-подібною соціальною мережею, згідно з кількома джерелами, знайомими з цим питанням,…
Команда Unit 42 з Palo Alto Networks помітила чергову активність хакерської групи з КНДР, яка…